diff --git a/.gitignore b/.gitignore
index 5ae1451092..be1e7d3c1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,6 +80,8 @@ test-driver
test/default/*.asm.js
test/default/*.res
test/default/*.trs
+test/default/aead_aegis128l
+test/default/aead_aegis256
test/default/aead_aes256gcm
test/default/aead_aes256gcm2
test/default/aead_chacha20poly1305
diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj b/builds/msvc/vs2010/libsodium/libsodium.vcxproj
index 6384115d14..5d1bcf465e 100644
--- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj b/builds/msvc/vs2012/libsodium/libsodium.vcxproj
index 30a017eea0..0f13fa252b 100644
--- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj b/builds/msvc/vs2013/libsodium/libsodium.vcxproj
index ceea669af5..d66a33e2ab 100644
--- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj b/builds/msvc/vs2015/libsodium/libsodium.vcxproj
index 6763d7930b..a1ff044782 100644
--- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj b/builds/msvc/vs2017/libsodium/libsodium.vcxproj
index a562ed5bd2..8ef2c996e3 100644
--- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj b/builds/msvc/vs2019/libsodium/libsodium.vcxproj
index da1965a6ad..d7090a7e09 100644
--- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/builds/msvc/vs2022/libsodium/libsodium.vcxproj b/builds/msvc/vs2022/libsodium/libsodium.vcxproj
index 6be75de684..272984f566 100644
--- a/builds/msvc/vs2022/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2022/libsodium/libsodium.vcxproj
@@ -175,6 +175,14 @@
+
+
+
+
+
+
+
+
@@ -184,6 +192,7 @@
+
@@ -202,6 +211,7 @@
+
@@ -226,6 +236,7 @@
+
@@ -262,6 +273,7 @@
+
@@ -312,6 +324,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
index fd6e84ef09..2b88f77204 100644
--- a/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
@@ -318,6 +318,30 @@
crypto_aead\xchacha20poly1305
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_aead\aes256gcm
@@ -345,6 +369,9 @@
crypto_core\hsalsa20\ref2
+
+ crypto_core\softaes
+
crypto_core\ed25519
@@ -395,6 +422,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -467,6 +497,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -575,6 +608,9 @@
include\sodium\private
+
+ include\sodium\private
+
include\sodium\private
@@ -725,6 +761,36 @@
crypto_stream\salsa20\xmm6
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis128l
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
+
+ crypto_aead\aegis256
+
crypto_core\ed25519\ref10\fe_25_5
@@ -754,6 +820,12 @@
{a6837e41-3751-38c9-bb90-dd59d5f4af7b}
+
+ {9e2a023d-fef1-3231-90ba-9a0ffc9bc9ab}
+
+
+ {6897a4cc-0091-3970-b712-c0ac75c16b67}
+
{3e53394c-b59c-30cc-ae69-a4f46f9edfa3}
@@ -820,6 +892,9 @@
{eb259fd9-56f0-32db-a903-6bc1549a7326}
+
+ {05997596-e3d7-3bf1-ad4d-39e4c5fd56f6}
+
{e53b6258-fcdd-34c8-96c5-44510a34a390}
diff --git a/dist-build/emscripten-symbols.def b/dist-build/emscripten-symbols.def
index 116ecc684e..40d8699e69 100644
--- a/dist-build/emscripten-symbols.def
+++ b/dist-build/emscripten-symbols.def
@@ -1,3 +1,23 @@
+_crypto_aead_aegis128l_abytes 0 1
+_crypto_aead_aegis128l_decrypt 0 1
+_crypto_aead_aegis128l_decrypt_detached 0 1
+_crypto_aead_aegis128l_encrypt 0 1
+_crypto_aead_aegis128l_encrypt_detached 0 1
+_crypto_aead_aegis128l_keybytes 0 1
+_crypto_aead_aegis128l_keygen 0 1
+_crypto_aead_aegis128l_messagebytes_max 0 1
+_crypto_aead_aegis128l_npubbytes 0 1
+_crypto_aead_aegis128l_nsecbytes 0 1
+_crypto_aead_aegis256_abytes 0 1
+_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_keybytes 0 1
+_crypto_aead_aegis256_keygen 0 1
+_crypto_aead_aegis256_messagebytes_max 0 1
+_crypto_aead_aegis256_npubbytes 0 1
+_crypto_aead_aegis256_nsecbytes 0 1
_crypto_aead_aes256gcm_abytes 0 0
_crypto_aead_aes256gcm_beforenm 0 0
_crypto_aead_aes256gcm_decrypt 0 0
@@ -145,7 +165,7 @@ _crypto_box_seedbytes 1 1
_crypto_box_zerobytes 0 1
_crypto_core_ed25519_add 0 1
_crypto_core_ed25519_bytes 0 1
-_crypto_core_ed25519_from_hash 0 1
+_crypto_core_ed25519_from_hash 0 0
_crypto_core_ed25519_from_uniform 0 1
_crypto_core_ed25519_hashbytes 0 1
_crypto_core_ed25519_is_valid_point 0 1
@@ -154,6 +174,7 @@ _crypto_core_ed25519_random 0 1
_crypto_core_ed25519_scalar_add 0 1
_crypto_core_ed25519_scalar_complement 0 1
_crypto_core_ed25519_scalar_invert 0 1
+_crypto_core_ed25519_scalar_is_canonical 0 1
_crypto_core_ed25519_scalar_mul 0 1
_crypto_core_ed25519_scalar_negate 0 1
_crypto_core_ed25519_scalar_random 0 1
@@ -182,6 +203,7 @@ _crypto_core_ristretto255_random 0 1
_crypto_core_ristretto255_scalar_add 0 1
_crypto_core_ristretto255_scalar_complement 0 1
_crypto_core_ristretto255_scalar_invert 0 1
+_crypto_core_ristretto255_scalar_is_canonical 0 1
_crypto_core_ristretto255_scalar_mul 0 1
_crypto_core_ristretto255_scalar_negate 0 1
_crypto_core_ristretto255_scalar_random 0 1
@@ -258,6 +280,26 @@ _crypto_kdf_bytes_max 1 1
_crypto_kdf_bytes_min 1 1
_crypto_kdf_contextbytes 1 1
_crypto_kdf_derive_from_key 1 1
+_crypto_kdf_hkdf_sha256_bytes_max 1 1
+_crypto_kdf_hkdf_sha256_bytes_min 1 1
+_crypto_kdf_hkdf_sha256_expand 1 1
+_crypto_kdf_hkdf_sha256_extract 1 1
+_crypto_kdf_hkdf_sha256_extract_final 1 1
+_crypto_kdf_hkdf_sha256_extract_init 1 1
+_crypto_kdf_hkdf_sha256_statebytes 1 1
+_crypto_kdf_hkdf_sha256_extract_update 1 1
+_crypto_kdf_hkdf_sha256_keybytes 1 1
+_crypto_kdf_hkdf_sha256_keygen 1 1
+_crypto_kdf_hkdf_sha512_bytes_max 1 1
+_crypto_kdf_hkdf_sha512_bytes_min 1 1
+_crypto_kdf_hkdf_sha512_expand 1 1
+_crypto_kdf_hkdf_sha512_extract 1 1
+_crypto_kdf_hkdf_sha512_extract_final 1 1
+_crypto_kdf_hkdf_sha512_extract_init 1 1
+_crypto_kdf_hkdf_sha512_statebytes 1 1
+_crypto_kdf_hkdf_sha512_extract_update 1 1
+_crypto_kdf_hkdf_sha512_keybytes 1 1
+_crypto_kdf_hkdf_sha512_keygen 1 1
_crypto_kdf_keybytes 1 1
_crypto_kdf_keygen 1 1
_crypto_kdf_primitive 0 1
@@ -591,6 +633,7 @@ _sodium_mprotect_readwrite 0 0
_sodium_munlock 0 0
_sodium_pad 1 1
_sodium_runtime_has_aesni 0 0
+_sodium_runtime_has_armcrypto 0 0
_sodium_runtime_has_avx 0 0
_sodium_runtime_has_avx2 0 0
_sodium_runtime_has_avx512f 0 0
diff --git a/dist-build/emscripten.sh b/dist-build/emscripten.sh
index 569bb4de08..000ea819ed 100755
--- a/dist-build/emscripten.sh
+++ b/dist-build/emscripten.sh
@@ -1,8 +1,8 @@
#! /bin/sh
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_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_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_hash","_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_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_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_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_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_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_hkdf_sha256_bytes_max","_crypto_kdf_hkdf_sha256_bytes_min","_crypto_kdf_hkdf_sha256_expand","_crypto_kdf_hkdf_sha256_extract","_crypto_kdf_hkdf_sha256_extract_final","_crypto_kdf_hkdf_sha256_extract_init","_crypto_kdf_hkdf_sha256_extract_update","_crypto_kdf_hkdf_sha256_keybytes","_crypto_kdf_hkdf_sha256_keygen","_crypto_kdf_hkdf_sha256_statebytes","_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_extract_final","_crypto_kdf_hkdf_sha512_extract_init","_crypto_kdf_hkdf_sha512_extract_update","_crypto_kdf_hkdf_sha512_keybytes","_crypto_kdf_hkdf_sha512_keygen","_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_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_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_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_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_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_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_extract_final","_crypto_kdf_hkdf_sha256_extract_init","_crypto_kdf_hkdf_sha256_extract_update","_crypto_kdf_hkdf_sha256_keybytes","_crypto_kdf_hkdf_sha256_keygen","_crypto_kdf_hkdf_sha256_statebytes","_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_extract_final","_crypto_kdf_hkdf_sha512_extract_init","_crypto_kdf_hkdf_sha512_extract_update","_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 JS_RESERVED_MEMORY_STANDARD=16MB
export JS_RESERVED_MEMORY_SUMO=48MB
diff --git a/libsodium.vcxproj b/libsodium.vcxproj
index 04bd3f0952..3217a25d08 100644
--- a/libsodium.vcxproj
+++ b/libsodium.vcxproj
@@ -413,6 +413,14 @@
+
+
+
+
+
+
+
+
@@ -422,6 +430,7 @@
+
@@ -440,6 +449,7 @@
+
@@ -464,6 +474,7 @@
+
@@ -500,6 +511,7 @@
+
@@ -550,6 +562,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/libsodium.vcxproj.filters b/libsodium.vcxproj.filters
index ccbe9757b0..c9ef1c3135 100644
--- a/libsodium.vcxproj.filters
+++ b/libsodium.vcxproj.filters
@@ -309,6 +309,30 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
Source Files
@@ -336,6 +360,9 @@
Source Files
+
+ Source Files
+
Source Files
@@ -386,6 +413,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -458,6 +488,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -566,6 +599,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -716,6 +752,36 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ 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 fa2b77c33c..c7eb319086 100644
--- a/src/libsodium/Makefile.am
+++ b/src/libsodium/Makefile.am
@@ -2,6 +2,16 @@ lib_LTLIBRARIES = \
libsodium.la
libsodium_la_SOURCES = \
+ crypto_aead/aegis128l/aead_aegis128l.c \
+ crypto_aead/aegis128l/aegis128l_common.h \
+ crypto_aead/aegis128l/aegis128l_soft.c \
+ crypto_aead/aegis128l/aegis128l_soft.h \
+ crypto_aead/aegis128l/implementations.h \
+ crypto_aead/aegis256/aead_aegis256.c \
+ crypto_aead/aegis256/aegis256_common.h \
+ crypto_aead/aegis256/aegis256_soft.c \
+ crypto_aead/aegis256/aegis256_soft.h \
+ crypto_aead/aegis256/implementations.h \
crypto_aead/aes256gcm/aead_aes256gcm.c \
crypto_aead/chacha20poly1305/aead_chacha20poly1305.c \
crypto_aead/xchacha20poly1305/aead_xchacha20poly1305.c \
@@ -18,6 +28,7 @@ libsodium_la_SOURCES = \
crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c \
crypto_core/hsalsa20/core_hsalsa20.c \
crypto_core/salsa/ref/core_salsa_ref.c \
+ crypto_core/softaes/softaes.c \
crypto_generichash/crypto_generichash.c \
crypto_generichash/blake2b/generichash_blake2.c \
crypto_generichash/blake2b/ref/blake2.h \
@@ -90,6 +101,7 @@ libsodium_la_SOURCES = \
include/sodium/private/implementations.h \
include/sodium/private/mutex.h \
include/sodium/private/sse2_64_32.h \
+ include/sodium/private/softaes.h \
randombytes/randombytes.c \
sodium/codecs.c \
sodium/core.c \
@@ -219,12 +231,20 @@ libarmcrypto_la_LDFLAGS = $(libsodium_la_LDFLAGS)
libarmcrypto_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \
@CFLAGS_ARMCRYPTO@
libarmcrypto_la_SOURCES = \
+ crypto_aead/aegis128l/aegis128l_armcrypto.c \
+ crypto_aead/aegis128l/aegis128l_armcrypto.h \
+ crypto_aead/aegis256/aegis256_armcrypto.c \
+ crypto_aead/aegis256/aegis256_armcrypto.h \
crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
libaesni_la_LDFLAGS = $(libsodium_la_LDFLAGS)
libaesni_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \
@CFLAGS_SSE2@ @CFLAGS_SSSE3@ @CFLAGS_AVX@ @CFLAGS_AESNI@ @CFLAGS_PCLMUL@
libaesni_la_SOURCES = \
+ crypto_aead/aegis128l/aegis128l_aesni.c \
+ crypto_aead/aegis128l/aegis128l_aesni.h \
+ crypto_aead/aegis256/aegis256_aesni.c \
+ crypto_aead/aegis256/aegis256_aesni.h \
crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
libsse2_la_LDFLAGS = $(libsodium_la_LDFLAGS)
diff --git a/src/libsodium/Makefile.in b/src/libsodium/Makefile.in
index ff905ee07e..c4f7274562 100644
--- a/src/libsodium/Makefile.in
+++ b/src/libsodium/Makefile.in
@@ -221,7 +221,10 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(defexecdir)"
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
libaesni_la_LIBADD =
am__dirstamp = $(am__leading_dot)dirstamp
-am_libaesni_la_OBJECTS = crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo
+am_libaesni_la_OBJECTS = \
+ crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo \
+ crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo \
+ crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo
libaesni_la_OBJECTS = $(am_libaesni_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -231,7 +234,10 @@ libaesni_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libaesni_la_LDFLAGS) $(LDFLAGS) -o $@
libarmcrypto_la_LIBADD =
-am_libarmcrypto_la_OBJECTS = crypto_aead/aes256gcm/armcrypto/libarmcrypto_la-aead_aes256gcm_armcrypto.lo
+am_libarmcrypto_la_OBJECTS = \
+ crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo \
+ crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo \
+ crypto_aead/aes256gcm/armcrypto/libarmcrypto_la-aead_aes256gcm_armcrypto.lo
libarmcrypto_la_OBJECTS = $(am_libarmcrypto_la_OBJECTS)
libarmcrypto_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -263,6 +269,16 @@ libsodium_la_DEPENDENCIES = libaesni.la libarmcrypto.la libsse2.la \
libssse3.la libsse41.la libavx2.la libavx512f.la \
$(am__append_8)
am__libsodium_la_SOURCES_DIST = \
+ crypto_aead/aegis128l/aead_aegis128l.c \
+ crypto_aead/aegis128l/aegis128l_common.h \
+ crypto_aead/aegis128l/aegis128l_soft.c \
+ crypto_aead/aegis128l/aegis128l_soft.h \
+ crypto_aead/aegis128l/implementations.h \
+ crypto_aead/aegis256/aead_aegis256.c \
+ crypto_aead/aegis256/aegis256_common.h \
+ crypto_aead/aegis256/aegis256_soft.c \
+ crypto_aead/aegis256/aegis256_soft.h \
+ crypto_aead/aegis256/implementations.h \
crypto_aead/aes256gcm/aead_aes256gcm.c \
crypto_aead/chacha20poly1305/aead_chacha20poly1305.c \
crypto_aead/xchacha20poly1305/aead_xchacha20poly1305.c \
@@ -278,6 +294,7 @@ am__libsodium_la_SOURCES_DIST = \
crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c \
crypto_core/hsalsa20/core_hsalsa20.c \
crypto_core/salsa/ref/core_salsa_ref.c \
+ crypto_core/softaes/softaes.c \
crypto_generichash/crypto_generichash.c \
crypto_generichash/blake2b/generichash_blake2.c \
crypto_generichash/blake2b/ref/blake2.h \
@@ -343,7 +360,8 @@ am__libsodium_la_SOURCES_DIST = \
include/sodium/private/ed25519_ref10.h \
include/sodium/private/implementations.h \
include/sodium/private/mutex.h \
- include/sodium/private/sse2_64_32.h randombytes/randombytes.c \
+ include/sodium/private/sse2_64_32.h \
+ include/sodium/private/softaes.h randombytes/randombytes.c \
sodium/codecs.c sodium/core.c sodium/runtime.c sodium/utils.c \
sodium/version.c crypto_core/ed25519/ref10/fe_51/base.h \
crypto_core/ed25519/ref10/fe_51/base2.h \
@@ -428,6 +446,10 @@ am__objects_1 =
@MINIMAL_FALSE@ crypto_stream/xchacha20/libsodium_la-stream_xchacha20.lo
@EMSCRIPTEN_FALSE@am__objects_6 = randombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo
am_libsodium_la_OBJECTS = \
+ crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo \
+ crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo \
+ crypto_aead/aegis256/libsodium_la-aead_aegis256.lo \
+ crypto_aead/aegis256/libsodium_la-aegis256_soft.lo \
crypto_aead/aes256gcm/libsodium_la-aead_aes256gcm.lo \
crypto_aead/chacha20poly1305/libsodium_la-aead_chacha20poly1305.lo \
crypto_aead/xchacha20poly1305/libsodium_la-aead_xchacha20poly1305.lo \
@@ -444,6 +466,7 @@ am_libsodium_la_OBJECTS = \
crypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20_ref2.lo \
crypto_core/hsalsa20/libsodium_la-core_hsalsa20.lo \
crypto_core/salsa/ref/libsodium_la-core_salsa_ref.lo \
+ crypto_core/softaes/libsodium_la-softaes.lo \
crypto_generichash/libsodium_la-crypto_generichash.lo \
crypto_generichash/blake2b/libsodium_la-generichash_blake2.lo \
crypto_generichash/blake2b/ref/libsodium_la-blake2b-compress-ref.lo \
@@ -547,7 +570,15 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo \
+am__depfiles_remade = crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Plo \
+ crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Plo \
+ crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Plo \
+ crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Plo \
+ crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Plo \
+ crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Plo \
+ crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Plo \
+ crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Plo \
+ crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo \
crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo \
crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Plo \
crypto_aead/chacha20poly1305/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Plo \
@@ -569,6 +600,7 @@ am__depfiles_remade = crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gc
crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20.Plo \
crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20_ref2.Plo \
crypto_core/salsa/ref/$(DEPDIR)/libsodium_la-core_salsa_ref.Plo \
+ crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Plo \
crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo \
crypto_generichash/blake2b/$(DEPDIR)/libsodium_la-generichash_blake2.Plo \
crypto_generichash/blake2b/ref/$(DEPDIR)/libavx2_la-blake2b-compress-avx2.Plo \
@@ -943,7 +975,17 @@ valgrind_tools = @valgrind_tools@
lib_LTLIBRARIES = \
libsodium.la
-libsodium_la_SOURCES = crypto_aead/aes256gcm/aead_aes256gcm.c \
+libsodium_la_SOURCES = crypto_aead/aegis128l/aead_aegis128l.c \
+ crypto_aead/aegis128l/aegis128l_common.h \
+ crypto_aead/aegis128l/aegis128l_soft.c \
+ crypto_aead/aegis128l/aegis128l_soft.h \
+ crypto_aead/aegis128l/implementations.h \
+ crypto_aead/aegis256/aead_aegis256.c \
+ crypto_aead/aegis256/aegis256_common.h \
+ crypto_aead/aegis256/aegis256_soft.c \
+ crypto_aead/aegis256/aegis256_soft.h \
+ crypto_aead/aegis256/implementations.h \
+ crypto_aead/aes256gcm/aead_aes256gcm.c \
crypto_aead/chacha20poly1305/aead_chacha20poly1305.c \
crypto_aead/xchacha20poly1305/aead_xchacha20poly1305.c \
crypto_auth/crypto_auth.c \
@@ -958,6 +1000,7 @@ libsodium_la_SOURCES = crypto_aead/aes256gcm/aead_aes256gcm.c \
crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c \
crypto_core/hsalsa20/core_hsalsa20.c \
crypto_core/salsa/ref/core_salsa_ref.c \
+ crypto_core/softaes/softaes.c \
crypto_generichash/crypto_generichash.c \
crypto_generichash/blake2b/generichash_blake2.c \
crypto_generichash/blake2b/ref/blake2.h \
@@ -1023,7 +1066,8 @@ libsodium_la_SOURCES = crypto_aead/aes256gcm/aead_aes256gcm.c \
include/sodium/private/ed25519_ref10.h \
include/sodium/private/implementations.h \
include/sodium/private/mutex.h \
- include/sodium/private/sse2_64_32.h randombytes/randombytes.c \
+ include/sodium/private/sse2_64_32.h \
+ include/sodium/private/softaes.h randombytes/randombytes.c \
sodium/codecs.c sodium/core.c sodium/runtime.c sodium/utils.c \
sodium/version.c $(am__append_1) $(am__append_2) \
$(am__append_3) $(am__append_4) $(am__append_5) \
@@ -1067,6 +1111,10 @@ libarmcrypto_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \
@CFLAGS_ARMCRYPTO@
libarmcrypto_la_SOURCES = \
+ crypto_aead/aegis128l/aegis128l_armcrypto.c \
+ crypto_aead/aegis128l/aegis128l_armcrypto.h \
+ crypto_aead/aegis256/aegis256_armcrypto.c \
+ crypto_aead/aegis256/aegis256_armcrypto.h \
crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
libaesni_la_LDFLAGS = $(libsodium_la_LDFLAGS)
@@ -1074,6 +1122,10 @@ libaesni_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \
@CFLAGS_SSE2@ @CFLAGS_SSSE3@ @CFLAGS_AVX@ @CFLAGS_AESNI@ @CFLAGS_PCLMUL@
libaesni_la_SOURCES = \
+ crypto_aead/aegis128l/aegis128l_aesni.c \
+ crypto_aead/aegis128l/aegis128l_aesni.h \
+ crypto_aead/aegis256/aegis256_aesni.c \
+ crypto_aead/aegis256/aegis256_aesni.h \
crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
libsse2_la_LDFLAGS = $(libsodium_la_LDFLAGS)
@@ -1212,6 +1264,24 @@ clean-noinstLTLIBRARIES:
echo rm -f $${locs}; \
rm -f $${locs}; \
}
+crypto_aead/aegis128l/$(am__dirstamp):
+ @$(MKDIR_P) crypto_aead/aegis128l
+ @: > crypto_aead/aegis128l/$(am__dirstamp)
+crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) crypto_aead/aegis128l/$(DEPDIR)
+ @: > crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo: \
+ crypto_aead/aegis128l/$(am__dirstamp) \
+ crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis256/$(am__dirstamp):
+ @$(MKDIR_P) crypto_aead/aegis256
+ @: > crypto_aead/aegis256/$(am__dirstamp)
+crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) crypto_aead/aegis256/$(DEPDIR)
+ @: > crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo: \
+ crypto_aead/aegis256/$(am__dirstamp) \
+ crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp)
crypto_aead/aes256gcm/aesni/$(am__dirstamp):
@$(MKDIR_P) crypto_aead/aes256gcm/aesni
@: > crypto_aead/aes256gcm/aesni/$(am__dirstamp)
@@ -1224,6 +1294,12 @@ crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo: \
libaesni.la: $(libaesni_la_OBJECTS) $(libaesni_la_DEPENDENCIES) $(EXTRA_libaesni_la_DEPENDENCIES)
$(AM_V_CCLD)$(libaesni_la_LINK) $(libaesni_la_OBJECTS) $(libaesni_la_LIBADD) $(LIBS)
+crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo: \
+ crypto_aead/aegis128l/$(am__dirstamp) \
+ crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo: \
+ crypto_aead/aegis256/$(am__dirstamp) \
+ crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp)
crypto_aead/aes256gcm/armcrypto/$(am__dirstamp):
@$(MKDIR_P) crypto_aead/aes256gcm/armcrypto
@: > crypto_aead/aes256gcm/armcrypto/$(am__dirstamp)
@@ -1293,6 +1369,18 @@ randombytes/internal/librdrand_la-randombytes_internal_random.lo: \
librdrand.la: $(librdrand_la_OBJECTS) $(librdrand_la_DEPENDENCIES) $(EXTRA_librdrand_la_DEPENDENCIES)
$(AM_V_CCLD)$(librdrand_la_LINK) $(am_librdrand_la_rpath) $(librdrand_la_OBJECTS) $(librdrand_la_LIBADD) $(LIBS)
+crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo: \
+ crypto_aead/aegis128l/$(am__dirstamp) \
+ crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo: \
+ crypto_aead/aegis128l/$(am__dirstamp) \
+ crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis256/libsodium_la-aead_aegis256.lo: \
+ crypto_aead/aegis256/$(am__dirstamp) \
+ crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp)
+crypto_aead/aegis256/libsodium_la-aegis256_soft.lo: \
+ crypto_aead/aegis256/$(am__dirstamp) \
+ crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp)
crypto_aead/aes256gcm/$(am__dirstamp):
@$(MKDIR_P) crypto_aead/aes256gcm
@: > crypto_aead/aes256gcm/$(am__dirstamp)
@@ -1423,6 +1511,15 @@ crypto_core/salsa/ref/$(DEPDIR)/$(am__dirstamp):
crypto_core/salsa/ref/libsodium_la-core_salsa_ref.lo: \
crypto_core/salsa/ref/$(am__dirstamp) \
crypto_core/salsa/ref/$(DEPDIR)/$(am__dirstamp)
+crypto_core/softaes/$(am__dirstamp):
+ @$(MKDIR_P) crypto_core/softaes
+ @: > crypto_core/softaes/$(am__dirstamp)
+crypto_core/softaes/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) crypto_core/softaes/$(DEPDIR)
+ @: > crypto_core/softaes/$(DEPDIR)/$(am__dirstamp)
+crypto_core/softaes/libsodium_la-softaes.lo: \
+ crypto_core/softaes/$(am__dirstamp) \
+ crypto_core/softaes/$(DEPDIR)/$(am__dirstamp)
crypto_generichash/$(am__dirstamp):
@$(MKDIR_P) crypto_generichash
@: > crypto_generichash/$(am__dirstamp)
@@ -2009,6 +2106,10 @@ libssse3.la: $(libssse3_la_OBJECTS) $(libssse3_la_DEPENDENCIES) $(EXTRA_libssse3
mostlyclean-compile:
-rm -f *.$(OBJEXT)
+ -rm -f crypto_aead/aegis128l/*.$(OBJEXT)
+ -rm -f crypto_aead/aegis128l/*.lo
+ -rm -f crypto_aead/aegis256/*.$(OBJEXT)
+ -rm -f crypto_aead/aegis256/*.lo
-rm -f crypto_aead/aes256gcm/*.$(OBJEXT)
-rm -f crypto_aead/aes256gcm/*.lo
-rm -f crypto_aead/aes256gcm/aesni/*.$(OBJEXT)
@@ -2045,6 +2146,8 @@ mostlyclean-compile:
-rm -f crypto_core/hsalsa20/ref2/*.lo
-rm -f crypto_core/salsa/ref/*.$(OBJEXT)
-rm -f crypto_core/salsa/ref/*.lo
+ -rm -f crypto_core/softaes/*.$(OBJEXT)
+ -rm -f crypto_core/softaes/*.lo
-rm -f crypto_generichash/*.$(OBJEXT)
-rm -f crypto_generichash/*.lo
-rm -f crypto_generichash/blake2b/*.$(OBJEXT)
@@ -2161,6 +2264,14 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Plo@am__quote@ # am--include-marker
@@ -2183,6 +2294,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20_ref2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa/ref/$(DEPDIR)/libsodium_la-core_salsa_ref.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2b/$(DEPDIR)/libsodium_la-generichash_blake2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2b/ref/$(DEPDIR)/libavx2_la-blake2b-compress-avx2.Plo@am__quote@ # am--include-marker
@@ -2342,6 +2454,20 @@ crypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo: crypto_scalarmult/
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo: crypto_aead/aegis128l/aegis128l_aesni.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo -MD -MP -MF crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Tpo -c -o crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo `test -f 'crypto_aead/aegis128l/aegis128l_aesni.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aegis128l_aesni.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Tpo crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis128l/aegis128l_aesni.c' object='crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis128l/libaesni_la-aegis128l_aesni.lo `test -f 'crypto_aead/aegis128l/aegis128l_aesni.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aegis128l_aesni.c
+
+crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo: crypto_aead/aegis256/aegis256_aesni.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo -MD -MP -MF crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Tpo -c -o crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo `test -f 'crypto_aead/aegis256/aegis256_aesni.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aegis256_aesni.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Tpo crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis256/aegis256_aesni.c' object='crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis256/libaesni_la-aegis256_aesni.lo `test -f 'crypto_aead/aegis256/aegis256_aesni.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aegis256_aesni.c
+
crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo: crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo -MD -MP -MF crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Tpo -c -o crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo `test -f 'crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c' || echo '$(srcdir)/'`crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Tpo crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo
@@ -2349,6 +2475,20 @@ crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo: crypto_aead/aes
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo `test -f 'crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c' || echo '$(srcdir)/'`crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
+crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo: crypto_aead/aegis128l/aegis128l_armcrypto.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarmcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo -MD -MP -MF crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Tpo -c -o crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo `test -f 'crypto_aead/aegis128l/aegis128l_armcrypto.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aegis128l_armcrypto.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Tpo crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis128l/aegis128l_armcrypto.c' object='crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarmcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis128l/libarmcrypto_la-aegis128l_armcrypto.lo `test -f 'crypto_aead/aegis128l/aegis128l_armcrypto.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aegis128l_armcrypto.c
+
+crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo: crypto_aead/aegis256/aegis256_armcrypto.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarmcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo -MD -MP -MF crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Tpo -c -o crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo `test -f 'crypto_aead/aegis256/aegis256_armcrypto.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aegis256_armcrypto.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Tpo crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis256/aegis256_armcrypto.c' object='crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarmcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis256/libarmcrypto_la-aegis256_armcrypto.lo `test -f 'crypto_aead/aegis256/aegis256_armcrypto.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aegis256_armcrypto.c
+
crypto_aead/aes256gcm/armcrypto/libarmcrypto_la-aead_aes256gcm_armcrypto.lo: crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarmcrypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aes256gcm/armcrypto/libarmcrypto_la-aead_aes256gcm_armcrypto.lo -MD -MP -MF crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Tpo -c -o crypto_aead/aes256gcm/armcrypto/libarmcrypto_la-aead_aes256gcm_armcrypto.lo `test -f 'crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c' || echo '$(srcdir)/'`crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Tpo crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Plo
@@ -2398,6 +2538,34 @@ randombytes/internal/librdrand_la-randombytes_internal_random.lo: randombytes/in
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librdrand_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o randombytes/internal/librdrand_la-randombytes_internal_random.lo `test -f 'randombytes/internal/randombytes_internal_random.c' || echo '$(srcdir)/'`randombytes/internal/randombytes_internal_random.c
+crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo: crypto_aead/aegis128l/aead_aegis128l.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo -MD -MP -MF crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Tpo -c -o crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo `test -f 'crypto_aead/aegis128l/aead_aegis128l.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aead_aegis128l.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Tpo crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis128l/aead_aegis128l.c' object='crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis128l/libsodium_la-aead_aegis128l.lo `test -f 'crypto_aead/aegis128l/aead_aegis128l.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aead_aegis128l.c
+
+crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo: crypto_aead/aegis128l/aegis128l_soft.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo -MD -MP -MF crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Tpo -c -o crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo `test -f 'crypto_aead/aegis128l/aegis128l_soft.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aegis128l_soft.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Tpo crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis128l/aegis128l_soft.c' object='crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis128l/libsodium_la-aegis128l_soft.lo `test -f 'crypto_aead/aegis128l/aegis128l_soft.c' || echo '$(srcdir)/'`crypto_aead/aegis128l/aegis128l_soft.c
+
+crypto_aead/aegis256/libsodium_la-aead_aegis256.lo: crypto_aead/aegis256/aead_aegis256.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis256/libsodium_la-aead_aegis256.lo -MD -MP -MF crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Tpo -c -o crypto_aead/aegis256/libsodium_la-aead_aegis256.lo `test -f 'crypto_aead/aegis256/aead_aegis256.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aead_aegis256.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Tpo crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis256/aead_aegis256.c' object='crypto_aead/aegis256/libsodium_la-aead_aegis256.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis256/libsodium_la-aead_aegis256.lo `test -f 'crypto_aead/aegis256/aead_aegis256.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aead_aegis256.c
+
+crypto_aead/aegis256/libsodium_la-aegis256_soft.lo: crypto_aead/aegis256/aegis256_soft.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aegis256/libsodium_la-aegis256_soft.lo -MD -MP -MF crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Tpo -c -o crypto_aead/aegis256/libsodium_la-aegis256_soft.lo `test -f 'crypto_aead/aegis256/aegis256_soft.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aegis256_soft.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Tpo crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_aead/aegis256/aegis256_soft.c' object='crypto_aead/aegis256/libsodium_la-aegis256_soft.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aegis256/libsodium_la-aegis256_soft.lo `test -f 'crypto_aead/aegis256/aegis256_soft.c' || echo '$(srcdir)/'`crypto_aead/aegis256/aegis256_soft.c
+
crypto_aead/aes256gcm/libsodium_la-aead_aes256gcm.lo: crypto_aead/aes256gcm/aead_aes256gcm.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aes256gcm/libsodium_la-aead_aes256gcm.lo -MD -MP -MF crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Tpo -c -o crypto_aead/aes256gcm/libsodium_la-aead_aes256gcm.lo `test -f 'crypto_aead/aes256gcm/aead_aes256gcm.c' || echo '$(srcdir)/'`crypto_aead/aes256gcm/aead_aes256gcm.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Tpo crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo
@@ -2510,6 +2678,13 @@ crypto_core/salsa/ref/libsodium_la-core_salsa_ref.lo: crypto_core/salsa/ref/core
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa/ref/libsodium_la-core_salsa_ref.lo `test -f 'crypto_core/salsa/ref/core_salsa_ref.c' || echo '$(srcdir)/'`crypto_core/salsa/ref/core_salsa_ref.c
+crypto_core/softaes/libsodium_la-softaes.lo: crypto_core/softaes/softaes.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/softaes/libsodium_la-softaes.lo -MD -MP -MF crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Tpo -c -o crypto_core/softaes/libsodium_la-softaes.lo `test -f 'crypto_core/softaes/softaes.c' || echo '$(srcdir)/'`crypto_core/softaes/softaes.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Tpo crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_core/softaes/softaes.c' object='crypto_core/softaes/libsodium_la-softaes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/softaes/libsodium_la-softaes.lo `test -f 'crypto_core/softaes/softaes.c' || echo '$(srcdir)/'`crypto_core/softaes/softaes.c
+
crypto_generichash/libsodium_la-crypto_generichash.lo: crypto_generichash/crypto_generichash.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/libsodium_la-crypto_generichash.lo -MD -MP -MF crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Tpo -c -o crypto_generichash/libsodium_la-crypto_generichash.lo `test -f 'crypto_generichash/crypto_generichash.c' || echo '$(srcdir)/'`crypto_generichash/crypto_generichash.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Tpo crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo
@@ -3117,6 +3292,8 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+ -rm -rf crypto_aead/aegis128l/.libs crypto_aead/aegis128l/_libs
+ -rm -rf crypto_aead/aegis256/.libs crypto_aead/aegis256/_libs
-rm -rf crypto_aead/aes256gcm/.libs crypto_aead/aes256gcm/_libs
-rm -rf crypto_aead/aes256gcm/aesni/.libs crypto_aead/aes256gcm/aesni/_libs
-rm -rf crypto_aead/aes256gcm/armcrypto/.libs crypto_aead/aes256gcm/armcrypto/_libs
@@ -3135,6 +3312,7 @@ clean-libtool:
-rm -rf crypto_core/hsalsa20/.libs crypto_core/hsalsa20/_libs
-rm -rf crypto_core/hsalsa20/ref2/.libs crypto_core/hsalsa20/ref2/_libs
-rm -rf crypto_core/salsa/ref/.libs crypto_core/salsa/ref/_libs
+ -rm -rf crypto_core/softaes/.libs crypto_core/softaes/_libs
-rm -rf crypto_generichash/.libs crypto_generichash/_libs
-rm -rf crypto_generichash/blake2b/.libs crypto_generichash/blake2b/_libs
-rm -rf crypto_generichash/blake2b/ref/.libs crypto_generichash/blake2b/ref/_libs
@@ -3409,6 +3587,10 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/$(am__dirstamp)
+ -rm -f crypto_aead/aegis128l/$(am__dirstamp)
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/$(am__dirstamp)
+ -rm -f crypto_aead/aegis256/$(am__dirstamp)
-rm -f crypto_aead/aes256gcm/$(DEPDIR)/$(am__dirstamp)
-rm -f crypto_aead/aes256gcm/$(am__dirstamp)
-rm -f crypto_aead/aes256gcm/aesni/$(DEPDIR)/$(am__dirstamp)
@@ -3445,6 +3627,8 @@ distclean-generic:
-rm -f crypto_core/hsalsa20/ref2/$(am__dirstamp)
-rm -f crypto_core/salsa/ref/$(DEPDIR)/$(am__dirstamp)
-rm -f crypto_core/salsa/ref/$(am__dirstamp)
+ -rm -f crypto_core/softaes/$(DEPDIR)/$(am__dirstamp)
+ -rm -f crypto_core/softaes/$(am__dirstamp)
-rm -f crypto_generichash/$(DEPDIR)/$(am__dirstamp)
-rm -f crypto_generichash/$(am__dirstamp)
-rm -f crypto_generichash/blake2b/$(DEPDIR)/$(am__dirstamp)
@@ -3587,7 +3771,15 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-recursive
- -rm -f crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Plo
+ -rm -f crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo
-rm -f crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo
-rm -f crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Plo
-rm -f crypto_aead/chacha20poly1305/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Plo
@@ -3609,6 +3801,7 @@ distclean: distclean-recursive
-rm -f crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20.Plo
-rm -f crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20_ref2.Plo
-rm -f crypto_core/salsa/ref/$(DEPDIR)/libsodium_la-core_salsa_ref.Plo
+ -rm -f crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Plo
-rm -f crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo
-rm -f crypto_generichash/blake2b/$(DEPDIR)/libsodium_la-generichash_blake2.Plo
-rm -f crypto_generichash/blake2b/ref/$(DEPDIR)/libavx2_la-blake2b-compress-avx2.Plo
@@ -3744,7 +3937,15 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
- -rm -f crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libaesni_la-aegis128l_aesni.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libarmcrypto_la-aegis128l_armcrypto.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aead_aegis128l.Plo
+ -rm -f crypto_aead/aegis128l/$(DEPDIR)/libsodium_la-aegis128l_soft.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libaesni_la-aegis256_aesni.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libarmcrypto_la-aegis256_armcrypto.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aead_aegis256.Plo
+ -rm -f crypto_aead/aegis256/$(DEPDIR)/libsodium_la-aegis256_soft.Plo
+ -rm -f crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gcm.Plo
-rm -f crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo
-rm -f crypto_aead/aes256gcm/armcrypto/$(DEPDIR)/libarmcrypto_la-aead_aes256gcm_armcrypto.Plo
-rm -f crypto_aead/chacha20poly1305/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Plo
@@ -3766,6 +3967,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20.Plo
-rm -f crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20_ref2.Plo
-rm -f crypto_core/salsa/ref/$(DEPDIR)/libsodium_la-core_salsa_ref.Plo
+ -rm -f crypto_core/softaes/$(DEPDIR)/libsodium_la-softaes.Plo
-rm -f crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo
-rm -f crypto_generichash/blake2b/$(DEPDIR)/libsodium_la-generichash_blake2.Plo
-rm -f crypto_generichash/blake2b/ref/$(DEPDIR)/libavx2_la-blake2b-compress-avx2.Plo
diff --git a/src/libsodium/crypto_aead/aegis128l/aead_aegis128l.c b/src/libsodium/crypto_aead/aegis128l/aead_aegis128l.c
new file mode 100644
index 0000000000..01ba2a7e94
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aead_aegis128l.c
@@ -0,0 +1,158 @@
+
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis128l.h"
+#include "private/common.h"
+#include "private/implementations.h"
+#include "randombytes.h"
+#include "runtime.h"
+
+#include "aegis128l_soft.h"
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+#include "aegis128l_armcrypto.h"
+#endif
+
+#if defined(HAVE_AVXINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+#include "aegis128l_aesni.h"
+#endif
+
+static const aegis128l_implementation *implementation = &aegis128l_soft_implementation;
+
+size_t
+crypto_aead_aegis128l_keybytes(void)
+{
+ return crypto_aead_aegis128l_KEYBYTES;
+}
+
+size_t
+crypto_aead_aegis128l_nsecbytes(void)
+{
+ return crypto_aead_aegis128l_NSECBYTES;
+}
+
+size_t
+crypto_aead_aegis128l_npubbytes(void)
+{
+ return crypto_aead_aegis128l_NPUBBYTES;
+}
+
+size_t
+crypto_aead_aegis128l_abytes(void)
+{
+ return crypto_aead_aegis128l_ABYTES;
+}
+
+size_t
+crypto_aead_aegis128l_messagebytes_max(void)
+{
+ return crypto_aead_aegis128l_MESSAGEBYTES_MAX;
+}
+
+void
+crypto_aead_aegis128l_keygen(unsigned char k[crypto_aead_aegis128l_KEYBYTES])
+{
+ randombytes_buf(k, crypto_aead_aegis128l_KEYBYTES);
+}
+
+int
+crypto_aead_aegis128l_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;
+
+ ret = crypto_aead_aegis128l_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_aegis128l_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_aegis128l_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_aegis128l_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)
+{
+ const size_t maclen = crypto_aead_aegis128l_ABYTES;
+
+ if (maclen_p != NULL) {
+ *maclen_p = maclen;
+ }
+ if (mlen > crypto_aead_aegis128l_MESSAGEBYTES_MAX ||
+ adlen > crypto_aead_aegis128l_MESSAGEBYTES_MAX) {
+ sodium_misuse();
+ }
+ return implementation->encrypt_detached(c, mac, maclen, m, (size_t) mlen, ad, (size_t) adlen,
+ npub, k);
+}
+
+int
+crypto_aead_aegis128l_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)
+{
+ const size_t maclen = crypto_aead_aegis128l_ABYTES;
+
+ if (clen > crypto_aead_aegis128l_MESSAGEBYTES_MAX ||
+ adlen > crypto_aead_aegis128l_MESSAGEBYTES_MAX) {
+ return -1;
+ }
+ return implementation->decrypt_detached(m, c, (size_t) clen, mac, maclen, ad, (size_t) adlen,
+ npub, k);
+}
+
+int
+_crypto_aead_aegis128l_pick_best_implementation(void)
+{
+ implementation = &aegis128l_soft_implementation;
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+ if (sodium_runtime_has_armcrypto()) {
+ implementation = &aegis128l_armcrypto_implementation;
+ return 0;
+ }
+#endif
+
+#if defined(HAVE_AVXINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+ if (sodium_runtime_has_aesni() & sodium_runtime_has_avx()) {
+ implementation = &aegis128l_aesni_implementation;
+ return 0;
+ }
+#endif
+ return 0; /* LCOV_EXCL_LINE */
+}
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.c b/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.c
new file mode 100644
index 0000000000..93782ce288
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.c
@@ -0,0 +1,70 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis128l.h"
+#include "crypto_verify_16.h"
+#include "crypto_verify_32.h"
+#include "export.h"
+#include "utils.h"
+
+#include "private/common.h"
+
+#if defined(HAVE_AVXINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+
+#include "aegis128l_aesni.h"
+
+#ifdef __clang__
+#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function)
+#elif defined(__GNUC__)
+#pragma GCC target("aes,avx")
+#endif
+
+#include "private/sse2_64_32.h"
+#include
+#include
+
+#define AES_BLOCK_LENGTH 16
+
+typedef __m128i aes_block_t;
+#define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B))
+#define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B))
+#define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A))
+#define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B))
+#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B))
+#define AES_ENC(A, B) _mm_aesenc_si128((A), (B))
+
+static inline void
+aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2)
+{
+ aes_block_t tmp;
+
+ tmp = state[7];
+ state[7] = AES_ENC(state[6], state[7]);
+ state[6] = AES_ENC(state[5], state[6]);
+ 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_ENC(tmp, state[0]);
+
+ state[0] = AES_BLOCK_XOR(state[0], d1);
+ state[4] = AES_BLOCK_XOR(state[4], d2);
+}
+
+#include "aegis128l_common.h"
+
+struct aegis128l_implementation aegis128l_aesni_implementation = { SODIUM_C99(.encrypt_detached =)
+ encrypt_detached,
+ SODIUM_C99(.decrypt_detached =)
+ decrypt_detached };
+
+#ifdef __clang__
+#pragma clang attribute pop
+#endif
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.h b/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.h
new file mode 100644
index 0000000000..65e52dab1b
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.h
@@ -0,0 +1,8 @@
+#ifndef aegis128l_aesni_H
+#define aegis128l_aesni_H
+
+#include "implementations.h"
+
+extern struct aegis128l_implementation aegis128l_aesni_implementation;
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.c b/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.c
new file mode 100644
index 0000000000..8f2adf8c88
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.c
@@ -0,0 +1,69 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis128l.h"
+#include "crypto_verify_16.h"
+#include "crypto_verify_32.h"
+#include "export.h"
+#include "utils.h"
+
+#include "private/common.h"
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+
+#include "aegis128l_armcrypto.h"
+
+#ifdef __clang__
+#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
+#elif defined(__GNUC__)
+#pragma GCC target("neon,crypto,aes")
+#endif
+
+#ifndef __ARM_FEATURE_AES
+#define __ARM_FEATURE_AES 1
+#endif
+
+#include
+
+#define AES_BLOCK_LENGTH 16
+
+typedef uint8x16_t aes_block_t;
+#define AES_BLOCK_XOR(A, B) veorq_u8((A), (B))
+#define AES_BLOCK_AND(A, B) vandq_u8((A), (B))
+#define AES_BLOCK_LOAD(A) vld1q_u8(A)
+#define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1))
+#define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B))
+#define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B))
+
+static inline void
+aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2)
+{
+ aes_block_t tmp;
+
+ tmp = state[7];
+ state[7] = AES_ENC(state[6], state[7]);
+ state[6] = AES_ENC(state[5], state[6]);
+ state[5] = AES_ENC(state[4], state[5]);
+ state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2);
+ 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(AES_ENC(tmp, state[0]), d1);
+}
+
+#include "aegis128l_common.h"
+
+struct aegis128l_implementation aegis128l_armcrypto_implementation = {
+ SODIUM_C99(.encrypt_detached =) encrypt_detached,
+ SODIUM_C99(.decrypt_detached =) decrypt_detached
+};
+
+#ifdef __clang__
+#pragma clang attribute pop
+#endif
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.h b/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.h
new file mode 100644
index 0000000000..41ad43cba0
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.h
@@ -0,0 +1,8 @@
+#ifndef aegis128l_armcrypto_H
+#define aegis128l_armcrypto_H
+
+#include "implementations.h"
+
+extern struct aegis128l_implementation aegis128l_armcrypto_implementation;
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_common.h b/src/libsodium/crypto_aead/aegis128l/aegis128l_common.h
new file mode 100644
index 0000000000..7a130b0cfc
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_common.h
@@ -0,0 +1,229 @@
+#define RATE 32
+
+static void
+aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state)
+{
+ static CRYPTO_ALIGN(AES_BLOCK_LENGTH)
+ const uint8_t c0_[AES_BLOCK_LENGTH] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d,
+ 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 };
+ static CRYPTO_ALIGN(AES_BLOCK_LENGTH)
+ const uint8_t c1_[AES_BLOCK_LENGTH] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1,
+ 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd };
+
+ const aes_block_t c0 = AES_BLOCK_LOAD(c0_);
+ const aes_block_t c1 = AES_BLOCK_LOAD(c1_);
+ aes_block_t k;
+ aes_block_t n;
+ int i;
+
+ k = AES_BLOCK_LOAD(key);
+ n = AES_BLOCK_LOAD(nonce);
+
+ state[0] = AES_BLOCK_XOR(k, n);
+ state[1] = c1;
+ state[2] = c0;
+ state[3] = c1;
+ state[4] = AES_BLOCK_XOR(k, n);
+ state[5] = AES_BLOCK_XOR(k, c0);
+ state[6] = AES_BLOCK_XOR(k, c1);
+ state[7] = AES_BLOCK_XOR(k, c0);
+ for (i = 0; i < 10; i++) {
+ aegis128l_update(state, n, k);
+ }
+}
+
+static void
+aegis128l_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state)
+{
+ aes_block_t tmp;
+ int i;
+
+ tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3);
+ tmp = AES_BLOCK_XOR(tmp, state[2]);
+
+ for (i = 0; i < 7; i++) {
+ aegis128l_update(state, tmp, tmp);
+ }
+
+ if (maclen == 16) {
+ tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4]));
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2]));
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0]));
+ AES_BLOCK_STORE(mac, tmp);
+ } else if (maclen == 32) {
+ tmp = AES_BLOCK_XOR(state[3], state[2]);
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0]));
+ AES_BLOCK_STORE(mac, tmp);
+ tmp = AES_BLOCK_XOR(state[7], state[6]);
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4]));
+ AES_BLOCK_STORE(mac + 16, tmp);
+ } else {
+ memset(mac, 0, maclen);
+ }
+}
+
+static inline void
+aegis128l_absorb(const uint8_t *const src, aes_block_t *const state)
+{
+ aes_block_t msg0, msg1;
+
+ msg0 = AES_BLOCK_LOAD(src);
+ msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH);
+ aegis128l_update(state, msg0, msg1);
+}
+
+static void
+aegis128l_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state)
+{
+ aes_block_t msg0, msg1;
+ aes_block_t tmp0, tmp1;
+
+ msg0 = AES_BLOCK_LOAD(src);
+ msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH);
+ tmp0 = AES_BLOCK_XOR(msg0, state[6]);
+ tmp0 = AES_BLOCK_XOR(tmp0, state[1]);
+ tmp1 = AES_BLOCK_XOR(msg1, state[5]);
+ tmp1 = AES_BLOCK_XOR(tmp1, state[2]);
+ tmp0 = AES_BLOCK_XOR(tmp0, AES_BLOCK_AND(state[2], state[3]));
+ tmp1 = AES_BLOCK_XOR(tmp1, AES_BLOCK_AND(state[6], state[7]));
+ AES_BLOCK_STORE(dst, tmp0);
+ AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, tmp1);
+
+ aegis128l_update(state, msg0, msg1);
+}
+
+static void
+aegis128l_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state)
+{
+ aes_block_t msg0, msg1;
+
+ msg0 = AES_BLOCK_LOAD(src);
+ msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH);
+ msg0 = AES_BLOCK_XOR(msg0, state[6]);
+ msg0 = AES_BLOCK_XOR(msg0, state[1]);
+ msg1 = AES_BLOCK_XOR(msg1, state[5]);
+ msg1 = AES_BLOCK_XOR(msg1, state[2]);
+ msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3]));
+ msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7]));
+ AES_BLOCK_STORE(dst, msg0);
+ AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, msg1);
+
+ aegis128l_update(state, msg0, msg1);
+}
+
+static void
+aegis128l_declast(uint8_t *const dst, const uint8_t *const src, size_t len,
+ aes_block_t *const state)
+{
+ uint8_t pad[RATE];
+ aes_block_t msg0, msg1;
+
+ memset(pad, 0, sizeof pad);
+ memcpy(pad, src, len);
+
+ msg0 = AES_BLOCK_LOAD(pad);
+ msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH);
+ msg0 = AES_BLOCK_XOR(msg0, state[6]);
+ msg0 = AES_BLOCK_XOR(msg0, state[1]);
+ msg1 = AES_BLOCK_XOR(msg1, state[5]);
+ msg1 = AES_BLOCK_XOR(msg1, state[2]);
+ msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3]));
+ msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7]));
+ AES_BLOCK_STORE(pad, msg0);
+ AES_BLOCK_STORE(pad + AES_BLOCK_LENGTH, msg1);
+
+ memset(pad + len, 0, sizeof pad - len);
+ memcpy(dst, pad, len);
+
+ msg0 = AES_BLOCK_LOAD(pad);
+ msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH);
+
+ aegis128l_update(state, msg0, msg1);
+}
+
+static int
+encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen,
+ const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k)
+{
+ aes_block_t state[8];
+ CRYPTO_ALIGN(RATE) uint8_t src[RATE];
+ CRYPTO_ALIGN(RATE) uint8_t dst[RATE];
+ size_t i;
+
+ aegis128l_init(k, npub, state);
+
+ for (i = 0; i + RATE <= adlen; i += RATE) {
+ aegis128l_absorb(ad + i, state);
+ }
+ if (adlen % RATE) {
+ memset(src, 0, RATE);
+ memcpy(src, ad + i, adlen % RATE);
+ aegis128l_absorb(src, state);
+ }
+ for (i = 0; i + RATE <= mlen; i += RATE) {
+ aegis128l_enc(c + i, m + i, state);
+ }
+ if (mlen % RATE) {
+ memset(src, 0, RATE);
+ memcpy(src, m + i, mlen % RATE);
+ aegis128l_enc(dst, src, state);
+ memcpy(c + i, dst, mlen % RATE);
+ }
+
+ aegis128l_mac(mac, maclen, adlen, mlen, state);
+
+ return 0;
+}
+
+static int
+decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen,
+ const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k)
+{
+ aes_block_t state[8];
+ CRYPTO_ALIGN(RATE) uint8_t src[RATE];
+ CRYPTO_ALIGN(RATE) uint8_t dst[RATE];
+ CRYPTO_ALIGN(16) uint8_t computed_mac[32];
+ const size_t mlen = clen;
+ size_t i;
+ int ret;
+
+ aegis128l_init(k, npub, state);
+
+ for (i = 0; i + RATE <= adlen; i += RATE) {
+ aegis128l_absorb(ad + i, state);
+ }
+ if (adlen % RATE) {
+ memset(src, 0, RATE);
+ memcpy(src, ad + i, adlen % RATE);
+ aegis128l_absorb(src, state);
+ }
+ if (m != NULL) {
+ for (i = 0; i + RATE <= mlen; i += RATE) {
+ aegis128l_dec(m + i, c + i, state);
+ }
+ } else {
+ for (i = 0; i + RATE <= mlen; i += RATE) {
+ aegis128l_dec(dst, c + i, state);
+ }
+ }
+ if (mlen % RATE) {
+ if (m != NULL) {
+ aegis128l_declast(m + i, c + i, mlen % RATE, state);
+ } else {
+ aegis128l_declast(dst, c + i, mlen % RATE, state);
+ }
+ }
+
+ COMPILER_ASSERT(sizeof computed_mac >= 32);
+ aegis128l_mac(computed_mac, maclen, adlen, mlen, state);
+ ret = -1;
+ if (maclen == 16) {
+ ret = crypto_verify_16(computed_mac, mac);
+ } else if (maclen == 32) {
+ ret = crypto_verify_32(computed_mac, mac);
+ }
+ if (ret != 0 && m != NULL) {
+ memset(m, 0, mlen);
+ }
+ return ret;
+}
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.c b/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.c
new file mode 100644
index 0000000000..e1d60ecb4f
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.c
@@ -0,0 +1,59 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis128l.h"
+#include "crypto_verify_16.h"
+#include "crypto_verify_32.h"
+#include "export.h"
+#include "utils.h"
+
+#include "private/common.h"
+
+#include "crypto_aead_aegis128l.h"
+#include "private/softaes.h"
+
+#if 1
+
+#include "aegis128l_soft.h"
+
+#define AES_BLOCK_LENGTH 16
+
+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
+aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2)
+{
+ aes_block_t tmp;
+
+ tmp = state[7];
+ state[7] = AES_ENC(state[6], state[7]);
+ state[6] = AES_ENC(state[5], state[6]);
+ 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_ENC(tmp, state[0]);
+
+ state[0] = AES_BLOCK_XOR(state[0], d1);
+ state[4] = AES_BLOCK_XOR(state[4], d2);
+}
+
+#include "aegis128l_common.h"
+
+struct aegis128l_implementation aegis128l_soft_implementation = { SODIUM_C99(.encrypt_detached =)
+ encrypt_detached,
+ SODIUM_C99(.decrypt_detached =)
+ decrypt_detached };
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.h b/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.h
new file mode 100644
index 0000000000..df8ddece08
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.h
@@ -0,0 +1,8 @@
+#ifndef aegis128l_soft_H
+#define aegis128l_soft_H
+
+#include "implementations.h"
+
+extern struct aegis128l_implementation aegis128l_soft_implementation;
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis128l/implementations.h b/src/libsodium/crypto_aead/aegis128l/implementations.h
new file mode 100644
index 0000000000..29e7b1cb88
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis128l/implementations.h
@@ -0,0 +1,17 @@
+#ifndef aegis128l_implementations_H
+#define aegis128l_implementations_H
+
+#include
+#include
+
+#include "crypto_aead_aegis128l.h"
+
+typedef struct aegis128l_implementation {
+ int (*encrypt_detached)(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen,
+ const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k);
+ int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac,
+ size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub,
+ const uint8_t *k);
+} aegis128l_implementation;
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis256/aead_aegis256.c b/src/libsodium/crypto_aead/aegis256/aead_aegis256.c
new file mode 100644
index 0000000000..1ddfff1096
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aead_aegis256.c
@@ -0,0 +1,157 @@
+
+#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 "aegis256_soft.h"
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+#include "aegis256_armcrypto.h"
+#endif
+
+#if defined(HAVE_AVXINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+#include "aegis256_aesni.h"
+#endif
+
+static const aegis256_implementation *implementation = &aegis256_soft_implementation;
+
+size_t
+crypto_aead_aegis256_keybytes(void)
+{
+ return crypto_aead_aegis256_KEYBYTES;
+}
+
+size_t
+crypto_aead_aegis256_nsecbytes(void)
+{
+ return crypto_aead_aegis256_NSECBYTES;
+}
+
+size_t
+crypto_aead_aegis256_npubbytes(void)
+{
+ return crypto_aead_aegis256_NPUBBYTES;
+}
+
+size_t
+crypto_aead_aegis256_abytes(void)
+{
+ return crypto_aead_aegis256_ABYTES;
+}
+
+size_t
+crypto_aead_aegis256_messagebytes_max(void)
+{
+ return crypto_aead_aegis256_MESSAGEBYTES_MAX;
+}
+
+void
+crypto_aead_aegis256_keygen(unsigned char k[crypto_aead_aegis256_KEYBYTES])
+{
+ randombytes_buf(k, crypto_aead_aegis256_KEYBYTES);
+}
+
+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;
+
+ 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(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_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)
+{
+ const size_t maclen = crypto_aead_aegis256_ABYTES;
+
+ if (maclen_p != NULL) {
+ *maclen_p = maclen;
+ }
+ if (mlen > crypto_aead_aegis256_MESSAGEBYTES_MAX ||
+ adlen > crypto_aead_aegis256_MESSAGEBYTES_MAX) {
+ sodium_misuse();
+ }
+ return implementation->encrypt_detached(c, mac, maclen, m, (size_t) mlen, ad, (size_t) adlen,
+ 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)
+{
+ const size_t maclen = crypto_aead_aegis256_ABYTES;
+
+ if (clen > crypto_aead_aegis256_MESSAGEBYTES_MAX ||
+ adlen > crypto_aead_aegis256_MESSAGEBYTES_MAX) {
+ return -1;
+ }
+ return implementation->decrypt_detached(m, c, (size_t) clen, mac, maclen, ad, (size_t) adlen,
+ npub, k);
+}
+
+int
+_crypto_aead_aegis256_pick_best_implementation(void)
+{
+ implementation = &aegis256_soft_implementation;
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+ if (sodium_runtime_has_armcrypto()) {
+ implementation = &aegis256_armcrypto_implementation;
+ return 0;
+ }
+#endif
+
+#if defined(HAVE_AVXINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+ if (sodium_runtime_has_aesni() & sodium_runtime_has_avx()) {
+ implementation = &aegis256_aesni_implementation;
+ return 0;
+ }
+#endif
+ return 0; /* LCOV_EXCL_LINE */
+}
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_aesni.c b/src/libsodium/crypto_aead/aegis256/aegis256_aesni.c
new file mode 100644
index 0000000000..96aa0036ba
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_aesni.c
@@ -0,0 +1,65 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis256.h"
+#include "crypto_verify_16.h"
+#include "crypto_verify_32.h"
+#include "export.h"
+#include "utils.h"
+
+#include "private/common.h"
+
+#if defined(HAVE_AVXINTRIN_H) && defined(HAVE_WMMINTRIN_H)
+
+#include "aegis256_aesni.h"
+
+#ifdef __clang__
+#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function)
+#elif defined(__GNUC__)
+#pragma GCC target("aes,avx")
+#endif
+
+#include "private/sse2_64_32.h"
+#include
+#include
+
+#define AES_BLOCK_LENGTH 16
+
+typedef __m128i aes_block_t;
+#define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B))
+#define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B))
+#define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A))
+#define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B))
+#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B))
+#define AES_ENC(A, B) _mm_aesenc_si128((A), (B))
+
+static inline void
+aegis256_update(aes_block_t *const state, const aes_block_t d)
+{
+ aes_block_t tmp;
+
+ tmp = state[5];
+ 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(AES_ENC(tmp, state[0]), d);
+}
+
+#include "aegis256_common.h"
+
+struct aegis256_implementation aegis256_aesni_implementation = { SODIUM_C99(.encrypt_detached =)
+ encrypt_detached,
+ SODIUM_C99(.decrypt_detached =)
+ decrypt_detached };
+
+#ifdef __clang__
+#pragma clang attribute pop
+#endif
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_aesni.h b/src/libsodium/crypto_aead/aegis256/aegis256_aesni.h
new file mode 100644
index 0000000000..21f4d819b9
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_aesni.h
@@ -0,0 +1,8 @@
+#ifndef aegis256_aesni_H
+#define aegis256_aesni_H
+
+#include "implementations.h"
+
+extern struct aegis256_implementation aegis256_aesni_implementation;
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.c b/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.c
new file mode 100644
index 0000000000..62974ae2ab
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.c
@@ -0,0 +1,67 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis256.h"
+#include "crypto_verify_16.h"
+#include "crypto_verify_32.h"
+#include "export.h"
+#include "utils.h"
+
+#include "private/common.h"
+
+#if defined(HAVE_ARMCRYPTO) && defined(NATIVE_LITTLE_ENDIAN)
+
+#include "aegis256_armcrypto.h"
+
+#ifdef __clang__
+#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
+#elif defined(__GNUC__)
+#pragma GCC target("neon,crypto,aes")
+#endif
+
+#ifndef __ARM_FEATURE_AES
+#define __ARM_FEATURE_AES 1
+#endif
+
+#include
+
+#define AES_BLOCK_LENGTH 16
+
+typedef uint8x16_t aes_block_t;
+#define AES_BLOCK_XOR(A, B) veorq_u8((A), (B))
+#define AES_BLOCK_AND(A, B) vandq_u8((A), (B))
+#define AES_BLOCK_LOAD(A) vld1q_u8(A)
+#define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1))
+#define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B))
+#define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B))
+
+static inline void
+aegis256_update(aes_block_t *const state, const aes_block_t d)
+{
+ aes_block_t tmp;
+
+ tmp = state[5];
+ 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(AES_ENC(tmp, state[0]), d);
+}
+
+#include "aegis256_common.h"
+
+struct aegis256_implementation aegis256_armcrypto_implementation = { SODIUM_C99(.encrypt_detached =)
+ encrypt_detached,
+ SODIUM_C99(.decrypt_detached =)
+ decrypt_detached };
+
+#ifdef __clang__
+#pragma clang attribute pop
+#endif
+
+#endif
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.h b/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.h
new file mode 100644
index 0000000000..a9bd4ad392
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.h
@@ -0,0 +1,8 @@
+#ifndef aegis256_armcrypto_H
+#define aegis256_armcrypto_H
+
+#include "implementations.h"
+
+extern struct aegis256_implementation aegis256_armcrypto_implementation;
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_common.h b/src/libsodium/crypto_aead/aegis256/aegis256_common.h
new file mode 100644
index 0000000000..5a486f2c5e
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_common.h
@@ -0,0 +1,214 @@
+#define RATE 16
+
+static void
+aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state)
+{
+ static CRYPTO_ALIGN(AES_BLOCK_LENGTH)
+ const uint8_t c0_[AES_BLOCK_LENGTH] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d,
+ 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 };
+ static CRYPTO_ALIGN(AES_BLOCK_LENGTH)
+ const uint8_t c1_[AES_BLOCK_LENGTH] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1,
+ 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd };
+
+ const aes_block_t c0 = AES_BLOCK_LOAD(c0_);
+ const aes_block_t c1 = AES_BLOCK_LOAD(c1_);
+ const aes_block_t k0 = AES_BLOCK_LOAD(key);
+ const aes_block_t k1 = AES_BLOCK_LOAD(key + AES_BLOCK_LENGTH);
+ const aes_block_t n0 = AES_BLOCK_LOAD(nonce);
+ const aes_block_t n1 = AES_BLOCK_LOAD(nonce + AES_BLOCK_LENGTH);
+ const aes_block_t k0_n0 = AES_BLOCK_XOR(k0, n0);
+ const aes_block_t k1_n1 = AES_BLOCK_XOR(k1, n1);
+ int i;
+
+ state[0] = k0_n0;
+ state[1] = k1_n1;
+ state[2] = c1;
+ state[3] = c0;
+ state[4] = AES_BLOCK_XOR(k0, c0);
+ state[5] = AES_BLOCK_XOR(k1, c1);
+ for (i = 0; i < 4; i++) {
+ aegis256_update(state, k0);
+ aegis256_update(state, k1);
+ aegis256_update(state, k0_n0);
+ aegis256_update(state, k1_n1);
+ }
+}
+
+static void
+aegis256_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state)
+{
+ aes_block_t tmp;
+ int i;
+
+ tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3);
+ tmp = AES_BLOCK_XOR(tmp, state[3]);
+
+ for (i = 0; i < 7; i++) {
+ aegis256_update(state, tmp);
+ }
+
+ if (maclen == 16) {
+ tmp = AES_BLOCK_XOR(state[5], state[4]);
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2]));
+ tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0]));
+ AES_BLOCK_STORE(mac, tmp);
+ } else if (maclen == 32) {
+ tmp = AES_BLOCK_XOR(AES_BLOCK_XOR(state[2], state[1]), state[0]);
+ AES_BLOCK_STORE(mac, tmp);
+ tmp = AES_BLOCK_XOR(AES_BLOCK_XOR(state[5], state[4]), state[3]);
+ AES_BLOCK_STORE(mac + 16, tmp);
+ } else {
+ memset(mac, 0, maclen);
+ }
+}
+
+static inline void
+aegis256_absorb(const uint8_t *const src, aes_block_t *const state)
+{
+ aes_block_t msg;
+
+ msg = AES_BLOCK_LOAD(src);
+ aegis256_update(state, msg);
+}
+
+static void
+aegis256_enc(uint8_t *const dst, const uint8_t *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(uint8_t *const dst, const uint8_t *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 void
+aegis256_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aes_block_t *const state)
+{
+ uint8_t pad[RATE];
+ aes_block_t msg;
+
+ memset(pad, 0, sizeof pad);
+ memcpy(pad, src, len);
+
+ msg = AES_BLOCK_LOAD(pad);
+ 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(pad, msg);
+
+ memset(pad + len, 0, sizeof pad - len);
+ memcpy(dst, pad, len);
+
+ msg = AES_BLOCK_LOAD(pad);
+
+ aegis256_update(state, msg);
+}
+
+static int
+encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen,
+ const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k)
+{
+ aes_block_t state[6];
+ CRYPTO_ALIGN(RATE) uint8_t src[RATE];
+ CRYPTO_ALIGN(RATE) uint8_t dst[RATE];
+ size_t i;
+
+ aegis256_init(k, npub, state);
+
+ for (i = 0; i + RATE <= adlen; i += RATE) {
+ aegis256_absorb(ad + i, state);
+ }
+ if (adlen % RATE) {
+ memset(src, 0, RATE);
+ memcpy(src, ad + i, adlen % RATE);
+ aegis256_absorb(src, state);
+ }
+ for (i = 0; i + RATE <= mlen; i += RATE) {
+ aegis256_enc(c + i, m + i, state);
+ }
+ if (mlen % RATE) {
+ memset(src, 0, RATE);
+ memcpy(src, m + i, mlen % RATE);
+ aegis256_enc(dst, src, state);
+ memcpy(c + i, dst, mlen % RATE);
+ }
+
+ aegis256_mac(mac, maclen, adlen, mlen, state);
+
+ return 0;
+}
+
+static int
+decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen,
+ const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k)
+{
+ aes_block_t state[6];
+ CRYPTO_ALIGN(RATE) uint8_t src[RATE];
+ CRYPTO_ALIGN(RATE) uint8_t dst[RATE];
+ CRYPTO_ALIGN(16) uint8_t computed_mac[32];
+ const size_t mlen = clen;
+ size_t i;
+ int ret;
+
+ aegis256_init(k, npub, state);
+
+ for (i = 0; i + RATE <= adlen; i += RATE) {
+ aegis256_absorb(ad + i, state);
+ }
+ if (adlen % RATE) {
+ memset(src, 0, RATE);
+ memcpy(src, ad + i, adlen % RATE);
+ aegis256_absorb(src, state);
+ }
+ if (m != NULL) {
+ for (i = 0; i + RATE <= mlen; i += RATE) {
+ aegis256_dec(m + i, c + i, state);
+ }
+ } else {
+ for (i = 0; i + RATE <= mlen; i += RATE) {
+ aegis256_dec(dst, c + i, state);
+ }
+ }
+ if (mlen % RATE) {
+ if (m != NULL) {
+ aegis256_declast(m + i, c + i, mlen % RATE, state);
+ } else {
+ aegis256_declast(dst, c + i, mlen % RATE, state);
+ }
+ }
+
+ COMPILER_ASSERT(sizeof computed_mac >= 32);
+ aegis256_mac(computed_mac, maclen, adlen, mlen, state);
+ ret = -1;
+ if (maclen == 16) {
+ ret = crypto_verify_16(computed_mac, mac);
+ } else if (maclen == 32) {
+ ret = crypto_verify_32(computed_mac, mac);
+ }
+ if (ret != 0 && m != NULL) {
+ memset(m, 0, mlen);
+ }
+ return ret;
+}
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_soft.c b/src/libsodium/crypto_aead/aegis256/aegis256_soft.c
new file mode 100644
index 0000000000..38024d17ad
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_soft.c
@@ -0,0 +1,54 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "core.h"
+#include "crypto_aead_aegis256.h"
+#include "crypto_verify_16.h"
+#include "crypto_verify_32.h"
+#include "export.h"
+#include "utils.h"
+
+#include "private/common.h"
+
+#include "crypto_aead_aegis256.h"
+#include "private/softaes.h"
+
+#if 1
+
+#include "aegis256_soft.h"
+
+#define AES_BLOCK_LENGTH 16
+
+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 d)
+{
+ aes_block_t tmp;
+
+ tmp = state[5];
+ 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(AES_ENC(tmp, state[0]), d);
+}
+
+#include "aegis256_common.h"
+
+struct aegis256_implementation aegis256_soft_implementation = { SODIUM_C99(.encrypt_detached =)
+ encrypt_detached,
+ SODIUM_C99(.decrypt_detached =)
+ decrypt_detached };
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis256/aegis256_soft.h b/src/libsodium/crypto_aead/aegis256/aegis256_soft.h
new file mode 100644
index 0000000000..c20198de3f
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/aegis256_soft.h
@@ -0,0 +1,8 @@
+#ifndef aegis256_soft_H
+#define aegis256_soft_H
+
+#include "implementations.h"
+
+extern struct aegis256_implementation aegis256_soft_implementation;
+
+#endif
\ No newline at end of file
diff --git a/src/libsodium/crypto_aead/aegis256/implementations.h b/src/libsodium/crypto_aead/aegis256/implementations.h
new file mode 100644
index 0000000000..9efbf38763
--- /dev/null
+++ b/src/libsodium/crypto_aead/aegis256/implementations.h
@@ -0,0 +1,17 @@
+#ifndef aegis256_implementations_H
+#define aegis256_implementations_H
+
+#include
+#include
+
+#include "crypto_aead_aegis256.h"
+
+typedef struct aegis256_implementation {
+ int (*encrypt_detached)(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen,
+ const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k);
+ int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac,
+ size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub,
+ const uint8_t *k);
+} aegis256_implementation;
+
+#endif
diff --git a/src/libsodium/crypto_core/softaes/softaes.c b/src/libsodium/crypto_core/softaes/softaes.c
new file mode 100644
index 0000000000..ae469c8acd
--- /dev/null
+++ b/src/libsodium/crypto_core/softaes/softaes.c
@@ -0,0 +1,143 @@
+#include
+#include
+#include
+#include
+
+#include "private/common.h"
+#include "private/softaes.h"
+
+uint32_t _aes_lut[256] __attribute__ ((visibility ("hidden"))) = {
+ 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
+ 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
+ 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
+ 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
+ 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
+ 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
+ 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
+ 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
+ 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
+ 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
+ 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
+ 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
+ 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
+ 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
+ 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
+ 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
+ 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
+ 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
+ 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
+ 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
+ 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
+ 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
+ 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
+ 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
+ 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
+ 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
+ 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
+ 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
+ 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
+ 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
+ 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
+ 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c
+};
+
+static const uint32_t * const LUT = _aes_lut;
+
+#ifndef SOFTAES_STRIDE
+# ifdef FAVOR_PERFORMANCE
+# define SOFTAES_STRIDE 256
+# else
+# define SOFTAES_STRIDE 16
+# endif
+#endif
+
+static SoftAesBlock
+_encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4])
+{
+ CRYPTO_ALIGN(64) uint32_t t[4][4][256 / SOFTAES_STRIDE];
+ CRYPTO_ALIGN(64) uint8_t of[4][4];
+ CRYPTO_ALIGN(64) SoftAesBlock out;
+ size_t i;
+ size_t j;
+
+ for (j = 0; j < 4; j++) {
+ of[j][0] = ix0[j] % SOFTAES_STRIDE;
+ of[j][1] = ix1[j] % SOFTAES_STRIDE;
+ of[j][2] = ix2[j] % SOFTAES_STRIDE;
+ of[j][3] = ix3[j] % SOFTAES_STRIDE;
+ }
+ for (i = 0; i < 256 / SOFTAES_STRIDE; i++) {
+ for (j = 0; j < 4; j++) {
+ t[j][0][i] = LUT[(i * SOFTAES_STRIDE) | of[j][0]];
+ t[j][1][i] = LUT[(i * SOFTAES_STRIDE) | of[j][1]];
+ t[j][2][i] = LUT[(i * SOFTAES_STRIDE) | of[j][2]];
+ t[j][3][i] = LUT[(i * SOFTAES_STRIDE) | of[j][3]];
+ }
+ }
+
+#ifdef HAVE_INLINE_ASM
+ __asm__ __volatile__("" : : "r"(t) : "memory");
+#endif
+
+ out.w0 = t[0][0][ix0[0] / SOFTAES_STRIDE];
+ out.w0 ^= ROTL32(t[0][1][ix1[0] / SOFTAES_STRIDE], 8);
+ out.w0 ^= ROTL32(t[0][2][ix2[0] / SOFTAES_STRIDE], 16);
+ out.w0 ^= ROTL32(t[0][3][ix3[0] / SOFTAES_STRIDE], 24);
+
+ out.w1 = t[1][0][ix0[1] / SOFTAES_STRIDE];
+ out.w1 ^= ROTL32(t[1][1][ix1[1] / SOFTAES_STRIDE], 8);
+ out.w1 ^= ROTL32(t[1][2][ix2[1] / SOFTAES_STRIDE], 16);
+ out.w1 ^= ROTL32(t[1][3][ix3[1] / SOFTAES_STRIDE], 24);
+
+ out.w2 = t[2][0][ix0[2] / SOFTAES_STRIDE];
+ out.w2 ^= ROTL32(t[2][1][ix1[2] / SOFTAES_STRIDE], 8);
+ out.w2 ^= ROTL32(t[2][2][ix2[2] / SOFTAES_STRIDE], 16);
+ out.w2 ^= ROTL32(t[2][3][ix3[2] / SOFTAES_STRIDE], 24);
+
+ out.w3 = t[3][0][ix0[3] / SOFTAES_STRIDE];
+ out.w3 ^= ROTL32(t[3][1][ix1[3] / SOFTAES_STRIDE], 8);
+ out.w3 ^= ROTL32(t[3][2][ix2[3] / SOFTAES_STRIDE], 16);
+ out.w3 ^= ROTL32(t[3][3][ix3[3] / SOFTAES_STRIDE], 24);
+
+ return out;
+}
+
+SoftAesBlock
+softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock rk)
+{
+ CRYPTO_ALIGN(64) SoftAesBlock out;
+ CRYPTO_ALIGN(64) uint8_t ix0[4], ix1[4], ix2[4], ix3[4];
+ const uint32_t s0 = block.w0;
+ const uint32_t s1 = block.w1;
+ const uint32_t s2 = block.w2;
+ const uint32_t s3 = block.w3;
+
+ ix0[0] = (uint8_t) s0;
+ ix0[1] = (uint8_t) s1;
+ ix0[2] = (uint8_t) s2;
+ ix0[3] = (uint8_t) s3;
+
+ ix1[0] = (uint8_t) (s1 >> 8);
+ ix1[1] = (uint8_t) (s2 >> 8);
+ ix1[2] = (uint8_t) (s3 >> 8);
+ ix1[3] = (uint8_t) (s0 >> 8);
+
+ ix2[0] = (uint8_t) (s2 >> 16);
+ ix2[1] = (uint8_t) (s3 >> 16);
+ ix2[2] = (uint8_t) (s0 >> 16);
+ ix2[3] = (uint8_t) (s1 >> 16);
+
+ ix3[0] = (uint8_t) (s3 >> 24);
+ ix3[1] = (uint8_t) (s0 >> 24);
+ ix3[2] = (uint8_t) (s1 >> 24);
+ ix3[3] = (uint8_t) (s2 >> 24);
+
+ out = _encrypt(ix0, ix1, ix2, ix3);
+
+ out.w0 ^= rk.w0;
+ out.w1 ^= rk.w1;
+ out.w2 ^= rk.w2;
+ out.w3 ^= rk.w3;
+
+ return out;
+}
diff --git a/src/libsodium/include/Makefile.am b/src/libsodium/include/Makefile.am
index 7476bd974d..3146ec8e64 100644
--- a/src/libsodium/include/Makefile.am
+++ b/src/libsodium/include/Makefile.am
@@ -3,6 +3,8 @@ SODIUM_EXPORT = \
sodium.h \
sodium/core.h \
sodium/crypto_aead_aes256gcm.h \
+ sodium/crypto_aead_aegis128l.h \
+ sodium/crypto_aead_aegis256.h \
sodium/crypto_aead_chacha20poly1305.h \
sodium/crypto_aead_xchacha20poly1305.h \
sodium/crypto_auth.h \
@@ -25,6 +27,8 @@ SODIUM_EXPORT = \
sodium/crypto_hash_sha256.h \
sodium/crypto_hash_sha512.h \
sodium/crypto_kdf.h \
+ sodium/crypto_kdf_hkdf_sha256.h \
+ sodium/crypto_kdf_hkdf_sha512.h \
sodium/crypto_kdf_blake2b.h \
sodium/crypto_kx.h \
sodium/crypto_onetimeauth.h \
diff --git a/src/libsodium/include/Makefile.in b/src/libsodium/include/Makefile.in
index 3104fbbaf3..d2b1302d22 100644
--- a/src/libsodium/include/Makefile.in
+++ b/src/libsodium/include/Makefile.in
@@ -354,6 +354,8 @@ SODIUM_EXPORT = \
sodium.h \
sodium/core.h \
sodium/crypto_aead_aes256gcm.h \
+ sodium/crypto_aead_aegis128l.h \
+ sodium/crypto_aead_aegis256.h \
sodium/crypto_aead_chacha20poly1305.h \
sodium/crypto_aead_xchacha20poly1305.h \
sodium/crypto_auth.h \
@@ -376,6 +378,8 @@ SODIUM_EXPORT = \
sodium/crypto_hash_sha256.h \
sodium/crypto_hash_sha512.h \
sodium/crypto_kdf.h \
+ sodium/crypto_kdf_hkdf_sha256.h \
+ sodium/crypto_kdf_hkdf_sha512.h \
sodium/crypto_kdf_blake2b.h \
sodium/crypto_kx.h \
sodium/crypto_onetimeauth.h \
diff --git a/src/libsodium/include/sodium.h b/src/libsodium/include/sodium.h
index 18659e1b21..f667e06385 100644
--- a/src/libsodium/include/sodium.h
+++ b/src/libsodium/include/sodium.h
@@ -5,6 +5,8 @@
#include "sodium/version.h"
#include "sodium/core.h"
+#include "sodium/crypto_aead_aegis128l.h"
+#include "sodium/crypto_aead_aegis256.h"
#include "sodium/crypto_aead_aes256gcm.h"
#include "sodium/crypto_aead_chacha20poly1305.h"
#include "sodium/crypto_aead_xchacha20poly1305.h"
@@ -14,8 +16,8 @@
#include "sodium/crypto_auth_hmacsha512256.h"
#include "sodium/crypto_box.h"
#include "sodium/crypto_box_curve25519xsalsa20poly1305.h"
-#include "sodium/crypto_core_hsalsa20.h"
#include "sodium/crypto_core_hchacha20.h"
+#include "sodium/crypto_core_hsalsa20.h"
#include "sodium/crypto_core_salsa20.h"
#include "sodium/crypto_core_salsa2012.h"
#include "sodium/crypto_core_salsa208.h"
@@ -56,16 +58,16 @@
#include "sodium/utils.h"
#ifndef SODIUM_LIBRARY_MINIMAL
-# include "sodium/crypto_box_curve25519xchacha20poly1305.h"
-# include "sodium/crypto_core_ed25519.h"
-# include "sodium/crypto_core_ristretto255.h"
-# include "sodium/crypto_scalarmult_ed25519.h"
-# include "sodium/crypto_scalarmult_ristretto255.h"
-# include "sodium/crypto_secretbox_xchacha20poly1305.h"
-# include "sodium/crypto_pwhash_scryptsalsa208sha256.h"
-# include "sodium/crypto_stream_salsa2012.h"
-# include "sodium/crypto_stream_salsa208.h"
-# include "sodium/crypto_stream_xchacha20.h"
+#include "sodium/crypto_box_curve25519xchacha20poly1305.h"
+#include "sodium/crypto_core_ed25519.h"
+#include "sodium/crypto_core_ristretto255.h"
+#include "sodium/crypto_pwhash_scryptsalsa208sha256.h"
+#include "sodium/crypto_scalarmult_ed25519.h"
+#include "sodium/crypto_scalarmult_ristretto255.h"
+#include "sodium/crypto_secretbox_xchacha20poly1305.h"
+#include "sodium/crypto_stream_salsa2012.h"
+#include "sodium/crypto_stream_salsa208.h"
+#include "sodium/crypto_stream_xchacha20.h"
#endif
#endif
diff --git a/src/libsodium/include/sodium/crypto_aead_aegis128l.h b/src/libsodium/include/sodium/crypto_aead_aegis128l.h
new file mode 100644
index 0000000000..6c553f90ef
--- /dev/null
+++ b/src/libsodium/include/sodium/crypto_aead_aegis128l.h
@@ -0,0 +1,93 @@
+#ifndef crypto_aead_aegis128l_H
+#define crypto_aead_aegis128l_H
+
+#include
+#include "export.h"
+
+#ifdef __cplusplus
+# ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wlong-long"
+# endif
+extern "C" {
+#endif
+
+#define crypto_aead_aegis128l_KEYBYTES 16U
+SODIUM_EXPORT
+size_t crypto_aead_aegis128l_keybytes(void);
+
+#define crypto_aead_aegis128l_NSECBYTES 0U
+SODIUM_EXPORT
+size_t crypto_aead_aegis128l_nsecbytes(void);
+
+#define crypto_aead_aegis128l_NPUBBYTES 16U
+SODIUM_EXPORT
+size_t crypto_aead_aegis128l_npubbytes(void);
+
+#define crypto_aead_aegis128l_ABYTES 16U
+SODIUM_EXPORT
+size_t crypto_aead_aegis128l_abytes(void);
+
+#define crypto_aead_aegis128l_MESSAGEBYTES_MAX \
+ SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aegis128l_ABYTES, \
+ (1ULL << 61) - 1)
+SODIUM_EXPORT
+size_t crypto_aead_aegis128l_messagebytes_max(void);
+
+SODIUM_EXPORT
+int crypto_aead_aegis128l_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)
+ __attribute__ ((nonnull(1, 8, 9)));
+
+SODIUM_EXPORT
+int crypto_aead_aegis128l_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)
+ __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9)));
+
+SODIUM_EXPORT
+int crypto_aead_aegis128l_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)
+ __attribute__ ((nonnull(1, 2, 9, 10)));
+
+SODIUM_EXPORT
+int crypto_aead_aegis128l_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)
+ __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9)));
+
+SODIUM_EXPORT
+void crypto_aead_aegis128l_keygen(unsigned char k[crypto_aead_aegis128l_KEYBYTES])
+ __attribute__ ((nonnull));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libsodium/include/sodium/crypto_aead_aegis256.h b/src/libsodium/include/sodium/crypto_aead_aegis256.h
new file mode 100644
index 0000000000..b47025336e
--- /dev/null
+++ b/src/libsodium/include/sodium/crypto_aead_aegis256.h
@@ -0,0 +1,93 @@
+#ifndef crypto_aead_aegis256_H
+#define crypto_aead_aegis256_H
+
+#include
+#include "export.h"
+
+#ifdef __cplusplus
+# ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wlong-long"
+# endif
+extern "C" {
+#endif
+
+#define crypto_aead_aegis256_KEYBYTES 32U
+SODIUM_EXPORT
+size_t crypto_aead_aegis256_keybytes(void);
+
+#define crypto_aead_aegis256_NSECBYTES 0U
+SODIUM_EXPORT
+size_t crypto_aead_aegis256_nsecbytes(void);
+
+#define crypto_aead_aegis256_NPUBBYTES 32U
+SODIUM_EXPORT
+size_t crypto_aead_aegis256_npubbytes(void);
+
+#define crypto_aead_aegis256_ABYTES 16U
+SODIUM_EXPORT
+size_t crypto_aead_aegis256_abytes(void);
+
+#define crypto_aead_aegis256_MESSAGEBYTES_MAX \
+ SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aegis256_ABYTES, \
+ (1ULL << 61) - 1)
+SODIUM_EXPORT
+size_t crypto_aead_aegis256_messagebytes_max(void);
+
+SODIUM_EXPORT
+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)
+ __attribute__ ((nonnull(1, 8, 9)));
+
+SODIUM_EXPORT
+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)
+ __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9)));
+
+SODIUM_EXPORT
+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)
+ __attribute__ ((nonnull(1, 2, 9, 10)));
+
+SODIUM_EXPORT
+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)
+ __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9)));
+
+SODIUM_EXPORT
+void crypto_aead_aegis256_keygen(unsigned char k[crypto_aead_aegis256_KEYBYTES])
+ __attribute__ ((nonnull));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libsodium/include/sodium/private/implementations.h b/src/libsodium/include/sodium/private/implementations.h
index c7237f851d..edbb2b8bce 100644
--- a/src/libsodium/include/sodium/private/implementations.h
+++ b/src/libsodium/include/sodium/private/implementations.h
@@ -7,5 +7,7 @@ int _crypto_pwhash_argon2_pick_best_implementation(void);
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/include/sodium/private/softaes.h b/src/libsodium/include/sodium/private/softaes.h
new file mode 100644
index 0000000000..f7a2bd24e4
--- /dev/null
+++ b/src/libsodium/include/sodium/private/softaes.h
@@ -0,0 +1,56 @@
+#ifndef softaes_H
+#define softaes_H 1
+
+#include
+
+#include "private/common.h"
+
+typedef struct SoftAesBlock {
+ uint32_t w0;
+ uint32_t w1;
+ uint32_t w2;
+ uint32_t w3;
+} SoftAesBlock;
+
+SoftAesBlock softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock rk);
+
+static inline SoftAesBlock
+softaes_block_load(const uint8_t in[16])
+{
+ const SoftAesBlock out = { LOAD32_LE(in + 0), LOAD32_LE(in + 4), LOAD32_LE(in + 8),
+ LOAD32_LE(in + 12) };
+ return out;
+}
+
+static inline SoftAesBlock
+softaes_block_load64x2(const uint64_t a, const uint64_t b)
+{
+ const SoftAesBlock out = { (uint32_t) b, (uint32_t) (b >> 32), (uint32_t) a,
+ (uint32_t) (a >> 32) };
+ return out;
+}
+
+static inline void
+softaes_block_store(uint8_t out[16], const SoftAesBlock in)
+{
+ STORE32_LE(out + 0, in.w0);
+ STORE32_LE(out + 4, in.w1);
+ STORE32_LE(out + 8, in.w2);
+ STORE32_LE(out + 12, in.w3);
+}
+
+static inline SoftAesBlock
+softaes_block_xor(const SoftAesBlock a, const SoftAesBlock b)
+{
+ const SoftAesBlock out = { a.w0 ^ b.w0, a.w1 ^ b.w1, a.w2 ^ b.w2, a.w3 ^ b.w3 };
+ return out;
+}
+
+static inline SoftAesBlock
+softaes_block_and(const SoftAesBlock a, const SoftAesBlock b)
+{
+ const SoftAesBlock out = { a.w0 & b.w0, a.w1 & b.w1, a.w2 & b.w2, a.w3 & b.w3 };
+ return out;
+}
+
+#endif
diff --git a/src/libsodium/sodium/core.c b/src/libsodium/sodium/core.c
index bad32174a1..214ef5f8ee 100644
--- a/src/libsodium/sodium/core.c
+++ b/src/libsodium/sodium/core.c
@@ -45,6 +45,8 @@ sodium_init(void)
_crypto_scalarmult_curve25519_pick_best_implementation();
_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/Makefile.am b/test/default/Makefile.am
index ed852c91b4..ad9da78bc0 100644
--- a/test/default/Makefile.am
+++ b/test/default/Makefile.am
@@ -5,6 +5,8 @@ EXTRA_DIST = \
wasi-test-wrapper.sh \
wintest.bat \
pre.js.inc \
+ aead_aegis128l.exp \
+ aead_aegis256.exp \
aead_aes256gcm.exp \
aead_aes256gcm2.exp \
aead_chacha20poly1305.exp \
@@ -85,6 +87,8 @@ EXTRA_DIST = \
xchacha20.exp
DISTCLEANFILES = \
+ aead_aegis128l.res \
+ aead_aegis256.res \
aead_aes256gcm.res \
aead_aes256gcm2.res \
aead_chacha20poly1305.res \
@@ -176,6 +180,8 @@ AM_CPPFLAGS = \
AM_LDFLAGS = @TEST_LDFLAGS@
TESTS_TARGETS = \
+ aead_aegis128l \
+ aead_aegis256 \
aead_aes256gcm \
aead_aes256gcm2 \
aead_chacha20poly1305 \
@@ -257,6 +263,12 @@ TESTS = $(TESTS_TARGETS)
TESTS_LDADD = \
${top_builddir}/src/libsodium/libsodium.la
+aead_aegis128l_SOURCE = cmptest.h aead_aegis128l.c
+aead_aegis128l_LDADD = $(TESTS_LDADD)
+
+aead_aegis256_SOURCE = cmptest.h aead_aegis256.c
+aead_aegis256_LDADD = $(TESTS_LDADD)
+
aead_aes256gcm_SOURCE = cmptest.h aead_aes256gcm.c
aead_aes256gcm_LDADD = $(TESTS_LDADD)
diff --git a/test/default/Makefile.in b/test/default/Makefile.in
index d048ff039d..c97318e5ec 100644
--- a/test/default/Makefile.in
+++ b/test/default/Makefile.in
@@ -134,7 +134,8 @@ CONFIG_CLEAN_VPATH_FILES =
@MINIMAL_FALSE@ scalarmult_ed25519$(EXEEXT) \
@MINIMAL_FALSE@ scalarmult_ristretto255$(EXEEXT) \
@MINIMAL_FALSE@ siphashx24$(EXEEXT) xchacha20$(EXEEXT)
-am__EXEEXT_3 = aead_aes256gcm$(EXEEXT) aead_aes256gcm2$(EXEEXT) \
+am__EXEEXT_3 = aead_aegis128l$(EXEEXT) aead_aegis256$(EXEEXT) \
+ aead_aes256gcm$(EXEEXT) aead_aes256gcm2$(EXEEXT) \
aead_chacha20poly1305$(EXEEXT) aead_chacha20poly13052$(EXEEXT) \
aead_xchacha20poly1305$(EXEEXT) auth$(EXEEXT) auth2$(EXEEXT) \
auth3$(EXEEXT) auth5$(EXEEXT) auth6$(EXEEXT) auth7$(EXEEXT) \
@@ -159,13 +160,19 @@ am__EXEEXT_3 = aead_aes256gcm$(EXEEXT) aead_aes256gcm2$(EXEEXT) \
sodium_version$(EXEEXT) stream$(EXEEXT) stream2$(EXEEXT) \
stream3$(EXEEXT) stream4$(EXEEXT) verify1$(EXEEXT) \
$(am__EXEEXT_1) $(am__EXEEXT_2)
-aead_aes256gcm_SOURCES = aead_aes256gcm.c
-aead_aes256gcm_OBJECTS = aead_aes256gcm.$(OBJEXT)
-aead_aes256gcm_DEPENDENCIES = $(TESTS_LDADD)
+aead_aegis128l_SOURCES = aead_aegis128l.c
+aead_aegis128l_OBJECTS = aead_aegis128l.$(OBJEXT)
+aead_aegis128l_DEPENDENCIES = $(TESTS_LDADD)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+aead_aegis256_SOURCES = aead_aegis256.c
+aead_aegis256_OBJECTS = aead_aegis256.$(OBJEXT)
+aead_aegis256_DEPENDENCIES = $(TESTS_LDADD)
+aead_aes256gcm_SOURCES = aead_aes256gcm.c
+aead_aes256gcm_OBJECTS = aead_aes256gcm.$(OBJEXT)
+aead_aes256gcm_DEPENDENCIES = $(TESTS_LDADD)
aead_aes256gcm2_SOURCES = aead_aes256gcm2.c
aead_aes256gcm2_OBJECTS = aead_aes256gcm2.$(OBJEXT)
aead_aes256gcm2_DEPENDENCIES = $(TESTS_LDADD)
@@ -414,7 +421,8 @@ am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/aead_aes256gcm.Po \
+am__depfiles_remade = ./$(DEPDIR)/aead_aegis128l.Po \
+ ./$(DEPDIR)/aead_aegis256.Po ./$(DEPDIR)/aead_aes256gcm.Po \
./$(DEPDIR)/aead_aes256gcm2.Po \
./$(DEPDIR)/aead_chacha20poly1305.Po \
./$(DEPDIR)/aead_chacha20poly13052.Po \
@@ -472,7 +480,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = aead_aes256gcm.c aead_aes256gcm2.c aead_chacha20poly1305.c \
+SOURCES = aead_aegis128l.c aead_aegis256.c aead_aes256gcm.c \
+ aead_aes256gcm2.c aead_chacha20poly1305.c \
aead_chacha20poly13052.c aead_xchacha20poly1305.c auth.c \
auth2.c auth3.c auth5.c auth6.c auth7.c box.c box2.c box7.c \
box8.c box_easy.c box_easy2.c box_seal.c box_seed.c chacha20.c \
@@ -490,16 +499,16 @@ SOURCES = aead_aes256gcm.c aead_aes256gcm2.c aead_chacha20poly1305.c \
siphashx24.c sodium_core.c sodium_utils.c sodium_utils2.c \
sodium_utils3.c sodium_version.c stream.c stream2.c stream3.c \
stream4.c verify1.c xchacha20.c
-DIST_SOURCES = aead_aes256gcm.c aead_aes256gcm2.c \
- aead_chacha20poly1305.c aead_chacha20poly13052.c \
- aead_xchacha20poly1305.c auth.c auth2.c auth3.c auth5.c \
- auth6.c auth7.c box.c box2.c box7.c box8.c box_easy.c \
- box_easy2.c box_seal.c box_seed.c chacha20.c codecs.c core1.c \
- core2.c core3.c core4.c core5.c core6.c core_ed25519.c \
- core_ristretto255.c ed25519_convert.c generichash.c \
- generichash2.c generichash3.c hash.c hash3.c kdf.c kdf_hkdf.c \
- keygen.c kx.c metamorphic.c misuse.c onetimeauth.c \
- onetimeauth2.c onetimeauth7.c pwhash_argon2i.c \
+DIST_SOURCES = aead_aegis128l.c aead_aegis256.c aead_aes256gcm.c \
+ aead_aes256gcm2.c aead_chacha20poly1305.c \
+ aead_chacha20poly13052.c aead_xchacha20poly1305.c auth.c \
+ auth2.c auth3.c auth5.c auth6.c auth7.c box.c box2.c box7.c \
+ box8.c box_easy.c box_easy2.c box_seal.c box_seed.c chacha20.c \
+ codecs.c core1.c core2.c core3.c core4.c core5.c core6.c \
+ core_ed25519.c core_ristretto255.c ed25519_convert.c \
+ generichash.c generichash2.c generichash3.c hash.c hash3.c \
+ kdf.c kdf_hkdf.c keygen.c kx.c metamorphic.c misuse.c \
+ onetimeauth.c onetimeauth2.c onetimeauth7.c pwhash_argon2i.c \
pwhash_argon2id.c pwhash_scrypt.c pwhash_scrypt_ll.c \
randombytes.c scalarmult.c scalarmult2.c scalarmult5.c \
scalarmult6.c scalarmult7.c scalarmult8.c scalarmult_ed25519.c \
@@ -919,6 +928,8 @@ EXTRA_DIST = \
wasi-test-wrapper.sh \
wintest.bat \
pre.js.inc \
+ aead_aegis128l.exp \
+ aead_aegis256.exp \
aead_aes256gcm.exp \
aead_aes256gcm2.exp \
aead_chacha20poly1305.exp \
@@ -999,6 +1010,8 @@ EXTRA_DIST = \
xchacha20.exp
DISTCLEANFILES = \
+ aead_aegis128l.res \
+ aead_aegis256.res \
aead_aes256gcm.res \
aead_aes256gcm2.res \
aead_chacha20poly1305.res \
@@ -1088,22 +1101,26 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/test/quirks
AM_LDFLAGS = @TEST_LDFLAGS@
-TESTS_TARGETS = aead_aes256gcm aead_aes256gcm2 aead_chacha20poly1305 \
- aead_chacha20poly13052 aead_xchacha20poly1305 auth auth2 auth3 \
- auth5 auth6 auth7 box box2 box7 box8 box_easy box_easy2 \
- box_seal box_seed chacha20 codecs core1 core2 core3 core4 \
- core5 core6 ed25519_convert generichash generichash2 \
- generichash3 hash hash3 kdf keygen kx metamorphic misuse \
- onetimeauth onetimeauth2 onetimeauth7 pwhash_argon2i \
- pwhash_argon2id randombytes scalarmult scalarmult2 scalarmult5 \
- scalarmult6 scalarmult7 scalarmult8 secretbox secretbox2 \
- secretbox7 secretbox8 secretbox_easy secretbox_easy2 \
- secretstream_xchacha20poly1305 shorthash sign sodium_core \
- sodium_utils sodium_version stream stream2 stream3 stream4 \
- verify1 $(am__append_1) $(am__append_2)
+TESTS_TARGETS = aead_aegis128l aead_aegis256 aead_aes256gcm \
+ aead_aes256gcm2 aead_chacha20poly1305 aead_chacha20poly13052 \
+ aead_xchacha20poly1305 auth auth2 auth3 auth5 auth6 auth7 box \
+ box2 box7 box8 box_easy box_easy2 box_seal box_seed chacha20 \
+ codecs core1 core2 core3 core4 core5 core6 ed25519_convert \
+ generichash generichash2 generichash3 hash hash3 kdf keygen kx \
+ metamorphic misuse onetimeauth onetimeauth2 onetimeauth7 \
+ pwhash_argon2i pwhash_argon2id randombytes scalarmult \
+ scalarmult2 scalarmult5 scalarmult6 scalarmult7 scalarmult8 \
+ secretbox secretbox2 secretbox7 secretbox8 secretbox_easy \
+ secretbox_easy2 secretstream_xchacha20poly1305 shorthash sign \
+ sodium_core sodium_utils sodium_version stream stream2 stream3 \
+ stream4 verify1 $(am__append_1) $(am__append_2)
TESTS_LDADD = \
${top_builddir}/src/libsodium/libsodium.la
+aead_aegis128l_SOURCE = cmptest.h aead_aegis128l.c
+aead_aegis128l_LDADD = $(TESTS_LDADD)
+aead_aegis256_SOURCE = cmptest.h aead_aegis256.c
+aead_aegis256_LDADD = $(TESTS_LDADD)
aead_aes256gcm_SOURCE = cmptest.h aead_aes256gcm.c
aead_aes256gcm_LDADD = $(TESTS_LDADD)
aead_aes256gcm2_SOURCE = cmptest.h aead_aes256gcm2.c
@@ -1304,6 +1321,14 @@ clean-checkPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
+aead_aegis128l$(EXEEXT): $(aead_aegis128l_OBJECTS) $(aead_aegis128l_DEPENDENCIES) $(EXTRA_aead_aegis128l_DEPENDENCIES)
+ @rm -f aead_aegis128l$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(aead_aegis128l_OBJECTS) $(aead_aegis128l_LDADD) $(LIBS)
+
+aead_aegis256$(EXEEXT): $(aead_aegis256_OBJECTS) $(aead_aegis256_DEPENDENCIES) $(EXTRA_aead_aegis256_DEPENDENCIES)
+ @rm -f aead_aegis256$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(aead_aegis256_OBJECTS) $(aead_aegis256_LDADD) $(LIBS)
+
aead_aes256gcm$(EXEEXT): $(aead_aes256gcm_OBJECTS) $(aead_aes256gcm_DEPENDENCIES) $(EXTRA_aead_aes256gcm_DEPENDENCIES)
@rm -f aead_aes256gcm$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(aead_aes256gcm_OBJECTS) $(aead_aes256gcm_LDADD) $(LIBS)
@@ -1622,6 +1647,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aead_aegis128l.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aead_aegis256.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aead_aes256gcm.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aead_aes256gcm2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aead_chacha20poly1305.Po@am__quote@ # am--include-marker
@@ -1935,6 +1962,20 @@ recheck: all $(check_PROGRAMS)
am__force_recheck=am--force-recheck \
TEST_LOGS="$$log_list"; \
exit $$?
+aead_aegis128l.log: aead_aegis128l$(EXEEXT)
+ @p='aead_aegis128l$(EXEEXT)'; \
+ b='aead_aegis128l'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+aead_aegis256.log: aead_aegis256$(EXEEXT)
+ @p='aead_aegis256$(EXEEXT)'; \
+ b='aead_aegis256'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
aead_aes256gcm.log: aead_aes256gcm$(EXEEXT)
@p='aead_aes256gcm$(EXEEXT)'; \
b='aead_aes256gcm'; \
@@ -2594,7 +2635,9 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
mostlyclean-am
distclean: distclean-am
- -rm -f ./$(DEPDIR)/aead_aes256gcm.Po
+ -rm -f ./$(DEPDIR)/aead_aegis128l.Po
+ -rm -f ./$(DEPDIR)/aead_aegis256.Po
+ -rm -f ./$(DEPDIR)/aead_aes256gcm.Po
-rm -f ./$(DEPDIR)/aead_aes256gcm2.Po
-rm -f ./$(DEPDIR)/aead_chacha20poly1305.Po
-rm -f ./$(DEPDIR)/aead_chacha20poly13052.Po
@@ -2717,7 +2760,9 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ./$(DEPDIR)/aead_aes256gcm.Po
+ -rm -f ./$(DEPDIR)/aead_aegis128l.Po
+ -rm -f ./$(DEPDIR)/aead_aegis256.Po
+ -rm -f ./$(DEPDIR)/aead_aes256gcm.Po
-rm -f ./$(DEPDIR)/aead_aes256gcm2.Po
-rm -f ./$(DEPDIR)/aead_chacha20poly1305.Po
-rm -f ./$(DEPDIR)/aead_chacha20poly13052.Po
diff --git a/test/default/aead_aegis128l.c b/test/default/aead_aegis128l.c
new file mode 100644
index 0000000000..b170b80bb4
--- /dev/null
+++ b/test/default/aead_aegis128l.c
@@ -0,0 +1,669 @@
+#define TEST_NAME "aead_aegis128l"
+#include "cmptest.h"
+
+static struct {
+ const char *key_hex;
+ const char *nonce_hex;
+ const char *message_hex;
+ const char *ad_hex;
+ const char *ciphertext_hex;
+ const char *mac_hex;
+} tests[] = {
+ {
+ "54662e55bb4771f9711fe5301d7412fe",
+ "e51d417ab10a2931d8d22a9fffb98e3a",
+ "04f672f8cdb3e71d032d52c064bc33ecf8aad3d40c41d5806cc306766c057c50b500af5c550d076d34cc3a74a2b4bed195ffa3e8eddf953aefe9aed2bc14349c700ab7e4cb974fb31615a9ff70fb44307055523ab378b133fefc883013ce23bb01b23aeda15f85e65cdf02a291a0454900cb261872d5205737fd7410",
+ "3b762e3ab5d06cb2896b852ea70303f289f2775401b7808e30272f",
+ "d6736371f35eb067244dd7963ad2e0cd3949452cbd4c220be55082498ed3b230f579d78844311652a9958e82f172bb8072c4b1114ec531a6ccb340ddd86caf32a0d4c9c45738e9ec9c0d9154612f7d90465f3a277bebd667c0af0edb6935d8dffbdee96c1a96e4c4318f5d3bc90c1c8d5729e1a402f765bdc9b26b08",
+ "53c2fd22b035bf3f3658ede47ef11b9d"
+ },
+ {
+ "46a5c72e03d900b48f829df00ecb88b9",
+ "b25187e4b77b6770c35c7a962584597d",
+ "fc8083311b38a80c04e57d069661b273264310906781eb7e4e44c6416f7336267674a44a7c54ed6361b43ef9500514e5d9e71f8b5c33aece756b64f3ed011922facbec7c3ffd27d01a853435bde551372806bd0c",
+ "b73c81239e01cd81b0de13247ca4e3528b87f3078e2b674a667430b1dbdc3e93657131e654a4182b4c4ab01a33b36e946f1fcc55aab06fc6f56d",
+ "51189448af53ae3630c06a167ceefe6b9b5eba746fb9b53f4b3104d2b15b6020fa8998e182eb9c9d6b6463939e50723780f983733206ae6f11b986d95abe83555e64f8d3242d7e8055fcb8e2df8e41d318f06728",
+ "f9b7e561ac0316d2ed7debc2484cc3e1"
+ },
+ {
+ "e343d75de99e6d73543968437d3dcf6a",
+ "317a5808ed5debf6f527a780e0896b2d",
+ "247045cb40dea9c514a885444c526ac867b1b80e4728a23b63f596",
+ "323094c01e",
+ "18cb5d2fc5e27bdda5ba16f1320da42049759368548e5bd96f2dbc",
+ "1659e7d7193b12b4c90ba1e4314ef055"
+ },
+ {
+ "7db9c2721a03931c880f9e714bbf2211",
+ "27f642398299ada7fdda1895ee4589f0",
+ "dc5180954df0c3391a60b44cbf70aee72b7dbb2addc90a0bf2ceac6113287eb501fe1ea9f4c51822664b82fe0279b039f4",
+ "6dd5e43033fa6f021059a353edaf1f870387693054d0a2360fd1f6941a68f48ba972a1bc0816a446a6186e4a9a2f9df556bf709470137b8e60d9daa2",
+ "c8a7d9131cebfa5388003cc30deac523aa9b09d148affff06ba40400e09ca900db770e07cedf5cd0647f6723c810ffcb59",
+ "6cac51edd6f49cd7be0010a3ac29e704"
+ },
+ {
+ "bef8a47bbf0ffc4ab56ad5d9899f42b6",
+ "3a2195a5196a0d785e04b38dd62f056d",
+ "5aa0dc37e4db1de35789398b25dc656d05cdc6737de4e30ce944b304ec752bbd10ebfa51feff99dfcfe26b8526cc9b0cf1ba3d1685fb26cfc0c8888fd3cdf55577a516328b289eebda2e14f15eeb1d0f4207efebe3803618d43d99688e6c",
+ "a4a290a0d719b1aaf58f24152402b2f36957f44ea8a2d76b045390f5e0a3559a8ec5b2f871fc6095152183b7be7565d4953b593f854b8477e29ce0cdddce5cf8739ab56288c26c81921f1fbae38b90b287b4622ca8b5b6c0b4b02196e73ee56af6ae427ca7ae3ca0",
+ "0ead975179d64f2b927440bf9ef666ab921e7a3b0832949f31315c2931451c5ddf810c17ad0330073922c07a18eb665aca01c05de58f7d159a74884f9d90cc10dc8c017ab61b820fc3dd32be52f3f7265e3a7a912a230b2a7ed19992e693",
+ "5773c1800d570e5dd8a4d581b5655dab"
+ },
+ {
+ "01f1cea5b7e20db64a67502bb4715033",
+ "7336701bbc2d766167b57c452d010f02",
+ "b3669d31ef8040dd6f462624977d69cfd1869fb19946595759b7265eb98b51f579fddce4bd38452fe3",
+ "d007e9ce654ec9a8b44e3655dcac889176fbf8012b133c4effe70b716eff43264d67d84a3d8504858c01002957cac6eb75d94635fb708343a18e20615e4ecb963bd98a8e7bee66520fba5c2991541c1e7863c1c97ae7ba6c3c34f1161518097b6e75dcfb3aa3e93995eb39",
+ "4e643f7a1b8c0d595c8ff2b00c0145deb5bfa13d8a1b75d7a731f2258b690e1a3b2ce2cbacc6d05c42",
+ "bb32551a6386fe557f543342130f03fe"
+ },
+ {
+ "76d53860e1c45cf60d76d8336948e337",
+ "579c0f0993f13470fa301cd4c6fbe99a",
+ "d0f5d2b3b824fe01ca36d00d47434519b2112195093a06d9d07d7f4f9c5b8f2a4c68668265c40d6edd6e12b5a350e4af11f1ee6226bf307a1a6c25318c0d3aa0421edf565ad42d524f69d0fef06c236c1f0d0e50261e205f381c3e1196dd8827b9990d674288f8250596",
+ "a7a77cc847afdfb9dc8ceccc621462302f31233a830b3827ca68618e604c95ba8615f6ebb5ff1c2c66727e70c038554619f96f79d08902fc70111f853766a2db04e51d",
+ "def4fcb75110820298f08a8a4941434deccb952dec01215f5e7f5a2509fcb9e2a994a77d5eaa617da9cf2f03483faff5831506e5617707b88e08195b6a993219898c3ead769ebaa002934d3c80023833d7ce4a7a989596de6fe78eb0237e8caab0a9fcd2625af80caad6",
+ "6eaad25866e9ce7276300f305f63ae5c"
+ },
+ {
+ "cd05e08e14686623fd334780439c4ae3",
+ "d05ba5a655bf7b1be7500f205c9c80b9",
+ "021c20518825c167a746a728578a0f470b2035c7b39c75f3e492bcc2e6e96035c4fff65dfbfa93cbc7a37828a0cd62bf1b20b3bb89425ae647e021cde586f652eb98c98b1ac1018c6fe3e046f41545bbfdbf94dca48e465aaed8efb7eab5ea143e5b95b72a078f8fb58d8ecfdd9a3a968e2468b6",
+ "be9255f750498ce672c877285e649318bd5bf07cdc5902b7de61a8415b6fbf20b1e432ebc9f8f9c8e3094ff6dffd1b1e0c3cc5",
+ "faa851ddfe54b01cf1a3caf34815c6db0145ddebd1f34ca9edd479bd4a3bb4bac21c2b5d365ff4d389a764bcc1436e51267ed3e4f225b7cda1fbf25d221d91b59aed0b4d20f71859f41e85e15a02e2bcd59913d8ae019d1f01ede317b4ff94ed2b05650259a705c3b2be2c2a9c82a4809dab7b03",
+ "b0292afc74141e969fb653de7ead5009"
+ },
+ {
+ "6870a5652199e2f17407185bd7cf18eb",
+ "942988922482351c317244b26587c560",
+ "49b2f6765f7f552f8704671271d703b3b02157f71ed84e64481be8bbd4f3493bfd3f313ac62ba4e9a7d86288533a7bc7a4257cad5db04bb80d6574e473519eccd15cd2",
+ "6cc34a81ee984b436947b31574473e0a849a341db0ebc67f64efb39c9e118f65cfb25d1d898b4ee8052f700cb43cbe744d70b71d2086a89ad12dd67feceacb092a861ba80e41808c625fbdce017d51916e1fb5b38b0beebb27478d8390ec79b3f3902a4ac22d79",
+ "82d3ae3aea3870e40fa48da698adcb596eb43fb063866f6231bb744b687e32e72117a03da08a635e4ed0f255f28f3db6f0b8a7238d0244994a507fe75ddd17138b0605",
+ "f529092f2eec3800f565ed7983da4c65"
+ },
+ {
+ "15a87aee858f5723beb477b2cc039d14",
+ "6ce71c763784e59fba852ae39b25de3a",
+ "25d1d38a8e9e8c34564abbfcba69035ce2f78df8626543e7639f2f23d742853e34880e7bc6d684ed3075abdfb91e36076242dc53d60513333f59d139e680aa246b0e7e6092e8d4e6ab471459068c2a83b07e8b7969c911e3bff7558caf02b3f3e6de7ae9122d533558868d993b8242b2328834a88cd656a941",
+ "26fde5885fd22bdcba8b5c1b5f66d09c7da7bfef2790e6dd2a98a351056044495fe4",
+ "2e241f3f96e8bde7d2b5cfad94461d6c7282405c77918a2a8731711175211814e20e72ce01139643f58a2336c05cc27458f042ff063bc73fbee2ca8c099ff1f3fbe8517fce6cd3d54567220218cc67b4ef52767f75fe514e8ec49013d9fa787685a5a81efe550248f342eaade9cd61fb5037634f2bf621c944",
+ "6aaabc9f958d3a5739985a529e761b56"
+ },
+ {
+ "23e2250df6b870b6eebbce928cd1a80f",
+ "279f73beda18846d7170c29414590029",
+ "9cdd4e34495b4a03ca2c5bef9074c1",
+ "f306eb122b1907b4b6bccc77984ea7be4a28f9ca3615135d4c84ad74d7469efefbbff997bb495806a3d9ab274b4228cb894fceeb24c4905e121efbd3ce8be668dfee4f9e38584ba6c3374337d3c884cdaddcd96f63df225ddc879e0ba4bce0125dd0",
+ "8821c6d2c36ae97bef1b9d78c1afba",
+ "0240cf940c42c5d600f435101fd6ed5c"
+ },
+ {
+ "82f02cd289d07f40acf9a1d2b1cf7f06",
+ "09162f09c3893bd2c5e4f2c8f6ec9930",
+ "29f1d0e8aef96c9936eb5bcb32b0f751b25a7a46d4cc5a33d5f96dcaea757b2b",
+ "4ccb0ba7f1b2eecbe3dc3ba47f797201ca656ab04e5b38df9b95ef24ba02a5ef04a9a8122f954048581d275e",
+ "6b8f329fa3e905b7c0df490f18a13ab3b6be6701cba59a1ee7c12d054c500e58",
+ "077cc505ec2cb55daf3ea3eaaa05a369"
+ },
+ {
+ "a28c7a79d3d7d7b372c5cb4eb66201ba",
+ "3c27d1ca6e8fd19cbf2dbd81c87d2ac0",
+ "0ff33640432edcf34a2df2527ca13a0340d5adcae1d10589edbc89701f5093efeaf6d7d3f97a778052a76a6efe7b37021a4fbc8205f26f17dbd0c68b60c6403c4160985255aeac23c3bc88b1d8c11fd4197ba366962c",
+ "96bec6c8014708e9142a8ea0fd496f89f5a2414f4296ae0a185b13f362f2",
+ "f20be34587afaa4300683655ea16a292bfc7f2779cb771e520c6b0952e41a2b89e45f6c4b571779d573f1383b5e311f71ca89379b8a3eb9d9cde72b16e0f782058e9bb4df4731cbd7c67af1c459061ccff149da3bcdc",
+ "8c713cfa494325148edd37b0ac7ef7a0"
+ },
+ {
+ "24d66092958836e491cf974f34ee7ca9",
+ "1c04e8166ef37a2a5d34b4462a7ca8bd",
+ "01a77fb558d8d94c16eccc82b49f53823597272de8e6df070fefd202042665ef5788bab86c70dc3e571e3b372654494e552ef00462bf0f7fdeca8efbaa51f3da63e6f18fd13a4668b7fb1a89464a09a17d9ce709b0b8f079d6bf93ed4871c0",
+ "3c082dae68ee1cd6b8d1ef79593132e68e373eec746d13583f28d42730bfa18ed77ee83ad6c3db24bcda6d5e2925970dc01d1968b744cf3753e597ef831dcab728ce66ef3da0ab872cb0dedf77922a57abfb",
+ "47ec41abfe34c4ece7ff8f3ba179238f38f3e527d97d7f3f6ada79a9609e715cd0acec31f0a0df25c7ac0bb894fe791cc467a098710e92af75a14e68d9241c160d4587f7da279deaa9cc9d9c5a6e97b231021ab2ba9c63473cf269ef294d1b",
+ "5ba802006d999c5afb681f71e83dfd21"
+ },
+ {
+ "78f67aada609c94a7c79f2fe9bf9c82e",
+ "9ad46b00946c799b17b683ed3d920896",
+ "3fc884334f762cede042a56b4a89ad9eaf474459371f2daf7c157a352cd5ae6d45662593bd3eaba7bf59ed569429c52153599f02e3263b2784be00e52e30d0347553fe8aa70a071c3f2e34593d1e78692f9a194800571eaaeedcf2970784426959e0",
+ "80bb105971fd223f89efae15ae1b5e252c7e1c761b6abd5509d8354adbbb5007928763e715aad67b2109ac60afc73e386a75084c77a5af1021ddb4bc636c32a70ee95c6ef5eea9cba0d1c944754f328208ff78f7b0718899bacdf5d6e603e1b098acbffc83a86a0e122078338e0bd5",
+ "325ce1b0bb065488f9f74f779bdc433da58412b3834005b4661491e7d9d6c2a371560ca7d649093a7ab2475548edb37b425c23f75eb1bf79b972714469174fc85665dbe2af774719d803c2426f067ae68da1ae0783ae376970055cc28d484ecae2e3",
+ "8a0a7c3c7b4ad43021d1fcb532741900"
+ },
+ {
+ "ba4c7e6a36e4684631fa5ede07b678cf",
+ "ed722d3769b33d82626ce89bb4d212d9",
+ "ae106ad8029d73ff984de16db70772ca9adec5f2bffb1d92e12412b6f76f855463f47f1739d6e9a1fab5a9b7ff3ead419efd7fd7b31a0c5b9b992aa8d0ad754cb5ba371adfc60a5cdbcae37c4653b9cf5f46b015d31a03e10e2882567d2c44255c30f1",
+ "1955a221ff4b3f271876a4bc04cfb41449881f6ff3a7e9aacaa1e992a5218af3294027709c1ec594bf863000ddb7d561ca4c3f42340ee932e71eb8efd1b7dbd19f6ef0de28d437355b2b4cd1527cee849a315fc9a35ecb6e458e4af4df07a9e108a0",
+ "aa24653b20af5925a19e486d0b28e3bafdb240aa984c8b365792443a5411c8385c8197d0a13f1a8a7686c02cc0f7adbe1230736362afeb3c0ada988dec6d35fd298768866f64aac8dd560250e27bb1007a3fd4c312a8ce3af4af9ed27d5859ae56a3ac",
+ "20d20d4a549c35b69af946c9fef1837e"
+ },
+ {
+ "639668e0b0fbb192b83f870048d29c1c",
+ "48ed7de6da13ba38a1e748eb9ea57529",
+ "1ceca7",
+ "604b7b904ba56e1f2d17556236150e5bd19ba125f92e9adef0f75b38356fc9a1851ba34105805cae7e99dc7bdcf8744c44f06e709c345cadcffde348d2d55c5c36cf5ee1f288509e7a878dc00daa3d9593afafd7a0d94fa78960b3ca9fdb2b7d5746d1f4702080fadaf0cd6785373a16ceed056641aa4afe725e",
+ "0f5286",
+ "fd1206b329ad0eb4ff28d19b3ff31310"
+ },
+ {
+ "94b94725497880ff10d89572b62d1029",
+ "bbdb56d8112d298fd5686b93787e0011",
+ "f062bbe085b5f49ae4064f9ffd",
+ "de189cbb1821775cb97888f25d4781ddb82d4664634f41",
+ "d317f2a31eaa3f23e84fc3eaa9",
+ "405ce9e1ac0450409dc74017ee3e9e41"
+ },
+ {
+ "8e6f1217eaf84aee8e5897f5860f184c",
+ "a4e099068ad0b67f28b6902a40921dca",
+ "53c939f8d167e49980f8fd3ccc4a2ae3",
+ "4bb7fccecf15f0b32be37860507fc53812713194e2844855894ef916abbf9b5d",
+ "92e47292a4f02cc22d3392d1b6a089ce",
+ "2cf144c2dcf5a240c3d7be308d29313e"
+ },
+ {
+ "6968acc00e83184e6024167672c5df8a",
+ "2d5b193c93e8aa5302fb5bb20cd59504",
+ "bd6b6830",
+ "7f4e725f4b0f84454e823b8193f1d8b39d78a8b12f1a2250beb0def895dd0aef8960652c071a82d9ad89910d97287e72848fba1623f441d4955a019f5c1a955b054db858722b1f15210c3a752fdbd2bd631620cc56c2c30d78ccb16272eeeea1",
+ "c01c9b02",
+ "c117560718c083b57522688dc7c6604d"
+ },
+ {
+ "1e7e0ef737799bb1e00ccd4e31da5ff9",
+ "9d1111da7d3d329ab5d824404e4bdd60",
+ "76cbec797c2364c6ed70901db527c6a3471a84f8d297c64c9dbffd7c3204503ca6e51c8c88757500ed503ba86d7367baf6b9f3f5f2b69308bef97232e67698ae10896ed70a66a7c40115770f3192b9168f66a359270c753bfffc549658fc7aba3d3943221e125a6f88e025cc024b753693",
+ "7e6c97d0fee9f249c7510c2a0abf9530ac49cecfffe2ae37c9d38ba60cd012d3e00b696ee54591",
+ "b04070df9cc5d032d1914eb69f9afeda61559ed98c7e5fbeb81930b242cd30cf097e4130b0cc45b3e3178ba5ff2598493e1d1fe22fd14f3cc2de08fd8cbb3539d4c71c606adb7826c2a9e05ac36a6795293cdfab6d07fcfdedac099f1ab9bfec63a32f7633e424e684ca8744b4ad2288ed",
+ "6f442fa62b719a9c751df52033503261"
+ },
+ {
+ "6dbf15415dae57093e6774f4a1b7e4d8",
+ "bba38b490d740d7b3df0c9283d4a530c",
+ "fafe1562e69a0f5149e0ee65d14b42098a8a53a58d2cf07fd86f6c64cc4e67d9b5cf3655b5ed7f722d2073a3e9cc8372efd9620a32d6443a328436dd5ae394700ddc171bef8cb0674b1fab87b3e93aa426aee92c7ff733c33f9e4e49f614043a7fb42cf657e4e3c2",
+ "c742a929d2a766dde0fb0ce2d0faf790bd6c5feb63cb3126402aac7ef7c9ddfd408cd22bc6928a9b67426e20c3d9b340cd7231f87ffbc29a8e6c23602b9dc434f5ab06bb8c049803b45cf088b919e8584091ecfca7259e0d130ddf4ca45d44291024446f58f1271f",
+ "d8dda53eeb8b375930698379836e64014c22bd885b5b5cafb4dc65ed00aa947acb2792c46dfed8ecd155b21cfc98ff163b403e3a9961805436678fd34942354094bc47663165341ed0b949c0ecb4da5499c1c8c87eab99ddfd0fc2d80a9a520461e3dc402c3d4b4f",
+ "7298173e07e8c20043df74e45daa3e8a"
+ },
+ {
+ "a6d38f5cebee041a0afe035caad48443",
+ "cb7e7813c7018b25782f77e0ae7c84c7",
+ "6ef6c5d92f3acf78b3e2c8334038f364a51193e4e559b1458dd74c44269e69a7a6af22f531680c63270b22ee71547d72abc9b87bc5639a1b3a13f8613ad4d1742e8209ab",
+ "d536bed277bbb5a9",
+ "457fff7d0e1b61def59fbe99e81c08bc370bcac0240c9cec6d6a0de2c37f9950f5b2d12b8b21126af18d757c743a2a9bf451ebcba235f9f48c31a63674f0e8a1c5af5094",
+ "7b1acd8b9e20cc8b6b1b4e00ade39ddf"
+ },
+ {
+ "753eb1d49c102d1e3a9bcfbcb1cfa369",
+ "0e0cc4395844d363ceccc8a07a92a2d8",
+ "5166ac0bdba2b660af164fc847e4ad300675cda9f0acda47567f7952eea7084832f6dbfa0aae9f403a5bbbe307ad40845cb08347588063ad3f1df766790c023f160ce21bdf372fb48e0f7e2ced50cb3f86c2fb257ad7863fadc5fe6992bf1c4508308b259480007a628aacee94c258c91cd847f3d05251dadb96",
+ "5f590a65034eba433e57a9d089b2924f5f8482db6a467ea435478afc",
+ "f2fa7ed4fccf0388b7bb291977d2214d03dd30c4f81bab2df8f2c1cfaa46ff2fd14733cd7b8fefb6dd020ecab3eb478d1fe0b849e057512fe7b897b171771a2b68d7fe6d9b70dcfbb6307dacba5409b7fdafc49752e4392111474388afb6d79ed21a60c59234bafad676f88f7653765b4dc758c9fd930b2632a0",
+ "7132028dd8a57c1343b46370cf9d3ed4"
+ },
+ {
+ "711a437629429db2e14058e2a826dcbf",
+ "eb036d6e483a212ff6ee25d970fe1ac3",
+ "29937c0efb36ed27fe7709d7179b4f38a2fc191b5e8d9616b58f6dc9ba2ab74e13bbdcd233e8726d90f7ded06c3861582f27158732f997df9091446befe75855ab05b348d68f96e45445f44c31e9ba3e4d7be96d9c8e806535e79079139c71fcc599fea8701e0c2edf606986eff1535afdfa51d1be2dfdee",
+ "",
+ "4a61f5d6b8e746bf6fb49ca2b16c22f4e9ffcdc89a3137b39bf5445fb6b989d5200f0c8d5538891a5e8979b5cd8c734128b4e4ad98b0cd598c40ec9be74725dbca84c65a52f17ac983330b0b74e4193540f6357c3bcde4e8d8fc6942314ba68115bf2a682756e3c42008803a81532708a0e7b5e3b8436145",
+ "55a819d187faaedcc36ee67d6711ee46"
+ },
+ {
+ "a26d6028473bf7de23851d00d514455b",
+ "05b87c16ebee8bb62365d265ac6818a2",
+ "baeef99e6d4d15be9ff68a5d94aee7afa3d898cf42f94ad572b089659708658534d198dd3fba47a48611e8d78dad",
+ "5d77dd8066d3cea3b0762602ba6ae3d1ae1c27d1ebe70bfcdc068912def545362a5bd2",
+ "e4365eac2e7b5d02e7fc6c110895bcf193a0ebe28e81d0f6128a95e3e9183582ebb964d666972bd7fff8cd3870ca",
+ "ae64db8241b14b8733a419f476469bdb"
+ },
+ {
+ "9bb0e363275374f1771ababb7b96851c",
+ "08cf3a6355ffbe621ea874e917729d4e",
+ "b380355f794d31e6e85fc81a49fdc2af2104471609692f94c994a710be5cabdc9c9a61b94fc3f76927c1cd5c9a5355a0e8ec55a69ef114b3963ec95137b9ff84240c2a71d3b3459056d1a183eae21cc5a7c109e937faf8f61b6232fa30951f030047d7555b60f85a318833afcea80ee4d88a98",
+ "a7fc199cb07b6e5e498dbe590af4a4d95d35b043a97d52e11cc1092c70250112e070e49fcb8a3e7bbfca3d0c4467ba332c0dad277a997f2a603fd2d016979c24b3870a",
+ "f8ec2722a9aa97d0cab77f7833e6bddc9570bb79a159feec2dac9d2366e7eabeb9d74ab53a846fd8ad052a740dba39801b681e4da903939387ac3578eec4547dc97c43a8824db11cdae4e7ca8330c9a2d4249853a7285c54498e59d645546a5bb5858b8ddfe37a14242d9750b02ccb41b92bbf",
+ "95af5d721f0bfd7b27a782d0aaf37d05"
+ },
+ {
+ "7458fcb1fa1a886924a044eccab9c5b2",
+ "30565643aa9bae844b87bd459628d093",
+ "4227dc17d3e0ec8363c84b989f72d235d3991e57ebe8a6fcbcab1053edf3b323cbf5f5f45aa142494ab0afe78c",
+ "d07afef73f3cabbed475b69fa30aac8af674b74448cfd4d6ecb0c5c1b5b58d0c7173eaee440be65715d780d61d346dede7c52724bd76207ada9a3707c1326dffefd04fb29321db617d12b4a607452a5b197460bc524a40672628e5b9d45f821a5b",
+ "50c568868de4b49df40d33e6b25abd6b2dfd2f22bdc12a18ee2407dfe82cd3bfa2fc344c91ba6544e079446073",
+ "041f26ad531c2538a44d927067ccc395"
+ },
+ {
+ "68df4e697e83c55c822bb3637bb52d54",
+ "1b0df23e69aa907856ccb9ca4d6c51b5",
+ "59242d6e2d7e612d2aee7e8c08f53f172e0f93d57b0c08e7cffda90da5b2703eed8192511f6f1bd59e9ae781b4f1156ae06ec38b5bc1f5dddefee49f561d692f832030f7a1b506c0ebe26447b3eab68172e7e7810b13d425f6c78e1d6591cb4a24a61c5f9554a083283485175c18cf5df4ecf2f87c98615de9ccb3",
+ "fe9643236be4e7aa3998f44b4336a4c1f8fec28e17",
+ "46e15eda413037249e584ea1e3007166d70bf9c998ca2a8386bdb8efde70f3bd35a9b0877e333451f7789f4d8b4e797170445eef5f818bd321574e66b7881cdb546eb5528dce75cdd1683e715b2ac7ad259954bca62d8f0f0066fa6adf50f9e13dbe3ca1e503957cb5f8a2dfce0ca7377ca51989e3d8e5275893ab",
+ "e30a9b2a9c38f7b05dd32f2b7a9a44f4"
+ },
+ {
+ "a4b06bbf87393d2b921dcba697274f07",
+ "5c14d51c52d95ac040e1060a0ffa21eb",
+ "8c85ddd8d3f446608e656052062f0cd58e6d58",
+ "847d3b95895426225d08865cc9a329f6f14e63bc5a66fb6f2a05bf8eb9bc8166e6fef29e1d573acdb4c3bc699daeadff7df5d6e8dbe2ef713008afcf9b6e97ce6cab4d90594fa4430ecba5bb62a7938f03d57869",
+ "cf6c47fec422ee29226b6cbc5092bf670b5434",
+ "4a1025c100318a2c68e072ad1210bae1"
+ },
+ {
+ "50034800a878a3e570364540fc862b77",
+ "bc92f50c2630f7fe354399fa9a6fc48f",
+ "23a93e636d1924a60f3461de1020b73ba18fc3854c9dc9f166d7d4d1912503bdf1",
+ "23d5009057b76a00d92db6b280a3a30ba08ba3afec6312197f06ee01dc4a22d73ea010e02b65af7968d8977f9762ff5a6dde278d8b351d3b8efb32cf7cc8a70a7a8b3d79",
+ "2cf9f00b66c63518354ea59510c178d75499866218eb5a031a0dc4d743ac8c05c9",
+ "c61a63370e6b5c035e3bfb9fb1f10064"
+ },
+ {
+ "d68448b73ae9bd161c9f1f36dbf6163d",
+ "3345d820331958c63dd7a129d3ea0de1",
+ "ffa236070dc5b464eb034a9332041a014cd7852b498be2dc498dcdab4151d71f47c7a6b17a176c5999a7574fab5ff469cd02226492a38693eb2296a4a7cc2857b28b5b61",
+ "c790bb04036883e6e4a6912a9b0afc36607e12b0d457d4b5f6c120cf0c009caa087fc2710439",
+ "1474d60067d082706bb0cd823b22582ddc0fd68412ea0e399b03988e616ac5ca0a7a8da6e6fe29292b57046c289ad8a52360ecd19655bb801c6eaa2ccd66ccb14c4c3748",
+ "c9e761ec6154ff8ffe23b4ba0a493b22"
+ },
+ {
+ "519fee7049473c7c41f3bcf7b2f63a69",
+ "be227d2bb97f2eef62d5fd9203cb63a9",
+ "0c121fbcfb4f4f8f150281140e49d71dc5ed82ac4a30263a6b2d92c55ac6fe4f43f64c0f526d3df642c04a5c51e58703c381701b1f4618cf66e27c60dd5e6558b48028d5fb11339c4f2547a3aefd8100",
+ "9ebb3c33eda54164b54bf95d4fbe113333edb0fdd62c24532fbd4cb91b11e08b1e74487dbb0f3daaa08c566e759d53ea3974cc3685ec460e608f7d01fd2dc23d9bc283c73ab492bc9fa2ff458d268667504cd47e585826",
+ "c0e22cc3aa610bda350a2ebe8f530c05cafa19e7060b064c276a06f0bb430b79839c51e6b22aabf429616480382c86f8c04ea397c976bb08caf8f35c38208e476787ce229a7a300c5411471548b15d9a",
+ "3598cb4a1fab6c5fd50dd1249c530e86"
+ },
+ {
+ "58bd2c73aedb31baca592e42d614c68a",
+ "bbf76585731b6334fd314e771d9e404f",
+ "d238c5f0677c86c001e66691ea9eb8aee429fc490d38abccfed3a546b5f05398288e7232880fa3d485fe3862c5469f980d9ff4caced1cbbe7f97adc15b6919876b8cbdd35320a20eda8a1ad6e853164b0e0ffb2f702e1d6a0eae8b27577bdd4e5a17e6d8",
+ "86147d2debc30111b82c1ccc41a13dab1aff144bf2810695a40d02bdeaf519669a1b81864edf",
+ "94fccab0dce48d5aaf42ef59764cba95b42410e2d6b2c87c95d8dbc15421c45d7a556e25296df9167cd46def7d10602aeebd0e7e909c52ab7a22f833e976fb76b9b39b1c2889587582d44ad8f484f0382804d7481f1a8d6c903b13190c213102ae273378",
+ "f05d5062f636e08281f4633a4242666a"
+ },
+ {
+ "a27d07b0976574c43edba5619b3c1f27",
+ "879f4114bf61f1d7b487bcdff6c90778",
+ "302994dba80c2268f5b1c77bfad0b780a9be6437a07dcf1fee61e8e72f7fd3ceac24a01be486a2eddc901a19a0f10eaa94cf46b604f98a90c0f62fa6476d27a338bd046fffc26570",
+ "b97a43027c5dcb8a95",
+ "633c76783dcb88ff677a6f567685ada02d787eb9aa3a527a45fd415180f1fc19cfddcb90583621c2609558703c7c5ed548650c98e591fac7a692b1f921284ebd8b86d3a1f26f1ad2",
+ "0b006ed5a955e5f003177b0ba2c7be8e"
+ },
+ {
+ "d55658dd1f27af02885d0f431fb2ebb2",
+ "0aba0b9dfc9831aef0203bc61a601176",
+ "05805491b667d9ff38147d96493db29441e188243f72668c7ba61b",
+ "df403489e3bb67eeae8440569f6fbc1ae072305f5047c5105a7e4e5349d3732d75572298253f60e3821c721941c02dd761edfb081d09b3c7528a0e786a6fcbab709727e7d614ecc604def19c78fe061040bd636d842b16e96158db07d6c2521ad54778acc78f12b450db0474ef700dfd547f9c5b",
+ "2e8adbea0e9ef5068fc3abb39ccef59616420d4fa038e2f35b560c",
+ "447db66795e52429222e7a9a717f2e1f"
+ },
+ {
+ "adff46e4d7d78b3db5c74c712534db37",
+ "c54185637dd281ebf672393cf9bad28f",
+ "b3850ad942e221753e4bf30140eb5569cfd9972246b9a6a35f7a8512db333aec59d380973d6a6505d99cb004dd47b33e32f4f238b1342e6756d3619414c31bde45",
+ "59bc7a834189b930c8cbff769ef63b5e1a08c352ed779853b36bcd3d0ca7b4e35bd6cdaf2538ebf0e3a0d7cbcf3bcd2b66b910967c226a1da42f84c4a8f81e19161c6593e2c0a0fdddd3c6ab3a864037fbf976e8aebd33d4450be9893da2e37e728916b663944e3fa6ba543d1010",
+ "5cc93a30fd8f71befd87fc50112c156b53abfc97466f36e3315915a7d4147f0b3641177b9d08ec13e7315957d078ec73eb0a93a3b7a51e3db63a396e6ea2adfba7",
+ "96092f8845da1cdaf48c7e76c9dce580"
+ },
+ {
+ "4a5d7c201ddae018edc9783413dd0329",
+ "eb7e038948d3bf61d2cd29d2fe722603",
+ "3e6a17d47db58690b895619128645a2782d17e9a3735c1450a7c8e13a9f212208fcf256f",
+ "65b8cebd83d3197118fe81dddce22b3947653e04a48d05b4a2dbc42a89e62b0d6b61d5f31487af",
+ "a1a858d13540281e1d0a9a82e3caef64ff742e51b1f7476d318729508a68840b371fd300",
+ "108023763640241ec06ce1c24c061c10"
+ },
+ {
+ "83190fd90c68cf63648dbc5daa442e3e",
+ "3c3683fb5d3f1446f8c0d0127fc59d5f",
+ "a5136deb0a795dccc18889c23e9bb21640864981a4ecd903e8fb62",
+ "13066ef4f97501fe1854da6e2d57ed43e4c074ad45b7218536e7dd8368a4ee8c6f2b63199fc0a9a679e2b198bd3a43e6e8bbd6",
+ "0c8cc3bde1f4933729293718686301b1ce50f5e7521655016f8432",
+ "95a1ce7284494c9c8cd76a4639b28b15"
+ },
+ {
+ "05bed4c00afcb8ecacda8daba02585a1",
+ "ed014d4e9eb504c70d5d3153473dc146",
+ "6fab5ff04c5a74a0a96948501de9167597a42fde4c50ab27719dd1e2b0e0fc0fe6e48e97c79d2a71fcb5e7ef60c67a32bf865decb39bf5ac17969177b2fac849a38e08bbaa3be0d6dcee9ff685ba97e9b54514624d51c270065508c03e96f28667e3c79f6a68859a85048301779da7e2254b1bd1662ae3ea15e0332c",
+ "ebb614315ba4b7d69632656d5a4d2810112862ea3e443148100bf2e89d059bc9e2d9563bf34b823c57108ca9a88e4b07441f0ceca4713e2af56f40f35d6f2223d37e9eeb61739a65933712763104a67488d2022a5e033e240969a4d33966b4527035eef0970c69660ab3ee5c00ac815a9ee52d767b0a937b",
+ "6edcebf7ac2cd10be8a9a595a00e68e2d3127f5de640323791229141caded658e99fa59539077027ed7b7a433a794bd523ec59f504978964d3e17eb388956e43395ec89b252a93b317c64580426d1ab0b633a972524084be5d4886458718ed42f47967eddabdf7b2f440818e0aab9d932c10a4c7283d05b84ef74a6b",
+ "665b4064bda8f0511fa2aa35ff2e8abf"
+ },
+ {
+ "53e1b8de6176c05e04f5a4787e733b3e",
+ "574de8c0f914115c9267f7852280fbe8",
+ "0ef099d6995b41d4e9227c3aa59da313160afaa32e1753422c1eb45bf102e806aa996a54606c78320e85da74deb39e8b0059bffe32780ec784abf6bd540d3c01e9f13c4209bec2",
+ "3d9ca3718f31b4f37f988ec676fc3b5492a44792d1a4f8fd7cc4726fae899f102841e7f5c04b2ae2c5f9eb204c5b74222d89c2bd36b1500b2dd81e9643142becec1b88aa7a0d7ea4c81fb7e8fb37ec1a58e0383e",
+ "5cf9292077dbcc9557a1cef51de815facf02a89c9e29ac62098c8e4d0cb49c4f55ed55dd9dc9c36a634ceb8f4dd475837582b9be1c17030c0546b335be95fded1c416e4599851e",
+ "e9649f102df1224cc20c24fd54b096d3"
+ },
+ {
+ "81118e9376e515a93dbdda15e58ff387",
+ "75a0f02a8e78a0d2d0097cee863aa576",
+ "f30c353db4dcb2320ba5fba118e50526800fda7ebabef05bdf15aee5d9b70f2ab697937d77a01bb4bb460fcc4233acc3b970f4f434e9ea85f30aed7d247115fc5db1c333ac6a008dfe65ee02b930ea097d046f2923bf84785d47f382b19651948d69a6e4b861a7112c4e1804f6435f70",
+ "6f75857a795e6aff71994dacae41c2b2d9d6d7e67fbaed6d2e20bf89da461f509ef3d284341a8a2059ef1b97e9e6820f1a72ad703e71999be36fd7156d3e3f35663eb4db44a858e08bceb154af51360feadf3bca8f20",
+ "0376339c7324168426dbc1f36ee91603f844352817b575ffb25ca6a75e2d0f0d77d853230b7e5a4823195c406298bc3781b40df001d9cfdff16de970df4ffd0aa652fc7732c6311e2665daad93bb2576d43e1a58837513c62a8b74cde75901f9520a29a10e4dad9e4aa981c5e72d6cc0",
+ "2d9d3d20dd304d1277deaab457404f5d"
+ },
+ {
+ "2d60824c89bbeb4e2b72434aa0356587",
+ "20ad2c51679a7246ca6d0a47ba7292e8",
+ "17aa9ed83ff674f959085ecde2a6c5026325265a143d2c772337056a3c66abb5d742f33be39697194fb1",
+ "283fa29dc399d07116e43c85eec0adc8a76221669a9bba6554f8e828b680",
+ "40fddfe3b15925fe189b25aeb6616538958d43f0c64806f6286a5efc8a4faee98d02314eace7619bd2a3",
+ "270d30239c0a9afd5edc28db8323ddf7"
+ },
+ {
+ "e2e2a29db958c6a3f68a52825b844c2a",
+ "3210fe0cede911318435fefee1d921d9",
+ "45f5fc3a",
+ "91209d1202574e",
+ "2067b789",
+ "eaee3477b6cb3b7a6df8bb4ad493504d"
+ },
+ {
+ "24affb4e364dfcb9be823bda04cdf045",
+ "d7db8f0fd20b87ea4ad5e85e026b4b42",
+ "296e2b8040a3907fbd8789f660f85f3b49c6050092029a2b",
+ "42f31798f0016547fc9126a6919c14fdee91bc68f839dabb24d2249ff5e001b6a2308b57bfa6baa84e635123e8c2110c",
+ "3af391d72e60751b10d3f009814673d64cb86a0dc998cbf5",
+ "c16019a549f7c6dabf5bae70461ca9e0"
+ },
+ {
+ "e8d14e976fed8be59625b034419fde86",
+ "1d3a06b7b80217caa5a4e237c2b94549",
+ "fa2d4f764e7399bd346f60f1cee797a9624809373daa3803cdb12717fb48503263b21ab1d99dfde20d588458993d8c33384e897973a9dd74bb7e308c8fdd6a46a9",
+ "8c0c2e14cf2ed5c7147d8c50b4c28b232a80247344f21a61dfe4065fdc559200b7a0046e58606e3a3615ff54bb605e7a5f001d215de255ba75366f6be3dd1fd4858aa9e8904ca99647387b1a17c7ff",
+ "9427f3a18a22e801a3d7d863cccf4fc8dfc23a51bffab61235e2bdbae311ecc321db38128730818cec04f51ba5f0c3e6b7327402a2a63c95c184f7946756f2c94e",
+ "5c9d05bdd3ce8ed1675a13b91c013ec9"
+ },
+ {
+ "73e9b0ca8fb59181dac10130454e3a7c",
+ "81c9a08c95fb942c42003aff680b11ea",
+ "971adb65be3d885bc115724cc33a0f53aa47606e7bd5",
+ "03cc2f305af325f4fa14de7ae8e89a03d040e812f0f4a7f82d72441d83b85a424f3ebc34ad",
+ "18ff36eaf9e6f49530db6f886fd85a77d55289d85fcd",
+ "7a4a067de96099b4960e5557853d7ad3"
+ },
+ {
+ "59f15a1479f5dbd9c1b879475de9d2e7",
+ "060ac95c956235bcc003dfdc92da5d89",
+ "a17b5ffce4cc08b23a8b8cd7735e11822f9672691b4dac380835729694f39da377e4d3fd23ef7b8b40a355e271bbfbb8cd632481c7cdb67d99d314609174b10cf370fd9b9ab872346c631127f873573ef61776bb8e154b55bab6d84544cd8fe5f7611840a057",
+ "9faf2f97e14d2be029",
+ "3a4986b25ac4ebbdf8c62e74790e79f860c5c131f68b540a7a9f0504cbbc36b7484fe76713a53f354f4970613a976a4cc55ed7480d5c5acf876977b74e622926c8309b65a5edd3ea2ad7c2805f2859ce1e2805577d409760b2cf8e84cda7097478491bab3fd9",
+ "6628578d2684a14196e13b66aef300b5"
+ },
+ {
+ "5dc5206e6145ce81ffbce717cb425955",
+ "a7a6fda319439a67cb679b3cc6076dd7",
+ "4244fc95829a69089920",
+ "92f48b403ce97f87118605d24314981ec34b958ca0036f0b6acef5e20bfddee370e13bb2cc676dd8d4547668aacc7dfde6af12727789f6ef811e63b391cfa9c4a68ca89e6bd978f38f9228dd9c24e968c4e59e3d34963d6ee942f788e0b5625ad95bd3eb6ae67ffcaf2e4ee9a9cbbd15c40385ae",
+ "adc2915b7813f367bd80",
+ "68bc6d846f575ff95be003316e804197"
+ },
+ {
+ "8d88268afada2ee19bdc754147d6b04f",
+ "119588763bcbdec984a226e9dff179ce",
+ "04deb10354489349a273c5cd5d02ee1d71cbda2a20743bdc2cbc48788b9da779ad2f3f1dec4cceb3132b2e4a1c4302c8f9ecd1d37fef",
+ "0f32a44fb0edff2f0d2334029e59715f5fe2b8e896068b8488f43b567c0d6fa3de5bfa99c6c8f055e3889309e08822eea3a683d6907675b6f0072438be",
+ "bda6c7381492f48849c00a86ba72c8162c09981f593547682b88b7bc6e051a9ab9fa1602e879b8f1e5145bb6192530e7faa76be34dc2",
+ "8d844a27362f2e01d293d6b603137747"
+ },
+ {
+ "0049493db4ab12f83fe50f0fb2a88961",
+ "fd0dd2556a03ebe50b41446250d56e52",
+ "1d3139deaf1046e234189942c2249a7aee9d644f934e6a203a8a69e7683557551dfade301cef8abb29d7308c5a2893a52ce6b1493bf2232606e79c0ae51b0a55cfc0434f2e669cbc56fe7176fd04a1278918c14791e00f88de41d563d3",
+ "4c92be6ed0634323014b9ae5c9401f751c5b710c12df357a694c1c25d906ab3beb5bbaa002208e787f448dd0cef84d3d",
+ "dc3bb7e4baadeb7c32f70cef3144d04ad199ec429ca6b695f87f997c6e5db58e9d60b34d89ccfe49d5e62c267a871ab7818137f523cde68036ad1d8f7db0b80286ceda9734b32ad73f7f0eaf8d19c80fe74866c1cf785f44513b918a24",
+ "3a8877ab87645275262e033308c649cc"
+ },
+ {
+ "b6279f439261d1dfa4b85151caa60e75",
+ "d0b003ce641633d48413bf3bbcde6b5c",
+ "39ee6f13a66b4ee74cda034a3bfed3fcf36f101f1e5b646d1c93e019174e4bd850417fcd5755264476124a5ee8e68cf2fcb9fba50f872fb1d33a025f8c572b4b5ff034d9ad77ecd33981bdfe3e9554253522",
+ "c635cbbf8eace8f911d093544536f38fcfa14b78b1e1eb069c42a351cbc70b7d1f5e93bceacadaf0c9198d3b2ffe54db45cfac70c05d4aecb0c801194642cc070ed223a9e3b65b735af796373db7fb6e3285ee3fd3579dd74be0cd2937f6f825dc3bd77ff7674b06a9ac",
+ "9787ff29777e12f86c7281c57c5a345278fa96d8fc6ed949be284bb79f97b34da9f256a6be673ab93829492159e7ba1a19dc727e16ec57e388447c6616626c6af3412cc70432c3dbeafa35b044e7e53456c1",
+ "1195abca7c171994919b51baab3e1427"
+ },
+ {
+ "81d8c7bf41cb0e54fa51899660637877",
+ "044d29eb40264aa36b976a766108ac88",
+ "4712680db09039894cd72e86db111d63c4bcb62058f84f83ef419cc21e36f2169ca340375ff69f9280fa60c99d86a03dec4673901a7029784be2cdae3f63590da312a448d24eef063304545e553fd01ce6ee088e43c8b02c51b155bada983ea1aca4bad804406aad3c92ac75ce4c",
+ "897f0ea8d69b962913a9a59ca36b65aa7aefe39d3a",
+ "1d5cff8679946302451dc9aed1c601ce46a6f31ef17a53af6ab130605cc2a41da08c932a13b72983ba8cc58376040cc17e3182993dd593f4fc8f2965825173656325942e97db98c584ff0bc913633888a0812ea7675d130d690f9fe8d6eb7f1655de1938fa0163b02c50c8a122df",
+ "708706c87c1438b7b1410ac9cf4d533d"
+ },
+ {
+ "8d35dc035a1039af8f3dc653857cef8c",
+ "a0df1b717a186cfe86a0ac8343e80217",
+ "572bf5295915e7b2f817bd137a6608e09fcb7bad29887b9209eb29e944f2d3231717f9a112e68756948c1fc71dcf6245a0130bbffeef74ccf3ff3860ca5a23753f7539b7a268fb08434b73ba9adc385e6f9ccbfd213f812d7b64d8d6d7bfce1e236c5fd857",
+ "94714396e2dc4bc13a6d628563b0db14e189695810a4925a90826de63327942db0508e7453",
+ "6f2364c357e257e9b412018a1c702f0d0c1170751393b1f73999f77927d4ec1454e78eda131af56b1b46e348f8775e6a022a746b31ee135651bb2a14e21cbc3f333c13df02a3de6d5128ff1145514605d98e984c28dfa89cbfd2f0d8bc41af3e4c73e7ddc0",
+ "b2f8984bed67bcafd95cb0174ca56983"
+ },
+ {
+ "4666ffed66ee2dc3ed18e6345384e828",
+ "8c5c38610ee79b818c18e95ed2baf026",
+ "dd2baf24c168f99d1868712a43dfda4717650c26c36378127800d8cf",
+ "196a5357a0d6c588acc29f85cf38b78b61e0810feefb965d",
+ "a58828aa09a6f25e7d4775ba7a2b303085bd5fb43cd61bcd19c8bb8a",
+ "e4a45e0440c6f9caee3506b37d1f8563"
+ },
+ {
+ "2d5464646342ceb3039a9d2fa406b90a",
+ "8f045fec196343f938902e1bf706e34b",
+ "260ab30c42d3356dc39837b28f6f387accc2527aa853dd58f54426d52cdb9ffc0a5ca5a5c00761a7299e72d48874b46ffe18dfaf38f19cfad76d7c9cb4a4cd7784cfb125a58673972b4bb8c894da2a8969f68cb27fab746f8d62fef60664900833dfca7e0be03eb5908f12e74bacda9d35b06e",
+ "d4aa5263a31fcc8ccc9e1127f7ba6ea2d3ccc72cd7e98e442890ad3f8763856d90e362",
+ "51ede001d1e4ca8a3de43186651a011cd14f4bf93e9375e910a8974ea411343b68e8f6ce80cfc945ae7d9c5adf76e1c0f93de8f5dc48f36b82b65886776f1298b36a2f012140da048da77e09e4d57426abe2b894c425aeb2050b0eea2d8f8255b733bb814abf3ef3d530d87dd7e1504bd683f4",
+ "1d4873bab95a220d094a6e88a670f40e"
+ },
+ {
+ "723efa25ce1bf1748d86d9da611be9b1",
+ "aff260690905ed2e8618c20963e4b7c9",
+ "f7e3eb593d3966c015d63ea0e9211beceb8fa6d9a202bb4fd4128c3177c5",
+ "3950b62147fc16429392d41cc4188d5c82537204e93edc7abfe7ce3404f9aa1474ebc4acd8e18aa652a87ee99c2415f9214963becd44720684f67aa814903cde",
+ "9d7ee643a2cec28c467d2cc88aa539341dfbc82f72b5d940feecd11d4a7d",
+ "5339cc409bfce5820fc99e143ca59b4e"
+ },
+ {
+ "784197d89800aad00105ff7487b6e5df",
+ "fdded94dfbb72c77ad81b2ccaaa2de2e",
+ "b14ad4fc08d08cb0601289a7ff9127f26c4036606a50bdd2921baadffbc75749b8ca33ddf7b6ac",
+ "b82cbea4eaf532d52046bf0bfaf22ec2",
+ "a625b4da553686296d5c6f5ce526c4f84c4af779c67cd328c16a7985c9a28737130da855b1f3aa",
+ "432c4f4a125b6444091384042e3defc8"
+ },
+ {
+ "4dda1ff559520020513e0a8e554da28e",
+ "8b183c7e23130aade134ff8e539d8053",
+ "e56d6364a87fb7f40af02b672fd337705ab8a02a5fbf2c2a639a872da16895774d90658269437160cd22d7370ab0fd3e81d746",
+ "675b6d9e6c4c479798038b06561f1ac0dba2ce54988efa3393cb6265d901df1f815937a6e42db8c64c76dae0c8aba0ee20",
+ "0b2f31b8b15ec535c7e8c732e91f4e119bca192b1fe2eaabdac037dd1568e4a8d786c7048c16ebd4c513324b18ac9ee0281fac",
+ "2bc20cf2d6bbe36d379f794824ad190e"
+ },
+ {
+ "66dbe969ec0adfbe1b99874de53417d8",
+ "13ee71e9dc02d592700c04ca0bcc6344",
+ "fb420a6751909185796656a952759b4b794bd4eb98c82456af4f596093f5615962e62a9ce3fd9c4e0cb31a649cb5c17d30f66ad3d52e16589b174102cb5ad9973ce03f44cd3776e0d9c538d255ffe81ddff81e06cff8e4d8adef4f08cca416d52ee3aade52341e5cfb5de80c71",
+ "db499d6cf13840accc40e3d14733662885768f7541b2615138c498b087e51b20f1c0c373a589b510de546d372a40cad0f92ac3f6f7bc1b85290c4553c83b",
+ "7a7786b03d18c1f2edb2d9015da13a327f364895751c32b8ab840079b08e47870b4ecb49474d2da2bc0a53977aeb4d63f3b4e56f6a3d22ccd64fbe098fb9b27eb5e5b1f179ac69eb3d57175bf9ee37345e6f48161adcaa27bfb5363889e38cf7297b3fb9b41a0d61e751ca5184",
+ "559c1df2d0a7807a79a160921835eddd"
+ },
+ {
+ "3a00ee1e8877248065cd26e3b9a857de",
+ "950529b19697df5b0ce43a3f429e9509",
+ "d6fdd1746e8e7c7b84adef010951f60fd19b5aa74b1a8ab1ef2dbd5487318fdf7844b436dd1063f10e609bc58604ada5c41ae2ea1b5303f84c",
+ "30a5f3a4e4543dca2b4d53a59a6a11b97a7d",
+ "06ffcb4a0da10ae1a5a1c5b6205ccf4882a9c796370e7793d9b3ff3a857c156b3285e3dcc2181d8c0df26167ab4f8709db6870c9e10e75b90f",
+ "a89ee72561154c209fff00ae7634f4c4"
+ },
+ {
+ "b611b23912f0c44c8f0a452e181016a3",
+ "aa0321dae967b75f958a3949fa08fda2",
+ "16320a4eabdcbbb1e600058d308cd8aa650ec35985906489d1ed3210ad402589b33de4a68088cec878461e54ce60ebac399457d4f4ffaea77fef304f9363817fd797afac854d0ca313321fbaca4b0f",
+ "d0b0ea43a3fcbcf70e5d4b21ad115e503ada6f43a74a0585481b249db3c00645f06005b1b3da91600a14a40ae5c045127cf8cb6bcb",
+ "39f3258b852471d9b9a289027f26c3a7e49fa8cb61983c429b3b306edb1f0d34d9718774005d71ef2e89212c6c538f647335d85a2d0b4c72b97a7eee96d5b6976a602d82a294bc2a4887b16aa327f6",
+ "9d35c571446755b395fdc634a69e25f9"
+ },
+ {
+ "2ed2ab0c5548c1e97879a6c3ec7ebadc",
+ "3e15d94c7dd22593caa8be653b6d59d2",
+ "76b1d92662d472c87ba9b27e2756cf62513ec190f709996e",
+ "f1e64c14a92e952036305ceef2535f65295b2803f7396a5e88f2ac993e201782e2f1edba92011a1530278b6d3d1c9a",
+ "8c9fe2da6b58f0a9d40609bfd9ac6855badaef814588ebc8",
+ "a13ce63402a3c58949a7c4cb8a2b7d36"
+ },
+ {
+ "37263267c4f24129d9db09a2a96d7c14",
+ "39e5c4f2b36c9ed5077765b89cea1bed",
+ "3581b4424c",
+ "6ea6a9f99350a38601162f2e24928ee2",
+ "9ace0569f7",
+ "b194fe3eaff122ca4bcba925f4013320"
+ }
+};
+
+static int
+tv(void)
+{
+ unsigned char *ad;
+ unsigned char *ciphertext;
+ unsigned char *decrypted;
+ unsigned char *detached_ciphertext;
+ unsigned char *expected_ciphertext;
+ unsigned char *key;
+ unsigned char *message;
+ unsigned char *mac;
+ unsigned char *nonce;
+ char *hex;
+ unsigned long long found_ciphertext_len;
+ unsigned long long found_mac_len;
+ unsigned long long found_message_len;
+ size_t ad_len;
+ size_t ciphertext_len;
+ size_t detached_ciphertext_len;
+ size_t i = 0U;
+ size_t message_len;
+
+ key = (unsigned char *) sodium_malloc(crypto_aead_aegis128l_KEYBYTES);
+ nonce = (unsigned char *) sodium_malloc(crypto_aead_aegis128l_NPUBBYTES);
+ mac = (unsigned char *) sodium_malloc(crypto_aead_aegis128l_ABYTES);
+
+ do {
+ assert(strlen(tests[i].key_hex) == 2 * crypto_aead_aegis128l_KEYBYTES);
+ sodium_hex2bin(key, crypto_aead_aegis128l_KEYBYTES, tests[i].key_hex,
+ strlen(tests[i].key_hex), NULL, NULL, NULL);
+ assert(strlen(tests[i].nonce_hex) == 2 * crypto_aead_aegis128l_NPUBBYTES);
+ sodium_hex2bin(nonce, crypto_aead_aegis128l_NPUBBYTES, tests[i].nonce_hex,
+ strlen(tests[i].nonce_hex), NULL, NULL, NULL);
+ message_len = strlen(tests[i].message_hex) / 2;
+ message = (unsigned char *) sodium_malloc(message_len);
+ sodium_hex2bin(message, message_len, tests[i].message_hex, strlen(tests[i].message_hex),
+ NULL, NULL, NULL);
+ ad_len = strlen(tests[i].ad_hex) / 2;
+ ad = (unsigned char *) sodium_malloc(ad_len);
+ sodium_hex2bin(ad, ad_len, tests[i].ad_hex, strlen(tests[i].ad_hex), NULL, NULL, NULL);
+ ciphertext_len = message_len + crypto_aead_aegis128l_ABYTES;
+ detached_ciphertext_len = message_len;
+ expected_ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
+ assert(strlen(tests[i].ciphertext_hex) == 2 * message_len);
+ sodium_hex2bin(expected_ciphertext, message_len, tests[i].ciphertext_hex,
+ strlen(tests[i].ciphertext_hex), NULL, NULL, NULL);
+ assert(strlen(tests[i].mac_hex) == 2 * crypto_aead_aegis128l_ABYTES);
+ sodium_hex2bin(expected_ciphertext + message_len, crypto_aead_aegis128l_ABYTES,
+ tests[i].mac_hex, strlen(tests[i].mac_hex), NULL, NULL, NULL);
+ ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
+ detached_ciphertext = (unsigned char *) sodium_malloc(detached_ciphertext_len);
+
+ crypto_aead_aegis128l_encrypt_detached(detached_ciphertext, mac, &found_mac_len, message,
+ message_len, ad, ad_len, NULL, nonce, key);
+ assert(found_mac_len == crypto_aead_aegis128l_ABYTES);
+ if (memcmp(detached_ciphertext, expected_ciphertext, detached_ciphertext_len) != 0 ||
+ memcmp(mac, expected_ciphertext + message_len, crypto_aead_aegis128l_ABYTES) != 0) {
+ printf("Detached encryption of test vector #%u failed\n", (unsigned int) i);
+ hex = (char *) sodium_malloc((size_t) ciphertext_len * 2 + 1);
+ sodium_bin2hex(hex, (size_t) ciphertext_len * 2 + 1, ciphertext, ciphertext_len);
+ printf("Computed: [%s]\n", hex);
+ sodium_free(hex);
+ }
+
+ crypto_aead_aegis128l_encrypt(ciphertext, &found_ciphertext_len, message, message_len, ad,
+ ad_len, NULL, nonce, key);
+
+ assert((size_t) found_ciphertext_len == ciphertext_len);
+ if (memcmp(ciphertext, expected_ciphertext, ciphertext_len) != 0) {
+ printf("Encryption of test vector #%u failed\n", (unsigned int) i);
+ hex = (char *) sodium_malloc((size_t) found_ciphertext_len * 2 + 1);
+ sodium_bin2hex(hex, (size_t) found_ciphertext_len * 2 + 1, ciphertext, ciphertext_len);
+ printf("Computed: [%s]\n", hex);
+ sodium_free(hex);
+ }
+
+ decrypted = (unsigned char *) sodium_malloc(message_len);
+ found_message_len = 1;
+ if (crypto_aead_aegis128l_decrypt(decrypted, &found_message_len, NULL, ciphertext,
+ randombytes_uniform((uint32_t) ciphertext_len), ad, ad_len,
+ nonce, key) != -1) {
+ printf("Verification of test vector #%u after truncation succeeded\n",
+ (unsigned int) i);
+ }
+ if (found_message_len != 0) {
+ printf("Message length should have been set to zero after a failure\n");
+ }
+ if (crypto_aead_aegis128l_decrypt(decrypted, &found_message_len, NULL, guard_page,
+ randombytes_uniform(crypto_aead_aegis128l_ABYTES), ad,
+ ad_len, nonce, key) != -1) {
+ printf("Verification of test vector #%u with a truncated tag failed\n",
+ (unsigned int) i);
+ }
+ if (i == 0 && crypto_aead_aegis128l_decrypt(NULL, NULL,
+ NULL, ciphertext, ciphertext_len,
+ ad, ad_len, nonce, key) != 0) {
+ printf("Verification of test vector #%u's tag failed\n", (unsigned int) i);
+ }
+ if (crypto_aead_aegis128l_decrypt(decrypted, &found_message_len, NULL, ciphertext,
+ ciphertext_len, ad, ad_len, nonce, key) != 0) {
+ printf("Verification of test vector #%u failed\n", (unsigned int) i);
+ }
+ assert((size_t) found_message_len == message_len);
+ if (memcmp(decrypted, message, message_len) != 0) {
+ printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
+ }
+ memset(decrypted, 0xd0, message_len);
+ if (crypto_aead_aegis128l_decrypt_detached(decrypted, NULL, detached_ciphertext,
+ detached_ciphertext_len, mac, ad, ad_len, nonce,
+ key) != 0) {
+ printf("Detached verification of test vector #%u failed\n", (unsigned int) i);
+ }
+ if (memcmp(decrypted, message, message_len) != 0) {
+ printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
+ }
+
+ sodium_free(message);
+ sodium_free(ad);
+ sodium_free(expected_ciphertext);
+ sodium_free(ciphertext);
+ sodium_free(decrypted);
+ sodium_free(detached_ciphertext);
+ } while (++i < (sizeof tests) / (sizeof tests[0]));
+
+ sodium_free(key);
+ sodium_free(mac);
+ sodium_free(nonce);
+
+ return 0;
+}
+
+int
+main(void)
+{
+ tv();
+ assert(crypto_aead_aegis128l_keybytes() == crypto_aead_aegis128l_KEYBYTES);
+ assert(crypto_aead_aegis128l_nsecbytes() == crypto_aead_aegis128l_NSECBYTES);
+ assert(crypto_aead_aegis128l_npubbytes() == crypto_aead_aegis128l_NPUBBYTES);
+ assert(crypto_aead_aegis128l_abytes() == crypto_aead_aegis128l_ABYTES);
+ assert(crypto_aead_aegis128l_messagebytes_max() == crypto_aead_aegis128l_MESSAGEBYTES_MAX);
+ printf("OK\n");
+
+ return 0;
+}
diff --git a/test/default/aead_aegis128l.exp b/test/default/aead_aegis128l.exp
new file mode 100644
index 0000000000..d86bac9de5
--- /dev/null
+++ b/test/default/aead_aegis128l.exp
@@ -0,0 +1 @@
+OK
diff --git a/test/default/aead_aegis256.c b/test/default/aead_aegis256.c
new file mode 100644
index 0000000000..b170b80bb4
--- /dev/null
+++ b/test/default/aead_aegis256.c
@@ -0,0 +1,669 @@
+#define TEST_NAME "aead_aegis128l"
+#include "cmptest.h"
+
+static struct {
+ const char *key_hex;
+ const char *nonce_hex;
+ const char *message_hex;
+ const char *ad_hex;
+ const char *ciphertext_hex;
+ const char *mac_hex;
+} tests[] = {
+ {
+ "54662e55bb4771f9711fe5301d7412fe",
+ "e51d417ab10a2931d8d22a9fffb98e3a",
+ "04f672f8cdb3e71d032d52c064bc33ecf8aad3d40c41d5806cc306766c057c50b500af5c550d076d34cc3a74a2b4bed195ffa3e8eddf953aefe9aed2bc14349c700ab7e4cb974fb31615a9ff70fb44307055523ab378b133fefc883013ce23bb01b23aeda15f85e65cdf02a291a0454900cb261872d5205737fd7410",
+ "3b762e3ab5d06cb2896b852ea70303f289f2775401b7808e30272f",
+ "d6736371f35eb067244dd7963ad2e0cd3949452cbd4c220be55082498ed3b230f579d78844311652a9958e82f172bb8072c4b1114ec531a6ccb340ddd86caf32a0d4c9c45738e9ec9c0d9154612f7d90465f3a277bebd667c0af0edb6935d8dffbdee96c1a96e4c4318f5d3bc90c1c8d5729e1a402f765bdc9b26b08",
+ "53c2fd22b035bf3f3658ede47ef11b9d"
+ },
+ {
+ "46a5c72e03d900b48f829df00ecb88b9",
+ "b25187e4b77b6770c35c7a962584597d",
+ "fc8083311b38a80c04e57d069661b273264310906781eb7e4e44c6416f7336267674a44a7c54ed6361b43ef9500514e5d9e71f8b5c33aece756b64f3ed011922facbec7c3ffd27d01a853435bde551372806bd0c",
+ "b73c81239e01cd81b0de13247ca4e3528b87f3078e2b674a667430b1dbdc3e93657131e654a4182b4c4ab01a33b36e946f1fcc55aab06fc6f56d",
+ "51189448af53ae3630c06a167ceefe6b9b5eba746fb9b53f4b3104d2b15b6020fa8998e182eb9c9d6b6463939e50723780f983733206ae6f11b986d95abe83555e64f8d3242d7e8055fcb8e2df8e41d318f06728",
+ "f9b7e561ac0316d2ed7debc2484cc3e1"
+ },
+ {
+ "e343d75de99e6d73543968437d3dcf6a",
+ "317a5808ed5debf6f527a780e0896b2d",
+ "247045cb40dea9c514a885444c526ac867b1b80e4728a23b63f596",
+ "323094c01e",
+ "18cb5d2fc5e27bdda5ba16f1320da42049759368548e5bd96f2dbc",
+ "1659e7d7193b12b4c90ba1e4314ef055"
+ },
+ {
+ "7db9c2721a03931c880f9e714bbf2211",
+ "27f642398299ada7fdda1895ee4589f0",
+ "dc5180954df0c3391a60b44cbf70aee72b7dbb2addc90a0bf2ceac6113287eb501fe1ea9f4c51822664b82fe0279b039f4",
+ "6dd5e43033fa6f021059a353edaf1f870387693054d0a2360fd1f6941a68f48ba972a1bc0816a446a6186e4a9a2f9df556bf709470137b8e60d9daa2",
+ "c8a7d9131cebfa5388003cc30deac523aa9b09d148affff06ba40400e09ca900db770e07cedf5cd0647f6723c810ffcb59",
+ "6cac51edd6f49cd7be0010a3ac29e704"
+ },
+ {
+ "bef8a47bbf0ffc4ab56ad5d9899f42b6",
+ "3a2195a5196a0d785e04b38dd62f056d",
+ "5aa0dc37e4db1de35789398b25dc656d05cdc6737de4e30ce944b304ec752bbd10ebfa51feff99dfcfe26b8526cc9b0cf1ba3d1685fb26cfc0c8888fd3cdf55577a516328b289eebda2e14f15eeb1d0f4207efebe3803618d43d99688e6c",
+ "a4a290a0d719b1aaf58f24152402b2f36957f44ea8a2d76b045390f5e0a3559a8ec5b2f871fc6095152183b7be7565d4953b593f854b8477e29ce0cdddce5cf8739ab56288c26c81921f1fbae38b90b287b4622ca8b5b6c0b4b02196e73ee56af6ae427ca7ae3ca0",
+ "0ead975179d64f2b927440bf9ef666ab921e7a3b0832949f31315c2931451c5ddf810c17ad0330073922c07a18eb665aca01c05de58f7d159a74884f9d90cc10dc8c017ab61b820fc3dd32be52f3f7265e3a7a912a230b2a7ed19992e693",
+ "5773c1800d570e5dd8a4d581b5655dab"
+ },
+ {
+ "01f1cea5b7e20db64a67502bb4715033",
+ "7336701bbc2d766167b57c452d010f02",
+ "b3669d31ef8040dd6f462624977d69cfd1869fb19946595759b7265eb98b51f579fddce4bd38452fe3",
+ "d007e9ce654ec9a8b44e3655dcac889176fbf8012b133c4effe70b716eff43264d67d84a3d8504858c01002957cac6eb75d94635fb708343a18e20615e4ecb963bd98a8e7bee66520fba5c2991541c1e7863c1c97ae7ba6c3c34f1161518097b6e75dcfb3aa3e93995eb39",
+ "4e643f7a1b8c0d595c8ff2b00c0145deb5bfa13d8a1b75d7a731f2258b690e1a3b2ce2cbacc6d05c42",
+ "bb32551a6386fe557f543342130f03fe"
+ },
+ {
+ "76d53860e1c45cf60d76d8336948e337",
+ "579c0f0993f13470fa301cd4c6fbe99a",
+ "d0f5d2b3b824fe01ca36d00d47434519b2112195093a06d9d07d7f4f9c5b8f2a4c68668265c40d6edd6e12b5a350e4af11f1ee6226bf307a1a6c25318c0d3aa0421edf565ad42d524f69d0fef06c236c1f0d0e50261e205f381c3e1196dd8827b9990d674288f8250596",
+ "a7a77cc847afdfb9dc8ceccc621462302f31233a830b3827ca68618e604c95ba8615f6ebb5ff1c2c66727e70c038554619f96f79d08902fc70111f853766a2db04e51d",
+ "def4fcb75110820298f08a8a4941434deccb952dec01215f5e7f5a2509fcb9e2a994a77d5eaa617da9cf2f03483faff5831506e5617707b88e08195b6a993219898c3ead769ebaa002934d3c80023833d7ce4a7a989596de6fe78eb0237e8caab0a9fcd2625af80caad6",
+ "6eaad25866e9ce7276300f305f63ae5c"
+ },
+ {
+ "cd05e08e14686623fd334780439c4ae3",
+ "d05ba5a655bf7b1be7500f205c9c80b9",
+ "021c20518825c167a746a728578a0f470b2035c7b39c75f3e492bcc2e6e96035c4fff65dfbfa93cbc7a37828a0cd62bf1b20b3bb89425ae647e021cde586f652eb98c98b1ac1018c6fe3e046f41545bbfdbf94dca48e465aaed8efb7eab5ea143e5b95b72a078f8fb58d8ecfdd9a3a968e2468b6",
+ "be9255f750498ce672c877285e649318bd5bf07cdc5902b7de61a8415b6fbf20b1e432ebc9f8f9c8e3094ff6dffd1b1e0c3cc5",
+ "faa851ddfe54b01cf1a3caf34815c6db0145ddebd1f34ca9edd479bd4a3bb4bac21c2b5d365ff4d389a764bcc1436e51267ed3e4f225b7cda1fbf25d221d91b59aed0b4d20f71859f41e85e15a02e2bcd59913d8ae019d1f01ede317b4ff94ed2b05650259a705c3b2be2c2a9c82a4809dab7b03",
+ "b0292afc74141e969fb653de7ead5009"
+ },
+ {
+ "6870a5652199e2f17407185bd7cf18eb",
+ "942988922482351c317244b26587c560",
+ "49b2f6765f7f552f8704671271d703b3b02157f71ed84e64481be8bbd4f3493bfd3f313ac62ba4e9a7d86288533a7bc7a4257cad5db04bb80d6574e473519eccd15cd2",
+ "6cc34a81ee984b436947b31574473e0a849a341db0ebc67f64efb39c9e118f65cfb25d1d898b4ee8052f700cb43cbe744d70b71d2086a89ad12dd67feceacb092a861ba80e41808c625fbdce017d51916e1fb5b38b0beebb27478d8390ec79b3f3902a4ac22d79",
+ "82d3ae3aea3870e40fa48da698adcb596eb43fb063866f6231bb744b687e32e72117a03da08a635e4ed0f255f28f3db6f0b8a7238d0244994a507fe75ddd17138b0605",
+ "f529092f2eec3800f565ed7983da4c65"
+ },
+ {
+ "15a87aee858f5723beb477b2cc039d14",
+ "6ce71c763784e59fba852ae39b25de3a",
+ "25d1d38a8e9e8c34564abbfcba69035ce2f78df8626543e7639f2f23d742853e34880e7bc6d684ed3075abdfb91e36076242dc53d60513333f59d139e680aa246b0e7e6092e8d4e6ab471459068c2a83b07e8b7969c911e3bff7558caf02b3f3e6de7ae9122d533558868d993b8242b2328834a88cd656a941",
+ "26fde5885fd22bdcba8b5c1b5f66d09c7da7bfef2790e6dd2a98a351056044495fe4",
+ "2e241f3f96e8bde7d2b5cfad94461d6c7282405c77918a2a8731711175211814e20e72ce01139643f58a2336c05cc27458f042ff063bc73fbee2ca8c099ff1f3fbe8517fce6cd3d54567220218cc67b4ef52767f75fe514e8ec49013d9fa787685a5a81efe550248f342eaade9cd61fb5037634f2bf621c944",
+ "6aaabc9f958d3a5739985a529e761b56"
+ },
+ {
+ "23e2250df6b870b6eebbce928cd1a80f",
+ "279f73beda18846d7170c29414590029",
+ "9cdd4e34495b4a03ca2c5bef9074c1",
+ "f306eb122b1907b4b6bccc77984ea7be4a28f9ca3615135d4c84ad74d7469efefbbff997bb495806a3d9ab274b4228cb894fceeb24c4905e121efbd3ce8be668dfee4f9e38584ba6c3374337d3c884cdaddcd96f63df225ddc879e0ba4bce0125dd0",
+ "8821c6d2c36ae97bef1b9d78c1afba",
+ "0240cf940c42c5d600f435101fd6ed5c"
+ },
+ {
+ "82f02cd289d07f40acf9a1d2b1cf7f06",
+ "09162f09c3893bd2c5e4f2c8f6ec9930",
+ "29f1d0e8aef96c9936eb5bcb32b0f751b25a7a46d4cc5a33d5f96dcaea757b2b",
+ "4ccb0ba7f1b2eecbe3dc3ba47f797201ca656ab04e5b38df9b95ef24ba02a5ef04a9a8122f954048581d275e",
+ "6b8f329fa3e905b7c0df490f18a13ab3b6be6701cba59a1ee7c12d054c500e58",
+ "077cc505ec2cb55daf3ea3eaaa05a369"
+ },
+ {
+ "a28c7a79d3d7d7b372c5cb4eb66201ba",
+ "3c27d1ca6e8fd19cbf2dbd81c87d2ac0",
+ "0ff33640432edcf34a2df2527ca13a0340d5adcae1d10589edbc89701f5093efeaf6d7d3f97a778052a76a6efe7b37021a4fbc8205f26f17dbd0c68b60c6403c4160985255aeac23c3bc88b1d8c11fd4197ba366962c",
+ "96bec6c8014708e9142a8ea0fd496f89f5a2414f4296ae0a185b13f362f2",
+ "f20be34587afaa4300683655ea16a292bfc7f2779cb771e520c6b0952e41a2b89e45f6c4b571779d573f1383b5e311f71ca89379b8a3eb9d9cde72b16e0f782058e9bb4df4731cbd7c67af1c459061ccff149da3bcdc",
+ "8c713cfa494325148edd37b0ac7ef7a0"
+ },
+ {
+ "24d66092958836e491cf974f34ee7ca9",
+ "1c04e8166ef37a2a5d34b4462a7ca8bd",
+ "01a77fb558d8d94c16eccc82b49f53823597272de8e6df070fefd202042665ef5788bab86c70dc3e571e3b372654494e552ef00462bf0f7fdeca8efbaa51f3da63e6f18fd13a4668b7fb1a89464a09a17d9ce709b0b8f079d6bf93ed4871c0",
+ "3c082dae68ee1cd6b8d1ef79593132e68e373eec746d13583f28d42730bfa18ed77ee83ad6c3db24bcda6d5e2925970dc01d1968b744cf3753e597ef831dcab728ce66ef3da0ab872cb0dedf77922a57abfb",
+ "47ec41abfe34c4ece7ff8f3ba179238f38f3e527d97d7f3f6ada79a9609e715cd0acec31f0a0df25c7ac0bb894fe791cc467a098710e92af75a14e68d9241c160d4587f7da279deaa9cc9d9c5a6e97b231021ab2ba9c63473cf269ef294d1b",
+ "5ba802006d999c5afb681f71e83dfd21"
+ },
+ {
+ "78f67aada609c94a7c79f2fe9bf9c82e",
+ "9ad46b00946c799b17b683ed3d920896",
+ "3fc884334f762cede042a56b4a89ad9eaf474459371f2daf7c157a352cd5ae6d45662593bd3eaba7bf59ed569429c52153599f02e3263b2784be00e52e30d0347553fe8aa70a071c3f2e34593d1e78692f9a194800571eaaeedcf2970784426959e0",
+ "80bb105971fd223f89efae15ae1b5e252c7e1c761b6abd5509d8354adbbb5007928763e715aad67b2109ac60afc73e386a75084c77a5af1021ddb4bc636c32a70ee95c6ef5eea9cba0d1c944754f328208ff78f7b0718899bacdf5d6e603e1b098acbffc83a86a0e122078338e0bd5",
+ "325ce1b0bb065488f9f74f779bdc433da58412b3834005b4661491e7d9d6c2a371560ca7d649093a7ab2475548edb37b425c23f75eb1bf79b972714469174fc85665dbe2af774719d803c2426f067ae68da1ae0783ae376970055cc28d484ecae2e3",
+ "8a0a7c3c7b4ad43021d1fcb532741900"
+ },
+ {
+ "ba4c7e6a36e4684631fa5ede07b678cf",
+ "ed722d3769b33d82626ce89bb4d212d9",
+ "ae106ad8029d73ff984de16db70772ca9adec5f2bffb1d92e12412b6f76f855463f47f1739d6e9a1fab5a9b7ff3ead419efd7fd7b31a0c5b9b992aa8d0ad754cb5ba371adfc60a5cdbcae37c4653b9cf5f46b015d31a03e10e2882567d2c44255c30f1",
+ "1955a221ff4b3f271876a4bc04cfb41449881f6ff3a7e9aacaa1e992a5218af3294027709c1ec594bf863000ddb7d561ca4c3f42340ee932e71eb8efd1b7dbd19f6ef0de28d437355b2b4cd1527cee849a315fc9a35ecb6e458e4af4df07a9e108a0",
+ "aa24653b20af5925a19e486d0b28e3bafdb240aa984c8b365792443a5411c8385c8197d0a13f1a8a7686c02cc0f7adbe1230736362afeb3c0ada988dec6d35fd298768866f64aac8dd560250e27bb1007a3fd4c312a8ce3af4af9ed27d5859ae56a3ac",
+ "20d20d4a549c35b69af946c9fef1837e"
+ },
+ {
+ "639668e0b0fbb192b83f870048d29c1c",
+ "48ed7de6da13ba38a1e748eb9ea57529",
+ "1ceca7",
+ "604b7b904ba56e1f2d17556236150e5bd19ba125f92e9adef0f75b38356fc9a1851ba34105805cae7e99dc7bdcf8744c44f06e709c345cadcffde348d2d55c5c36cf5ee1f288509e7a878dc00daa3d9593afafd7a0d94fa78960b3ca9fdb2b7d5746d1f4702080fadaf0cd6785373a16ceed056641aa4afe725e",
+ "0f5286",
+ "fd1206b329ad0eb4ff28d19b3ff31310"
+ },
+ {
+ "94b94725497880ff10d89572b62d1029",
+ "bbdb56d8112d298fd5686b93787e0011",
+ "f062bbe085b5f49ae4064f9ffd",
+ "de189cbb1821775cb97888f25d4781ddb82d4664634f41",
+ "d317f2a31eaa3f23e84fc3eaa9",
+ "405ce9e1ac0450409dc74017ee3e9e41"
+ },
+ {
+ "8e6f1217eaf84aee8e5897f5860f184c",
+ "a4e099068ad0b67f28b6902a40921dca",
+ "53c939f8d167e49980f8fd3ccc4a2ae3",
+ "4bb7fccecf15f0b32be37860507fc53812713194e2844855894ef916abbf9b5d",
+ "92e47292a4f02cc22d3392d1b6a089ce",
+ "2cf144c2dcf5a240c3d7be308d29313e"
+ },
+ {
+ "6968acc00e83184e6024167672c5df8a",
+ "2d5b193c93e8aa5302fb5bb20cd59504",
+ "bd6b6830",
+ "7f4e725f4b0f84454e823b8193f1d8b39d78a8b12f1a2250beb0def895dd0aef8960652c071a82d9ad89910d97287e72848fba1623f441d4955a019f5c1a955b054db858722b1f15210c3a752fdbd2bd631620cc56c2c30d78ccb16272eeeea1",
+ "c01c9b02",
+ "c117560718c083b57522688dc7c6604d"
+ },
+ {
+ "1e7e0ef737799bb1e00ccd4e31da5ff9",
+ "9d1111da7d3d329ab5d824404e4bdd60",
+ "76cbec797c2364c6ed70901db527c6a3471a84f8d297c64c9dbffd7c3204503ca6e51c8c88757500ed503ba86d7367baf6b9f3f5f2b69308bef97232e67698ae10896ed70a66a7c40115770f3192b9168f66a359270c753bfffc549658fc7aba3d3943221e125a6f88e025cc024b753693",
+ "7e6c97d0fee9f249c7510c2a0abf9530ac49cecfffe2ae37c9d38ba60cd012d3e00b696ee54591",
+ "b04070df9cc5d032d1914eb69f9afeda61559ed98c7e5fbeb81930b242cd30cf097e4130b0cc45b3e3178ba5ff2598493e1d1fe22fd14f3cc2de08fd8cbb3539d4c71c606adb7826c2a9e05ac36a6795293cdfab6d07fcfdedac099f1ab9bfec63a32f7633e424e684ca8744b4ad2288ed",
+ "6f442fa62b719a9c751df52033503261"
+ },
+ {
+ "6dbf15415dae57093e6774f4a1b7e4d8",
+ "bba38b490d740d7b3df0c9283d4a530c",
+ "fafe1562e69a0f5149e0ee65d14b42098a8a53a58d2cf07fd86f6c64cc4e67d9b5cf3655b5ed7f722d2073a3e9cc8372efd9620a32d6443a328436dd5ae394700ddc171bef8cb0674b1fab87b3e93aa426aee92c7ff733c33f9e4e49f614043a7fb42cf657e4e3c2",
+ "c742a929d2a766dde0fb0ce2d0faf790bd6c5feb63cb3126402aac7ef7c9ddfd408cd22bc6928a9b67426e20c3d9b340cd7231f87ffbc29a8e6c23602b9dc434f5ab06bb8c049803b45cf088b919e8584091ecfca7259e0d130ddf4ca45d44291024446f58f1271f",
+ "d8dda53eeb8b375930698379836e64014c22bd885b5b5cafb4dc65ed00aa947acb2792c46dfed8ecd155b21cfc98ff163b403e3a9961805436678fd34942354094bc47663165341ed0b949c0ecb4da5499c1c8c87eab99ddfd0fc2d80a9a520461e3dc402c3d4b4f",
+ "7298173e07e8c20043df74e45daa3e8a"
+ },
+ {
+ "a6d38f5cebee041a0afe035caad48443",
+ "cb7e7813c7018b25782f77e0ae7c84c7",
+ "6ef6c5d92f3acf78b3e2c8334038f364a51193e4e559b1458dd74c44269e69a7a6af22f531680c63270b22ee71547d72abc9b87bc5639a1b3a13f8613ad4d1742e8209ab",
+ "d536bed277bbb5a9",
+ "457fff7d0e1b61def59fbe99e81c08bc370bcac0240c9cec6d6a0de2c37f9950f5b2d12b8b21126af18d757c743a2a9bf451ebcba235f9f48c31a63674f0e8a1c5af5094",
+ "7b1acd8b9e20cc8b6b1b4e00ade39ddf"
+ },
+ {
+ "753eb1d49c102d1e3a9bcfbcb1cfa369",
+ "0e0cc4395844d363ceccc8a07a92a2d8",
+ "5166ac0bdba2b660af164fc847e4ad300675cda9f0acda47567f7952eea7084832f6dbfa0aae9f403a5bbbe307ad40845cb08347588063ad3f1df766790c023f160ce21bdf372fb48e0f7e2ced50cb3f86c2fb257ad7863fadc5fe6992bf1c4508308b259480007a628aacee94c258c91cd847f3d05251dadb96",
+ "5f590a65034eba433e57a9d089b2924f5f8482db6a467ea435478afc",
+ "f2fa7ed4fccf0388b7bb291977d2214d03dd30c4f81bab2df8f2c1cfaa46ff2fd14733cd7b8fefb6dd020ecab3eb478d1fe0b849e057512fe7b897b171771a2b68d7fe6d9b70dcfbb6307dacba5409b7fdafc49752e4392111474388afb6d79ed21a60c59234bafad676f88f7653765b4dc758c9fd930b2632a0",
+ "7132028dd8a57c1343b46370cf9d3ed4"
+ },
+ {
+ "711a437629429db2e14058e2a826dcbf",
+ "eb036d6e483a212ff6ee25d970fe1ac3",
+ "29937c0efb36ed27fe7709d7179b4f38a2fc191b5e8d9616b58f6dc9ba2ab74e13bbdcd233e8726d90f7ded06c3861582f27158732f997df9091446befe75855ab05b348d68f96e45445f44c31e9ba3e4d7be96d9c8e806535e79079139c71fcc599fea8701e0c2edf606986eff1535afdfa51d1be2dfdee",
+ "",
+ "4a61f5d6b8e746bf6fb49ca2b16c22f4e9ffcdc89a3137b39bf5445fb6b989d5200f0c8d5538891a5e8979b5cd8c734128b4e4ad98b0cd598c40ec9be74725dbca84c65a52f17ac983330b0b74e4193540f6357c3bcde4e8d8fc6942314ba68115bf2a682756e3c42008803a81532708a0e7b5e3b8436145",
+ "55a819d187faaedcc36ee67d6711ee46"
+ },
+ {
+ "a26d6028473bf7de23851d00d514455b",
+ "05b87c16ebee8bb62365d265ac6818a2",
+ "baeef99e6d4d15be9ff68a5d94aee7afa3d898cf42f94ad572b089659708658534d198dd3fba47a48611e8d78dad",
+ "5d77dd8066d3cea3b0762602ba6ae3d1ae1c27d1ebe70bfcdc068912def545362a5bd2",
+ "e4365eac2e7b5d02e7fc6c110895bcf193a0ebe28e81d0f6128a95e3e9183582ebb964d666972bd7fff8cd3870ca",
+ "ae64db8241b14b8733a419f476469bdb"
+ },
+ {
+ "9bb0e363275374f1771ababb7b96851c",
+ "08cf3a6355ffbe621ea874e917729d4e",
+ "b380355f794d31e6e85fc81a49fdc2af2104471609692f94c994a710be5cabdc9c9a61b94fc3f76927c1cd5c9a5355a0e8ec55a69ef114b3963ec95137b9ff84240c2a71d3b3459056d1a183eae21cc5a7c109e937faf8f61b6232fa30951f030047d7555b60f85a318833afcea80ee4d88a98",
+ "a7fc199cb07b6e5e498dbe590af4a4d95d35b043a97d52e11cc1092c70250112e070e49fcb8a3e7bbfca3d0c4467ba332c0dad277a997f2a603fd2d016979c24b3870a",
+ "f8ec2722a9aa97d0cab77f7833e6bddc9570bb79a159feec2dac9d2366e7eabeb9d74ab53a846fd8ad052a740dba39801b681e4da903939387ac3578eec4547dc97c43a8824db11cdae4e7ca8330c9a2d4249853a7285c54498e59d645546a5bb5858b8ddfe37a14242d9750b02ccb41b92bbf",
+ "95af5d721f0bfd7b27a782d0aaf37d05"
+ },
+ {
+ "7458fcb1fa1a886924a044eccab9c5b2",
+ "30565643aa9bae844b87bd459628d093",
+ "4227dc17d3e0ec8363c84b989f72d235d3991e57ebe8a6fcbcab1053edf3b323cbf5f5f45aa142494ab0afe78c",
+ "d07afef73f3cabbed475b69fa30aac8af674b74448cfd4d6ecb0c5c1b5b58d0c7173eaee440be65715d780d61d346dede7c52724bd76207ada9a3707c1326dffefd04fb29321db617d12b4a607452a5b197460bc524a40672628e5b9d45f821a5b",
+ "50c568868de4b49df40d33e6b25abd6b2dfd2f22bdc12a18ee2407dfe82cd3bfa2fc344c91ba6544e079446073",
+ "041f26ad531c2538a44d927067ccc395"
+ },
+ {
+ "68df4e697e83c55c822bb3637bb52d54",
+ "1b0df23e69aa907856ccb9ca4d6c51b5",
+ "59242d6e2d7e612d2aee7e8c08f53f172e0f93d57b0c08e7cffda90da5b2703eed8192511f6f1bd59e9ae781b4f1156ae06ec38b5bc1f5dddefee49f561d692f832030f7a1b506c0ebe26447b3eab68172e7e7810b13d425f6c78e1d6591cb4a24a61c5f9554a083283485175c18cf5df4ecf2f87c98615de9ccb3",
+ "fe9643236be4e7aa3998f44b4336a4c1f8fec28e17",
+ "46e15eda413037249e584ea1e3007166d70bf9c998ca2a8386bdb8efde70f3bd35a9b0877e333451f7789f4d8b4e797170445eef5f818bd321574e66b7881cdb546eb5528dce75cdd1683e715b2ac7ad259954bca62d8f0f0066fa6adf50f9e13dbe3ca1e503957cb5f8a2dfce0ca7377ca51989e3d8e5275893ab",
+ "e30a9b2a9c38f7b05dd32f2b7a9a44f4"
+ },
+ {
+ "a4b06bbf87393d2b921dcba697274f07",
+ "5c14d51c52d95ac040e1060a0ffa21eb",
+ "8c85ddd8d3f446608e656052062f0cd58e6d58",
+ "847d3b95895426225d08865cc9a329f6f14e63bc5a66fb6f2a05bf8eb9bc8166e6fef29e1d573acdb4c3bc699daeadff7df5d6e8dbe2ef713008afcf9b6e97ce6cab4d90594fa4430ecba5bb62a7938f03d57869",
+ "cf6c47fec422ee29226b6cbc5092bf670b5434",
+ "4a1025c100318a2c68e072ad1210bae1"
+ },
+ {
+ "50034800a878a3e570364540fc862b77",
+ "bc92f50c2630f7fe354399fa9a6fc48f",
+ "23a93e636d1924a60f3461de1020b73ba18fc3854c9dc9f166d7d4d1912503bdf1",
+ "23d5009057b76a00d92db6b280a3a30ba08ba3afec6312197f06ee01dc4a22d73ea010e02b65af7968d8977f9762ff5a6dde278d8b351d3b8efb32cf7cc8a70a7a8b3d79",
+ "2cf9f00b66c63518354ea59510c178d75499866218eb5a031a0dc4d743ac8c05c9",
+ "c61a63370e6b5c035e3bfb9fb1f10064"
+ },
+ {
+ "d68448b73ae9bd161c9f1f36dbf6163d",
+ "3345d820331958c63dd7a129d3ea0de1",
+ "ffa236070dc5b464eb034a9332041a014cd7852b498be2dc498dcdab4151d71f47c7a6b17a176c5999a7574fab5ff469cd02226492a38693eb2296a4a7cc2857b28b5b61",
+ "c790bb04036883e6e4a6912a9b0afc36607e12b0d457d4b5f6c120cf0c009caa087fc2710439",
+ "1474d60067d082706bb0cd823b22582ddc0fd68412ea0e399b03988e616ac5ca0a7a8da6e6fe29292b57046c289ad8a52360ecd19655bb801c6eaa2ccd66ccb14c4c3748",
+ "c9e761ec6154ff8ffe23b4ba0a493b22"
+ },
+ {
+ "519fee7049473c7c41f3bcf7b2f63a69",
+ "be227d2bb97f2eef62d5fd9203cb63a9",
+ "0c121fbcfb4f4f8f150281140e49d71dc5ed82ac4a30263a6b2d92c55ac6fe4f43f64c0f526d3df642c04a5c51e58703c381701b1f4618cf66e27c60dd5e6558b48028d5fb11339c4f2547a3aefd8100",
+ "9ebb3c33eda54164b54bf95d4fbe113333edb0fdd62c24532fbd4cb91b11e08b1e74487dbb0f3daaa08c566e759d53ea3974cc3685ec460e608f7d01fd2dc23d9bc283c73ab492bc9fa2ff458d268667504cd47e585826",
+ "c0e22cc3aa610bda350a2ebe8f530c05cafa19e7060b064c276a06f0bb430b79839c51e6b22aabf429616480382c86f8c04ea397c976bb08caf8f35c38208e476787ce229a7a300c5411471548b15d9a",
+ "3598cb4a1fab6c5fd50dd1249c530e86"
+ },
+ {
+ "58bd2c73aedb31baca592e42d614c68a",
+ "bbf76585731b6334fd314e771d9e404f",
+ "d238c5f0677c86c001e66691ea9eb8aee429fc490d38abccfed3a546b5f05398288e7232880fa3d485fe3862c5469f980d9ff4caced1cbbe7f97adc15b6919876b8cbdd35320a20eda8a1ad6e853164b0e0ffb2f702e1d6a0eae8b27577bdd4e5a17e6d8",
+ "86147d2debc30111b82c1ccc41a13dab1aff144bf2810695a40d02bdeaf519669a1b81864edf",
+ "94fccab0dce48d5aaf42ef59764cba95b42410e2d6b2c87c95d8dbc15421c45d7a556e25296df9167cd46def7d10602aeebd0e7e909c52ab7a22f833e976fb76b9b39b1c2889587582d44ad8f484f0382804d7481f1a8d6c903b13190c213102ae273378",
+ "f05d5062f636e08281f4633a4242666a"
+ },
+ {
+ "a27d07b0976574c43edba5619b3c1f27",
+ "879f4114bf61f1d7b487bcdff6c90778",
+ "302994dba80c2268f5b1c77bfad0b780a9be6437a07dcf1fee61e8e72f7fd3ceac24a01be486a2eddc901a19a0f10eaa94cf46b604f98a90c0f62fa6476d27a338bd046fffc26570",
+ "b97a43027c5dcb8a95",
+ "633c76783dcb88ff677a6f567685ada02d787eb9aa3a527a45fd415180f1fc19cfddcb90583621c2609558703c7c5ed548650c98e591fac7a692b1f921284ebd8b86d3a1f26f1ad2",
+ "0b006ed5a955e5f003177b0ba2c7be8e"
+ },
+ {
+ "d55658dd1f27af02885d0f431fb2ebb2",
+ "0aba0b9dfc9831aef0203bc61a601176",
+ "05805491b667d9ff38147d96493db29441e188243f72668c7ba61b",
+ "df403489e3bb67eeae8440569f6fbc1ae072305f5047c5105a7e4e5349d3732d75572298253f60e3821c721941c02dd761edfb081d09b3c7528a0e786a6fcbab709727e7d614ecc604def19c78fe061040bd636d842b16e96158db07d6c2521ad54778acc78f12b450db0474ef700dfd547f9c5b",
+ "2e8adbea0e9ef5068fc3abb39ccef59616420d4fa038e2f35b560c",
+ "447db66795e52429222e7a9a717f2e1f"
+ },
+ {
+ "adff46e4d7d78b3db5c74c712534db37",
+ "c54185637dd281ebf672393cf9bad28f",
+ "b3850ad942e221753e4bf30140eb5569cfd9972246b9a6a35f7a8512db333aec59d380973d6a6505d99cb004dd47b33e32f4f238b1342e6756d3619414c31bde45",
+ "59bc7a834189b930c8cbff769ef63b5e1a08c352ed779853b36bcd3d0ca7b4e35bd6cdaf2538ebf0e3a0d7cbcf3bcd2b66b910967c226a1da42f84c4a8f81e19161c6593e2c0a0fdddd3c6ab3a864037fbf976e8aebd33d4450be9893da2e37e728916b663944e3fa6ba543d1010",
+ "5cc93a30fd8f71befd87fc50112c156b53abfc97466f36e3315915a7d4147f0b3641177b9d08ec13e7315957d078ec73eb0a93a3b7a51e3db63a396e6ea2adfba7",
+ "96092f8845da1cdaf48c7e76c9dce580"
+ },
+ {
+ "4a5d7c201ddae018edc9783413dd0329",
+ "eb7e038948d3bf61d2cd29d2fe722603",
+ "3e6a17d47db58690b895619128645a2782d17e9a3735c1450a7c8e13a9f212208fcf256f",
+ "65b8cebd83d3197118fe81dddce22b3947653e04a48d05b4a2dbc42a89e62b0d6b61d5f31487af",
+ "a1a858d13540281e1d0a9a82e3caef64ff742e51b1f7476d318729508a68840b371fd300",
+ "108023763640241ec06ce1c24c061c10"
+ },
+ {
+ "83190fd90c68cf63648dbc5daa442e3e",
+ "3c3683fb5d3f1446f8c0d0127fc59d5f",
+ "a5136deb0a795dccc18889c23e9bb21640864981a4ecd903e8fb62",
+ "13066ef4f97501fe1854da6e2d57ed43e4c074ad45b7218536e7dd8368a4ee8c6f2b63199fc0a9a679e2b198bd3a43e6e8bbd6",
+ "0c8cc3bde1f4933729293718686301b1ce50f5e7521655016f8432",
+ "95a1ce7284494c9c8cd76a4639b28b15"
+ },
+ {
+ "05bed4c00afcb8ecacda8daba02585a1",
+ "ed014d4e9eb504c70d5d3153473dc146",
+ "6fab5ff04c5a74a0a96948501de9167597a42fde4c50ab27719dd1e2b0e0fc0fe6e48e97c79d2a71fcb5e7ef60c67a32bf865decb39bf5ac17969177b2fac849a38e08bbaa3be0d6dcee9ff685ba97e9b54514624d51c270065508c03e96f28667e3c79f6a68859a85048301779da7e2254b1bd1662ae3ea15e0332c",
+ "ebb614315ba4b7d69632656d5a4d2810112862ea3e443148100bf2e89d059bc9e2d9563bf34b823c57108ca9a88e4b07441f0ceca4713e2af56f40f35d6f2223d37e9eeb61739a65933712763104a67488d2022a5e033e240969a4d33966b4527035eef0970c69660ab3ee5c00ac815a9ee52d767b0a937b",
+ "6edcebf7ac2cd10be8a9a595a00e68e2d3127f5de640323791229141caded658e99fa59539077027ed7b7a433a794bd523ec59f504978964d3e17eb388956e43395ec89b252a93b317c64580426d1ab0b633a972524084be5d4886458718ed42f47967eddabdf7b2f440818e0aab9d932c10a4c7283d05b84ef74a6b",
+ "665b4064bda8f0511fa2aa35ff2e8abf"
+ },
+ {
+ "53e1b8de6176c05e04f5a4787e733b3e",
+ "574de8c0f914115c9267f7852280fbe8",
+ "0ef099d6995b41d4e9227c3aa59da313160afaa32e1753422c1eb45bf102e806aa996a54606c78320e85da74deb39e8b0059bffe32780ec784abf6bd540d3c01e9f13c4209bec2",
+ "3d9ca3718f31b4f37f988ec676fc3b5492a44792d1a4f8fd7cc4726fae899f102841e7f5c04b2ae2c5f9eb204c5b74222d89c2bd36b1500b2dd81e9643142becec1b88aa7a0d7ea4c81fb7e8fb37ec1a58e0383e",
+ "5cf9292077dbcc9557a1cef51de815facf02a89c9e29ac62098c8e4d0cb49c4f55ed55dd9dc9c36a634ceb8f4dd475837582b9be1c17030c0546b335be95fded1c416e4599851e",
+ "e9649f102df1224cc20c24fd54b096d3"
+ },
+ {
+ "81118e9376e515a93dbdda15e58ff387",
+ "75a0f02a8e78a0d2d0097cee863aa576",
+ "f30c353db4dcb2320ba5fba118e50526800fda7ebabef05bdf15aee5d9b70f2ab697937d77a01bb4bb460fcc4233acc3b970f4f434e9ea85f30aed7d247115fc5db1c333ac6a008dfe65ee02b930ea097d046f2923bf84785d47f382b19651948d69a6e4b861a7112c4e1804f6435f70",
+ "6f75857a795e6aff71994dacae41c2b2d9d6d7e67fbaed6d2e20bf89da461f509ef3d284341a8a2059ef1b97e9e6820f1a72ad703e71999be36fd7156d3e3f35663eb4db44a858e08bceb154af51360feadf3bca8f20",
+ "0376339c7324168426dbc1f36ee91603f844352817b575ffb25ca6a75e2d0f0d77d853230b7e5a4823195c406298bc3781b40df001d9cfdff16de970df4ffd0aa652fc7732c6311e2665daad93bb2576d43e1a58837513c62a8b74cde75901f9520a29a10e4dad9e4aa981c5e72d6cc0",
+ "2d9d3d20dd304d1277deaab457404f5d"
+ },
+ {
+ "2d60824c89bbeb4e2b72434aa0356587",
+ "20ad2c51679a7246ca6d0a47ba7292e8",
+ "17aa9ed83ff674f959085ecde2a6c5026325265a143d2c772337056a3c66abb5d742f33be39697194fb1",
+ "283fa29dc399d07116e43c85eec0adc8a76221669a9bba6554f8e828b680",
+ "40fddfe3b15925fe189b25aeb6616538958d43f0c64806f6286a5efc8a4faee98d02314eace7619bd2a3",
+ "270d30239c0a9afd5edc28db8323ddf7"
+ },
+ {
+ "e2e2a29db958c6a3f68a52825b844c2a",
+ "3210fe0cede911318435fefee1d921d9",
+ "45f5fc3a",
+ "91209d1202574e",
+ "2067b789",
+ "eaee3477b6cb3b7a6df8bb4ad493504d"
+ },
+ {
+ "24affb4e364dfcb9be823bda04cdf045",
+ "d7db8f0fd20b87ea4ad5e85e026b4b42",
+ "296e2b8040a3907fbd8789f660f85f3b49c6050092029a2b",
+ "42f31798f0016547fc9126a6919c14fdee91bc68f839dabb24d2249ff5e001b6a2308b57bfa6baa84e635123e8c2110c",
+ "3af391d72e60751b10d3f009814673d64cb86a0dc998cbf5",
+ "c16019a549f7c6dabf5bae70461ca9e0"
+ },
+ {
+ "e8d14e976fed8be59625b034419fde86",
+ "1d3a06b7b80217caa5a4e237c2b94549",
+ "fa2d4f764e7399bd346f60f1cee797a9624809373daa3803cdb12717fb48503263b21ab1d99dfde20d588458993d8c33384e897973a9dd74bb7e308c8fdd6a46a9",
+ "8c0c2e14cf2ed5c7147d8c50b4c28b232a80247344f21a61dfe4065fdc559200b7a0046e58606e3a3615ff54bb605e7a5f001d215de255ba75366f6be3dd1fd4858aa9e8904ca99647387b1a17c7ff",
+ "9427f3a18a22e801a3d7d863cccf4fc8dfc23a51bffab61235e2bdbae311ecc321db38128730818cec04f51ba5f0c3e6b7327402a2a63c95c184f7946756f2c94e",
+ "5c9d05bdd3ce8ed1675a13b91c013ec9"
+ },
+ {
+ "73e9b0ca8fb59181dac10130454e3a7c",
+ "81c9a08c95fb942c42003aff680b11ea",
+ "971adb65be3d885bc115724cc33a0f53aa47606e7bd5",
+ "03cc2f305af325f4fa14de7ae8e89a03d040e812f0f4a7f82d72441d83b85a424f3ebc34ad",
+ "18ff36eaf9e6f49530db6f886fd85a77d55289d85fcd",
+ "7a4a067de96099b4960e5557853d7ad3"
+ },
+ {
+ "59f15a1479f5dbd9c1b879475de9d2e7",
+ "060ac95c956235bcc003dfdc92da5d89",
+ "a17b5ffce4cc08b23a8b8cd7735e11822f9672691b4dac380835729694f39da377e4d3fd23ef7b8b40a355e271bbfbb8cd632481c7cdb67d99d314609174b10cf370fd9b9ab872346c631127f873573ef61776bb8e154b55bab6d84544cd8fe5f7611840a057",
+ "9faf2f97e14d2be029",
+ "3a4986b25ac4ebbdf8c62e74790e79f860c5c131f68b540a7a9f0504cbbc36b7484fe76713a53f354f4970613a976a4cc55ed7480d5c5acf876977b74e622926c8309b65a5edd3ea2ad7c2805f2859ce1e2805577d409760b2cf8e84cda7097478491bab3fd9",
+ "6628578d2684a14196e13b66aef300b5"
+ },
+ {
+ "5dc5206e6145ce81ffbce717cb425955",
+ "a7a6fda319439a67cb679b3cc6076dd7",
+ "4244fc95829a69089920",
+ "92f48b403ce97f87118605d24314981ec34b958ca0036f0b6acef5e20bfddee370e13bb2cc676dd8d4547668aacc7dfde6af12727789f6ef811e63b391cfa9c4a68ca89e6bd978f38f9228dd9c24e968c4e59e3d34963d6ee942f788e0b5625ad95bd3eb6ae67ffcaf2e4ee9a9cbbd15c40385ae",
+ "adc2915b7813f367bd80",
+ "68bc6d846f575ff95be003316e804197"
+ },
+ {
+ "8d88268afada2ee19bdc754147d6b04f",
+ "119588763bcbdec984a226e9dff179ce",
+ "04deb10354489349a273c5cd5d02ee1d71cbda2a20743bdc2cbc48788b9da779ad2f3f1dec4cceb3132b2e4a1c4302c8f9ecd1d37fef",
+ "0f32a44fb0edff2f0d2334029e59715f5fe2b8e896068b8488f43b567c0d6fa3de5bfa99c6c8f055e3889309e08822eea3a683d6907675b6f0072438be",
+ "bda6c7381492f48849c00a86ba72c8162c09981f593547682b88b7bc6e051a9ab9fa1602e879b8f1e5145bb6192530e7faa76be34dc2",
+ "8d844a27362f2e01d293d6b603137747"
+ },
+ {
+ "0049493db4ab12f83fe50f0fb2a88961",
+ "fd0dd2556a03ebe50b41446250d56e52",
+ "1d3139deaf1046e234189942c2249a7aee9d644f934e6a203a8a69e7683557551dfade301cef8abb29d7308c5a2893a52ce6b1493bf2232606e79c0ae51b0a55cfc0434f2e669cbc56fe7176fd04a1278918c14791e00f88de41d563d3",
+ "4c92be6ed0634323014b9ae5c9401f751c5b710c12df357a694c1c25d906ab3beb5bbaa002208e787f448dd0cef84d3d",
+ "dc3bb7e4baadeb7c32f70cef3144d04ad199ec429ca6b695f87f997c6e5db58e9d60b34d89ccfe49d5e62c267a871ab7818137f523cde68036ad1d8f7db0b80286ceda9734b32ad73f7f0eaf8d19c80fe74866c1cf785f44513b918a24",
+ "3a8877ab87645275262e033308c649cc"
+ },
+ {
+ "b6279f439261d1dfa4b85151caa60e75",
+ "d0b003ce641633d48413bf3bbcde6b5c",
+ "39ee6f13a66b4ee74cda034a3bfed3fcf36f101f1e5b646d1c93e019174e4bd850417fcd5755264476124a5ee8e68cf2fcb9fba50f872fb1d33a025f8c572b4b5ff034d9ad77ecd33981bdfe3e9554253522",
+ "c635cbbf8eace8f911d093544536f38fcfa14b78b1e1eb069c42a351cbc70b7d1f5e93bceacadaf0c9198d3b2ffe54db45cfac70c05d4aecb0c801194642cc070ed223a9e3b65b735af796373db7fb6e3285ee3fd3579dd74be0cd2937f6f825dc3bd77ff7674b06a9ac",
+ "9787ff29777e12f86c7281c57c5a345278fa96d8fc6ed949be284bb79f97b34da9f256a6be673ab93829492159e7ba1a19dc727e16ec57e388447c6616626c6af3412cc70432c3dbeafa35b044e7e53456c1",
+ "1195abca7c171994919b51baab3e1427"
+ },
+ {
+ "81d8c7bf41cb0e54fa51899660637877",
+ "044d29eb40264aa36b976a766108ac88",
+ "4712680db09039894cd72e86db111d63c4bcb62058f84f83ef419cc21e36f2169ca340375ff69f9280fa60c99d86a03dec4673901a7029784be2cdae3f63590da312a448d24eef063304545e553fd01ce6ee088e43c8b02c51b155bada983ea1aca4bad804406aad3c92ac75ce4c",
+ "897f0ea8d69b962913a9a59ca36b65aa7aefe39d3a",
+ "1d5cff8679946302451dc9aed1c601ce46a6f31ef17a53af6ab130605cc2a41da08c932a13b72983ba8cc58376040cc17e3182993dd593f4fc8f2965825173656325942e97db98c584ff0bc913633888a0812ea7675d130d690f9fe8d6eb7f1655de1938fa0163b02c50c8a122df",
+ "708706c87c1438b7b1410ac9cf4d533d"
+ },
+ {
+ "8d35dc035a1039af8f3dc653857cef8c",
+ "a0df1b717a186cfe86a0ac8343e80217",
+ "572bf5295915e7b2f817bd137a6608e09fcb7bad29887b9209eb29e944f2d3231717f9a112e68756948c1fc71dcf6245a0130bbffeef74ccf3ff3860ca5a23753f7539b7a268fb08434b73ba9adc385e6f9ccbfd213f812d7b64d8d6d7bfce1e236c5fd857",
+ "94714396e2dc4bc13a6d628563b0db14e189695810a4925a90826de63327942db0508e7453",
+ "6f2364c357e257e9b412018a1c702f0d0c1170751393b1f73999f77927d4ec1454e78eda131af56b1b46e348f8775e6a022a746b31ee135651bb2a14e21cbc3f333c13df02a3de6d5128ff1145514605d98e984c28dfa89cbfd2f0d8bc41af3e4c73e7ddc0",
+ "b2f8984bed67bcafd95cb0174ca56983"
+ },
+ {
+ "4666ffed66ee2dc3ed18e6345384e828",
+ "8c5c38610ee79b818c18e95ed2baf026",
+ "dd2baf24c168f99d1868712a43dfda4717650c26c36378127800d8cf",
+ "196a5357a0d6c588acc29f85cf38b78b61e0810feefb965d",
+ "a58828aa09a6f25e7d4775ba7a2b303085bd5fb43cd61bcd19c8bb8a",
+ "e4a45e0440c6f9caee3506b37d1f8563"
+ },
+ {
+ "2d5464646342ceb3039a9d2fa406b90a",
+ "8f045fec196343f938902e1bf706e34b",
+ "260ab30c42d3356dc39837b28f6f387accc2527aa853dd58f54426d52cdb9ffc0a5ca5a5c00761a7299e72d48874b46ffe18dfaf38f19cfad76d7c9cb4a4cd7784cfb125a58673972b4bb8c894da2a8969f68cb27fab746f8d62fef60664900833dfca7e0be03eb5908f12e74bacda9d35b06e",
+ "d4aa5263a31fcc8ccc9e1127f7ba6ea2d3ccc72cd7e98e442890ad3f8763856d90e362",
+ "51ede001d1e4ca8a3de43186651a011cd14f4bf93e9375e910a8974ea411343b68e8f6ce80cfc945ae7d9c5adf76e1c0f93de8f5dc48f36b82b65886776f1298b36a2f012140da048da77e09e4d57426abe2b894c425aeb2050b0eea2d8f8255b733bb814abf3ef3d530d87dd7e1504bd683f4",
+ "1d4873bab95a220d094a6e88a670f40e"
+ },
+ {
+ "723efa25ce1bf1748d86d9da611be9b1",
+ "aff260690905ed2e8618c20963e4b7c9",
+ "f7e3eb593d3966c015d63ea0e9211beceb8fa6d9a202bb4fd4128c3177c5",
+ "3950b62147fc16429392d41cc4188d5c82537204e93edc7abfe7ce3404f9aa1474ebc4acd8e18aa652a87ee99c2415f9214963becd44720684f67aa814903cde",
+ "9d7ee643a2cec28c467d2cc88aa539341dfbc82f72b5d940feecd11d4a7d",
+ "5339cc409bfce5820fc99e143ca59b4e"
+ },
+ {
+ "784197d89800aad00105ff7487b6e5df",
+ "fdded94dfbb72c77ad81b2ccaaa2de2e",
+ "b14ad4fc08d08cb0601289a7ff9127f26c4036606a50bdd2921baadffbc75749b8ca33ddf7b6ac",
+ "b82cbea4eaf532d52046bf0bfaf22ec2",
+ "a625b4da553686296d5c6f5ce526c4f84c4af779c67cd328c16a7985c9a28737130da855b1f3aa",
+ "432c4f4a125b6444091384042e3defc8"
+ },
+ {
+ "4dda1ff559520020513e0a8e554da28e",
+ "8b183c7e23130aade134ff8e539d8053",
+ "e56d6364a87fb7f40af02b672fd337705ab8a02a5fbf2c2a639a872da16895774d90658269437160cd22d7370ab0fd3e81d746",
+ "675b6d9e6c4c479798038b06561f1ac0dba2ce54988efa3393cb6265d901df1f815937a6e42db8c64c76dae0c8aba0ee20",
+ "0b2f31b8b15ec535c7e8c732e91f4e119bca192b1fe2eaabdac037dd1568e4a8d786c7048c16ebd4c513324b18ac9ee0281fac",
+ "2bc20cf2d6bbe36d379f794824ad190e"
+ },
+ {
+ "66dbe969ec0adfbe1b99874de53417d8",
+ "13ee71e9dc02d592700c04ca0bcc6344",
+ "fb420a6751909185796656a952759b4b794bd4eb98c82456af4f596093f5615962e62a9ce3fd9c4e0cb31a649cb5c17d30f66ad3d52e16589b174102cb5ad9973ce03f44cd3776e0d9c538d255ffe81ddff81e06cff8e4d8adef4f08cca416d52ee3aade52341e5cfb5de80c71",
+ "db499d6cf13840accc40e3d14733662885768f7541b2615138c498b087e51b20f1c0c373a589b510de546d372a40cad0f92ac3f6f7bc1b85290c4553c83b",
+ "7a7786b03d18c1f2edb2d9015da13a327f364895751c32b8ab840079b08e47870b4ecb49474d2da2bc0a53977aeb4d63f3b4e56f6a3d22ccd64fbe098fb9b27eb5e5b1f179ac69eb3d57175bf9ee37345e6f48161adcaa27bfb5363889e38cf7297b3fb9b41a0d61e751ca5184",
+ "559c1df2d0a7807a79a160921835eddd"
+ },
+ {
+ "3a00ee1e8877248065cd26e3b9a857de",
+ "950529b19697df5b0ce43a3f429e9509",
+ "d6fdd1746e8e7c7b84adef010951f60fd19b5aa74b1a8ab1ef2dbd5487318fdf7844b436dd1063f10e609bc58604ada5c41ae2ea1b5303f84c",
+ "30a5f3a4e4543dca2b4d53a59a6a11b97a7d",
+ "06ffcb4a0da10ae1a5a1c5b6205ccf4882a9c796370e7793d9b3ff3a857c156b3285e3dcc2181d8c0df26167ab4f8709db6870c9e10e75b90f",
+ "a89ee72561154c209fff00ae7634f4c4"
+ },
+ {
+ "b611b23912f0c44c8f0a452e181016a3",
+ "aa0321dae967b75f958a3949fa08fda2",
+ "16320a4eabdcbbb1e600058d308cd8aa650ec35985906489d1ed3210ad402589b33de4a68088cec878461e54ce60ebac399457d4f4ffaea77fef304f9363817fd797afac854d0ca313321fbaca4b0f",
+ "d0b0ea43a3fcbcf70e5d4b21ad115e503ada6f43a74a0585481b249db3c00645f06005b1b3da91600a14a40ae5c045127cf8cb6bcb",
+ "39f3258b852471d9b9a289027f26c3a7e49fa8cb61983c429b3b306edb1f0d34d9718774005d71ef2e89212c6c538f647335d85a2d0b4c72b97a7eee96d5b6976a602d82a294bc2a4887b16aa327f6",
+ "9d35c571446755b395fdc634a69e25f9"
+ },
+ {
+ "2ed2ab0c5548c1e97879a6c3ec7ebadc",
+ "3e15d94c7dd22593caa8be653b6d59d2",
+ "76b1d92662d472c87ba9b27e2756cf62513ec190f709996e",
+ "f1e64c14a92e952036305ceef2535f65295b2803f7396a5e88f2ac993e201782e2f1edba92011a1530278b6d3d1c9a",
+ "8c9fe2da6b58f0a9d40609bfd9ac6855badaef814588ebc8",
+ "a13ce63402a3c58949a7c4cb8a2b7d36"
+ },
+ {
+ "37263267c4f24129d9db09a2a96d7c14",
+ "39e5c4f2b36c9ed5077765b89cea1bed",
+ "3581b4424c",
+ "6ea6a9f99350a38601162f2e24928ee2",
+ "9ace0569f7",
+ "b194fe3eaff122ca4bcba925f4013320"
+ }
+};
+
+static int
+tv(void)
+{
+ unsigned char *ad;
+ unsigned char *ciphertext;
+ unsigned char *decrypted;
+ unsigned char *detached_ciphertext;
+ unsigned char *expected_ciphertext;
+ unsigned char *key;
+ unsigned char *message;
+ unsigned char *mac;
+ unsigned char *nonce;
+ char *hex;
+ unsigned long long found_ciphertext_len;
+ unsigned long long found_mac_len;
+ unsigned long long found_message_len;
+ size_t ad_len;
+ size_t ciphertext_len;
+ size_t detached_ciphertext_len;
+ size_t i = 0U;
+ size_t message_len;
+
+ key = (unsigned char *) sodium_malloc(crypto_aead_aegis128l_KEYBYTES);
+ nonce = (unsigned char *) sodium_malloc(crypto_aead_aegis128l_NPUBBYTES);
+ mac = (unsigned char *) sodium_malloc(crypto_aead_aegis128l_ABYTES);
+
+ do {
+ assert(strlen(tests[i].key_hex) == 2 * crypto_aead_aegis128l_KEYBYTES);
+ sodium_hex2bin(key, crypto_aead_aegis128l_KEYBYTES, tests[i].key_hex,
+ strlen(tests[i].key_hex), NULL, NULL, NULL);
+ assert(strlen(tests[i].nonce_hex) == 2 * crypto_aead_aegis128l_NPUBBYTES);
+ sodium_hex2bin(nonce, crypto_aead_aegis128l_NPUBBYTES, tests[i].nonce_hex,
+ strlen(tests[i].nonce_hex), NULL, NULL, NULL);
+ message_len = strlen(tests[i].message_hex) / 2;
+ message = (unsigned char *) sodium_malloc(message_len);
+ sodium_hex2bin(message, message_len, tests[i].message_hex, strlen(tests[i].message_hex),
+ NULL, NULL, NULL);
+ ad_len = strlen(tests[i].ad_hex) / 2;
+ ad = (unsigned char *) sodium_malloc(ad_len);
+ sodium_hex2bin(ad, ad_len, tests[i].ad_hex, strlen(tests[i].ad_hex), NULL, NULL, NULL);
+ ciphertext_len = message_len + crypto_aead_aegis128l_ABYTES;
+ detached_ciphertext_len = message_len;
+ expected_ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
+ assert(strlen(tests[i].ciphertext_hex) == 2 * message_len);
+ sodium_hex2bin(expected_ciphertext, message_len, tests[i].ciphertext_hex,
+ strlen(tests[i].ciphertext_hex), NULL, NULL, NULL);
+ assert(strlen(tests[i].mac_hex) == 2 * crypto_aead_aegis128l_ABYTES);
+ sodium_hex2bin(expected_ciphertext + message_len, crypto_aead_aegis128l_ABYTES,
+ tests[i].mac_hex, strlen(tests[i].mac_hex), NULL, NULL, NULL);
+ ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
+ detached_ciphertext = (unsigned char *) sodium_malloc(detached_ciphertext_len);
+
+ crypto_aead_aegis128l_encrypt_detached(detached_ciphertext, mac, &found_mac_len, message,
+ message_len, ad, ad_len, NULL, nonce, key);
+ assert(found_mac_len == crypto_aead_aegis128l_ABYTES);
+ if (memcmp(detached_ciphertext, expected_ciphertext, detached_ciphertext_len) != 0 ||
+ memcmp(mac, expected_ciphertext + message_len, crypto_aead_aegis128l_ABYTES) != 0) {
+ printf("Detached encryption of test vector #%u failed\n", (unsigned int) i);
+ hex = (char *) sodium_malloc((size_t) ciphertext_len * 2 + 1);
+ sodium_bin2hex(hex, (size_t) ciphertext_len * 2 + 1, ciphertext, ciphertext_len);
+ printf("Computed: [%s]\n", hex);
+ sodium_free(hex);
+ }
+
+ crypto_aead_aegis128l_encrypt(ciphertext, &found_ciphertext_len, message, message_len, ad,
+ ad_len, NULL, nonce, key);
+
+ assert((size_t) found_ciphertext_len == ciphertext_len);
+ if (memcmp(ciphertext, expected_ciphertext, ciphertext_len) != 0) {
+ printf("Encryption of test vector #%u failed\n", (unsigned int) i);
+ hex = (char *) sodium_malloc((size_t) found_ciphertext_len * 2 + 1);
+ sodium_bin2hex(hex, (size_t) found_ciphertext_len * 2 + 1, ciphertext, ciphertext_len);
+ printf("Computed: [%s]\n", hex);
+ sodium_free(hex);
+ }
+
+ decrypted = (unsigned char *) sodium_malloc(message_len);
+ found_message_len = 1;
+ if (crypto_aead_aegis128l_decrypt(decrypted, &found_message_len, NULL, ciphertext,
+ randombytes_uniform((uint32_t) ciphertext_len), ad, ad_len,
+ nonce, key) != -1) {
+ printf("Verification of test vector #%u after truncation succeeded\n",
+ (unsigned int) i);
+ }
+ if (found_message_len != 0) {
+ printf("Message length should have been set to zero after a failure\n");
+ }
+ if (crypto_aead_aegis128l_decrypt(decrypted, &found_message_len, NULL, guard_page,
+ randombytes_uniform(crypto_aead_aegis128l_ABYTES), ad,
+ ad_len, nonce, key) != -1) {
+ printf("Verification of test vector #%u with a truncated tag failed\n",
+ (unsigned int) i);
+ }
+ if (i == 0 && crypto_aead_aegis128l_decrypt(NULL, NULL,
+ NULL, ciphertext, ciphertext_len,
+ ad, ad_len, nonce, key) != 0) {
+ printf("Verification of test vector #%u's tag failed\n", (unsigned int) i);
+ }
+ if (crypto_aead_aegis128l_decrypt(decrypted, &found_message_len, NULL, ciphertext,
+ ciphertext_len, ad, ad_len, nonce, key) != 0) {
+ printf("Verification of test vector #%u failed\n", (unsigned int) i);
+ }
+ assert((size_t) found_message_len == message_len);
+ if (memcmp(decrypted, message, message_len) != 0) {
+ printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
+ }
+ memset(decrypted, 0xd0, message_len);
+ if (crypto_aead_aegis128l_decrypt_detached(decrypted, NULL, detached_ciphertext,
+ detached_ciphertext_len, mac, ad, ad_len, nonce,
+ key) != 0) {
+ printf("Detached verification of test vector #%u failed\n", (unsigned int) i);
+ }
+ if (memcmp(decrypted, message, message_len) != 0) {
+ printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
+ }
+
+ sodium_free(message);
+ sodium_free(ad);
+ sodium_free(expected_ciphertext);
+ sodium_free(ciphertext);
+ sodium_free(decrypted);
+ sodium_free(detached_ciphertext);
+ } while (++i < (sizeof tests) / (sizeof tests[0]));
+
+ sodium_free(key);
+ sodium_free(mac);
+ sodium_free(nonce);
+
+ return 0;
+}
+
+int
+main(void)
+{
+ tv();
+ assert(crypto_aead_aegis128l_keybytes() == crypto_aead_aegis128l_KEYBYTES);
+ assert(crypto_aead_aegis128l_nsecbytes() == crypto_aead_aegis128l_NSECBYTES);
+ assert(crypto_aead_aegis128l_npubbytes() == crypto_aead_aegis128l_NPUBBYTES);
+ assert(crypto_aead_aegis128l_abytes() == crypto_aead_aegis128l_ABYTES);
+ assert(crypto_aead_aegis128l_messagebytes_max() == crypto_aead_aegis128l_MESSAGEBYTES_MAX);
+ printf("OK\n");
+
+ return 0;
+}
diff --git a/test/default/aead_aegis256.exp b/test/default/aead_aegis256.exp
new file mode 100644
index 0000000000..d86bac9de5
--- /dev/null
+++ b/test/default/aead_aegis256.exp
@@ -0,0 +1 @@
+OK