diff --git a/c_src/enacl_nif.c b/c_src/enacl_nif.c index 0ab1e61..ac4a13d 100644 --- a/c_src/enacl_nif.c +++ b/c_src/enacl_nif.c @@ -1328,6 +1328,14 @@ ERL_NIF_TERM enif_crypto_pwhash(ErlNifEnv *env, int argc, ERL_NIF_TERM const arg return enif_make_badarg(env); } + // Check limits + if( (o < crypto_pwhash_OPSLIMIT_MIN) || + (o > crypto_pwhash_OPSLIMIT_MAX) || + (m < crypto_pwhash_MEMLIMIT_MIN) || + (m > crypto_pwhash_MEMLIMIT_MAX) ) { + return enif_make_badarg(env); + } + // Check Salt size if(s.size != crypto_pwhash_SALTBYTES) { return nacl_error_tuple(env, "invalid_salt_size"); @@ -1364,6 +1372,14 @@ ERL_NIF_TERM enif_crypto_pwhash_str(ErlNifEnv *env, int argc, ERL_NIF_TERM const return enif_make_badarg(env); } + // Check limits + if( (o < crypto_pwhash_OPSLIMIT_MIN) || + (o > crypto_pwhash_OPSLIMIT_MAX) || + (m < crypto_pwhash_MEMLIMIT_MIN) || + (m > crypto_pwhash_MEMLIMIT_MAX) ) { + return enif_make_badarg(env); + } + // Allocate memory for return binary if( !enif_alloc_binary(crypto_pwhash_STRBYTES, &h) ) { return nacl_error_tuple(env, "alloc_failed");