Update the naming scheme of AEAD xchacha20...
Since this AEAD construction variant is an IETF variant, reflect this in the names of the functions. This streamlines the API with the libsodium API.
This commit is contained in:
+71
-34
@@ -131,85 +131,122 @@ done:
|
||||
* AEAD XChaCha20 Poly1305
|
||||
*/
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_KEYBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_KEYBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
return enif_make_int64(env, crypto_aead_xchacha20poly1305_ietf_KEYBYTES);
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_NPUBBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_NPUBBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
return enif_make_int64(env, crypto_aead_xchacha20poly1305_ietf_NPUBBYTES);
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_ABYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_ABYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
return enif_make_int64(env, crypto_aead_xchacha20poly1305_ietf_ABYTES);
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_MESSAGEBYTES_MAX(
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX(
|
||||
ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]) {
|
||||
return enif_make_int64(env,
|
||||
crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX);
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_encrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_encrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
ErlNifBinary key, nonce, ad, message, ciphertext;
|
||||
ERL_NIF_TERM ret;
|
||||
|
||||
if ((argc != 4) || (!enif_inspect_binary(env, argv[0], &key)) ||
|
||||
(!enif_inspect_binary(env, argv[1], &nonce)) ||
|
||||
(!enif_inspect_binary(env, argv[2], &ad)) ||
|
||||
(!enif_inspect_binary(env, argv[3], &message)) ||
|
||||
(key.size != crypto_aead_xchacha20poly1305_ietf_KEYBYTES) ||
|
||||
(nonce.size != crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)) {
|
||||
return enif_make_badarg(env);
|
||||
}
|
||||
if (argc != 4)
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[0], &message))
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[1], &ad))
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[2], &nonce))
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[3], &key))
|
||||
goto bad_arg;
|
||||
|
||||
if (key.size != crypto_aead_xchacha20poly1305_ietf_KEYBYTES)
|
||||
goto bad_arg;
|
||||
if (nonce.size != crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)
|
||||
goto bad_arg;
|
||||
|
||||
if (!enif_alloc_binary(message.size +
|
||||
crypto_aead_xchacha20poly1305_ietf_ABYTES,
|
||||
&ciphertext)) {
|
||||
return enacl_error_tuple(env, "alloc_failed");
|
||||
ret = enacl_error_tuple(env, "alloc_failed");
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (crypto_aead_xchacha20poly1305_ietf_encrypt(
|
||||
ciphertext.data, NULL, message.data, message.size, ad.data, ad.size,
|
||||
NULL, nonce.data, key.data) < 0) {
|
||||
return enacl_error_tuple(env, "aead_xchacha20poly1305_ietf_encrypt_failed");
|
||||
ret = enacl_error_tuple(env, "aead_xchacha20poly1305_ietf_encrypt_failed");
|
||||
goto release;
|
||||
}
|
||||
|
||||
return enif_make_binary(env, &ciphertext);
|
||||
ret = enif_make_binary(env, &ciphertext);
|
||||
goto done;
|
||||
|
||||
bad_arg:
|
||||
return enif_make_badarg(env);
|
||||
release:
|
||||
enif_release_binary(&ciphertext);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_decrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_decrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]) {
|
||||
ErlNifBinary key, nonce, ad, message, ciphertext;
|
||||
ERL_NIF_TERM ret;
|
||||
|
||||
if ((argc != 4) || (!enif_inspect_binary(env, argv[0], &key)) ||
|
||||
(!enif_inspect_binary(env, argv[1], &nonce)) ||
|
||||
(!enif_inspect_binary(env, argv[2], &ad)) ||
|
||||
(!enif_inspect_binary(env, argv[3], &ciphertext)) ||
|
||||
(ciphertext.size < crypto_aead_xchacha20poly1305_ietf_ABYTES) ||
|
||||
(key.size != crypto_aead_xchacha20poly1305_ietf_KEYBYTES) ||
|
||||
(nonce.size != crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)) {
|
||||
return enif_make_badarg(env);
|
||||
}
|
||||
if (argc != 4)
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[0], &ciphertext))
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[1], &ad))
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[2], &nonce))
|
||||
goto bad_arg;
|
||||
if (!enif_inspect_binary(env, argv[3], &key))
|
||||
goto bad_arg;
|
||||
|
||||
if (ciphertext.size < crypto_aead_xchacha20poly1305_ietf_ABYTES)
|
||||
goto bad_arg;
|
||||
if (key.size != crypto_aead_xchacha20poly1305_ietf_KEYBYTES)
|
||||
goto bad_arg;
|
||||
if (nonce.size != crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)
|
||||
goto bad_arg;
|
||||
|
||||
if (!enif_alloc_binary(ciphertext.size -
|
||||
crypto_aead_xchacha20poly1305_ietf_ABYTES,
|
||||
&message)) {
|
||||
return enacl_error_tuple(env, "alloc_failed");
|
||||
ret = enacl_error_tuple(env, "alloc_failed");
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (crypto_aead_xchacha20poly1305_ietf_decrypt(
|
||||
message.data, NULL, NULL, ciphertext.data, ciphertext.size, ad.data,
|
||||
ad.size, nonce.data, key.data) < 0) {
|
||||
return enacl_error_tuple(env, "aead_xchacha20poly1305_ietf_decrypt_failed");
|
||||
ret = enacl_error_tuple(env, "aead_xchacha20poly1305_ietf_decrypt_failed");
|
||||
goto release;
|
||||
}
|
||||
|
||||
return enif_make_binary(env, &message);
|
||||
ret = enif_make_binary(env, &message);
|
||||
goto done;
|
||||
|
||||
bad_arg:
|
||||
return enif_make_badarg(env);
|
||||
release:
|
||||
enif_release_binary(&message);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+12
-12
@@ -25,22 +25,22 @@ enacl_crypto_aead_chacha20poly1305_ietf_decrypt(ErlNifEnv *env, int argc,
|
||||
|
||||
/* AEAD XChaCha20 Poly1305 */
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_KEYBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_KEYBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_NPUBBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_NPUBBYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_ABYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_ABYTES(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_MESSAGEBYTES_MAX(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX(
|
||||
ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]);
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_encrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_encrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
ERL_NIF_TERM
|
||||
enacl_crypto_aead_xchacha20poly1305_decrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_decrypt(ErlNifEnv *env, int argc,
|
||||
ERL_NIF_TERM const argv[]);
|
||||
|
||||
#endif
|
||||
|
||||
+12
-12
@@ -420,20 +420,20 @@ static ErlNifFunc nif_funcs[] = {
|
||||
"crypto_aead_chacha20poly1305_ietf_decrypt", 4,
|
||||
enacl_crypto_aead_chacha20poly1305_ietf_decrypt),
|
||||
|
||||
{"crypto_aead_xchacha20poly1305_KEYBYTES", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_KEYBYTES},
|
||||
{"crypto_aead_xchacha20poly1305_NPUBBYTES", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_NPUBBYTES},
|
||||
{"crypto_aead_xchacha20poly1305_ABYTES", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_ABYTES},
|
||||
{"crypto_aead_xchacha20poly1305_MESSAGEBYTES_MAX", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_MESSAGEBYTES_MAX},
|
||||
{"crypto_aead_xchacha20poly1305_ietf_KEYBYTES", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_KEYBYTES},
|
||||
{"crypto_aead_xchacha20poly1305_ietf_NPUBBYTES", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_NPUBBYTES},
|
||||
{"crypto_aead_xchacha20poly1305_ietf_ABYTES", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_ABYTES},
|
||||
{"crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX", 0,
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX},
|
||||
erl_nif_dirty_job_cpu_bound_macro(
|
||||
"crypto_aead_xchacha20poly1305_encrypt", 4,
|
||||
enacl_crypto_aead_xchacha20poly1305_encrypt),
|
||||
"crypto_aead_xchacha20poly1305_ietf_encrypt", 4,
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_encrypt),
|
||||
erl_nif_dirty_job_cpu_bound_macro(
|
||||
"crypto_aead_xchacha20poly1305_decrypt", 4,
|
||||
enacl_crypto_aead_xchacha20poly1305_decrypt),
|
||||
"crypto_aead_xchacha20poly1305_ietf_decrypt", 4,
|
||||
enacl_crypto_aead_xchacha20poly1305_ietf_decrypt),
|
||||
|
||||
{"crypto_generichash_BYTES", 0, enacl_crypto_generichash_BYTES},
|
||||
{"crypto_generichash_BYTES_MIN", 0, enacl_crypto_generichash_BYTES_MIN},
|
||||
|
||||
Reference in New Issue
Block a user