Erlang wrapper for OpenBSD's Blowfish password hashing code
C Erlang Makefile
#13 Compare This branch is 3 commits behind smarkets:master.
Latest commit 5cbe6be Jul 27, 2015 @joedevivo joedevivo Merge pull request #11 from chef/jd/rebar3
rebar3 support for bcrypt
Permalink
Failed to load latest commit information.
c_src Make bcrypt thread-safe by using a local buffer instead of a static one Apr 12, 2013
ebin
priv 1. Adapted the NIF implementation for R13B04 \n 2. Changed build syst… Apr 27, 2010
src
test
.gitignore Add workaround which includes DRV_CFLAGS in DRV_LDFLAGS for port comp… Apr 28, 2011
LICENSE Add Konstantin Sorokin's async_queue implementation Mar 12, 2012
Makefile
README.rst Unbreak examples in README Mar 4, 2013
rebar.config
rebar.config.script rebar3 support for bcrypt Jul 24, 2015
rebar.lock

README.rst

erlang-bcrypt

erlang-bcrypt is a wrapper around the OpenBSD Blowfish password hashing algorithm, as described in "A Future-Adaptable Password Scheme" by Niels Provos and David Mazieres.

Basic build instructions

  1. Build it (project uses rebar, but I've included a Makefile):

    make
    
  2. Run it (simple way, starting sasl, crypto and bcrypt):

    erl -pa ebin -boot start_sasl -s crypto -s bcrypt
    

Basic usage instructions

  1. Hash a password using a salt with the default number of rounds:

    1> {ok, Salt} = bcrypt:gen_salt().
    {ok,"$2a$12$sSS8Eg.ovVzaHzi1nUHYK."}
    2> {ok, Hash} = bcrypt:hashpw("foo", Salt).
    {ok,"$2a$12$sSS8Eg.ovVzaHzi1nUHYK.HbUIOdlQI0iS22Q5rd5z.JVVYH6sfm6"}
    
  1. Verify the password:

    3> {ok, Hash} =:= bcrypt:hashpw("foo", Hash).
    true
    4> {ok, Hash} =:= bcrypt:hashpw("bar", Hash).
    false
    

Configuration

The bcrypt application is configured by changing values in the application's environment:

default_log_rounds
Sets the default number of rounds which define the complexity of the hash function. Defaults to 12.
mechanism

Specifies whether to use the NIF implementation ('nif') or a pool of port programs ('port'). Defaults to 'nif'.

Note: the NIF implementation no longer blocks the Erlang VM scheduler threads

pool_size
Specifies the size of the port program pool. Defaults to 4.

Authors