diff options
author | Calvin Morrison <calvin@pobox.com> | 2025-09-03 21:15:36 -0400 |
---|---|---|
committer | Calvin Morrison <calvin@pobox.com> | 2025-09-03 21:15:36 -0400 |
commit | 49fa5aa2a127bdf8924d02bf77e5086b39c7a447 (patch) | |
tree | 61d86a7705dacc9fddccc29fa79d075d83ab8059 /server/_build/default/lib/bcrypt/src/bcrypt.erl |
Diffstat (limited to 'server/_build/default/lib/bcrypt/src/bcrypt.erl')
-rw-r--r-- | server/_build/default/lib/bcrypt/src/bcrypt.erl | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/server/_build/default/lib/bcrypt/src/bcrypt.erl b/server/_build/default/lib/bcrypt/src/bcrypt.erl new file mode 100644 index 0000000..f1997c2 --- /dev/null +++ b/server/_build/default/lib/bcrypt/src/bcrypt.erl @@ -0,0 +1,91 @@ +%% Copyright (c) 2011 Hunter Morris +%% Distributed under the MIT license; see LICENSE for details. +%% @doc The OpenBSD Blowfish password hashing algorithm wrapper module. +-module(bcrypt). +-author('Hunter Morris <hunter.morris@smarkets.com>'). + +%% API +-export([start/0, stop/0]). +-export([mechanism/0]). +-export([gen_salt/0, gen_salt/1, hashpw/2]). + +-type mechanism() :: nif | port. +-type rounds() :: 4..31. +-type pwerr() :: invalid_salt | invalid_salt_length | invalid_rounds. + +-export_type([ mechanism/0, rounds/0, pwerr/0 ]). + +%% @doc Starts `Application' `bcrypt'. +%% <b>See also:</b> +%% [http://erlang.org/doc/man/application.html#start-1 application:start/1]. + +start() -> application:start(bcrypt). + +%% @doc Stops `Application' `bcrypt'. +%% <b>See also:</b> +%% [http://erlang.org/doc/man/application.html#stop-1 application:stop/1]. + +stop() -> application:stop(bcrypt). + +%% @doc Get environment setting of hash generation. + +-spec mechanism() -> mechanism(). +mechanism() -> + {ok, M} = application:get_env(bcrypt, mechanism), + M. + +%% @doc Returns a random string data. + +-spec gen_salt() -> Result when + Result :: {ok, Salt}, + Salt :: [byte()]. +gen_salt() -> + do_gen_salt(mechanism()). + +%% @doc Generate a random string data. + +-spec gen_salt( Rounds ) -> Result when + Rounds :: rounds(), + Result :: {ok, Salt}, + Salt :: [byte()]. +gen_salt(Rounds) when is_integer(Rounds), Rounds < 32, Rounds > 3 -> + do_gen_salt(mechanism(), Rounds). + +%% @doc Make hash string based on `Password' and `Salt'. + +-spec hashpw( Password, Salt ) -> Result when + Password :: [byte()] | binary(), + Salt :: [byte()] | binary(), + Result :: {ok, Hash} | {error, ErrorDescription}, + Hash :: [byte()], + ErrorDescription :: pwerr(). +hashpw(Password, Salt) -> + do_hashpw(mechanism(), Password, Salt). + +%% @private + +-spec do_gen_salt(nif | port) -> Result when + Result :: {ok, Salt}, + Salt :: [byte()]. +do_gen_salt(nif) -> bcrypt_nif_worker:gen_salt(); +do_gen_salt(port) -> bcrypt_pool:gen_salt(). + +%% @private + +-spec do_gen_salt(nif | port, Rounds) -> Result when + Rounds :: rounds(), + Result :: {ok, Salt}, + Salt :: [byte()]. +do_gen_salt(nif, Rounds) -> bcrypt_nif_worker:gen_salt(Rounds); +do_gen_salt(port, Rounds) -> bcrypt_pool:gen_salt(Rounds). + +%% @private + +-spec do_hashpw(nif | port, Password, Salt) -> Result when + Password :: [byte()] | binary(), + Salt :: [byte()], + Result :: {ok, Hash} | {error, ErrorDescription}, + Hash :: [byte()], + ErrorDescription :: pwerr(). +do_hashpw(nif, Password, Salt) -> bcrypt_nif_worker:hashpw(Password, Salt); +do_hashpw(port, Password, Salt) -> bcrypt_pool:hashpw(Password, Salt). |