diff --git a/c_src/aead.c b/c_src/aead.c index fc4f0de..4339c99 100644 --- a/c_src/aead.c +++ b/c_src/aead.c @@ -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) diff --git a/src/enacl.erl b/src/enacl.erl index 6cb0770..2a3d032 100644 --- a/src/enacl.erl +++ b/src/enacl.erl @@ -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 diff --git a/src/enacl_nif.erl b/src/enacl_nif.erl index a6d6ec5..dfa7b97 100644 --- a/src/enacl_nif.erl +++ b/src/enacl_nif.erl @@ -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). diff --git a/test/enacl_SUITE.erl b/test/enacl_SUITE.erl index 8ff5b5c..b752bba 100644 --- a/test/enacl_SUITE.erl +++ b/test/enacl_SUITE.erl @@ -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) ->