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 Rename main NIF module to bcrypt_nif and use rebar-generated .app file Mar 31, 2011
priv 1. Adapted the NIF implementation for R13B04 \n 2. Changed build syst… Apr 27, 2010
src Use git tag as version Apr 12, 2013
test
.gitignore
LICENSE Add Konstantin Sorokin's async_queue implementation Mar 12, 2012
Makefile Add .PHONY to Makefiles Oct 9, 2012
README.rst
rebar.config
rebar.config.script
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