Giter Club home page Giter Club logo

erlpass's Introduction

Erlpass

A library to handle password hashing and changing in a safe manner, independent from any kind of storage whatsoever. The library is a thin wrapper around the erlang-bcrypt library from smarkets, handling special cases such as unicode passwords, and forcing hashes in binary. Moreover, the library takes care of providing common operations such as matching passwords, changing the work factor of a hash, or changing a password as a whole.

Current Status

Build Status

Build Instructions

Call rebar3 compile.

How do I use this

This library application depends on bcrypt (which in turn depends on crypto and poolboy). You thus need to call application:start(crypto), application:start(poolboy), and application:start(bcrypt) before being able to call the erlpass functions. The module has these three applications in its dependencies and it should be safe to use in releases. The possible calls are:

1> 1> application:ensure_all_started(erlpass).
{ok,[crypto, bcrypt,erlpass]}
ok
2> Hash = erlpass:hash("my voice is my password").
<<"$2a$12$85jwhagKAzosjJeUktveYuh26e6xFySob5oIKkWdc27SNL3A443OG">>
3> erlpass:match("hello, sir", Hash).
false
4> erlpass:match("my voice is my password", Hash).
true
5> erlpass:match(<<"my voice is my password">>, Hash).
true
6> erlpass:match([<<"my voice is my ">>, "password"], Hash).
true
7> erlpass:change("my voice", Hash, "new pass", 12).
{error,bad_password}
8> erlpass:change("my voice is my password", Hash, "new pass", 12).
<<"$2a$12$5ps2emX.5CgNs3o1RS1mzu8gkF0G9X0j/tKneKPqJOid3YdA7HmaO">>
9> erlpass:change("my voice is my password", Hash, "new pass", 12).
<<"$2a$12$4b2p/Hc.PwrTYffQKRkLheLyu2bbNQbVsvN5Hd.00ei67lagutUyq">>

The hash(Pass) function takes an optional workload factor argument that specifies how long it should take to run. The longer the work factor, the harder the brute force attack. The default work factor is 12.

There is also a change(Pass, Hash, Factor) function allowing to re-hash a password using a different work factor. This makes sense if a product stays in production for a long time or breakthrough in computing make the current work factor too short. The password can then be re-hashed based on that work factor to make it stronger.

Why should I use this?

