generichash finalization
Make sure we finalize properly in generichash and check the alive state of objects. If they are not alive, return the general finalized error.
This commit is contained in:
parent
d013a04a58
commit
96b883ceba
@ -235,7 +235,6 @@ ERL_NIF_TERM enacl_crypto_generichash_update(ErlNifEnv *env, int argc,
|
||||
goto bad_arg;
|
||||
|
||||
enif_mutex_lock(obj->mtx);
|
||||
|
||||
if (!obj->alive) {
|
||||
goto err;
|
||||
}
|
||||
@ -251,7 +250,7 @@ ERL_NIF_TERM enacl_crypto_generichash_update(ErlNifEnv *env, int argc,
|
||||
bad_arg:
|
||||
return enif_make_badarg(env);
|
||||
err:
|
||||
ret = enacl_internal_error(env);
|
||||
ret = enacl_error_finalized(env);
|
||||
done:
|
||||
enif_mutex_unlock(obj->mtx);
|
||||
return ret;
|
||||
@ -271,7 +270,8 @@ ERL_NIF_TERM enacl_crypto_generichash_final(ErlNifEnv *env, int argc,
|
||||
|
||||
enif_mutex_lock(obj->mtx);
|
||||
if (!obj->alive) {
|
||||
goto bad_arg;
|
||||
ret = enacl_error_finalized(env);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!enif_alloc_binary(obj->outlen, &hash)) {
|
||||
@ -295,7 +295,7 @@ bad_arg:
|
||||
release:
|
||||
enif_release_binary(&hash);
|
||||
err:
|
||||
ret = enif_make_badarg(env);
|
||||
ret = enacl_internal_error(env);
|
||||
done:
|
||||
enif_mutex_unlock(obj->mtx);
|
||||
return ret;
|
||||
|
@ -83,6 +83,18 @@ generichash_chunked(_Config) ->
|
||||
Expected = <<46,49,32,18,13,186,182,105,106,122,253,139,89,176,169,141,
|
||||
73,93,99,6,41,216,110,41>>,
|
||||
Expected = enacl:generichash_final(State),
|
||||
try enacl:generichash_final(State) of
|
||||
_ -> ct:fail(must_finalize)
|
||||
catch
|
||||
error:enacl_finalized ->
|
||||
ok
|
||||
end,
|
||||
try enacl:generichash_update(State, <<"x">>) of
|
||||
_ -> ct:fail(must_finalize)
|
||||
catch
|
||||
error:enacl_finalized ->
|
||||
ok
|
||||
end,
|
||||
ok.
|
||||
|
||||
generichash_chunked(State, _Msg, 0) -> State;
|
||||
|
Loading…
x
Reference in New Issue
Block a user