defmodule Rivet.Ident.Factor.Password do @moduledoc false def hash(password), do: Bcrypt.hash_pwd_salt(password) def verify(password, hash), do: Bcrypt.verify_pass(password, hash) def generate(), do: Rivet.Ident.Factor.Password.RandChars.generate() end defmodule Rivet.Ident.Factor.Password.Puid do @moduledoc """ Puid.generate/0 is included with the `use` statement below. It generates 18 random characters. """ use Puid, total: 10.0e6, risk: 1.0e12, chars: :safe32 end defmodule Rivet.Ident.Factor.Password.RandChars do @doc """ random/0 generates a 72-character random string. """ def generate(), do: Enum.map_join(1..4, "", fn _ -> Rivet.Ident.Factor.Password.Puid.generate() end) end