Fix AEAD parameter order / naming.

The order of parameters were in the wrong order. Make them equal
to the official order of libsodium.

While here, rename NONCEBYTES to NPUBBYTES so it reflects the
underlying names as well.
This commit is contained in:
Jesper Louis Andersen 2020-01-21 13:57:39 +01:00
parent ab40d5bbf8
commit bdb4719f6d
4 changed files with 28 additions and 29 deletions

View File

@ -41,13 +41,13 @@ enacl_crypto_aead_chacha20poly1305_encrypt(ErlNifEnv *env, int argc,
if (argc != 4)
goto bad_arg;
if (!enif_inspect_binary(env, argv[0], &key))
if (!enif_inspect_binary(env, argv[0], &message))
goto bad_arg;
if (!enif_inspect_binary(env, argv[1], &nonce))
if (!enif_inspect_binary(env, argv[1], &ad))
goto bad_arg;
if (!enif_inspect_binary(env, argv[2], &ad))
if (!enif_inspect_binary(env, argv[2], &nonce))
goto bad_arg;
if (!enif_inspect_binary(env, argv[3], &message))
if (!enif_inspect_binary(env, argv[3], &key))
goto bad_arg;
if (key.size != crypto_aead_chacha20poly1305_ietf_KEYBYTES)
goto bad_arg;
@ -87,13 +87,13 @@ enacl_crypto_aead_chacha20poly1305_decrypt(ErlNifEnv *env, int argc,
if (argc != 4)
goto bad_arg;
if (!enif_inspect_binary(env, argv[0], &key))
if (!enif_inspect_binary(env, argv[0], &ciphertext))
goto bad_arg;
if (!enif_inspect_binary(env, argv[1], &nonce))
if (!enif_inspect_binary(env, argv[1], &ad))
goto bad_arg;
if (!enif_inspect_binary(env, argv[2], &ad))
if (!enif_inspect_binary(env, argv[2], &nonce))
goto bad_arg;
if (!enif_inspect_binary(env, argv[3], &ciphertext))
if (!enif_inspect_binary(env, argv[3], &message))
goto bad_arg;
if (ciphertext.size < crypto_aead_chacha20poly1305_ietf_ABYTES)

View File

@ -69,7 +69,7 @@
aead_chacha20poly1305_encrypt/4,
aead_chacha20poly1305_decrypt/4,
aead_chacha20poly1305_KEYBYTES/0,
aead_chacha20poly1305_NONCEBYTES/0,
aead_chacha20poly1305_NPUBBYTES/0,
aead_chacha20poly1305_ABYTES/0,
aead_chacha20poly1305_MESSAGEBYTES_MAX/0,
@ -1169,28 +1169,26 @@ kx_secret_key_size() ->
%% `AD' using `Key' and `Nonce'. Returns the encrypted message followed by
%% `aead_chacha20poly1305_ABYTES/0' bytes of MAC.
%% @end
-spec aead_chacha20poly1305_encrypt(Key, Nonce, AD, Msg) -> binary() | {error, term()}
-spec aead_chacha20poly1305_encrypt(Msg, AD, Nonce, Key) -> binary() | {error, term()}
when Key :: binary(),
Nonce :: pos_integer(),
Nonce :: binary(),
AD :: binary(),
Msg :: binary().
aead_chacha20poly1305_encrypt(Key, Nonce, AD, Msg) ->
NonceBin = <<0:32, Nonce:64/little-unsigned-integer>>,
enacl_nif:crypto_aead_chacha20poly1305_encrypt(Key, NonceBin, AD, Msg).
aead_chacha20poly1305_encrypt(Msg, AD, Nonce, Key) ->
enacl_nif:crypto_aead_chacha20poly1305_encrypt(Msg, AD, Nonce, Key).
%% @doc aead_chacha20poly1305_decrypt/4 decrypts ciphertext `CT' with additional
%% data `AD' using `Key' and `Nonce'. Note: `CipherText' should contain
%% `aead_chacha20poly1305_ABYTES/0' bytes that is the MAC. Returns the decrypted
%% message.
%% @end
-spec aead_chacha20poly1305_decrypt(Key, Nonce, AD, CT) -> binary() | {error, term()}
-spec aead_chacha20poly1305_decrypt(CT, AD, Nonce, Key) -> binary() | {error, term()}
when Key :: binary(),
Nonce :: pos_integer(),
Nonce :: binary(),
AD :: binary(),
CT :: binary().
aead_chacha20poly1305_decrypt(Key, Nonce, AD, CT) ->
NonceBin = <<0:32, Nonce:64/little-unsigned-integer>>,
enacl_nif:crypto_aead_chacha20poly1305_decrypt(Key, NonceBin, AD, CT).
aead_chacha20poly1305_decrypt(CT, AD, Nonce, Key) ->
enacl_nif:crypto_aead_chacha20poly1305_decrypt(CT, AD, Nonce, Key).
%% @doc aead_chacha20poly1305_KEYBYTES/0 returns the number of bytes
%% of the key used in AEAD ChaCha20 Poly1305 encryption/decryption.
@ -1199,11 +1197,11 @@ aead_chacha20poly1305_decrypt(Key, Nonce, AD, CT) ->
aead_chacha20poly1305_KEYBYTES() ->
enacl_nif:crypto_aead_chacha20poly1305_KEYBYTES().
%% @doc aead_chacha20poly1305_NONCEBYTES/0 returns the number of bytes
%% @doc aead_chacha20poly1305_NPUBBYTES/0 returns the number of bytes
%% of the Nonce in AEAD ChaCha20 Poly1305 encryption/decryption.
%% @end
-spec aead_chacha20poly1305_NONCEBYTES() -> pos_integer().
aead_chacha20poly1305_NONCEBYTES() ->
-spec aead_chacha20poly1305_NPUBBYTES() -> pos_integer().
aead_chacha20poly1305_NPUBBYTES() ->
enacl_nif:crypto_aead_chacha20poly1305_NPUBBYTES().
%% @doc aead_chacha20poly1305_ABYTES/0 returns the number of bytes

View File

@ -272,15 +272,15 @@ crypto_stream_b(_Bytes, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_stream_xor(_M, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_stream_xor_b(_M, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_encrypt(_Key, _Nonce, _AD, _Message) -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_decrypt(_Key, _Nonce, _AD, _Message) -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_encrypt(_Message, _AD, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_decrypt(_CipherText, _AD, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_KEYBYTES() -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_NPUBBYTES() -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_ABYTES() -> erlang:nif_error(nif_not_loaded).
crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX() -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_encrypt(_Key, _Nonce, _AD, _Message) -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_decrypt(_Key, _Nonce, _AD, _Message) -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_encrypt(_Message, _AD, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_decrypt(_CipherText, _AD, _Nonce, _Key) -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_KEYBYTES() -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_NPUBBYTES() -> erlang:nif_error(nif_not_loaded).
crypto_aead_xchacha20poly1305_ABYTES() -> erlang:nif_error(nif_not_loaded).

View File

@ -103,14 +103,15 @@ aead_xchacha20poly1305(_Config) ->
ok.
aead_chacha20poly1305(_Config) ->
NonceLen = enacl:aead_chacha20poly1305_NPUBBYTES(),
KLen = enacl:aead_chacha20poly1305_KEYBYTES(),
Key = binary:copy(<<"K">>, KLen),
Msg = <<"test">>,
AD = <<1,2,3,4,5,6>>,
Nonce = 1337,
Nonce = binary:copy(<<"N">>, NonceLen),
CipherText = enacl:aead_chacha20poly1305_encrypt(Key, Nonce, AD, Msg),
Msg = enacl:aead_chacha20poly1305_decrypt(Key, Nonce, AD, CipherText),
CipherText = enacl:aead_chacha20poly1305_encrypt(Msg, AD, Nonce, Key),
Msg = enacl:aead_chacha20poly1305_decrypt(CipherText, AD, Nonce, Key),
ok.
pwhash(_Config) ->