diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj b/builds/msvc/vs2010/libsodium/libsodium.vcxproj
index 2ad83338..f2a462f3 100644
--- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj
@@ -180,6 +180,7 @@
+
@@ -328,6 +329,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj b/builds/msvc/vs2012/libsodium/libsodium.vcxproj
index 2db4a75e..5d7ddf59 100644
--- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj
@@ -180,6 +180,7 @@
+
@@ -328,6 +329,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj b/builds/msvc/vs2013/libsodium/libsodium.vcxproj
index 8bcef354..cd736217 100644
--- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj
@@ -180,6 +180,7 @@
+
@@ -328,6 +329,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj b/builds/msvc/vs2015/libsodium/libsodium.vcxproj
index 8bb767fb..9dd258ef 100644
--- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj
@@ -180,6 +180,7 @@
+
@@ -328,6 +329,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj b/builds/msvc/vs2017/libsodium/libsodium.vcxproj
index b17ef144..84c87321 100644
--- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj
@@ -180,6 +180,7 @@
+
@@ -328,6 +329,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj b/builds/msvc/vs2019/libsodium/libsodium.vcxproj
index 9ac766d2..261a44f5 100644
--- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj
@@ -204,6 +204,7 @@
+
@@ -352,6 +353,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/builds/msvc/vs2022/libsodium/libsodium.vcxproj b/builds/msvc/vs2022/libsodium/libsodium.vcxproj
index 2fb84695..ae0d2e7b 100644
--- a/builds/msvc/vs2022/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2022/libsodium/libsodium.vcxproj
@@ -133,6 +133,7 @@
+
@@ -281,6 +282,10 @@
+
+
+
+
diff --git a/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
index 389276fb..c6048360 100644
--- a/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
@@ -333,6 +333,9 @@
crypto_aead\aegis256\aesni
+
+ crypto_aead\aegis256\soft
+
crypto_aead\aegis256\armcrypto
@@ -773,6 +776,18 @@
crypto_aead\aegis128l\armcrypto
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256\aesni
+
+
+ crypto_aead\aegis256\soft
+
+
+ crypto_aead\aegis256\armcrypto
+
crypto_core\ed25519
@@ -826,6 +841,9 @@
{d8e5d430-b695-3e19-81bd-31fd1e6445da}
+
+ {853de148-043c-36b2-9cf8-1aa4541da046}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
diff --git a/dist-build/emscripten-symbols.def b/dist-build/emscripten-symbols.def
index e45d8704..a42ffc14 100644
--- a/dist-build/emscripten-symbols.def
+++ b/dist-build/emscripten-symbols.def
@@ -13,7 +13,6 @@ _crypto_aead_aegis256_decrypt 0 1
_crypto_aead_aegis256_decrypt_detached 0 1
_crypto_aead_aegis256_encrypt 0 1
_crypto_aead_aegis256_encrypt_detached 0 1
-_crypto_aead_aegis256_is_available 0 1
_crypto_aead_aegis256_keybytes 0 1
_crypto_aead_aegis256_keygen 0 1
_crypto_aead_aegis256_messagebytes_max 0 1
diff --git a/dist-build/emscripten.sh b/dist-build/emscripten.sh
index 24bb45ea..dffa32fd 100755
--- a/dist-build/emscripten.sh
+++ b/dist-build/emscripten.sh
@@ -2,7 +2,7 @@
export MAKE_FLAGS='-j4'
export EXPORTED_FUNCTIONS_STANDARD='["_malloc","_free","_crypto_aead_chacha20poly1305_abytes","_crypto_aead_chacha20poly1305_decrypt","_crypto_aead_chacha20poly1305_decrypt_detached","_crypto_aead_chacha20poly1305_encrypt","_crypto_aead_chacha20poly1305_encrypt_detached","_crypto_aead_chacha20poly1305_ietf_abytes","_crypto_aead_chacha20poly1305_ietf_decrypt","_crypto_aead_chacha20poly1305_ietf_decrypt_detached","_crypto_aead_chacha20poly1305_ietf_encrypt","_crypto_aead_chacha20poly1305_ietf_encrypt_detached","_crypto_aead_chacha20poly1305_ietf_keybytes","_crypto_aead_chacha20poly1305_ietf_keygen","_crypto_aead_chacha20poly1305_ietf_messagebytes_max","_crypto_aead_chacha20poly1305_ietf_npubbytes","_crypto_aead_chacha20poly1305_ietf_nsecbytes","_crypto_aead_chacha20poly1305_keybytes","_crypto_aead_chacha20poly1305_keygen","_crypto_aead_chacha20poly1305_messagebytes_max","_crypto_aead_chacha20poly1305_npubbytes","_crypto_aead_chacha20poly1305_nsecbytes","_crypto_aead_xchacha20poly1305_ietf_abytes","_crypto_aead_xchacha20poly1305_ietf_decrypt","_crypto_aead_xchacha20poly1305_ietf_decrypt_detached","_crypto_aead_xchacha20poly1305_ietf_encrypt","_crypto_aead_xchacha20poly1305_ietf_encrypt_detached","_crypto_aead_xchacha20poly1305_ietf_keybytes","_crypto_aead_xchacha20poly1305_ietf_keygen","_crypto_aead_xchacha20poly1305_ietf_messagebytes_max","_crypto_aead_xchacha20poly1305_ietf_npubbytes","_crypto_aead_xchacha20poly1305_ietf_nsecbytes","_crypto_auth","_crypto_auth_bytes","_crypto_auth_keybytes","_crypto_auth_keygen","_crypto_auth_verify","_crypto_box_beforenm","_crypto_box_beforenmbytes","_crypto_box_detached","_crypto_box_detached_afternm","_crypto_box_easy","_crypto_box_easy_afternm","_crypto_box_keypair","_crypto_box_macbytes","_crypto_box_messagebytes_max","_crypto_box_noncebytes","_crypto_box_open_detached","_crypto_box_open_detached_afternm","_crypto_box_open_easy","_crypto_box_open_easy_afternm","_crypto_box_publickeybytes","_crypto_box_seal","_crypto_box_seal_open","_crypto_box_sealbytes","_crypto_box_secretkeybytes","_crypto_box_seed_keypair","_crypto_box_seedbytes","_crypto_generichash","_crypto_generichash_bytes","_crypto_generichash_bytes_max","_crypto_generichash_bytes_min","_crypto_generichash_final","_crypto_generichash_init","_crypto_generichash_keybytes","_crypto_generichash_keybytes_max","_crypto_generichash_keybytes_min","_crypto_generichash_keygen","_crypto_generichash_statebytes","_crypto_generichash_update","_crypto_hash","_crypto_hash_bytes","_crypto_kdf_bytes_max","_crypto_kdf_bytes_min","_crypto_kdf_contextbytes","_crypto_kdf_derive_from_key","_crypto_kdf_keybytes","_crypto_kdf_keygen","_crypto_kx_client_session_keys","_crypto_kx_keypair","_crypto_kx_publickeybytes","_crypto_kx_secretkeybytes","_crypto_kx_seed_keypair","_crypto_kx_seedbytes","_crypto_kx_server_session_keys","_crypto_kx_sessionkeybytes","_crypto_pwhash","_crypto_pwhash_alg_argon2i13","_crypto_pwhash_alg_argon2id13","_crypto_pwhash_alg_default","_crypto_pwhash_bytes_max","_crypto_pwhash_bytes_min","_crypto_pwhash_memlimit_interactive","_crypto_pwhash_memlimit_max","_crypto_pwhash_memlimit_min","_crypto_pwhash_memlimit_moderate","_crypto_pwhash_memlimit_sensitive","_crypto_pwhash_opslimit_interactive","_crypto_pwhash_opslimit_max","_crypto_pwhash_opslimit_min","_crypto_pwhash_opslimit_moderate","_crypto_pwhash_opslimit_sensitive","_crypto_pwhash_passwd_max","_crypto_pwhash_passwd_min","_crypto_pwhash_saltbytes","_crypto_pwhash_str","_crypto_pwhash_str_alg","_crypto_pwhash_str_needs_rehash","_crypto_pwhash_str_verify","_crypto_pwhash_strbytes","_crypto_pwhash_strprefix","_crypto_scalarmult","_crypto_scalarmult_base","_crypto_scalarmult_bytes","_crypto_scalarmult_scalarbytes","_crypto_secretbox_detached","_crypto_secretbox_easy","_crypto_secretbox_keybytes","_crypto_secretbox_keygen","_crypto_secretbox_macbytes","_crypto_secretbox_messagebytes_max","_crypto_secretbox_noncebytes","_crypto_secretbox_open_detached","_crypto_secretbox_open_easy","_crypto_secretstream_xchacha20poly1305_abytes","_crypto_secretstream_xchacha20poly1305_headerbytes","_crypto_secretstream_xchacha20poly1305_init_pull","_crypto_secretstream_xchacha20poly1305_init_push","_crypto_secretstream_xchacha20poly1305_keybytes","_crypto_secretstream_xchacha20poly1305_keygen","_crypto_secretstream_xchacha20poly1305_messagebytes_max","_crypto_secretstream_xchacha20poly1305_pull","_crypto_secretstream_xchacha20poly1305_push","_crypto_secretstream_xchacha20poly1305_rekey","_crypto_secretstream_xchacha20poly1305_statebytes","_crypto_secretstream_xchacha20poly1305_tag_final","_crypto_secretstream_xchacha20poly1305_tag_message","_crypto_secretstream_xchacha20poly1305_tag_push","_crypto_secretstream_xchacha20poly1305_tag_rekey","_crypto_shorthash","_crypto_shorthash_bytes","_crypto_shorthash_keybytes","_crypto_shorthash_keygen","_crypto_sign","_crypto_sign_bytes","_crypto_sign_detached","_crypto_sign_ed25519_pk_to_curve25519","_crypto_sign_ed25519_sk_to_curve25519","_crypto_sign_final_create","_crypto_sign_final_verify","_crypto_sign_init","_crypto_sign_keypair","_crypto_sign_messagebytes_max","_crypto_sign_open","_crypto_sign_publickeybytes","_crypto_sign_secretkeybytes","_crypto_sign_seed_keypair","_crypto_sign_seedbytes","_crypto_sign_statebytes","_crypto_sign_update","_crypto_sign_verify_detached","_randombytes","_randombytes_buf","_randombytes_buf_deterministic","_randombytes_close","_randombytes_random","_randombytes_seedbytes","_randombytes_stir","_randombytes_uniform","_sodium_base642bin","_sodium_base64_encoded_len","_sodium_bin2base64","_sodium_bin2hex","_sodium_hex2bin","_sodium_init","_sodium_library_minimal","_sodium_library_version_major","_sodium_library_version_minor","_sodium_pad","_sodium_unpad","_sodium_version_string"]'
-export EXPORTED_FUNCTIONS_SUMO='["_malloc","_free","_crypto_aead_aegis128l_abytes","_crypto_aead_aegis128l_decrypt","_crypto_aead_aegis128l_decrypt_detached","_crypto_aead_aegis128l_encrypt","_crypto_aead_aegis128l_encrypt_detached","_crypto_aead_aegis128l_keybytes","_crypto_aead_aegis128l_keygen","_crypto_aead_aegis128l_messagebytes_max","_crypto_aead_aegis128l_npubbytes","_crypto_aead_aegis128l_nsecbytes","_crypto_aead_aegis256_abytes","_crypto_aead_aegis256_decrypt","_crypto_aead_aegis256_decrypt_detached","_crypto_aead_aegis256_encrypt","_crypto_aead_aegis256_encrypt_detached","_crypto_aead_aegis256_is_available","_crypto_aead_aegis256_keybytes","_crypto_aead_aegis256_keygen","_crypto_aead_aegis256_messagebytes_max","_crypto_aead_aegis256_npubbytes","_crypto_aead_aegis256_nsecbytes","_crypto_aead_chacha20poly1305_abytes","_crypto_aead_chacha20poly1305_decrypt","_crypto_aead_chacha20poly1305_decrypt_detached","_crypto_aead_chacha20poly1305_encrypt","_crypto_aead_chacha20poly1305_encrypt_detached","_crypto_aead_chacha20poly1305_ietf_abytes","_crypto_aead_chacha20poly1305_ietf_decrypt","_crypto_aead_chacha20poly1305_ietf_decrypt_detached","_crypto_aead_chacha20poly1305_ietf_encrypt","_crypto_aead_chacha20poly1305_ietf_encrypt_detached","_crypto_aead_chacha20poly1305_ietf_keybytes","_crypto_aead_chacha20poly1305_ietf_keygen","_crypto_aead_chacha20poly1305_ietf_messagebytes_max","_crypto_aead_chacha20poly1305_ietf_npubbytes","_crypto_aead_chacha20poly1305_ietf_nsecbytes","_crypto_aead_chacha20poly1305_keybytes","_crypto_aead_chacha20poly1305_keygen","_crypto_aead_chacha20poly1305_messagebytes_max","_crypto_aead_chacha20poly1305_npubbytes","_crypto_aead_chacha20poly1305_nsecbytes","_crypto_aead_xchacha20poly1305_ietf_abytes","_crypto_aead_xchacha20poly1305_ietf_decrypt","_crypto_aead_xchacha20poly1305_ietf_decrypt_detached","_crypto_aead_xchacha20poly1305_ietf_encrypt","_crypto_aead_xchacha20poly1305_ietf_encrypt_detached","_crypto_aead_xchacha20poly1305_ietf_keybytes","_crypto_aead_xchacha20poly1305_ietf_keygen","_crypto_aead_xchacha20poly1305_ietf_messagebytes_max","_crypto_aead_xchacha20poly1305_ietf_npubbytes","_crypto_aead_xchacha20poly1305_ietf_nsecbytes","_crypto_auth","_crypto_auth_bytes","_crypto_auth_hmacsha256","_crypto_auth_hmacsha256_bytes","_crypto_auth_hmacsha256_final","_crypto_auth_hmacsha256_init","_crypto_auth_hmacsha256_keybytes","_crypto_auth_hmacsha256_keygen","_crypto_auth_hmacsha256_statebytes","_crypto_auth_hmacsha256_update","_crypto_auth_hmacsha256_verify","_crypto_auth_hmacsha512","_crypto_auth_hmacsha512256","_crypto_auth_hmacsha512256_bytes","_crypto_auth_hmacsha512256_final","_crypto_auth_hmacsha512256_init","_crypto_auth_hmacsha512256_keybytes","_crypto_auth_hmacsha512256_keygen","_crypto_auth_hmacsha512256_statebytes","_crypto_auth_hmacsha512256_update","_crypto_auth_hmacsha512256_verify","_crypto_auth_hmacsha512_bytes","_crypto_auth_hmacsha512_final","_crypto_auth_hmacsha512_init","_crypto_auth_hmacsha512_keybytes","_crypto_auth_hmacsha512_keygen","_crypto_auth_hmacsha512_statebytes","_crypto_auth_hmacsha512_update","_crypto_auth_hmacsha512_verify","_crypto_auth_keybytes","_crypto_auth_keygen","_crypto_auth_primitive","_crypto_auth_verify","_crypto_box","_crypto_box_afternm","_crypto_box_beforenm","_crypto_box_beforenmbytes","_crypto_box_boxzerobytes","_crypto_box_curve25519xchacha20poly1305_beforenm","_crypto_box_curve25519xchacha20poly1305_beforenmbytes","_crypto_box_curve25519xchacha20poly1305_detached","_crypto_box_curve25519xchacha20poly1305_detached_afternm","_crypto_box_curve25519xchacha20poly1305_easy","_crypto_box_curve25519xchacha20poly1305_easy_afternm","_crypto_box_curve25519xchacha20poly1305_keypair","_crypto_box_curve25519xchacha20poly1305_macbytes","_crypto_box_curve25519xchacha20poly1305_messagebytes_max","_crypto_box_curve25519xchacha20poly1305_noncebytes","_crypto_box_curve25519xchacha20poly1305_open_detached","_crypto_box_curve25519xchacha20poly1305_open_detached_afternm","_crypto_box_curve25519xchacha20poly1305_open_easy","_crypto_box_curve25519xchacha20poly1305_open_easy_afternm","_crypto_box_curve25519xchacha20poly1305_publickeybytes","_crypto_box_curve25519xchacha20poly1305_seal","_crypto_box_curve25519xchacha20poly1305_seal_open","_crypto_box_curve25519xchacha20poly1305_sealbytes","_crypto_box_curve25519xchacha20poly1305_secretkeybytes","_crypto_box_curve25519xchacha20poly1305_seed_keypair","_crypto_box_curve25519xchacha20poly1305_seedbytes","_crypto_box_curve25519xsalsa20poly1305","_crypto_box_curve25519xsalsa20poly1305_afternm","_crypto_box_curve25519xsalsa20poly1305_beforenm","_crypto_box_curve25519xsalsa20poly1305_beforenmbytes","_crypto_box_curve25519xsalsa20poly1305_boxzerobytes","_crypto_box_curve25519xsalsa20poly1305_keypair","_crypto_box_curve25519xsalsa20poly1305_macbytes","_crypto_box_curve25519xsalsa20poly1305_messagebytes_max","_crypto_box_curve25519xsalsa20poly1305_noncebytes","_crypto_box_curve25519xsalsa20poly1305_open","_crypto_box_curve25519xsalsa20poly1305_open_afternm","_crypto_box_curve25519xsalsa20poly1305_publickeybytes","_crypto_box_curve25519xsalsa20poly1305_secretkeybytes","_crypto_box_curve25519xsalsa20poly1305_seed_keypair","_crypto_box_curve25519xsalsa20poly1305_seedbytes","_crypto_box_curve25519xsalsa20poly1305_zerobytes","_crypto_box_detached","_crypto_box_detached_afternm","_crypto_box_easy","_crypto_box_easy_afternm","_crypto_box_keypair","_crypto_box_macbytes","_crypto_box_messagebytes_max","_crypto_box_noncebytes","_crypto_box_open","_crypto_box_open_afternm","_crypto_box_open_detached","_crypto_box_open_detached_afternm","_crypto_box_open_easy","_crypto_box_open_easy_afternm","_crypto_box_primitive","_crypto_box_publickeybytes","_crypto_box_seal","_crypto_box_seal_open","_crypto_box_sealbytes","_crypto_box_secretkeybytes","_crypto_box_seed_keypair","_crypto_box_seedbytes","_crypto_box_zerobytes","_crypto_core_ed25519_add","_crypto_core_ed25519_bytes","_crypto_core_ed25519_from_string","_crypto_core_ed25519_from_string_ro","_crypto_core_ed25519_from_uniform","_crypto_core_ed25519_hashbytes","_crypto_core_ed25519_is_valid_point","_crypto_core_ed25519_nonreducedscalarbytes","_crypto_core_ed25519_random","_crypto_core_ed25519_scalar_add","_crypto_core_ed25519_scalar_complement","_crypto_core_ed25519_scalar_invert","_crypto_core_ed25519_scalar_is_canonical","_crypto_core_ed25519_scalar_mul","_crypto_core_ed25519_scalar_negate","_crypto_core_ed25519_scalar_random","_crypto_core_ed25519_scalar_reduce","_crypto_core_ed25519_scalar_sub","_crypto_core_ed25519_scalarbytes","_crypto_core_ed25519_sub","_crypto_core_ed25519_uniformbytes","_crypto_core_hchacha20","_crypto_core_hchacha20_constbytes","_crypto_core_hchacha20_inputbytes","_crypto_core_hchacha20_keybytes","_crypto_core_hchacha20_outputbytes","_crypto_core_hsalsa20","_crypto_core_hsalsa20_constbytes","_crypto_core_hsalsa20_inputbytes","_crypto_core_hsalsa20_keybytes","_crypto_core_hsalsa20_outputbytes","_crypto_core_ristretto255_add","_crypto_core_ristretto255_bytes","_crypto_core_ristretto255_from_hash","_crypto_core_ristretto255_from_string","_crypto_core_ristretto255_from_string_ro","_crypto_core_ristretto255_hashbytes","_crypto_core_ristretto255_is_valid_point","_crypto_core_ristretto255_nonreducedscalarbytes","_crypto_core_ristretto255_random","_crypto_core_ristretto255_scalar_add","_crypto_core_ristretto255_scalar_complement","_crypto_core_ristretto255_scalar_invert","_crypto_core_ristretto255_scalar_is_canonical","_crypto_core_ristretto255_scalar_mul","_crypto_core_ristretto255_scalar_negate","_crypto_core_ristretto255_scalar_random","_crypto_core_ristretto255_scalar_reduce","_crypto_core_ristretto255_scalar_sub","_crypto_core_ristretto255_scalarbytes","_crypto_core_ristretto255_sub","_crypto_core_salsa20","_crypto_core_salsa2012","_crypto_core_salsa2012_constbytes","_crypto_core_salsa2012_inputbytes","_crypto_core_salsa2012_keybytes","_crypto_core_salsa2012_outputbytes","_crypto_core_salsa208","_crypto_core_salsa208_constbytes","_crypto_core_salsa208_inputbytes","_crypto_core_salsa208_keybytes","_crypto_core_salsa208_outputbytes","_crypto_core_salsa20_constbytes","_crypto_core_salsa20_inputbytes","_crypto_core_salsa20_keybytes","_crypto_core_salsa20_outputbytes","_crypto_generichash","_crypto_generichash_blake2b","_crypto_generichash_blake2b_bytes","_crypto_generichash_blake2b_bytes_max","_crypto_generichash_blake2b_bytes_min","_crypto_generichash_blake2b_final","_crypto_generichash_blake2b_init","_crypto_generichash_blake2b_init_salt_personal","_crypto_generichash_blake2b_keybytes","_crypto_generichash_blake2b_keybytes_max","_crypto_generichash_blake2b_keybytes_min","_crypto_generichash_blake2b_keygen","_crypto_generichash_blake2b_personalbytes","_crypto_generichash_blake2b_salt_personal","_crypto_generichash_blake2b_saltbytes","_crypto_generichash_blake2b_statebytes","_crypto_generichash_blake2b_update","_crypto_generichash_bytes","_crypto_generichash_bytes_max","_crypto_generichash_bytes_min","_crypto_generichash_final","_crypto_generichash_init","_crypto_generichash_keybytes","_crypto_generichash_keybytes_max","_crypto_generichash_keybytes_min","_crypto_generichash_keygen","_crypto_generichash_primitive","_crypto_generichash_statebytes","_crypto_generichash_update","_crypto_hash","_crypto_hash_bytes","_crypto_hash_primitive","_crypto_hash_sha256","_crypto_hash_sha256_bytes","_crypto_hash_sha256_final","_crypto_hash_sha256_init","_crypto_hash_sha256_statebytes","_crypto_hash_sha256_update","_crypto_hash_sha512","_crypto_hash_sha512_bytes","_crypto_hash_sha512_final","_crypto_hash_sha512_init","_crypto_hash_sha512_statebytes","_crypto_hash_sha512_update","_crypto_kdf_blake2b_bytes_max","_crypto_kdf_blake2b_bytes_min","_crypto_kdf_blake2b_contextbytes","_crypto_kdf_blake2b_derive_from_key","_crypto_kdf_blake2b_keybytes","_crypto_kdf_bytes_max","_crypto_kdf_bytes_min","_crypto_kdf_contextbytes","_crypto_kdf_derive_from_key","_crypto_kdf_hkdf_sha256_bytes_max","_crypto_kdf_hkdf_sha256_bytes_min","_crypto_kdf_hkdf_sha256_expand","_crypto_kdf_hkdf_sha256_extract","_crypto_kdf_hkdf_sha256_keybytes","_crypto_kdf_hkdf_sha256_keygen","_crypto_kdf_hkdf_sha512_bytes_max","_crypto_kdf_hkdf_sha512_bytes_min","_crypto_kdf_hkdf_sha512_expand","_crypto_kdf_hkdf_sha512_extract","_crypto_kdf_hkdf_sha512_keybytes","_crypto_kdf_hkdf_sha512_keygen","_crypto_kdf_keybytes","_crypto_kdf_keygen","_crypto_kdf_primitive","_crypto_kx_client_session_keys","_crypto_kx_keypair","_crypto_kx_primitive","_crypto_kx_publickeybytes","_crypto_kx_secretkeybytes","_crypto_kx_seed_keypair","_crypto_kx_seedbytes","_crypto_kx_server_session_keys","_crypto_kx_sessionkeybytes","_crypto_onetimeauth","_crypto_onetimeauth_bytes","_crypto_onetimeauth_final","_crypto_onetimeauth_init","_crypto_onetimeauth_keybytes","_crypto_onetimeauth_keygen","_crypto_onetimeauth_poly1305","_crypto_onetimeauth_poly1305_bytes","_crypto_onetimeauth_poly1305_final","_crypto_onetimeauth_poly1305_init","_crypto_onetimeauth_poly1305_keybytes","_crypto_onetimeauth_poly1305_keygen","_crypto_onetimeauth_poly1305_statebytes","_crypto_onetimeauth_poly1305_update","_crypto_onetimeauth_poly1305_verify","_crypto_onetimeauth_primitive","_crypto_onetimeauth_statebytes","_crypto_onetimeauth_update","_crypto_onetimeauth_verify","_crypto_pwhash","_crypto_pwhash_alg_argon2i13","_crypto_pwhash_alg_argon2id13","_crypto_pwhash_alg_default","_crypto_pwhash_argon2i","_crypto_pwhash_argon2i_alg_argon2i13","_crypto_pwhash_argon2i_bytes_max","_crypto_pwhash_argon2i_bytes_min","_crypto_pwhash_argon2i_memlimit_interactive","_crypto_pwhash_argon2i_memlimit_max","_crypto_pwhash_argon2i_memlimit_min","_crypto_pwhash_argon2i_memlimit_moderate","_crypto_pwhash_argon2i_memlimit_sensitive","_crypto_pwhash_argon2i_opslimit_interactive","_crypto_pwhash_argon2i_opslimit_max","_crypto_pwhash_argon2i_opslimit_min","_crypto_pwhash_argon2i_opslimit_moderate","_crypto_pwhash_argon2i_opslimit_sensitive","_crypto_pwhash_argon2i_passwd_max","_crypto_pwhash_argon2i_passwd_min","_crypto_pwhash_argon2i_saltbytes","_crypto_pwhash_argon2i_str","_crypto_pwhash_argon2i_str_needs_rehash","_crypto_pwhash_argon2i_str_verify","_crypto_pwhash_argon2i_strbytes","_crypto_pwhash_argon2i_strprefix","_crypto_pwhash_argon2id","_crypto_pwhash_argon2id_alg_argon2id13","_crypto_pwhash_argon2id_bytes_max","_crypto_pwhash_argon2id_bytes_min","_crypto_pwhash_argon2id_memlimit_interactive","_crypto_pwhash_argon2id_memlimit_max","_crypto_pwhash_argon2id_memlimit_min","_crypto_pwhash_argon2id_memlimit_moderate","_crypto_pwhash_argon2id_memlimit_sensitive","_crypto_pwhash_argon2id_opslimit_interactive","_crypto_pwhash_argon2id_opslimit_max","_crypto_pwhash_argon2id_opslimit_min","_crypto_pwhash_argon2id_opslimit_moderate","_crypto_pwhash_argon2id_opslimit_sensitive","_crypto_pwhash_argon2id_passwd_max","_crypto_pwhash_argon2id_passwd_min","_crypto_pwhash_argon2id_saltbytes","_crypto_pwhash_argon2id_str","_crypto_pwhash_argon2id_str_needs_rehash","_crypto_pwhash_argon2id_str_verify","_crypto_pwhash_argon2id_strbytes","_crypto_pwhash_argon2id_strprefix","_crypto_pwhash_bytes_max","_crypto_pwhash_bytes_min","_crypto_pwhash_memlimit_interactive","_crypto_pwhash_memlimit_max","_crypto_pwhash_memlimit_min","_crypto_pwhash_memlimit_moderate","_crypto_pwhash_memlimit_sensitive","_crypto_pwhash_opslimit_interactive","_crypto_pwhash_opslimit_max","_crypto_pwhash_opslimit_min","_crypto_pwhash_opslimit_moderate","_crypto_pwhash_opslimit_sensitive","_crypto_pwhash_passwd_max","_crypto_pwhash_passwd_min","_crypto_pwhash_primitive","_crypto_pwhash_saltbytes","_crypto_pwhash_scryptsalsa208sha256","_crypto_pwhash_scryptsalsa208sha256_bytes_max","_crypto_pwhash_scryptsalsa208sha256_bytes_min","_crypto_pwhash_scryptsalsa208sha256_ll","_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive","_crypto_pwhash_scryptsalsa208sha256_memlimit_max","_crypto_pwhash_scryptsalsa208sha256_memlimit_min","_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive","_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive","_crypto_pwhash_scryptsalsa208sha256_opslimit_max","_crypto_pwhash_scryptsalsa208sha256_opslimit_min","_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive","_crypto_pwhash_scryptsalsa208sha256_passwd_max","_crypto_pwhash_scryptsalsa208sha256_passwd_min","_crypto_pwhash_scryptsalsa208sha256_saltbytes","_crypto_pwhash_scryptsalsa208sha256_str","_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash","_crypto_pwhash_scryptsalsa208sha256_str_verify","_crypto_pwhash_scryptsalsa208sha256_strbytes","_crypto_pwhash_scryptsalsa208sha256_strprefix","_crypto_pwhash_str","_crypto_pwhash_str_alg","_crypto_pwhash_str_needs_rehash","_crypto_pwhash_str_verify","_crypto_pwhash_strbytes","_crypto_pwhash_strprefix","_crypto_scalarmult","_crypto_scalarmult_base","_crypto_scalarmult_bytes","_crypto_scalarmult_curve25519","_crypto_scalarmult_curve25519_base","_crypto_scalarmult_curve25519_bytes","_crypto_scalarmult_curve25519_scalarbytes","_crypto_scalarmult_ed25519","_crypto_scalarmult_ed25519_base","_crypto_scalarmult_ed25519_base_noclamp","_crypto_scalarmult_ed25519_bytes","_crypto_scalarmult_ed25519_noclamp","_crypto_scalarmult_ed25519_scalarbytes","_crypto_scalarmult_primitive","_crypto_scalarmult_ristretto255","_crypto_scalarmult_ristretto255_base","_crypto_scalarmult_ristretto255_bytes","_crypto_scalarmult_ristretto255_scalarbytes","_crypto_scalarmult_scalarbytes","_crypto_secretbox","_crypto_secretbox_boxzerobytes","_crypto_secretbox_detached","_crypto_secretbox_easy","_crypto_secretbox_keybytes","_crypto_secretbox_keygen","_crypto_secretbox_macbytes","_crypto_secretbox_messagebytes_max","_crypto_secretbox_noncebytes","_crypto_secretbox_open","_crypto_secretbox_open_detached","_crypto_secretbox_open_easy","_crypto_secretbox_primitive","_crypto_secretbox_xchacha20poly1305_detached","_crypto_secretbox_xchacha20poly1305_easy","_crypto_secretbox_xchacha20poly1305_keybytes","_crypto_secretbox_xchacha20poly1305_macbytes","_crypto_secretbox_xchacha20poly1305_messagebytes_max","_crypto_secretbox_xchacha20poly1305_noncebytes","_crypto_secretbox_xchacha20poly1305_open_detached","_crypto_secretbox_xchacha20poly1305_open_easy","_crypto_secretbox_xsalsa20poly1305","_crypto_secretbox_xsalsa20poly1305_boxzerobytes","_crypto_secretbox_xsalsa20poly1305_keybytes","_crypto_secretbox_xsalsa20poly1305_keygen","_crypto_secretbox_xsalsa20poly1305_macbytes","_crypto_secretbox_xsalsa20poly1305_messagebytes_max","_crypto_secretbox_xsalsa20poly1305_noncebytes","_crypto_secretbox_xsalsa20poly1305_open","_crypto_secretbox_xsalsa20poly1305_zerobytes","_crypto_secretbox_zerobytes","_crypto_secretstream_xchacha20poly1305_abytes","_crypto_secretstream_xchacha20poly1305_headerbytes","_crypto_secretstream_xchacha20poly1305_init_pull","_crypto_secretstream_xchacha20poly1305_init_push","_crypto_secretstream_xchacha20poly1305_keybytes","_crypto_secretstream_xchacha20poly1305_keygen","_crypto_secretstream_xchacha20poly1305_messagebytes_max","_crypto_secretstream_xchacha20poly1305_pull","_crypto_secretstream_xchacha20poly1305_push","_crypto_secretstream_xchacha20poly1305_rekey","_crypto_secretstream_xchacha20poly1305_statebytes","_crypto_secretstream_xchacha20poly1305_tag_final","_crypto_secretstream_xchacha20poly1305_tag_message","_crypto_secretstream_xchacha20poly1305_tag_push","_crypto_secretstream_xchacha20poly1305_tag_rekey","_crypto_shorthash","_crypto_shorthash_bytes","_crypto_shorthash_keybytes","_crypto_shorthash_keygen","_crypto_shorthash_primitive","_crypto_shorthash_siphash24","_crypto_shorthash_siphash24_bytes","_crypto_shorthash_siphash24_keybytes","_crypto_shorthash_siphashx24","_crypto_shorthash_siphashx24_bytes","_crypto_shorthash_siphashx24_keybytes","_crypto_sign","_crypto_sign_bytes","_crypto_sign_detached","_crypto_sign_ed25519","_crypto_sign_ed25519_bytes","_crypto_sign_ed25519_detached","_crypto_sign_ed25519_keypair","_crypto_sign_ed25519_messagebytes_max","_crypto_sign_ed25519_open","_crypto_sign_ed25519_pk_to_curve25519","_crypto_sign_ed25519_publickeybytes","_crypto_sign_ed25519_secretkeybytes","_crypto_sign_ed25519_seed_keypair","_crypto_sign_ed25519_seedbytes","_crypto_sign_ed25519_sk_to_curve25519","_crypto_sign_ed25519_sk_to_pk","_crypto_sign_ed25519_sk_to_seed","_crypto_sign_ed25519_verify_detached","_crypto_sign_ed25519ph_final_create","_crypto_sign_ed25519ph_final_verify","_crypto_sign_ed25519ph_init","_crypto_sign_ed25519ph_statebytes","_crypto_sign_ed25519ph_update","_crypto_sign_final_create","_crypto_sign_final_verify","_crypto_sign_init","_crypto_sign_keypair","_crypto_sign_messagebytes_max","_crypto_sign_open","_crypto_sign_primitive","_crypto_sign_publickeybytes","_crypto_sign_secretkeybytes","_crypto_sign_seed_keypair","_crypto_sign_seedbytes","_crypto_sign_statebytes","_crypto_sign_update","_crypto_sign_verify_detached","_crypto_stream","_crypto_stream_chacha20","_crypto_stream_chacha20_ietf","_crypto_stream_chacha20_ietf_keybytes","_crypto_stream_chacha20_ietf_keygen","_crypto_stream_chacha20_ietf_messagebytes_max","_crypto_stream_chacha20_ietf_noncebytes","_crypto_stream_chacha20_ietf_xor","_crypto_stream_chacha20_ietf_xor_ic","_crypto_stream_chacha20_keybytes","_crypto_stream_chacha20_keygen","_crypto_stream_chacha20_messagebytes_max","_crypto_stream_chacha20_noncebytes","_crypto_stream_chacha20_xor","_crypto_stream_chacha20_xor_ic","_crypto_stream_keybytes","_crypto_stream_keygen","_crypto_stream_messagebytes_max","_crypto_stream_noncebytes","_crypto_stream_primitive","_crypto_stream_salsa20","_crypto_stream_salsa2012","_crypto_stream_salsa2012_keybytes","_crypto_stream_salsa2012_keygen","_crypto_stream_salsa2012_messagebytes_max","_crypto_stream_salsa2012_noncebytes","_crypto_stream_salsa2012_xor","_crypto_stream_salsa208","_crypto_stream_salsa208_keybytes","_crypto_stream_salsa208_keygen","_crypto_stream_salsa208_messagebytes_max","_crypto_stream_salsa208_noncebytes","_crypto_stream_salsa208_xor","_crypto_stream_salsa20_keybytes","_crypto_stream_salsa20_keygen","_crypto_stream_salsa20_messagebytes_max","_crypto_stream_salsa20_noncebytes","_crypto_stream_salsa20_xor","_crypto_stream_salsa20_xor_ic","_crypto_stream_xchacha20","_crypto_stream_xchacha20_keybytes","_crypto_stream_xchacha20_keygen","_crypto_stream_xchacha20_messagebytes_max","_crypto_stream_xchacha20_noncebytes","_crypto_stream_xchacha20_xor","_crypto_stream_xchacha20_xor_ic","_crypto_stream_xor","_crypto_stream_xsalsa20","_crypto_stream_xsalsa20_keybytes","_crypto_stream_xsalsa20_keygen","_crypto_stream_xsalsa20_messagebytes_max","_crypto_stream_xsalsa20_noncebytes","_crypto_stream_xsalsa20_xor","_crypto_stream_xsalsa20_xor_ic","_crypto_verify_16","_crypto_verify_16_bytes","_crypto_verify_32","_crypto_verify_32_bytes","_crypto_verify_64","_crypto_verify_64_bytes","_randombytes","_randombytes_buf","_randombytes_buf_deterministic","_randombytes_close","_randombytes_implementation_name","_randombytes_random","_randombytes_seedbytes","_randombytes_stir","_randombytes_uniform","_sodium_base642bin","_sodium_base64_encoded_len","_sodium_bin2base64","_sodium_bin2hex","_sodium_hex2bin","_sodium_init","_sodium_library_minimal","_sodium_library_version_major","_sodium_library_version_minor","_sodium_pad","_sodium_unpad","_sodium_version_string"]'
+export EXPORTED_FUNCTIONS_SUMO='["_malloc","_free","_crypto_aead_aegis128l_abytes","_crypto_aead_aegis128l_decrypt","_crypto_aead_aegis128l_decrypt_detached","_crypto_aead_aegis128l_encrypt","_crypto_aead_aegis128l_encrypt_detached","_crypto_aead_aegis128l_keybytes","_crypto_aead_aegis128l_keygen","_crypto_aead_aegis128l_messagebytes_max","_crypto_aead_aegis128l_npubbytes","_crypto_aead_aegis128l_nsecbytes","_crypto_aead_aegis256_abytes","_crypto_aead_aegis256_decrypt","_crypto_aead_aegis256_decrypt_detached","_crypto_aead_aegis256_encrypt","_crypto_aead_aegis256_encrypt_detached","_crypto_aead_aegis256_keybytes","_crypto_aead_aegis256_keygen","_crypto_aead_aegis256_messagebytes_max","_crypto_aead_aegis256_npubbytes","_crypto_aead_aegis256_nsecbytes","_crypto_aead_chacha20poly1305_abytes","_crypto_aead_chacha20poly1305_decrypt","_crypto_aead_chacha20poly1305_decrypt_detached","_crypto_aead_chacha20poly1305_encrypt","_crypto_aead_chacha20poly1305_encrypt_detached","_crypto_aead_chacha20poly1305_ietf_abytes","_crypto_aead_chacha20poly1305_ietf_decrypt","_crypto_aead_chacha20poly1305_ietf_decrypt_detached","_crypto_aead_chacha20poly1305_ietf_encrypt","_crypto_aead_chacha20poly1305_ietf_encrypt_detached","_crypto_aead_chacha20poly1305_ietf_keybytes","_crypto_aead_chacha20poly1305_ietf_keygen","_crypto_aead_chacha20poly1305_ietf_messagebytes_max","_crypto_aead_chacha20poly1305_ietf_npubbytes","_crypto_aead_chacha20poly1305_ietf_nsecbytes","_crypto_aead_chacha20poly1305_keybytes","_crypto_aead_chacha20poly1305_keygen","_crypto_aead_chacha20poly1305_messagebytes_max","_crypto_aead_chacha20poly1305_npubbytes","_crypto_aead_chacha20poly1305_nsecbytes","_crypto_aead_xchacha20poly1305_ietf_abytes","_crypto_aead_xchacha20poly1305_ietf_decrypt","_crypto_aead_xchacha20poly1305_ietf_decrypt_detached","_crypto_aead_xchacha20poly1305_ietf_encrypt","_crypto_aead_xchacha20poly1305_ietf_encrypt_detached","_crypto_aead_xchacha20poly1305_ietf_keybytes","_crypto_aead_xchacha20poly1305_ietf_keygen","_crypto_aead_xchacha20poly1305_ietf_messagebytes_max","_crypto_aead_xchacha20poly1305_ietf_npubbytes","_crypto_aead_xchacha20poly1305_ietf_nsecbytes","_crypto_auth","_crypto_auth_bytes","_crypto_auth_hmacsha256","_crypto_auth_hmacsha256_bytes","_crypto_auth_hmacsha256_final","_crypto_auth_hmacsha256_init","_crypto_auth_hmacsha256_keybytes","_crypto_auth_hmacsha256_keygen","_crypto_auth_hmacsha256_statebytes","_crypto_auth_hmacsha256_update","_crypto_auth_hmacsha256_verify","_crypto_auth_hmacsha512","_crypto_auth_hmacsha512256","_crypto_auth_hmacsha512256_bytes","_crypto_auth_hmacsha512256_final","_crypto_auth_hmacsha512256_init","_crypto_auth_hmacsha512256_keybytes","_crypto_auth_hmacsha512256_keygen","_crypto_auth_hmacsha512256_statebytes","_crypto_auth_hmacsha512256_update","_crypto_auth_hmacsha512256_verify","_crypto_auth_hmacsha512_bytes","_crypto_auth_hmacsha512_final","_crypto_auth_hmacsha512_init","_crypto_auth_hmacsha512_keybytes","_crypto_auth_hmacsha512_keygen","_crypto_auth_hmacsha512_statebytes","_crypto_auth_hmacsha512_update","_crypto_auth_hmacsha512_verify","_crypto_auth_keybytes","_crypto_auth_keygen","_crypto_auth_primitive","_crypto_auth_verify","_crypto_box","_crypto_box_afternm","_crypto_box_beforenm","_crypto_box_beforenmbytes","_crypto_box_boxzerobytes","_crypto_box_curve25519xchacha20poly1305_beforenm","_crypto_box_curve25519xchacha20poly1305_beforenmbytes","_crypto_box_curve25519xchacha20poly1305_detached","_crypto_box_curve25519xchacha20poly1305_detached_afternm","_crypto_box_curve25519xchacha20poly1305_easy","_crypto_box_curve25519xchacha20poly1305_easy_afternm","_crypto_box_curve25519xchacha20poly1305_keypair","_crypto_box_curve25519xchacha20poly1305_macbytes","_crypto_box_curve25519xchacha20poly1305_messagebytes_max","_crypto_box_curve25519xchacha20poly1305_noncebytes","_crypto_box_curve25519xchacha20poly1305_open_detached","_crypto_box_curve25519xchacha20poly1305_open_detached_afternm","_crypto_box_curve25519xchacha20poly1305_open_easy","_crypto_box_curve25519xchacha20poly1305_open_easy_afternm","_crypto_box_curve25519xchacha20poly1305_publickeybytes","_crypto_box_curve25519xchacha20poly1305_seal","_crypto_box_curve25519xchacha20poly1305_seal_open","_crypto_box_curve25519xchacha20poly1305_sealbytes","_crypto_box_curve25519xchacha20poly1305_secretkeybytes","_crypto_box_curve25519xchacha20poly1305_seed_keypair","_crypto_box_curve25519xchacha20poly1305_seedbytes","_crypto_box_curve25519xsalsa20poly1305","_crypto_box_curve25519xsalsa20poly1305_afternm","_crypto_box_curve25519xsalsa20poly1305_beforenm","_crypto_box_curve25519xsalsa20poly1305_beforenmbytes","_crypto_box_curve25519xsalsa20poly1305_boxzerobytes","_crypto_box_curve25519xsalsa20poly1305_keypair","_crypto_box_curve25519xsalsa20poly1305_macbytes","_crypto_box_curve25519xsalsa20poly1305_messagebytes_max","_crypto_box_curve25519xsalsa20poly1305_noncebytes","_crypto_box_curve25519xsalsa20poly1305_open","_crypto_box_curve25519xsalsa20poly1305_open_afternm","_crypto_box_curve25519xsalsa20poly1305_publickeybytes","_crypto_box_curve25519xsalsa20poly1305_secretkeybytes","_crypto_box_curve25519xsalsa20poly1305_seed_keypair","_crypto_box_curve25519xsalsa20poly1305_seedbytes","_crypto_box_curve25519xsalsa20poly1305_zerobytes","_crypto_box_detached","_crypto_box_detached_afternm","_crypto_box_easy","_crypto_box_easy_afternm","_crypto_box_keypair","_crypto_box_macbytes","_crypto_box_messagebytes_max","_crypto_box_noncebytes","_crypto_box_open","_crypto_box_open_afternm","_crypto_box_open_detached","_crypto_box_open_detached_afternm","_crypto_box_open_easy","_crypto_box_open_easy_afternm","_crypto_box_primitive","_crypto_box_publickeybytes","_crypto_box_seal","_crypto_box_seal_open","_crypto_box_sealbytes","_crypto_box_secretkeybytes","_crypto_box_seed_keypair","_crypto_box_seedbytes","_crypto_box_zerobytes","_crypto_core_ed25519_add","_crypto_core_ed25519_bytes","_crypto_core_ed25519_from_string","_crypto_core_ed25519_from_string_ro","_crypto_core_ed25519_from_uniform","_crypto_core_ed25519_hashbytes","_crypto_core_ed25519_is_valid_point","_crypto_core_ed25519_nonreducedscalarbytes","_crypto_core_ed25519_random","_crypto_core_ed25519_scalar_add","_crypto_core_ed25519_scalar_complement","_crypto_core_ed25519_scalar_invert","_crypto_core_ed25519_scalar_is_canonical","_crypto_core_ed25519_scalar_mul","_crypto_core_ed25519_scalar_negate","_crypto_core_ed25519_scalar_random","_crypto_core_ed25519_scalar_reduce","_crypto_core_ed25519_scalar_sub","_crypto_core_ed25519_scalarbytes","_crypto_core_ed25519_sub","_crypto_core_ed25519_uniformbytes","_crypto_core_hchacha20","_crypto_core_hchacha20_constbytes","_crypto_core_hchacha20_inputbytes","_crypto_core_hchacha20_keybytes","_crypto_core_hchacha20_outputbytes","_crypto_core_hsalsa20","_crypto_core_hsalsa20_constbytes","_crypto_core_hsalsa20_inputbytes","_crypto_core_hsalsa20_keybytes","_crypto_core_hsalsa20_outputbytes","_crypto_core_ristretto255_add","_crypto_core_ristretto255_bytes","_crypto_core_ristretto255_from_hash","_crypto_core_ristretto255_from_string","_crypto_core_ristretto255_from_string_ro","_crypto_core_ristretto255_hashbytes","_crypto_core_ristretto255_is_valid_point","_crypto_core_ristretto255_nonreducedscalarbytes","_crypto_core_ristretto255_random","_crypto_core_ristretto255_scalar_add","_crypto_core_ristretto255_scalar_complement","_crypto_core_ristretto255_scalar_invert","_crypto_core_ristretto255_scalar_is_canonical","_crypto_core_ristretto255_scalar_mul","_crypto_core_ristretto255_scalar_negate","_crypto_core_ristretto255_scalar_random","_crypto_core_ristretto255_scalar_reduce","_crypto_core_ristretto255_scalar_sub","_crypto_core_ristretto255_scalarbytes","_crypto_core_ristretto255_sub","_crypto_core_salsa20","_crypto_core_salsa2012","_crypto_core_salsa2012_constbytes","_crypto_core_salsa2012_inputbytes","_crypto_core_salsa2012_keybytes","_crypto_core_salsa2012_outputbytes","_crypto_core_salsa208","_crypto_core_salsa208_constbytes","_crypto_core_salsa208_inputbytes","_crypto_core_salsa208_keybytes","_crypto_core_salsa208_outputbytes","_crypto_core_salsa20_constbytes","_crypto_core_salsa20_inputbytes","_crypto_core_salsa20_keybytes","_crypto_core_salsa20_outputbytes","_crypto_generichash","_crypto_generichash_blake2b","_crypto_generichash_blake2b_bytes","_crypto_generichash_blake2b_bytes_max","_crypto_generichash_blake2b_bytes_min","_crypto_generichash_blake2b_final","_crypto_generichash_blake2b_init","_crypto_generichash_blake2b_init_salt_personal","_crypto_generichash_blake2b_keybytes","_crypto_generichash_blake2b_keybytes_max","_crypto_generichash_blake2b_keybytes_min","_crypto_generichash_blake2b_keygen","_crypto_generichash_blake2b_personalbytes","_crypto_generichash_blake2b_salt_personal","_crypto_generichash_blake2b_saltbytes","_crypto_generichash_blake2b_statebytes","_crypto_generichash_blake2b_update","_crypto_generichash_bytes","_crypto_generichash_bytes_max","_crypto_generichash_bytes_min","_crypto_generichash_final","_crypto_generichash_init","_crypto_generichash_keybytes","_crypto_generichash_keybytes_max","_crypto_generichash_keybytes_min","_crypto_generichash_keygen","_crypto_generichash_primitive","_crypto_generichash_statebytes","_crypto_generichash_update","_crypto_hash","_crypto_hash_bytes","_crypto_hash_primitive","_crypto_hash_sha256","_crypto_hash_sha256_bytes","_crypto_hash_sha256_final","_crypto_hash_sha256_init","_crypto_hash_sha256_statebytes","_crypto_hash_sha256_update","_crypto_hash_sha512","_crypto_hash_sha512_bytes","_crypto_hash_sha512_final","_crypto_hash_sha512_init","_crypto_hash_sha512_statebytes","_crypto_hash_sha512_update","_crypto_kdf_blake2b_bytes_max","_crypto_kdf_blake2b_bytes_min","_crypto_kdf_blake2b_contextbytes","_crypto_kdf_blake2b_derive_from_key","_crypto_kdf_blake2b_keybytes","_crypto_kdf_bytes_max","_crypto_kdf_bytes_min","_crypto_kdf_contextbytes","_crypto_kdf_derive_from_key","_crypto_kdf_hkdf_sha256_bytes_max","_crypto_kdf_hkdf_sha256_bytes_min","_crypto_kdf_hkdf_sha256_expand","_crypto_kdf_hkdf_sha256_extract","_crypto_kdf_hkdf_sha256_keybytes","_crypto_kdf_hkdf_sha256_keygen","_crypto_kdf_hkdf_sha512_bytes_max","_crypto_kdf_hkdf_sha512_bytes_min","_crypto_kdf_hkdf_sha512_expand","_crypto_kdf_hkdf_sha512_extract","_crypto_kdf_hkdf_sha512_keybytes","_crypto_kdf_hkdf_sha512_keygen","_crypto_kdf_keybytes","_crypto_kdf_keygen","_crypto_kdf_primitive","_crypto_kx_client_session_keys","_crypto_kx_keypair","_crypto_kx_primitive","_crypto_kx_publickeybytes","_crypto_kx_secretkeybytes","_crypto_kx_seed_keypair","_crypto_kx_seedbytes","_crypto_kx_server_session_keys","_crypto_kx_sessionkeybytes","_crypto_onetimeauth","_crypto_onetimeauth_bytes","_crypto_onetimeauth_final","_crypto_onetimeauth_init","_crypto_onetimeauth_keybytes","_crypto_onetimeauth_keygen","_crypto_onetimeauth_poly1305","_crypto_onetimeauth_poly1305_bytes","_crypto_onetimeauth_poly1305_final","_crypto_onetimeauth_poly1305_init","_crypto_onetimeauth_poly1305_keybytes","_crypto_onetimeauth_poly1305_keygen","_crypto_onetimeauth_poly1305_statebytes","_crypto_onetimeauth_poly1305_update","_crypto_onetimeauth_poly1305_verify","_crypto_onetimeauth_primitive","_crypto_onetimeauth_statebytes","_crypto_onetimeauth_update","_crypto_onetimeauth_verify","_crypto_pwhash","_crypto_pwhash_alg_argon2i13","_crypto_pwhash_alg_argon2id13","_crypto_pwhash_alg_default","_crypto_pwhash_argon2i","_crypto_pwhash_argon2i_alg_argon2i13","_crypto_pwhash_argon2i_bytes_max","_crypto_pwhash_argon2i_bytes_min","_crypto_pwhash_argon2i_memlimit_interactive","_crypto_pwhash_argon2i_memlimit_max","_crypto_pwhash_argon2i_memlimit_min","_crypto_pwhash_argon2i_memlimit_moderate","_crypto_pwhash_argon2i_memlimit_sensitive","_crypto_pwhash_argon2i_opslimit_interactive","_crypto_pwhash_argon2i_opslimit_max","_crypto_pwhash_argon2i_opslimit_min","_crypto_pwhash_argon2i_opslimit_moderate","_crypto_pwhash_argon2i_opslimit_sensitive","_crypto_pwhash_argon2i_passwd_max","_crypto_pwhash_argon2i_passwd_min","_crypto_pwhash_argon2i_saltbytes","_crypto_pwhash_argon2i_str","_crypto_pwhash_argon2i_str_needs_rehash","_crypto_pwhash_argon2i_str_verify","_crypto_pwhash_argon2i_strbytes","_crypto_pwhash_argon2i_strprefix","_crypto_pwhash_argon2id","_crypto_pwhash_argon2id_alg_argon2id13","_crypto_pwhash_argon2id_bytes_max","_crypto_pwhash_argon2id_bytes_min","_crypto_pwhash_argon2id_memlimit_interactive","_crypto_pwhash_argon2id_memlimit_max","_crypto_pwhash_argon2id_memlimit_min","_crypto_pwhash_argon2id_memlimit_moderate","_crypto_pwhash_argon2id_memlimit_sensitive","_crypto_pwhash_argon2id_opslimit_interactive","_crypto_pwhash_argon2id_opslimit_max","_crypto_pwhash_argon2id_opslimit_min","_crypto_pwhash_argon2id_opslimit_moderate","_crypto_pwhash_argon2id_opslimit_sensitive","_crypto_pwhash_argon2id_passwd_max","_crypto_pwhash_argon2id_passwd_min","_crypto_pwhash_argon2id_saltbytes","_crypto_pwhash_argon2id_str","_crypto_pwhash_argon2id_str_needs_rehash","_crypto_pwhash_argon2id_str_verify","_crypto_pwhash_argon2id_strbytes","_crypto_pwhash_argon2id_strprefix","_crypto_pwhash_bytes_max","_crypto_pwhash_bytes_min","_crypto_pwhash_memlimit_interactive","_crypto_pwhash_memlimit_max","_crypto_pwhash_memlimit_min","_crypto_pwhash_memlimit_moderate","_crypto_pwhash_memlimit_sensitive","_crypto_pwhash_opslimit_interactive","_crypto_pwhash_opslimit_max","_crypto_pwhash_opslimit_min","_crypto_pwhash_opslimit_moderate","_crypto_pwhash_opslimit_sensitive","_crypto_pwhash_passwd_max","_crypto_pwhash_passwd_min","_crypto_pwhash_primitive","_crypto_pwhash_saltbytes","_crypto_pwhash_scryptsalsa208sha256","_crypto_pwhash_scryptsalsa208sha256_bytes_max","_crypto_pwhash_scryptsalsa208sha256_bytes_min","_crypto_pwhash_scryptsalsa208sha256_ll","_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive","_crypto_pwhash_scryptsalsa208sha256_memlimit_max","_crypto_pwhash_scryptsalsa208sha256_memlimit_min","_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive","_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive","_crypto_pwhash_scryptsalsa208sha256_opslimit_max","_crypto_pwhash_scryptsalsa208sha256_opslimit_min","_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive","_crypto_pwhash_scryptsalsa208sha256_passwd_max","_crypto_pwhash_scryptsalsa208sha256_passwd_min","_crypto_pwhash_scryptsalsa208sha256_saltbytes","_crypto_pwhash_scryptsalsa208sha256_str","_crypto_pwhash_scryptsalsa208sha256_str_needs_rehash","_crypto_pwhash_scryptsalsa208sha256_str_verify","_crypto_pwhash_scryptsalsa208sha256_strbytes","_crypto_pwhash_scryptsalsa208sha256_strprefix","_crypto_pwhash_str","_crypto_pwhash_str_alg","_crypto_pwhash_str_needs_rehash","_crypto_pwhash_str_verify","_crypto_pwhash_strbytes","_crypto_pwhash_strprefix","_crypto_scalarmult","_crypto_scalarmult_base","_crypto_scalarmult_bytes","_crypto_scalarmult_curve25519","_crypto_scalarmult_curve25519_base","_crypto_scalarmult_curve25519_bytes","_crypto_scalarmult_curve25519_scalarbytes","_crypto_scalarmult_ed25519","_crypto_scalarmult_ed25519_base","_crypto_scalarmult_ed25519_base_noclamp","_crypto_scalarmult_ed25519_bytes","_crypto_scalarmult_ed25519_noclamp","_crypto_scalarmult_ed25519_scalarbytes","_crypto_scalarmult_primitive","_crypto_scalarmult_ristretto255","_crypto_scalarmult_ristretto255_base","_crypto_scalarmult_ristretto255_bytes","_crypto_scalarmult_ristretto255_scalarbytes","_crypto_scalarmult_scalarbytes","_crypto_secretbox","_crypto_secretbox_boxzerobytes","_crypto_secretbox_detached","_crypto_secretbox_easy","_crypto_secretbox_keybytes","_crypto_secretbox_keygen","_crypto_secretbox_macbytes","_crypto_secretbox_messagebytes_max","_crypto_secretbox_noncebytes","_crypto_secretbox_open","_crypto_secretbox_open_detached","_crypto_secretbox_open_easy","_crypto_secretbox_primitive","_crypto_secretbox_xchacha20poly1305_detached","_crypto_secretbox_xchacha20poly1305_easy","_crypto_secretbox_xchacha20poly1305_keybytes","_crypto_secretbox_xchacha20poly1305_macbytes","_crypto_secretbox_xchacha20poly1305_messagebytes_max","_crypto_secretbox_xchacha20poly1305_noncebytes","_crypto_secretbox_xchacha20poly1305_open_detached","_crypto_secretbox_xchacha20poly1305_open_easy","_crypto_secretbox_xsalsa20poly1305","_crypto_secretbox_xsalsa20poly1305_boxzerobytes","_crypto_secretbox_xsalsa20poly1305_keybytes","_crypto_secretbox_xsalsa20poly1305_keygen","_crypto_secretbox_xsalsa20poly1305_macbytes","_crypto_secretbox_xsalsa20poly1305_messagebytes_max","_crypto_secretbox_xsalsa20poly1305_noncebytes","_crypto_secretbox_xsalsa20poly1305_open","_crypto_secretbox_xsalsa20poly1305_zerobytes","_crypto_secretbox_zerobytes","_crypto_secretstream_xchacha20poly1305_abytes","_crypto_secretstream_xchacha20poly1305_headerbytes","_crypto_secretstream_xchacha20poly1305_init_pull","_crypto_secretstream_xchacha20poly1305_init_push","_crypto_secretstream_xchacha20poly1305_keybytes","_crypto_secretstream_xchacha20poly1305_keygen","_crypto_secretstream_xchacha20poly1305_messagebytes_max","_crypto_secretstream_xchacha20poly1305_pull","_crypto_secretstream_xchacha20poly1305_push","_crypto_secretstream_xchacha20poly1305_rekey","_crypto_secretstream_xchacha20poly1305_statebytes","_crypto_secretstream_xchacha20poly1305_tag_final","_crypto_secretstream_xchacha20poly1305_tag_message","_crypto_secretstream_xchacha20poly1305_tag_push","_crypto_secretstream_xchacha20poly1305_tag_rekey","_crypto_shorthash","_crypto_shorthash_bytes","_crypto_shorthash_keybytes","_crypto_shorthash_keygen","_crypto_shorthash_primitive","_crypto_shorthash_siphash24","_crypto_shorthash_siphash24_bytes","_crypto_shorthash_siphash24_keybytes","_crypto_shorthash_siphashx24","_crypto_shorthash_siphashx24_bytes","_crypto_shorthash_siphashx24_keybytes","_crypto_sign","_crypto_sign_bytes","_crypto_sign_detached","_crypto_sign_ed25519","_crypto_sign_ed25519_bytes","_crypto_sign_ed25519_detached","_crypto_sign_ed25519_keypair","_crypto_sign_ed25519_messagebytes_max","_crypto_sign_ed25519_open","_crypto_sign_ed25519_pk_to_curve25519","_crypto_sign_ed25519_publickeybytes","_crypto_sign_ed25519_secretkeybytes","_crypto_sign_ed25519_seed_keypair","_crypto_sign_ed25519_seedbytes","_crypto_sign_ed25519_sk_to_curve25519","_crypto_sign_ed25519_sk_to_pk","_crypto_sign_ed25519_sk_to_seed","_crypto_sign_ed25519_verify_detached","_crypto_sign_ed25519ph_final_create","_crypto_sign_ed25519ph_final_verify","_crypto_sign_ed25519ph_init","_crypto_sign_ed25519ph_statebytes","_crypto_sign_ed25519ph_update","_crypto_sign_final_create","_crypto_sign_final_verify","_crypto_sign_init","_crypto_sign_keypair","_crypto_sign_messagebytes_max","_crypto_sign_open","_crypto_sign_primitive","_crypto_sign_publickeybytes","_crypto_sign_secretkeybytes","_crypto_sign_seed_keypair","_crypto_sign_seedbytes","_crypto_sign_statebytes","_crypto_sign_update","_crypto_sign_verify_detached","_crypto_stream","_crypto_stream_chacha20","_crypto_stream_chacha20_ietf","_crypto_stream_chacha20_ietf_keybytes","_crypto_stream_chacha20_ietf_keygen","_crypto_stream_chacha20_ietf_messagebytes_max","_crypto_stream_chacha20_ietf_noncebytes","_crypto_stream_chacha20_ietf_xor","_crypto_stream_chacha20_ietf_xor_ic","_crypto_stream_chacha20_keybytes","_crypto_stream_chacha20_keygen","_crypto_stream_chacha20_messagebytes_max","_crypto_stream_chacha20_noncebytes","_crypto_stream_chacha20_xor","_crypto_stream_chacha20_xor_ic","_crypto_stream_keybytes","_crypto_stream_keygen","_crypto_stream_messagebytes_max","_crypto_stream_noncebytes","_crypto_stream_primitive","_crypto_stream_salsa20","_crypto_stream_salsa2012","_crypto_stream_salsa2012_keybytes","_crypto_stream_salsa2012_keygen","_crypto_stream_salsa2012_messagebytes_max","_crypto_stream_salsa2012_noncebytes","_crypto_stream_salsa2012_xor","_crypto_stream_salsa208","_crypto_stream_salsa208_keybytes","_crypto_stream_salsa208_keygen","_crypto_stream_salsa208_messagebytes_max","_crypto_stream_salsa208_noncebytes","_crypto_stream_salsa208_xor","_crypto_stream_salsa20_keybytes","_crypto_stream_salsa20_keygen","_crypto_stream_salsa20_messagebytes_max","_crypto_stream_salsa20_noncebytes","_crypto_stream_salsa20_xor","_crypto_stream_salsa20_xor_ic","_crypto_stream_xchacha20","_crypto_stream_xchacha20_keybytes","_crypto_stream_xchacha20_keygen","_crypto_stream_xchacha20_messagebytes_max","_crypto_stream_xchacha20_noncebytes","_crypto_stream_xchacha20_xor","_crypto_stream_xchacha20_xor_ic","_crypto_stream_xor","_crypto_stream_xsalsa20","_crypto_stream_xsalsa20_keybytes","_crypto_stream_xsalsa20_keygen","_crypto_stream_xsalsa20_messagebytes_max","_crypto_stream_xsalsa20_noncebytes","_crypto_stream_xsalsa20_xor","_crypto_stream_xsalsa20_xor_ic","_crypto_verify_16","_crypto_verify_16_bytes","_crypto_verify_32","_crypto_verify_32_bytes","_crypto_verify_64","_crypto_verify_64_bytes","_randombytes","_randombytes_buf","_randombytes_buf_deterministic","_randombytes_close","_randombytes_implementation_name","_randombytes_random","_randombytes_seedbytes","_randombytes_stir","_randombytes_uniform","_sodium_base642bin","_sodium_base64_encoded_len","_sodium_bin2base64","_sodium_bin2hex","_sodium_hex2bin","_sodium_init","_sodium_library_minimal","_sodium_library_version_major","_sodium_library_version_minor","_sodium_pad","_sodium_unpad","_sodium_version_string"]'
export EXPORTED_RUNTIME_METHODS='["UTF8ToString","getValue","setValue"]'
export MAX_MEMORY=16777216
export MAX_MEMORY_SUMO=16777216
diff --git a/libsodium.vcxproj b/libsodium.vcxproj
index 4e7c20f2..c7d79c18 100644
--- a/libsodium.vcxproj
+++ b/libsodium.vcxproj
@@ -418,6 +418,7 @@
+
@@ -566,6 +567,10 @@
+
+
+
+
diff --git a/libsodium.vcxproj.filters b/libsodium.vcxproj.filters
index ae641960..f3537044 100644
--- a/libsodium.vcxproj.filters
+++ b/libsodium.vcxproj.filters
@@ -324,6 +324,9 @@
Source Files
+
+ Source Files
+
Source Files
@@ -764,6 +767,18 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
Header Files
diff --git a/src/libsodium/Makefile.am b/src/libsodium/Makefile.am
index dc839823..b892b92a 100644
--- a/src/libsodium/Makefile.am
+++ b/src/libsodium/Makefile.am
@@ -7,6 +7,9 @@ libsodium_la_SOURCES = \
crypto_aead/aegis128l/soft/aead_aegis128l_soft.c \
crypto_aead/aegis128l/soft/aead_aegis128l_soft.h \
crypto_aead/aegis256/aead_aegis256.c \
+ crypto_aead/aegis256/aead_aegis256.h \
+ crypto_aead/aegis256/soft/aead_aegis256_soft.c \
+ crypto_aead/aegis256/soft/aead_aegis256_soft.h \
crypto_aead/aes256gcm/aead_aes256gcm.c \
crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c \
crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c \
@@ -231,6 +234,7 @@ libarmcrypto_la_SOURCES = \
crypto_aead/aegis128l/armcrypto/aead_aegis128l_armcrypto.c \
crypto_aead/aegis128l/armcrypto/aead_aegis128l_armcrypto.h \
crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.c \
+ crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.h \
crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
libaesni_la_LDFLAGS = $(libsodium_la_LDFLAGS)
@@ -240,6 +244,7 @@ libaesni_la_SOURCES = \
crypto_aead/aegis128l/aesni/aead_aegis128l_aesni.c \
crypto_aead/aegis128l/aesni/aead_aegis128l_aesni.h \
crypto_aead/aegis256/aesni/aead_aegis256_aesni.c \
+ crypto_aead/aegis256/aesni/aead_aegis256_aesni.h \
crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
libsse2_la_LDFLAGS = $(libsodium_la_LDFLAGS)
diff --git a/src/libsodium/crypto_aead/aegis128l/aesni/aead_aegis128l_aesni.c b/src/libsodium/crypto_aead/aegis128l/aesni/aead_aegis128l_aesni.c
index cb69a91e..48b7586f 100644
--- a/src/libsodium/crypto_aead/aegis128l/aesni/aead_aegis128l_aesni.c
+++ b/src/libsodium/crypto_aead/aegis128l/aesni/aead_aegis128l_aesni.c
@@ -1,12 +1,9 @@
-/*
- * AEGIS-128l based on https://bench.cr.yp.to/supercop/supercop-20200409.tar.xz
- */
-
#include
#include
#include
#include "core.h"
+#include "crypto_aead_aegis128l.h"
#include "crypto_verify_16.h"
#include "export.h"
#include "randombytes.h"
@@ -271,4 +268,5 @@ struct crypto_aead_aegis128l_implementation crypto_aead_aegis128l_aesni_implemen
SODIUM_C99(.encrypt_detached =) aegis128l_encrypt_detached,
SODIUM_C99(.decrypt_detached =) aegis128l_decrypt_detached
};
+
#endif
diff --git a/src/libsodium/crypto_aead/aegis128l/armcrypto/aead_aegis128l_armcrypto.c b/src/libsodium/crypto_aead/aegis128l/armcrypto/aead_aegis128l_armcrypto.c
index 98ec55ac..22577da6 100644
--- a/src/libsodium/crypto_aead/aegis128l/armcrypto/aead_aegis128l_armcrypto.c
+++ b/src/libsodium/crypto_aead/aegis128l/armcrypto/aead_aegis128l_armcrypto.c
@@ -259,4 +259,5 @@ struct crypto_aead_aegis128l_implementation crypto_aead_aegis128l_armcrypto_impl
SODIUM_C99(.encrypt_detached =) aegis128l_encrypt_detached,
SODIUM_C99(.decrypt_detached =) aegis128l_decrypt_detached
};
+
#endif
diff --git a/src/libsodium/crypto_aead/aegis256/aead_aegis256.c b/src/libsodium/crypto_aead/aegis256/aead_aegis256.c
index 6ba2f5d4..788ade41 100644
--- a/src/libsodium/crypto_aead/aegis256/aead_aegis256.c
+++ b/src/libsodium/crypto_aead/aegis256/aead_aegis256.c
@@ -2,9 +2,27 @@
#include
#include
+#include "core.h"
#include "crypto_aead_aegis256.h"
#include "private/common.h"
+#include "private/implementations.h"
#include "randombytes.h"
+#include "runtime.h"
+
+#include "aead_aegis256.h"
+
+#include "soft/aead_aegis256_soft.h"
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+#include "armcrypto/aead_aegis256_armcrypto.h"
+#endif
+
+#if defined(HAVE_TMMINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+#include "aesni/aead_aegis256_aesni.h"
+#endif
+
+static const crypto_aead_aegis256_implementation *implementation =
+ &crypto_aead_aegis256_soft_implementation;
size_t
crypto_aead_aegis256_keybytes(void)
@@ -42,42 +60,27 @@ crypto_aead_aegis256_keygen(unsigned char k[crypto_aead_aegis256_KEYBYTES])
randombytes_buf(k, crypto_aead_aegis256_KEYBYTES);
}
-#if !((defined(HAVE_TMMINTRIN_H) && defined(HAVE_WMMINTRIN_H)) || \
- (defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)))
-
-#ifndef ENOSYS
-# define ENOSYS ENXIO
-#endif
-
-int
-crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
- unsigned long long *maclen_p, const unsigned char *m,
- unsigned long long mlen, const unsigned char *ad,
- unsigned long long adlen, const unsigned char *nsec,
- const unsigned char *npub, const unsigned char *k)
-{
- errno = ENOSYS;
- return -1;
-}
-
int
crypto_aead_aegis256_encrypt(unsigned char *c, unsigned long long *clen_p, const unsigned char *m,
unsigned long long mlen, const unsigned char *ad,
unsigned long long adlen, const unsigned char *nsec,
const unsigned char *npub, const unsigned char *k)
{
- errno = ENOSYS;
- return -1;
-}
+ unsigned long long clen = 0ULL;
+ int ret;
-int
-crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
- unsigned long long clen, const unsigned char *mac,
- const unsigned char *ad, unsigned long long adlen,
- const unsigned char *npub, const unsigned char *k)
-{
- errno = ENOSYS;
- return -1;
+ if (mlen > crypto_aead_aegis256_MESSAGEBYTES_MAX) {
+ sodium_misuse();
+ }
+ ret =
+ crypto_aead_aegis256_encrypt_detached(c, c + mlen, NULL, m, mlen, ad, adlen, nsec, npub, k);
+ if (clen_p != NULL) {
+ if (ret == 0) {
+ clen = mlen + 16ULL;
+ }
+ *clen_p = clen;
+ }
+ return ret;
}
int
@@ -86,14 +89,58 @@ crypto_aead_aegis256_decrypt(unsigned char *m, unsigned long long *mlen_p, unsig
const unsigned char *ad, unsigned long long adlen,
const unsigned char *npub, const unsigned char *k)
{
- errno = ENOSYS;
- return -1;
+ unsigned long long mlen = 0ULL;
+ int ret = -1;
+
+ if (clen >= 16ULL) {
+ ret = crypto_aead_aegis256_decrypt_detached(m, nsec, c, clen - 16ULL, c + clen - 16ULL, ad,
+ adlen, npub, k);
+ }
+ if (mlen_p != NULL) {
+ if (ret == 0) {
+ mlen = clen - 16ULL;
+ }
+ *mlen_p = mlen;
+ }
+ return ret;
}
int
-crypto_aead_aegis256_is_available(void)
+crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
+ unsigned long long *maclen_p, const unsigned char *m,
+ unsigned long long mlen, const unsigned char *ad,
+ unsigned long long adlen, const unsigned char *nsec,
+ const unsigned char *npub, const unsigned char *k)
{
- return 0;
+ return implementation->encrypt_detached(c, mac, maclen_p, m, mlen, ad, adlen, nsec, npub, k);
}
+int
+crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
+ unsigned long long clen, const unsigned char *mac,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub, const unsigned char *k)
+{
+ return implementation->decrypt_detached(m, nsec, c, clen, mac, ad, adlen, npub, k);
+}
+
+int
+_crypto_aead_aegis256_pick_best_implementation(void)
+{
+ implementation = &crypto_aead_aegis256_soft_implementation;
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+ if (sodium_runtime_has_armcrypto()) {
+ implementation = &crypto_aead_aegis256_armcrypto_implementation;
+ return 0;
+ }
#endif
+
+#if defined(HAVE_TMMINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+ if (sodium_runtime_has_aesni()) {
+ implementation = &crypto_aead_aegis256_aesni_implementation;
+ return 0;
+ }
+#endif
+ return 0; /* LCOV_EXCL_LINE */
+}
diff --git a/src/libsodium/crypto_aead/aegis256/aead_aegis256.h b/src/libsodium/crypto_aead/aegis256/aead_aegis256.h
new file mode 100644
index 00000000..9e7784b0
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aead_aegis256.h
@@ -0,0 +1,16 @@
+#ifndef aead_aegis256_H
+#define aead_aegis256_H
+
+typedef struct crypto_aead_aegis256_implementation {
+ int (*encrypt_detached)(unsigned char *c, unsigned char *mac, unsigned long long *maclen_p,
+ const unsigned char *m, unsigned long long mlen,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *nsec, const unsigned char *npub,
+ const unsigned char *k);
+ int (*decrypt_detached)(unsigned char *m, unsigned char *nsec, const unsigned char *c,
+ unsigned long long clen, const unsigned char *mac,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub, const unsigned char *k);
+} crypto_aead_aegis256_implementation;
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.c b/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.c
index 3501b66d..f8dfe46e 100644
--- a/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.c
+++ b/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.c
@@ -1,7 +1,3 @@
-/*
- * AEGIS-256 based on https://bench.cr.yp.to/supercop/supercop-20190816.tar.xz
- */
-
#include
#include
#include
@@ -16,6 +12,8 @@
#include "private/common.h"
+#include "aead_aegis256_aesni.h"
+
#if defined(HAVE_TMMINTRIN_H) && defined(HAVE_WMMINTRIN_H)
#ifdef __GNUC__
@@ -36,7 +34,7 @@ typedef __m128i aes_block_t;
#define AES_ENC(A, B) _mm_aesenc_si128((A), (B))
static inline void
-crypto_aead_aegis256_update(aes_block_t *const state, const aes_block_t data)
+aegis256_update(aes_block_t *const state, const aes_block_t data)
{
aes_block_t tmp;
@@ -50,8 +48,7 @@ crypto_aead_aegis256_update(aes_block_t *const state, const aes_block_t data)
}
static void
-crypto_aead_aegis256_init(const unsigned char *key, const unsigned char *nonce,
- aes_block_t *const state)
+aegis256_init(const unsigned char *key, const unsigned char *nonce, aes_block_t *const state)
{
static CRYPTO_ALIGN(16)
const uint8_t c0_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1,
@@ -78,16 +75,16 @@ crypto_aead_aegis256_init(const unsigned char *key, const unsigned char *nonce,
state[5] = AES_BLOCK_XOR(k2, c0);
for (i = 0; i < 4; i++) {
- crypto_aead_aegis256_update(state, k1);
- crypto_aead_aegis256_update(state, k2);
- crypto_aead_aegis256_update(state, kxn1);
- crypto_aead_aegis256_update(state, kxn2);
+ aegis256_update(state, k1);
+ aegis256_update(state, k2);
+ aegis256_update(state, kxn1);
+ aegis256_update(state, kxn2);
}
}
static void
-crypto_aead_aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned long long mlen,
- aes_block_t *const state)
+aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned long long mlen,
+ aes_block_t *const state)
{
aes_block_t tmp;
int i;
@@ -96,7 +93,7 @@ crypto_aead_aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned
tmp = AES_BLOCK_XOR(tmp, state[3]);
for (i = 0; i < 7; i++) {
- crypto_aead_aegis256_update(state, tmp);
+ aegis256_update(state, tmp);
}
tmp = AES_BLOCK_XOR(state[5], state[4]);
@@ -109,17 +106,16 @@ crypto_aead_aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned
}
static inline void
-crypto_aead_aegis256_absorb(const unsigned char *const src, aes_block_t *const state)
+aegis256_absorb(const unsigned char *const src, aes_block_t *const state)
{
aes_block_t msg;
msg = AES_BLOCK_LOAD(src);
- crypto_aead_aegis256_update(state, msg);
+ aegis256_update(state, msg);
}
static void
-crypto_aead_aegis256_enc(unsigned char *const dst, const unsigned char *const src,
- aes_block_t *const state)
+aegis256_enc(unsigned char *const dst, const unsigned char *const src, aes_block_t *const state)
{
aes_block_t msg;
aes_block_t tmp;
@@ -131,12 +127,11 @@ crypto_aead_aegis256_enc(unsigned char *const dst, const unsigned char *const sr
tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_AND(state[2], state[3]));
AES_BLOCK_STORE((aes_block_t *) (void *) dst, tmp);
- crypto_aead_aegis256_update(state, msg);
+ aegis256_update(state, msg);
}
static void
-crypto_aead_aegis256_dec(unsigned char *const dst, const unsigned char *const src,
- aes_block_t *const state)
+aegis256_dec(unsigned char *const dst, const unsigned char *const src, aes_block_t *const state)
{
aes_block_t msg;
@@ -147,15 +142,14 @@ crypto_aead_aegis256_dec(unsigned char *const dst, const unsigned char *const sr
msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3]));
AES_BLOCK_STORE((aes_block_t *) (void *) dst, msg);
- crypto_aead_aegis256_update(state, msg);
+ aegis256_update(state, msg);
}
-int
-crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
- unsigned long long *maclen_p, const unsigned char *m,
- unsigned long long mlen, const unsigned char *ad,
- unsigned long long adlen, const unsigned char *nsec,
- const unsigned char *npub, const unsigned char *k)
+static int
+aegis256_encrypt_detached(unsigned char *c, unsigned char *mac, unsigned long long *maclen_p,
+ const unsigned char *m, unsigned long long mlen, const unsigned char *ad,
+ unsigned long long adlen, const unsigned char *nsec,
+ const unsigned char *npub, const unsigned char *k)
{
aes_block_t state[6];
CRYPTO_ALIGN(16) unsigned char src[16];
@@ -163,27 +157,27 @@ crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
unsigned long long i;
(void) nsec;
- crypto_aead_aegis256_init(k, npub, state);
+ aegis256_init(k, npub, state);
for (i = 0ULL; i + 16ULL <= adlen; i += 16ULL) {
- crypto_aead_aegis256_absorb(ad + i, state);
+ aegis256_absorb(ad + i, state);
}
if (adlen & 0xf) {
memset(src, 0, 16);
memcpy(src, ad + i, adlen & 0xf);
- crypto_aead_aegis256_absorb(src, state);
+ aegis256_absorb(src, state);
}
for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
- crypto_aead_aegis256_enc(c + i, m + i, state);
+ aegis256_enc(c + i, m + i, state);
}
if (mlen & 0xf) {
memset(src, 0, 16);
memcpy(src, m + i, mlen & 0xf);
- crypto_aead_aegis256_enc(dst, src, state);
+ aegis256_enc(dst, src, state);
memcpy(c + i, dst, mlen & 0xf);
}
- crypto_aead_aegis256_mac(mac, adlen, mlen, state);
+ aegis256_mac(mac, adlen, mlen, state);
sodium_memzero(state, sizeof state);
sodium_memzero(src, sizeof src);
sodium_memzero(dst, sizeof dst);
@@ -194,34 +188,11 @@ crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
return 0;
}
-int
-crypto_aead_aegis256_encrypt(unsigned char *c, unsigned long long *clen_p, const unsigned char *m,
- unsigned long long mlen, const unsigned char *ad,
- unsigned long long adlen, const unsigned char *nsec,
- const unsigned char *npub, const unsigned char *k)
-{
- unsigned long long clen = 0ULL;
- int ret;
-
- if (mlen > crypto_aead_aegis256_MESSAGEBYTES_MAX) {
- sodium_misuse();
- }
- ret =
- crypto_aead_aegis256_encrypt_detached(c, c + mlen, NULL, m, mlen, ad, adlen, nsec, npub, k);
- if (clen_p != NULL) {
- if (ret == 0) {
- clen = mlen + 16ULL;
- }
- *clen_p = clen;
- }
- return ret;
-}
-
-int
-crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
- unsigned long long clen, const unsigned char *mac,
- const unsigned char *ad, unsigned long long adlen,
- const unsigned char *npub, const unsigned char *k)
+static int
+aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
+ unsigned long long clen, const unsigned char *mac,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub, const unsigned char *k)
{
aes_block_t state[6];
CRYPTO_ALIGN(16) unsigned char src[16];
@@ -233,29 +204,29 @@ crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, con
(void) nsec;
mlen = clen;
- crypto_aead_aegis256_init(k, npub, state);
+ aegis256_init(k, npub, state);
for (i = 0ULL; i + 16ULL <= adlen; i += 16ULL) {
- crypto_aead_aegis256_absorb(ad + i, state);
+ aegis256_absorb(ad + i, state);
}
if (adlen & 0xf) {
memset(src, 0, 16);
memcpy(src, ad + i, adlen & 0xf);
- crypto_aead_aegis256_absorb(src, state);
+ aegis256_absorb(src, state);
}
if (m != NULL) {
for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
- crypto_aead_aegis256_dec(m + i, c + i, state);
+ aegis256_dec(m + i, c + i, state);
}
} else {
for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
- crypto_aead_aegis256_dec(dst, c + i, state);
+ aegis256_dec(dst, c + i, state);
}
}
if (mlen & 0xf) {
memset(src, 0, 16);
memcpy(src, c + i, mlen & 0xf);
- crypto_aead_aegis256_dec(dst, src, state);
+ aegis256_dec(dst, src, state);
if (m != NULL) {
memcpy(m + i, dst, mlen & 0xf);
}
@@ -264,7 +235,7 @@ crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, con
AES_BLOCK_XOR(state[0], AES_BLOCK_LOAD((const aes_block_t *) (const void *) dst));
}
- crypto_aead_aegis256_mac(computed_mac, adlen, mlen, state);
+ aegis256_mac(computed_mac, adlen, mlen, state);
sodium_memzero(state, sizeof state);
sodium_memzero(src, sizeof src);
sodium_memzero(dst, sizeof dst);
@@ -280,32 +251,9 @@ crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, con
return 0;
}
-int
-crypto_aead_aegis256_decrypt(unsigned char *m, unsigned long long *mlen_p, unsigned char *nsec,
- const unsigned char *c, unsigned long long clen,
- const unsigned char *ad, unsigned long long adlen,
- const unsigned char *npub, const unsigned char *k)
-{
- unsigned long long mlen = 0ULL;
- int ret = -1;
-
- if (clen >= 16ULL) {
- ret = crypto_aead_aegis256_decrypt_detached(m, nsec, c, clen - 16ULL, c + clen - 16ULL, ad,
- adlen, npub, k);
- }
- if (mlen_p != NULL) {
- if (ret == 0) {
- mlen = clen - 16ULL;
- }
- *mlen_p = mlen;
- }
- return ret;
-}
-
-int
-crypto_aead_aegis256_is_available(void)
-{
- return sodium_runtime_has_aesni();
-}
+struct crypto_aead_aegis256_implementation crypto_aead_aegis256_aesni_implementation = {
+ SODIUM_C99(.encrypt_detached =) aegis256_encrypt_detached,
+ SODIUM_C99(.decrypt_detached =) aegis256_decrypt_detached
+};
#endif
diff --git a/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.h b/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.h
new file mode 100644
index 00000000..c5c11c8b
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aesni/aead_aegis256_aesni.h
@@ -0,0 +1,6 @@
+#include
+
+#include "../aead_aegis256.h"
+#include "crypto_aead_aegis256.h"
+
+extern struct crypto_aead_aegis256_implementation crypto_aead_aegis256_aesni_implementation;
diff --git a/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.c b/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.c
index 0eef75da..15cdb992 100644
--- a/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.c
+++ b/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.c
@@ -12,6 +12,8 @@
#include "private/common.h"
+#include "aead_aegis256_armcrypto.h"
+
#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
# include
@@ -25,7 +27,7 @@ typedef uint8x16_t aes_block_t;
#define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B))
static inline void
-crypto_aead_aegis256_update(aes_block_t *const state, const aes_block_t data)
+aegis256_update(aes_block_t *const state, const aes_block_t data)
{
aes_block_t tmp;
@@ -39,8 +41,7 @@ crypto_aead_aegis256_update(aes_block_t *const state, const aes_block_t data)
}
static void
-crypto_aead_aegis256_init(const unsigned char *key, const unsigned char *nonce,
- aes_block_t *const state)
+aegis256_init(const unsigned char *key, const unsigned char *nonce, aes_block_t *const state)
{
static CRYPTO_ALIGN(16) const unsigned char c0_[] = {
0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42,
@@ -69,16 +70,16 @@ crypto_aead_aegis256_init(const unsigned char *key, const unsigned char *nonce,
state[5] = AES_BLOCK_XOR(k2, c0);
for (i = 0; i < 4; i++) {
- crypto_aead_aegis256_update(state, k1);
- crypto_aead_aegis256_update(state, k2);
- crypto_aead_aegis256_update(state, kxn1);
- crypto_aead_aegis256_update(state, kxn2);
+ aegis256_update(state, k1);
+ aegis256_update(state, k2);
+ aegis256_update(state, kxn1);
+ aegis256_update(state, kxn2);
}
}
static void
-crypto_aead_aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned long long mlen,
- aes_block_t *const state)
+aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned long long mlen,
+ aes_block_t *const state)
{
aes_block_t tmp;
int i;
@@ -87,7 +88,7 @@ crypto_aead_aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned
tmp = AES_BLOCK_XOR(tmp, state[3]);
for (i = 0; i < 7; i++) {
- crypto_aead_aegis256_update(state, tmp);
+ aegis256_update(state, tmp);
}
tmp = AES_BLOCK_XOR(state[5], state[4]);
@@ -100,18 +101,16 @@ crypto_aead_aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned
}
static inline void
-crypto_aead_aegis256_absorb(const unsigned char *const src, aes_block_t *const state)
+aegis256_absorb(const unsigned char *const src, aes_block_t *const state)
{
aes_block_t msg;
msg = AES_BLOCK_LOAD(src);
- crypto_aead_aegis256_update(state, msg);
+ aegis256_update(state, msg);
}
static void
-crypto_aead_aegis256_enc(unsigned char *const dst,
- const unsigned char *const src,
- aes_block_t *const state)
+aegis256_enc(unsigned char *const dst, const unsigned char *const src, aes_block_t *const state)
{
aes_block_t msg;
aes_block_t tmp;
@@ -123,13 +122,11 @@ crypto_aead_aegis256_enc(unsigned char *const dst,
tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_AND(state[2], state[3]));
AES_BLOCK_STORE(dst, tmp);
- crypto_aead_aegis256_update(state, msg);
+ aegis256_update(state, msg);
}
static void
-crypto_aead_aegis256_dec(unsigned char *const dst,
- const unsigned char *const src,
- aes_block_t *const state)
+aegis256_dec(unsigned char *const dst, const unsigned char *const src, aes_block_t *const state)
{
aes_block_t msg;
@@ -140,15 +137,14 @@ crypto_aead_aegis256_dec(unsigned char *const dst,
msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3]));
AES_BLOCK_STORE(dst, msg);
- crypto_aead_aegis256_update(state, msg);
+ aegis256_update(state, msg);
}
-int
-crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
- unsigned long long *maclen_p, const unsigned char *m,
- unsigned long long mlen, const unsigned char *ad,
- unsigned long long adlen, const unsigned char *nsec,
- const unsigned char *npub, const unsigned char *k)
+static int
+aegis256_encrypt_detached(unsigned char *c, unsigned char *mac, unsigned long long *maclen_p,
+ const unsigned char *m, unsigned long long mlen, const unsigned char *ad,
+ unsigned long long adlen, const unsigned char *nsec,
+ const unsigned char *npub, const unsigned char *k)
{
aes_block_t state[6];
CRYPTO_ALIGN(16) unsigned char src[16];
@@ -156,27 +152,27 @@ crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
unsigned long long i;
(void) nsec;
- crypto_aead_aegis256_init(k, npub, state);
+ aegis256_init(k, npub, state);
for (i = 0ULL; i + 16ULL <= adlen; i += 16ULL) {
- crypto_aead_aegis256_absorb(ad + i, state);
+ aegis256_absorb(ad + i, state);
}
if (adlen & 0xf) {
memset(src, 0, 16);
memcpy(src, ad + i, adlen & 0xf);
- crypto_aead_aegis256_absorb(src, state);
+ aegis256_absorb(src, state);
}
for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
- crypto_aead_aegis256_enc(c + i, m + i, state);
+ aegis256_enc(c + i, m + i, state);
}
if (mlen & 0xf) {
memset(src, 0, 16);
memcpy(src, m + i, mlen & 0xf);
- crypto_aead_aegis256_enc(dst, src, state);
+ aegis256_enc(dst, src, state);
memcpy(c + i, dst, mlen & 0xf);
}
- crypto_aead_aegis256_mac(mac, adlen, mlen, state);
+ aegis256_mac(mac, adlen, mlen, state);
sodium_memzero(state, sizeof state);
sodium_memzero(src, sizeof src);
sodium_memzero(dst, sizeof dst);
@@ -187,34 +183,11 @@ crypto_aead_aegis256_encrypt_detached(unsigned char *c, unsigned char *mac,
return 0;
}
-int
-crypto_aead_aegis256_encrypt(unsigned char *c, unsigned long long *clen_p, const unsigned char *m,
- unsigned long long mlen, const unsigned char *ad,
- unsigned long long adlen, const unsigned char *nsec,
- const unsigned char *npub, const unsigned char *k)
-{
- unsigned long long clen = 0ULL;
- int ret;
-
- if (mlen > crypto_aead_aegis256_MESSAGEBYTES_MAX) {
- sodium_misuse();
- }
- ret = crypto_aead_aegis256_encrypt_detached(c, c + mlen, NULL, m, mlen,
- ad, adlen, nsec, npub, k);
- if (clen_p != NULL) {
- if (ret == 0) {
- clen = mlen + 16ULL;
- }
- *clen_p = clen;
- }
- return ret;
-}
-
-int
-crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
- unsigned long long clen, const unsigned char *mac,
- const unsigned char *ad, unsigned long long adlen,
- const unsigned char *npub, const unsigned char *k)
+static int
+aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
+ unsigned long long clen, const unsigned char *mac,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub, const unsigned char *k)
{
aes_block_t state[6];
CRYPTO_ALIGN(16) unsigned char src[16];
@@ -226,29 +199,29 @@ crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, con
(void) nsec;
mlen = clen;
- crypto_aead_aegis256_init(k, npub, state);
+ aegis256_init(k, npub, state);
for (i = 0ULL; i + 16ULL <= adlen; i += 16ULL) {
- crypto_aead_aegis256_absorb(ad + i, state);
+ aegis256_absorb(ad + i, state);
}
if (adlen & 0xf) {
memset(src, 0, 16);
memcpy(src, ad + i, adlen & 0xf);
- crypto_aead_aegis256_absorb(src, state);
+ aegis256_absorb(src, state);
}
if (m != NULL) {
for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
- crypto_aead_aegis256_dec(m + i, c + i, state);
+ aegis256_dec(m + i, c + i, state);
}
} else {
for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
- crypto_aead_aegis256_dec(dst, c + i, state);
+ aegis256_dec(dst, c + i, state);
}
}
if (mlen & 0xf) {
memset(src, 0, 16);
memcpy(src, c + i, mlen & 0xf);
- crypto_aead_aegis256_dec(dst, src, state);
+ aegis256_dec(dst, src, state);
if (m != NULL) {
memcpy(m + i, dst, mlen & 0xf);
}
@@ -256,7 +229,7 @@ crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, con
state[0] = AES_BLOCK_XOR(state[0], AES_BLOCK_LOAD(dst));
}
- crypto_aead_aegis256_mac(computed_mac, adlen, mlen, state);
+ aegis256_mac(computed_mac, adlen, mlen, state);
sodium_memzero(state, sizeof state);
sodium_memzero(src, sizeof src);
sodium_memzero(dst, sizeof dst);
@@ -272,32 +245,9 @@ crypto_aead_aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, con
return 0;
}
-int
-crypto_aead_aegis256_decrypt(unsigned char *m, unsigned long long *mlen_p, unsigned char *nsec,
- const unsigned char *c, unsigned long long clen,
- const unsigned char *ad, unsigned long long adlen,
- const unsigned char *npub, const unsigned char *k)
-{
- unsigned long long mlen = 0ULL;
- int ret = -1;
-
- if (clen >= 16ULL) {
- ret = crypto_aead_aegis256_decrypt_detached(m, nsec, c, clen - 16ULL, c + clen - 16ULL, ad,
- adlen, npub, k);
- }
- if (mlen_p != NULL) {
- if (ret == 0) {
- mlen = clen - 16ULL;
- }
- *mlen_p = mlen;
- }
- return ret;
-}
-
-int
-crypto_aead_aegis256_is_available(void)
-{
- return sodium_runtime_has_armcrypto();
-}
+struct crypto_aead_aegis256_implementation crypto_aead_aegis256_armcrypto_implementation = {
+ SODIUM_C99(.encrypt_detached =) aegis256_encrypt_detached,
+ SODIUM_C99(.decrypt_detached =) aegis256_decrypt_detached
+};
#endif
diff --git a/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.h b/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.h
new file mode 100644
index 00000000..83b49a5f
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/armcrypto/aead_aegis256_armcrypto.h
@@ -0,0 +1,6 @@
+#include
+
+#include "../aead_aegis256.h"
+#include "crypto_aead_aegis256.h"
+
+extern struct crypto_aead_aegis256_implementation crypto_aead_aegis256_armcrypto_implementation;
diff --git a/src/libsodium/crypto_aead/aegis256/soft/aead_aegis256_soft.c b/src/libsodium/crypto_aead/aegis256/soft/aead_aegis256_soft.c
new file mode 100644
index 00000000..4b70ba07
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/soft/aead_aegis256_soft.c
@@ -0,0 +1,246 @@
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis256.h"
+#include "crypto_verify_16.h"
+#include "export.h"
+#include "randombytes.h"
+#include "runtime.h"
+#include "utils.h"
+
+#include "private/common.h"
+#include "private/softaes.h"
+
+#include "aead_aegis256_soft.h"
+
+typedef SoftAesBlock aes_block_t;
+#define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B))
+#define AES_BLOCK_AND(A, B) softaes_block_and((A), (B))
+#define AES_BLOCK_LOAD(A) softaes_block_load(A)
+#define AES_BLOCK_LOAD_64x2(A, B) softaes_block_load64x2((A), (B))
+#define AES_BLOCK_STORE(A, B) softaes_block_store((A), (B))
+#define AES_ENC(A, B) softaes_block_encrypt((A), (B))
+
+static inline void
+aegis256_update(aes_block_t *const state, const aes_block_t data)
+{
+ aes_block_t tmp;
+
+ tmp = AES_ENC(state[5], state[0]);
+ state[5] = AES_ENC(state[4], state[5]);
+ state[4] = AES_ENC(state[3], state[4]);
+ state[3] = AES_ENC(state[2], state[3]);
+ state[2] = AES_ENC(state[1], state[2]);
+ state[1] = AES_ENC(state[0], state[1]);
+ state[0] = AES_BLOCK_XOR(tmp, data);
+}
+
+static void
+aegis256_init(const unsigned char *key, const unsigned char *nonce, aes_block_t *const state)
+{
+ static CRYPTO_ALIGN(16)
+ const unsigned char c0_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1,
+ 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd };
+ static CRYPTO_ALIGN(16)
+ const unsigned char c1_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d,
+ 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 };
+ const aes_block_t c0 = AES_BLOCK_LOAD(c0_);
+ const aes_block_t c1 = AES_BLOCK_LOAD(c1_);
+ aes_block_t k1, k2;
+ aes_block_t kxn1, kxn2;
+ int i;
+
+ k1 = AES_BLOCK_LOAD(&key[0]);
+ k2 = AES_BLOCK_LOAD(&key[16]);
+ kxn1 = AES_BLOCK_XOR(k1, AES_BLOCK_LOAD(&nonce[0]));
+ kxn2 = AES_BLOCK_XOR(k2, AES_BLOCK_LOAD(&nonce[16]));
+
+ state[0] = kxn1;
+ state[1] = kxn2;
+ state[2] = c0;
+ state[3] = c1;
+ state[4] = AES_BLOCK_XOR(k1, c1);
+ state[5] = AES_BLOCK_XOR(k2, c0);
+
+ for (i = 0; i < 4; i++) {
+ aegis256_update(state, k1);
+ aegis256_update(state, k2);
+ aegis256_update(state, kxn1);
+ aegis256_update(state, kxn2);
+ }
+}
+
+static void
+aegis256_mac(unsigned char *mac, unsigned long long adlen, unsigned long long mlen,
+ aes_block_t *const state)
+{
+ aes_block_t tmp;
+ int i;
+
+ tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3);
+ tmp = AES_BLOCK_XOR(tmp, state[3]);
+
+ for (i = 0; i < 7; i++) {
+ aegis256_update(state, tmp);
+ }
+
+ tmp = AES_BLOCK_XOR(state[5], state[4]);
+ tmp = AES_BLOCK_XOR(tmp, state[3]);
+ tmp = AES_BLOCK_XOR(tmp, state[2]);
+ tmp = AES_BLOCK_XOR(tmp, state[1]);
+ tmp = AES_BLOCK_XOR(tmp, state[0]);
+
+ AES_BLOCK_STORE(mac, tmp);
+}
+
+static inline void
+aegis256_absorb(const unsigned char *const src, aes_block_t *const state)
+{
+ aes_block_t msg;
+
+ msg = AES_BLOCK_LOAD(src);
+ aegis256_update(state, msg);
+}
+
+static void
+aegis256_enc(unsigned char *const dst, const unsigned char *const src, aes_block_t *const state)
+{
+ aes_block_t msg;
+ aes_block_t tmp;
+
+ msg = AES_BLOCK_LOAD(src);
+ tmp = AES_BLOCK_XOR(msg, state[5]);
+ tmp = AES_BLOCK_XOR(tmp, state[4]);
+ tmp = AES_BLOCK_XOR(tmp, state[1]);
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_AND(state[2], state[3]));
+ AES_BLOCK_STORE(dst, tmp);
+
+ aegis256_update(state, msg);
+}
+
+static void
+aegis256_dec(unsigned char *const dst, const unsigned char *const src, aes_block_t *const state)
+{
+ aes_block_t msg;
+
+ msg = AES_BLOCK_LOAD(src);
+ msg = AES_BLOCK_XOR(msg, state[5]);
+ msg = AES_BLOCK_XOR(msg, state[4]);
+ msg = AES_BLOCK_XOR(msg, state[1]);
+ msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3]));
+ AES_BLOCK_STORE(dst, msg);
+
+ aegis256_update(state, msg);
+}
+
+static int
+aegis256_encrypt_detached(unsigned char *c, unsigned char *mac, unsigned long long *maclen_p,
+ const unsigned char *m, unsigned long long mlen, const unsigned char *ad,
+ unsigned long long adlen, const unsigned char *nsec,
+ const unsigned char *npub, const unsigned char *k)
+{
+ aes_block_t state[6];
+ CRYPTO_ALIGN(16) unsigned char src[16];
+ CRYPTO_ALIGN(16) unsigned char dst[16];
+ unsigned long long i;
+
+ (void) nsec;
+ aegis256_init(k, npub, state);
+
+ for (i = 0ULL; i + 16ULL <= adlen; i += 16ULL) {
+ aegis256_absorb(ad + i, state);
+ }
+ if (adlen & 0xf) {
+ memset(src, 0, 16);
+ memcpy(src, ad + i, adlen & 0xf);
+ aegis256_absorb(src, state);
+ }
+ for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
+ aegis256_enc(c + i, m + i, state);
+ }
+ if (mlen & 0xf) {
+ memset(src, 0, 16);
+ memcpy(src, m + i, mlen & 0xf);
+ aegis256_enc(dst, src, state);
+ memcpy(c + i, dst, mlen & 0xf);
+ }
+
+ aegis256_mac(mac, adlen, mlen, state);
+ sodium_memzero(state, sizeof state);
+ sodium_memzero(src, sizeof src);
+ sodium_memzero(dst, sizeof dst);
+
+ if (maclen_p != NULL) {
+ *maclen_p = 16ULL;
+ }
+ return 0;
+}
+
+static int
+aegis256_decrypt_detached(unsigned char *m, unsigned char *nsec, const unsigned char *c,
+ unsigned long long clen, const unsigned char *mac,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub, const unsigned char *k)
+{
+ aes_block_t state[6];
+ CRYPTO_ALIGN(16) unsigned char src[16];
+ CRYPTO_ALIGN(16) unsigned char dst[16];
+ CRYPTO_ALIGN(16) unsigned char computed_mac[16];
+ unsigned long long i;
+ unsigned long long mlen;
+ int ret;
+
+ (void) nsec;
+ mlen = clen;
+ aegis256_init(k, npub, state);
+
+ for (i = 0ULL; i + 16ULL <= adlen; i += 16ULL) {
+ aegis256_absorb(ad + i, state);
+ }
+ if (adlen & 0xf) {
+ memset(src, 0, 16);
+ memcpy(src, ad + i, adlen & 0xf);
+ aegis256_absorb(src, state);
+ }
+ if (m != NULL) {
+ for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
+ aegis256_dec(m + i, c + i, state);
+ }
+ } else {
+ for (i = 0ULL; i + 16ULL <= mlen; i += 16ULL) {
+ aegis256_dec(dst, c + i, state);
+ }
+ }
+ if (mlen & 0xf) {
+ memset(src, 0, 16);
+ memcpy(src, c + i, mlen & 0xf);
+ aegis256_dec(dst, src, state);
+ if (m != NULL) {
+ memcpy(m + i, dst, mlen & 0xf);
+ }
+ memset(dst, 0, mlen & 0xf);
+ state[0] = AES_BLOCK_XOR(state[0], AES_BLOCK_LOAD(dst));
+ }
+
+ aegis256_mac(computed_mac, adlen, mlen, state);
+ sodium_memzero(state, sizeof state);
+ sodium_memzero(src, sizeof src);
+ sodium_memzero(dst, sizeof dst);
+ ret = crypto_verify_16(computed_mac, mac);
+ sodium_memzero(computed_mac, sizeof computed_mac);
+ if (m == NULL) {
+ return ret;
+ }
+ if (ret != 0) {
+ memset(m, 0, mlen);
+ return -1;
+ }
+ return 0;
+}
+
+struct crypto_aead_aegis256_implementation crypto_aead_aegis256_soft_implementation = {
+ SODIUM_C99(.encrypt_detached =) aegis256_encrypt_detached,
+ SODIUM_C99(.decrypt_detached =) aegis256_decrypt_detached
+};
diff --git a/src/libsodium/crypto_aead/aegis256/soft/aead_aegis256_soft.h b/src/libsodium/crypto_aead/aegis256/soft/aead_aegis256_soft.h
new file mode 100644
index 00000000..8de350a5
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/soft/aead_aegis256_soft.h
@@ -0,0 +1,7 @@
+#include
+
+#include "../aead_aegis256.h"
+#include "crypto_aead_aegis256.h"
+
+extern struct crypto_aead_aegis256_implementation
+ crypto_aead_aegis256_soft_implementation;
diff --git a/src/libsodium/include/sodium/crypto_aead_aegis256.h b/src/libsodium/include/sodium/crypto_aead_aegis256.h
index 32e76896..b4702533 100644
--- a/src/libsodium/include/sodium/crypto_aead_aegis256.h
+++ b/src/libsodium/include/sodium/crypto_aead_aegis256.h
@@ -11,9 +11,6 @@
extern "C" {
#endif
-SODIUM_EXPORT
-int crypto_aead_aegis256_is_available(void);
-
#define crypto_aead_aegis256_KEYBYTES 32U
SODIUM_EXPORT
size_t crypto_aead_aegis256_keybytes(void);
diff --git a/src/libsodium/include/sodium/private/implementations.h b/src/libsodium/include/sodium/private/implementations.h
index e2753f23..1c1fde07 100644
--- a/src/libsodium/include/sodium/private/implementations.h
+++ b/src/libsodium/include/sodium/private/implementations.h
@@ -10,5 +10,6 @@ int _crypto_scalarmult_curve25519_pick_best_implementation(void);
int _crypto_stream_chacha20_pick_best_implementation(void);
int _crypto_stream_salsa20_pick_best_implementation(void);
int _crypto_aead_aegis128l_pick_best_implementation(void);
+int _crypto_aead_aegis256_pick_best_implementation(void);
#endif
diff --git a/src/libsodium/sodium/core.c b/src/libsodium/sodium/core.c
index d448b738..398944aa 100644
--- a/src/libsodium/sodium/core.c
+++ b/src/libsodium/sodium/core.c
@@ -46,6 +46,7 @@ sodium_init(void)
_crypto_stream_chacha20_pick_best_implementation();
_crypto_stream_salsa20_pick_best_implementation();
_crypto_aead_aegis128l_pick_best_implementation();
+ _crypto_aead_aegis256_pick_best_implementation();
initialized = 1;
if (sodium_crit_leave() != 0) {
return -1; /* LCOV_EXCL_LINE */
diff --git a/test/default/aead_aegis256.c b/test/default/aead_aegis256.c
index 83974613..8820fa5f 100644
--- a/test/default/aead_aegis256.c
+++ b/test/default/aead_aegis256.c
@@ -657,9 +657,7 @@ tv(void)
int
main(void)
{
- if (crypto_aead_aegis256_is_available()) {
- tv();
- }
+ tv();
assert(crypto_aead_aegis256_keybytes() == crypto_aead_aegis256_KEYBYTES);
assert(crypto_aead_aegis256_nsecbytes() == crypto_aead_aegis256_NSECBYTES);
assert(crypto_aead_aegis256_npubbytes() == crypto_aead_aegis256_NPUBBYTES);
diff --git a/test/symbols/all-symbols.txt b/test/symbols/all-symbols.txt
index f7ce18cf..b5667427 100644
--- a/test/symbols/all-symbols.txt
+++ b/test/symbols/all-symbols.txt
@@ -48,7 +48,6 @@ crypto_aead_aegis256_decrypt
crypto_aead_aegis256_decrypt_detached
crypto_aead_aegis256_encrypt
crypto_aead_aegis256_encrypt_detached
-crypto_aead_aegis256_is_available
crypto_aead_aegis256_keybytes
crypto_aead_aegis256_keygen
crypto_aead_aegis256_messagebytes_max
@@ -731,3 +730,4 @@ sodium_stream_salsa20_xmm6_xor_ic
sodium_sub
sodium_unpad
sodium_version_string
+softaes_block_encrypt