Avoid using MD5 or SHA-x hashing functions. MD5 is collision-prone, some of the SHA functions too. MD5 and SHA hashing functions were made to be really fast and we want to avoid that. The reason is that it makes it easier to brute-force passwords if the table is compromised. Protect your users first. Bcrypt and Scrypt, by comparison, will salt the passwords for you and give each of them a work factor. If you take 100 millisecond to check a password (something that happens once per session, so it's fine to be slow) compared to 10 microseconds, it becomes a real pain for crackers to do their thing. During that time, you can warn your users to change their passwords in other services.

This library uses the erlang-bcrypt port from the Smarkets team to work in a safe manner. The library isn't attached to any kind of storage and only gives a wrapper to common password operations that you can store in whatever database you want or need.

Other Dependencies

You will need to have PropEr to run the tests. It's a fantastic testing library.

You can run the tests with rebar3 eunit.

Authors

erlpass's People

Contributors

aerosol avatar bunnylushington avatar drobakowski avatar ferd avatar rustkas avatar seb3s avatar yrashk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

erlpass's Issues

PBKDF 2 support ?

Hi there,

How about adding PBKDF2 support ?

Erlpass could be some kind of an abstraction layer for different crypto algorithm ?

The API could be like (This will break with the current API):

Hash = erlpass:hash(pbkd2, "my voice is my password").
erlpass:match("hello, sir", Hash).

What do you think ?

bcrypt outdated

Hello,

Please upgrade to {bcrypt, "1.2.1"}, as the version you are using is no longer compiling on otp 26

Silviu

Unable to compile erlpass with rebar3

Hello Ferd,

erlang-bcrypt has been recently updated to support rebar3.
Would it be possible to point to the updated repository so erlpass can be compiled with rebar3 as well?

Thanks!

Fail to run ?

debian buster
erlang 24.0.5-1 multiple pkgs from erlang-solution
rebar3 up to date from your repo


Hi Ferd,
 
Not sure I did not goofed, hence the question mark.
 
I git clonehttps://github.com/ferd/erlpass,
rebar3 get-deps
and rebar3 compile with seven warnings :

rebar3 compile
===> Verifying dependencies...
make: Entering directory '/tmp/erlpass/_build/default/lib/bcrypt/c_src'
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-12.0.3/include/ -I /usr/lib/erlang/lib/erl_interface-5.0.1/include  -c -o /tmp/erlpass/_build/default/lib/bcrypt/c_src/blowfish.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/blowfish.c
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:25,
                 from /tmp/erlpass/_build/default/lib/bcrypt/c_src/blowfish.c:47:
/usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-12.0.3/include/ -I /usr/lib/erlang/lib/erl_interface-5.0.1/include  -c -o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_port.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_port.c
In file included from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_port.c:17:
/usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-12.0.3/include/ -I /usr/lib/erlang/lib/erl_interface-5.0.1/include  -c -o /tmp/erlpass/_build/default/lib/bcrypt/c_src/async_queue.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/async_queue.c
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:25,
                 from /tmp/erlpass/_build/default/lib/bcrypt/c_src/async_queue.h:36,
                 from /tmp/erlpass/_build/default/lib/bcrypt/c_src/async_queue.c:32:
/usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-12.0.3/include/ -I /usr/lib/erlang/lib/erl_interface-5.0.1/include  -c -o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c
In file included from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c:48:
/usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
/tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c: In function ‘encode_salt’:
/tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c:137:31: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  snprintf(salt + 4, 4, "%2.2u$", logr);
                               ^
/tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c:137:2: note: ‘snprintf’ output between 4 and 5 bytes into a destination of size 4
  snprintf(salt + 4, 4, "%2.2u$", logr);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c: In function ‘ts_bcrypt’:
/tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c:241:36: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  snprintf(encrypted + i, 4, "%2.2u$", logr);
                                    ^
/tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.c:241:2: note: ‘snprintf’ output between 4 and 5 bytes into a destination of size 4
  snprintf(encrypted + i, 4, "%2.2u$", logr);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-12.0.3/include/ -I /usr/lib/erlang/lib/erl_interface-5.0.1/include  -c -o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_nif.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_nif.c
In file included from /usr/include/assert.h:35,
                 from /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_nif.c:17:
/usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
cc /tmp/erlpass/_build/default/lib/bcrypt/c_src/blowfish.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_port.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/async_queue.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt.o /tmp/erlpass/_build/default/lib/bcrypt/c_src/bcrypt_nif.o  -shared -L /usr/lib/erlang/lib/erl_interface-5.0.1/lib -lei -lpthread -o /tmp/erlpass/_build/default/lib/bcrypt/c_src/../priv/bcrypt_nif.so
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-12.0.3/include/ -I /usr/lib/erlang/lib/erl_interface-5.0.1/include bcrypt_port.o bcrypt.o blowfish.o  -L /usr/lib/erlang/lib/erl_interface-5.0.1/lib -lei -lpthread -o ../priv/bcrypt
make: Leaving directory '/tmp/erlpass/_build/default/lib/bcrypt/c_src'
===> Analyzing applications...
===> Compiling poolboy
===> Compiling bcrypt
===> Analyzing applications...
===> Compiling erlpass

then I erl -pa _build/default/lib/*/ebin (this is the part I'm not absolutely sure about)
then, in the console : application:ensure_all_started(erlpass). and it failed badly with this :

1> application:ensure_all_started(erlpass).
=WARNING REPORT==== 29-Aug-2021::16:07:46.342446 ===
The on_load function for module bcrypt_nif returned:
{error,{load_failed,"Failed to load NIF library: '_build/default/lib/bcrypt/priv/bcrypt_nif.so: failed to map segment from shared object'"}}

=SUPERVISOR REPORT==== 29-Aug-2021::16:07:46.342567 ===
    supervisor: {local,bcrypt_nif_pool_sup}
    errorContext: start_error
    reason: {{badmatch,
                 {error,
                     {undef,
                         [{bcrypt_nif,create_ctx,[],[]},
                          {bcrypt_nif_worker,init,1,
                              [{file,
                                   "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                               {line,42}]},
                          {gen_server,init_it,2,
                              [{file,"gen_server.erl"},{line,423}]},
                          {gen_server,init_it,6,
                              [{file,"gen_server.erl"},{line,390}]},
                          {proc_lib,init_p_do_apply,3,
                              [{file,"proc_lib.erl"},{line,226}]}]}}},
             [{poolboy,new_worker,1,
                  [{file,
                       "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                   {line,283}]},
              {poolboy,prepopulate,3,
                  [{file,
                       "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                   {line,304}]},
              {poolboy,init,3,
                  [{file,
                       "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                   {line,153}]},
              {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
              {gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},
              {proc_lib,init_p_do_apply,3,
                  [{file,"proc_lib.erl"},{line,226}]}]}
    offender: [{pid,undefined},
               {id,bcrypt_nif_pool},
               {mfargs,{poolboy,start_link,
                                [[{name,{local,bcrypt_nif_pool}},
                                  {nif_pool_size,4},
                                  {nif_pool_max_overflow,10},
                                  {worker_module,bcrypt_nif_worker}],
                                 []]}},
               {restart_type,permanent},
               {significant,false},
               {shutdown,5000},
               {child_type,worker}]

=SUPERVISOR REPORT==== 29-Aug-2021::16:07:46.351917 ===
    supervisor: {local,bcrypt_sup}
    errorContext: start_error
    reason: {shutdown,
             {failed_to_start_child,bcrypt_nif_pool,
              {{badmatch,
                {error,
                 {undef,
                  [{bcrypt_nif,create_ctx,[],[]},
                   {bcrypt_nif_worker,init,1,
                    [{file,
                      "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                     {line,42}]},
                   {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
                   {gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},
                   {proc_lib,init_p_do_apply,3,
                    [{file,"proc_lib.erl"},{line,226}]}]}}},
               [{poolboy,new_worker,1,
                 [{file,
                   "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                  {line,283}]},
                {poolboy,prepopulate,3,
                 [{file,
                   "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                  {line,304}]},
                {poolboy,init,3,
                 [{file,
                   "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                  {line,153}]},
                {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
                {gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},
                {proc_lib,init_p_do_apply,3,
                 [{file,"proc_lib.erl"},{line,226}]}]}}}
    offender: [{pid,undefined},
               {id,bcrypt_nif_pool_sup},
               {mfargs,{bcrypt_nif_pool_sup,start_link,[]}},
               {restart_type,permanent},
               {significant,false},
               {shutdown,4294967295},
               {child_type,supervisor}]

=CRASH REPORT==== 29-Aug-2021::16:07:46.342948 ===
  crasher:
    initial call: bcrypt_nif_worker:init/1
    pid: <0.91.0>
    registered_name: []
    exception error: undefined function bcrypt_nif:create_ctx/0
      in function  bcrypt_nif_worker:init/1 (/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl, line 42)
      in call from gen_server:init_it/2 (gen_server.erl, line 423)
      in call from gen_server:init_it/6 (gen_server.erl, line 390)
    ancestors: [<0.90.0>,bcrypt_nif_pool,bcrypt_nif_pool_sup,bcrypt_sup,
                  <0.86.0>]
    message_queue_len: 0
    messages: []
    links: [<0.90.0>]
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 610
    stack_size: 29
    reductions: 208
  neighbours:

=CRASH REPORT==== 29-Aug-2021::16:07:46.343070 ===
  crasher:
    initial call: poolboy:init/1
    pid: <0.89.0>
    registered_name: []
    exception error: no match of right hand side value 
                     {error,
                         {undef,
                             [{bcrypt_nif,create_ctx,[],[]},
                              {bcrypt_nif_worker,init,1,
                                  [{file,
                                       "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                                   {line,42}]},
                              {gen_server,init_it,2,
                                  [{file,"gen_server.erl"},{line,423}]},
                              {gen_server,init_it,6,
                                  [{file,"gen_server.erl"},{line,390}]},
                              {proc_lib,init_p_do_apply,3,
                                  [{file,"proc_lib.erl"},{line,226}]}]}}
      in function  poolboy:new_worker/1 (/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl, line 283)
      in call from poolboy:prepopulate/3 (/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl, line 304)
      in call from poolboy:init/3 (/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl, line 153)
      in call from gen_server:init_it/2 (gen_server.erl, line 423)
      in call from gen_server:init_it/6 (gen_server.erl, line 390)
    ancestors: [bcrypt_nif_pool_sup,bcrypt_sup,<0.86.0>]
    message_queue_len: 0
    messages: []
    links: [<0.88.0>,<0.90.0>]
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 987
    stack_size: 29
    reductions: 337
  neighbours:

=CRASH REPORT==== 29-Aug-2021::16:07:46.352547 ===
  crasher:
    initial call: application_master:init/4
    pid: <0.85.0>
    registered_name: []
    exception exit: {{shutdown,
                      {failed_to_start_child,bcrypt_nif_pool_sup,
                       {shutdown,
                        {failed_to_start_child,bcrypt_nif_pool,
                         {{badmatch,
                           {error, 
                            {undef,
                             [{bcrypt_nif,create_ctx,[],[]},
                              {bcrypt_nif_worker,init,1,
                               [{file,
                                 "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                                {line,42}]},
                              {gen_server,init_it,2,
                               [{file,"gen_server.erl"},{line,423}]},
                              {gen_server,init_it,6,
                               [{file,"gen_server.erl"},{line,390}]},
                              {proc_lib,init_p_do_apply,3,
                               [{file,"proc_lib.erl"},{line,226}]}]}}},
                          [{poolboy,new_worker,1,
                            [{file,
                              "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                             {line,283}]},
                           {poolboy,prepopulate,3,
                            [{file,
                              "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                             {line,304}]},
                           {poolboy,init,3,
                            [{file,
                              "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                             {line,153}]},
                           {gen_server,init_it,2,
                            [{file,"gen_server.erl"},{line,423}]},
                           {gen_server,init_it,6,
                            [{file,"gen_server.erl"},{line,390}]},
                           {proc_lib,init_p_do_apply,3,
                            [{file,"proc_lib.erl"},{line,226}]}]}}}}},
                     {bcrypt_app,start,[normal,[]]}}
      in function  application_master:init/4 (application_master.erl, line 142)
    ancestors: [<0.84.0>]
    message_queue_len: 1
    messages: [{'EXIT',<0.86.0>,normal}]
    links: [<0.84.0>,<0.44.0>]
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 1598 
    stack_size: 29
    reductions: 256
  neighbours:

=INFO REPORT==== 29-Aug-2021::16:07:46.355702 ===
    application: bcrypt
    exited: {{shutdown,
              {failed_to_start_child,bcrypt_nif_pool_sup,
               {shutdown,
                {failed_to_start_child,bcrypt_nif_pool,
                 {{badmatch,
                   {error,
                    {undef,
                     [{bcrypt_nif,create_ctx,[],[]},
                      {bcrypt_nif_worker,init,1,
                       [{file,
                         "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                        {line,42}]},
                      {gen_server,init_it,2,
                       [{file,"gen_server.erl"},{line,423}]},
                      {gen_server,init_it,6,
                       [{file,"gen_server.erl"},{line,390}]},
                      {proc_lib,init_p_do_apply,3,
                       [{file,"proc_lib.erl"},{line,226}]}]}}},
                  [{poolboy,new_worker,1,
                    [{file,
                      "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                     {line,283}]},
                   {poolboy,prepopulate,3,
                    [{file,
                      "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                     {line,304}]},
                   {poolboy,init,3,
                    [{file,
                      "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                     {line,153}]},
                   {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
                   {gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},
                   {proc_lib,init_p_do_apply,3,
                    [{file,"proc_lib.erl"},{line,226}]}]}}}}},
             {bcrypt_app,start,[normal,[]]}}
    type: temporary

=INFO REPORT==== 29-Aug-2021::16:07:46.356312 ===
    application: poolboy
    exited: stopped
    type: temporary

=INFO REPORT==== 29-Aug-2021::16:07:46.356496 ===
    application: crypto
    exited: stopped
    type: temporary

{error,
    {bcrypt,
        {{shutdown,
             {failed_to_start_child,bcrypt_nif_pool_sup,
                 {shutdown,
                     {failed_to_start_child,bcrypt_nif_pool,
                         {{badmatch,
                              {error,
                                  {undef,
                                      [{bcrypt_nif,create_ctx,[],[]},
                                       {bcrypt_nif_worker,init,1,[{...}|...]},
                                       {gen_server,init_it,2,[...]},
                                       {gen_server,init_it,6,...},
                                       {proc_lib,init_p_do_apply,...}]}}},
                          [{poolboy,new_worker,1,
                               [{file,
                                    "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                                {line,283}]},
                           {poolboy,prepopulate,3,
                               [{file,
                                    "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                                {line,304}]},
                           {poolboy,init,3,
                               [{file,
                                    "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                                {line,153}]},
                           {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
                           {gen_server,init_it,6,[{file,[...]},{line,...}]},
                           {proc_lib,init_p_do_apply,3,[{file,...},{...}]}]}}}}},
         {bcrypt_app,start,[normal,[]]}}}}
2> =ERROR REPORT==== 29-Aug-2021::16:07:46.359097 ===
** Generic server <0.90.0> terminating 
** Last message in was {'EXIT',<0.89.0>,
                        {{badmatch,
                          {error,
                           {undef,
                            [{bcrypt_nif,create_ctx,[],[]},
                             {bcrypt_nif_worker,init,1,
                              [{file,
                                "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                               {line,42}]},
                             {gen_server,init_it,2,
                              [{file,"gen_server.erl"},{line,423}]},
                             {gen_server,init_it,6,
                              [{file,"gen_server.erl"},{line,390}]},
                             {proc_lib,init_p_do_apply,3,
                              [{file,"proc_lib.erl"},{line,226}]}]}}},
                         [{poolboy,new_worker,1,
                           [{file,
                             "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                            {line,283}]},
                          {poolboy,prepopulate,3,
                           [{file,
                             "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                            {line,304}]},
                          {poolboy,init,3,
                           [{file,
                             "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                            {line,153}]},
                          {gen_server,init_it,2,
                           [{file,"gen_server.erl"},{line,423}]},
                          {gen_server,init_it,6,
                           [{file,"gen_server.erl"},{line,390}]},
                          {proc_lib,init_p_do_apply,3,
                           [{file,"proc_lib.erl"},{line,226}]}]}}
** When Server state == {state,
                            {<0.90.0>,poolboy_sup},
                            simple_one_for_one,
                            {[bcrypt_nif_worker],
                             #{bcrypt_nif_worker =>
                                   {child,undefined,bcrypt_nif_worker,
                                       {bcrypt_nif_worker,start_link,[[]]},
                                       temporary,false,5000,worker,
                                       [bcrypt_nif_worker]}}},
                            {mapsets,#{}},
                            0,1,[],0,never,poolboy_sup,
                            {bcrypt_nif_worker,[]}}
** Reason for termination ==
** {{badmatch,
        {error,
            {undef,
                [{bcrypt_nif,create_ctx,[],[]},
                 {bcrypt_nif_worker,init,1,
                     [{file,
                          "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                      {line,42}]},
                 {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
                 {gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},
                 {proc_lib,init_p_do_apply,3,
                     [{file,"proc_lib.erl"},{line,226}]}]}}},
    [{poolboy,new_worker,1,
         [{file,"/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
          {line,283}]},
     {poolboy,prepopulate,3,
         [{file,"/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
          {line,304}]},
     {poolboy,init,3,
         [{file,"/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
          {line,153}]},
     {gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},
     {gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},
     {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,226}]}]}

=CRASH REPORT==== 29-Aug-2021::16:07:46.359973 ===
  crasher:
    initial call: supervisor:poolboy_sup/1
    pid: <0.90.0>
    registered_name: []
    exception exit: {{badmatch,
                      {error,
                       {undef,
                        [{bcrypt_nif,create_ctx,[],[]},
                         {bcrypt_nif_worker,init,1,
                          [{file,
                            "/tmp/erlpass/_build/default/lib/bcrypt/src/bcrypt_nif_worker.erl"},
                           {line,42}]},
                         {gen_server,init_it,2,
                          [{file,"gen_server.erl"},{line,423}]},
                         {gen_server,init_it,6,
                          [{file,"gen_server.erl"},{line,390}]},
                         {proc_lib,init_p_do_apply,3,
                          [{file,"proc_lib.erl"},{line,226}]}]}}},
                     [{poolboy,new_worker,1,
                       [{file,
                         "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                        {line,283}]},
                      {poolboy,prepopulate,3,
                       [{file,
                         "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                        {line,304}]},
                      {poolboy,init,3,
                       [{file,
                         "/tmp/erlpass/_build/default/lib/poolboy/src/poolboy.erl"},
                        {line,153}]},
                      {gen_server,init_it,2,
                       [{file,"gen_server.erl"},{line,423}]},
                      {gen_server,init_it,6,
                       [{file,"gen_server.erl"},{line,390}]},
                      {proc_lib,init_p_do_apply,3,
                       [{file,"proc_lib.erl"},{line,226}]}]}
      in function  gen_server:decode_msg/9 (gen_server.erl, line 481)
    ancestors: [bcrypt_nif_pool,bcrypt_nif_pool_sup,bcrypt_sup,<0.86.0>]
    message_queue_len: 0
    messages: []
    links: []
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 17731
    stack_size: 29
    reductions: 22667
  neighbours:

2> 

This may be tied to erlang version 24, as all other projects promoting bcrypt are failing to compile because of the lacking of the erl_interface.h file, but rebar3 did not really complained while compiling.
 
IIUC, bcrypt workers are failing to start, but that is all - so, I'm a bit lost as I'd like to use erlpass for a blog project.

Compilation is failing - erl_interface.h: No such file or directory

drasko@Mando:~/erlang/abstract$ make
make[1]: Entering directory '/home/drasko/erlang/abstract/deps/erlpass'
make[2]: Entering directory '/home/drasko/erlang/abstract/deps/bcrypt'
cc -c -o c_src/bcrypt_port.o c_src/bcrypt_port.c  -finline-functions -Wall -fPIC -I "/usr/lib/erlang/erts-11.1.3/include" -I "/usr/lib/erlang/lib/erl_interface-4.0.1/include" -Ic_src -Wall -fPIC -finline-functions -Wall -fPIC -I "/usr/lib/erlang/erts-11.1.3/include" -I "/usr/lib/erlang/lib/erl_interface-4.0.1/include" 
c_src/bcrypt_port.c:20:10: fatal error: erl_interface.h: No such file or directory
   20 | #include <erl_interface.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
make[3]: *** [c_src/Makefile.erlang.mk:11: c_src/bcrypt_port.o] Error 1
make[2]: *** [Makefile:22: pre-app] Error 2
make[2]: Leaving directory '/home/drasko/erlang/abstract/deps/bcrypt'
make[1]: *** [/home/drasko/erlang/abstract/erlang.mk:4441: deps] Error 2
make[1]: Leaving directory '/home/drasko/erlang/abstract/deps/erlpass'
make: *** [erlang.mk:4441: deps] Error 2

updating bcrypt dependency?

erlpass currently relies on a version of bcrypt that uses rand_bytes. Since rand_bytes is nowadays removed from OTP (in 20+) you are bound to OTP 19 if you want to use erlpass.

There are however bcrypt versions made (mentioned in the issue on the bcrypt repo that erlpass is using) that has been updated to use strong_rand_bytes instead when compiled with OTP 20+. Is there any chance that erlpass could update its dependency to some updated bcrypt so that one could migrate an app using erlpass to something above OTP 19?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.