From b1c3e69fb5409d8c3748e766760045babfbffcf1 Mon Sep 17 00:00:00 2001 From: Jesper Louis Andersen Date: Sat, 29 Aug 2015 22:09:51 +0200 Subject: [PATCH] Change randombytes/1 so it always executes on a DS Investigation shows erratic behaviour of the CSPRNG. It may block at times because it needs to go to the kernel and obtain more random information in the system. Once this happens, you are blocked for quite a long time, but we don't generally know when this happens. So just execute these directly on the dirty scheduler. --- c_src/enacl_nif.c | 1 - src/enacl.erl | 2 -- src/enacl_nif.erl | 4 +--- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/c_src/enacl_nif.c b/c_src/enacl_nif.c index ba914f0..b2127d9 100644 --- a/c_src/enacl_nif.c +++ b/c_src/enacl_nif.c @@ -1071,7 +1071,6 @@ static ErlNifFunc nif_funcs[] = { {"crypto_sign_ed25519_PUBLICKEYBYTES", 0, enif_crypto_sign_ed25519_PUBLICKEYBYTES}, {"crypto_sign_ed25519_SECRETKEYBYTES", 0, enif_crypto_sign_ed25519_SECRETKEYBYTES}, - {"randombytes_b", 1, enif_randombytes}, {"randombytes", 1, enif_randombytes, ERL_NIF_DIRTY_JOB_CPU_BOUND}, {"scramble_block_16", 2, enif_scramble_block_16} diff --git a/src/enacl.erl b/src/enacl.erl index 2d176dc..d09d7db 100644 --- a/src/enacl.erl +++ b/src/enacl.erl @@ -722,8 +722,6 @@ crypto_sign_ed25519_secret_size() -> %% you to the underlying system implementations for random data. %% @end -spec randombytes(non_neg_integer()) -> binary(). -randombytes(N) when N =< ?RANDOMBYTES_SIZE -> - bump(enacl_nif:randombytes_b(N), ?RANDOMBYTES_REDUCTIONS, ?RANDOMBYTES_SIZE, N); randombytes(N) -> enacl_nif:randombytes(N). diff --git a/src/enacl_nif.erl b/src/enacl_nif.erl index ea70066..9640f74 100644 --- a/src/enacl_nif.erl +++ b/src/enacl_nif.erl @@ -101,8 +101,7 @@ %% Access to the RNG -export([ - randombytes/1, - randombytes_b/1 + randombytes/1 ]). %% Undocumented features :> @@ -199,6 +198,5 @@ crypto_verify_16(_X, _Y) -> erlang:nif_error(nif_not_loaded). crypto_verify_32(_X, _Y) -> erlang:nif_error(nif_not_loaded). randombytes(_RequestedSize) -> erlang:nif_error(nif_not_loaded). -randombytes_b(_RequestedSize) -> erlang:nif_error(nif_not_loaded). scramble_block_16(_Block, _Key) -> erlang:nif_error(nif_not_loaded).