diff --git a/CHANGELOG.md b/CHANGELOG.md index 85dece2..576310d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Go through all calls and make them return streamlined exceptions if applicable. Pretty large change, but OTOH, this ought to happen before a 1.0 release as well. - - secret - sign - Implement missing EQC tests @@ -27,6 +26,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. `aead_chacha20poly1305_ietf_*` but note it is *not* just a simple substitution into your code. - The `kx` constants have been renamed to follow libsodium one-to-one. +- All calls with `verify` now returns booleans. See `sign_verify_detached`, which + were changed by this. ### Removed - The functions of the form `aead_chacha20poly1305_*` were removed. They implement diff --git a/c_src/secret.c b/c_src/secret.c index 95b1b04..fb7b11a 100644 --- a/c_src/secret.c +++ b/c_src/secret.c @@ -91,7 +91,7 @@ ERL_NIF_TERM enacl_crypto_secretbox(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(padded_msg.size, &padded_ciphertext)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_secretbox(padded_ciphertext.data, padded_msg.data, padded_msg.size, @@ -120,7 +120,7 @@ ERL_NIF_TERM enacl_crypto_secretbox_open(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(padded_ciphertext.size, &padded_msg)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } if (crypto_secretbox_open(padded_msg.data, padded_ciphertext.data, @@ -152,7 +152,7 @@ ERL_NIF_TERM enacl_crypto_stream_chacha20(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(clen, &c)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_stream_chacha20(c.data, c.size, n.data, k.data); @@ -177,7 +177,7 @@ enacl_crypto_stream_chacha20_xor(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(m.size, &c)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_stream_chacha20_xor(c.data, m.data, m.size, n.data, k.data); @@ -202,7 +202,7 @@ ERL_NIF_TERM enacl_crypto_stream(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(clen, &c)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_stream(c.data, c.size, n.data, k.data); @@ -226,7 +226,7 @@ ERL_NIF_TERM enacl_crypto_stream_xor(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(m.size, &c)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_stream_xor(c.data, m.data, m.size, n.data, k.data); @@ -248,7 +248,7 @@ ERL_NIF_TERM enacl_crypto_auth(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(crypto_auth_BYTES, &a)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_auth(a.data, m.data, m.size, k.data); @@ -291,7 +291,7 @@ ERL_NIF_TERM enacl_crypto_onetimeauth(ErlNifEnv *env, int argc, } if (!enif_alloc_binary(crypto_onetimeauth_BYTES, &a)) { - return enacl_error_tuple(env, "alloc_failed"); + return enacl_internal_error(env); } crypto_onetimeauth(a.data, m.data, m.size, k.data); diff --git a/c_src/sign.c b/c_src/sign.c index 07f1446..c37cf63 100644 --- a/c_src/sign.c +++ b/c_src/sign.c @@ -215,9 +215,9 @@ ERL_NIF_TERM enacl_crypto_sign_final_verify(ErlNifEnv *env, int argc, } if (0 == crypto_sign_final_verify(obj->state, sig.data, pk.data)) { - ret = enif_make_atom(env, ATOM_OK); + ret = enif_make_atom(env, "true"); } else { - ret = enacl_error_tuple(env, "failed_verification"); + ret = enif_make_atom(env, "false"); } // Mark as done goto cleanup; diff --git a/eqc_test/enacl_eqc.erl b/eqc_test/enacl_eqc.erl index b449c32..210e4d0 100644 --- a/eqc_test/enacl_eqc.erl +++ b/eqc_test/enacl_eqc.erl @@ -421,9 +421,9 @@ prop_sign_detached_open() -> true -> case SignMsg of {valid, Sig} -> - equals({ok, Msg}, enacl:sign_verify_detached(Sig, Msg, PK)); + equals(true, enacl:sign_verify_detached(Sig, Msg, PK)); {invalid, Sig} -> - equals({error, failed_verification}, enacl:sign_verify_detached(Sig, Msg, PK)) + equals(false, enacl:sign_verify_detached(Sig, Msg, PK)) end; false -> badargs(fun() -> enacl:sign_verify_detached(SignMsg, Msg, PK) end) diff --git a/src/enacl.erl b/src/enacl.erl index 5b1ace5..d94013f 100644 --- a/src/enacl.erl +++ b/src/enacl.erl @@ -623,17 +623,14 @@ sign_detached(M, SK) -> %% message for the given public key. %% %% Given a signature `SIG', a message `M', and a public key `PK', the function computes -%% true iff the `SIG' is valid for `M' and `PK'. --spec sign_verify_detached(SIG, M, PK) -> {ok, M} | {error, failed_verification} +%% true iff the `SIG' is valid for `M' and `PK'; false otherwise. +-spec sign_verify_detached(SIG, M, PK) -> boolean() when SIG :: binary(), M :: iodata(), PK :: binary(). sign_verify_detached(SIG, M, PK) -> - case enacl_nif:crypto_sign_verify_detached(SIG, M, PK) of - true -> {ok, M}; - false -> {error, failed_verification} - end. + enacl_nif:crypto_sign_verify_detached(SIG, M, PK). -type sign_state() :: reference(). @@ -669,7 +666,7 @@ sign_final_create(SignState, SK) -> %% Verifies that `SIG` is a valid signature for the message whose content has %% been previously supplied using `sign_update/2` using the public key `PK.` %% @end --spec sign_final_verify(S, SIG, PK) -> ok | {error, failed_verification} +-spec sign_final_verify(S, SIG, PK) -> boolean() when S :: sign_state(), SIG :: binary(), PK :: iodata().