From 2dd3b91628c86c103fd70e162b3e31683b1503f2 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 10 Jun 2019 17:45:06 +0200 Subject: [PATCH] Try to rename internal symbols that were visible in static libraries Fixes #839 --- .gitignore | 4 + .travis.yml | 1 + .../msvc/vs2010/libsodium/libsodium.vcxproj | 2 + .../libsodium/libsodium.vcxproj.filters | 6 + .../msvc/vs2012/libsodium/libsodium.vcxproj | 2 + .../libsodium/libsodium.vcxproj.filters | 6 + .../msvc/vs2013/libsodium/libsodium.vcxproj | 2 + .../libsodium/libsodium.vcxproj.filters | 6 + .../msvc/vs2015/libsodium/libsodium.vcxproj | 2 + .../libsodium/libsodium.vcxproj.filters | 6 + .../msvc/vs2017/libsodium/libsodium.vcxproj | 2 + .../libsodium/libsodium.vcxproj.filters | 6 + .../msvc/vs2019/libsodium/libsodium.vcxproj | 2 + .../libsodium/libsodium.vcxproj.filters | 6 + libsodium.vcxproj | 2 + libsodium.vcxproj.filters | 6 + src/libsodium/Makefile.am | 4 +- .../crypto_core/ed25519/ref10/fe_25_5/fe.h | 2 + .../crypto_core/ed25519/ref10/fe_51/fe.h | 2 + .../crypto_generichash/blake2b/ref/blake2.h | 1 + .../crypto_pwhash/argon2/argon2-core.h | 1 + .../crypto_pwhash/argon2/argon2-encoding.h | 1 + src/libsodium/crypto_pwhash/argon2/argon2.h | 2 + .../crypto_pwhash/argon2/blake2b-long.h | 1 + .../scryptsalsa208sha256/crypto_scrypt.h | 2 + .../scryptsalsa208sha256/pbkdf2-sha256.h | 1 + .../curve25519/sandy2x/consts_namespace.h | 28 +- .../crypto_scalarmult/curve25519/sandy2x/fe.h | 2 +- .../curve25519/sandy2x/fe51_namespace.h | 18 +- .../sandy2x/ladder_base_namespace.h | 4 +- .../curve25519/sandy2x/ladder_namespace.h | 4 +- .../curve25519/sandy2x/sandy2x.S | 1 - .../ed25519/ref10/sign_ed25519_ref10.h | 2 + .../crypto_stream/salsa20/stream_salsa20.h | 2 + .../salsa20/xmm6/salsa20_xmm6-asm.S | 2 + .../salsa20/xmm6/salsa20_xmm6-asm_namespace.h | 10 + .../crypto_stream/salsa20/xmm6/salsa20_xmm6.h | 1 + .../sodium/private/chacha20_ietf_ext.h | 2 + src/libsodium/include/sodium/private/common.h | 2 + .../include/sodium/private/ed25519_ref10.h | 2 + .../sodium/private/ed25519_ref10_fe_25_5.h | 1 + .../sodium/private/ed25519_ref10_fe_51.h | 1 + .../include/sodium/private/implementations.h | 2 + src/libsodium/include/sodium/private/mutex.h | 2 + src/libsodium/include/sodium/private/quirks.h | 81 ++ test/rename-globals.sh | 179 +++++ test/symbols/all-symbols.txt | 691 ++++++++++++++++++ 47 files changed, 1085 insertions(+), 30 deletions(-) create mode 100644 src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm_namespace.h create mode 100644 src/libsodium/include/sodium/private/quirks.h create mode 100755 test/rename-globals.sh create mode 100644 test/symbols/all-symbols.txt diff --git a/.gitignore b/.gitignore index c842285d..f215cd39 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,9 @@ configure configure.lineno coverage.info depcomp +test/symbols/all-host-symbols.txt +test/symbols/internal-host-symbols.txt +test/symbols/internal-symbols.txt install-sh libsodium-*.tar.bz2 libsodium-*.tar.gz @@ -74,6 +77,7 @@ man/*.html man/Makefile.in missing src/libsodium/*.def +src/libsodium/include/sodium/private/quirks.h.old src/libsodium/include/sodium/version.h stamp-* test-driver diff --git a/.travis.yml b/.travis.yml index 987992c7..5982d09a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,6 +28,7 @@ script: - make check - ( echo '#include ' ; echo 'int main(void) { return sodium_init(); }' ) > /tmp/main.c && gcc -DDEV_MODE=1 -Isrc/libsodium/include -Isrc/libsodium/include/sodium $(find src -name '*.c' -o -name '*.S') /tmp/main.c - make distclean > /dev/null + - test/rename-globals.sh after_success: - env CPPFLAGS="-DDEV_MODE=1" ./configure --disable-dependency-tracking --host=powerpc-linux-gnu diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj b/builds/msvc/vs2010/libsodium/libsodium.vcxproj index ad3cb086..162b8aa0 100644 --- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj @@ -256,6 +256,7 @@ + @@ -306,6 +307,7 @@ + diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters index 055b7476..0c57629b 100644 --- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters @@ -557,6 +557,9 @@ include\sodium\private + + include\sodium\private + include\sodium\private @@ -707,6 +710,9 @@ crypto_stream\salsa20\xmm6int + + crypto_stream\salsa20\xmm6 + crypto_stream\salsa20\xmm6 diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj b/builds/msvc/vs2012/libsodium/libsodium.vcxproj index 0954d10b..091a2300 100644 --- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj @@ -256,6 +256,7 @@ + @@ -306,6 +307,7 @@ + diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters index 055b7476..0c57629b 100644 --- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters @@ -557,6 +557,9 @@ include\sodium\private + + include\sodium\private + include\sodium\private @@ -707,6 +710,9 @@ crypto_stream\salsa20\xmm6int + + crypto_stream\salsa20\xmm6 + crypto_stream\salsa20\xmm6 diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj b/builds/msvc/vs2013/libsodium/libsodium.vcxproj index 91d7a7c7..1b088637 100644 --- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj @@ -256,6 +256,7 @@ + @@ -306,6 +307,7 @@ + diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters index 055b7476..0c57629b 100644 --- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters @@ -557,6 +557,9 @@ include\sodium\private + + include\sodium\private + include\sodium\private @@ -707,6 +710,9 @@ crypto_stream\salsa20\xmm6int + + crypto_stream\salsa20\xmm6 + crypto_stream\salsa20\xmm6 diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj b/builds/msvc/vs2015/libsodium/libsodium.vcxproj index f97869dd..9b127a12 100644 --- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj @@ -256,6 +256,7 @@ + @@ -306,6 +307,7 @@ + diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters index 055b7476..0c57629b 100644 --- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters @@ -557,6 +557,9 @@ include\sodium\private + + include\sodium\private + include\sodium\private @@ -707,6 +710,9 @@ crypto_stream\salsa20\xmm6int + + crypto_stream\salsa20\xmm6 + crypto_stream\salsa20\xmm6 diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj b/builds/msvc/vs2017/libsodium/libsodium.vcxproj index b216959d..be249f0c 100644 --- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj @@ -256,6 +256,7 @@ + @@ -306,6 +307,7 @@ + diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters index 055b7476..0c57629b 100644 --- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters @@ -557,6 +557,9 @@ include\sodium\private + + include\sodium\private + include\sodium\private @@ -707,6 +710,9 @@ crypto_stream\salsa20\xmm6int + + crypto_stream\salsa20\xmm6 + crypto_stream\salsa20\xmm6 diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj b/builds/msvc/vs2019/libsodium/libsodium.vcxproj index ce824a9c..979df2d7 100644 --- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj @@ -256,6 +256,7 @@ + @@ -306,6 +307,7 @@ + diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters index 055b7476..0c57629b 100644 --- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters @@ -557,6 +557,9 @@ include\sodium\private + + include\sodium\private + include\sodium\private @@ -707,6 +710,9 @@ crypto_stream\salsa20\xmm6int + + crypto_stream\salsa20\xmm6 + crypto_stream\salsa20\xmm6 diff --git a/libsodium.vcxproj b/libsodium.vcxproj index e3b20729..5f494086 100644 --- a/libsodium.vcxproj +++ b/libsodium.vcxproj @@ -494,6 +494,7 @@ + @@ -544,6 +545,7 @@ + diff --git a/libsodium.vcxproj.filters b/libsodium.vcxproj.filters index c8866164..d923d404 100644 --- a/libsodium.vcxproj.filters +++ b/libsodium.vcxproj.filters @@ -548,6 +548,9 @@ Header Files + + Header Files + Header Files @@ -698,6 +701,9 @@ Header Files + + Header Files + Header Files diff --git a/src/libsodium/Makefile.am b/src/libsodium/Makefile.am index cf4cfc93..fd452971 100644 --- a/src/libsodium/Makefile.am +++ b/src/libsodium/Makefile.am @@ -88,6 +88,7 @@ libsodium_la_SOURCES = \ include/sodium/private/implementations.h \ include/sodium/private/mutex.h \ include/sodium/private/sse2_64_32.h \ + include/sodium/private/quirks.h \ randombytes/randombytes.c \ sodium/codecs.c \ sodium/core.c \ @@ -115,7 +116,8 @@ if HAVE_AMD64_ASM libsodium_la_SOURCES += \ crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S \ crypto_stream/salsa20/xmm6/salsa20_xmm6.c \ - crypto_stream/salsa20/xmm6/salsa20_xmm6.h + crypto_stream/salsa20/xmm6/salsa20_xmm6.h \ + crypto_stream/salsa20/xmm6/salsa20_xmm6-asm_namespace.h else libsodium_la_SOURCES += \ crypto_stream/salsa20/ref/salsa20_ref.c \ diff --git a/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h b/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h index f216669e..0b8b9756 100644 --- a/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h +++ b/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h @@ -1,3 +1,5 @@ +#include "private/quirks.h" + /* Ignores top bit of h. */ diff --git a/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h b/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h index de876264..868d1184 100644 --- a/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h +++ b/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h @@ -1,3 +1,5 @@ +#include "private/quirks.h" + /* Ignores top bit of h. */ diff --git a/src/libsodium/crypto_generichash/blake2b/ref/blake2.h b/src/libsodium/crypto_generichash/blake2b/ref/blake2.h index c7433c32..ae93c1aa 100644 --- a/src/libsodium/crypto_generichash/blake2b/ref/blake2.h +++ b/src/libsodium/crypto_generichash/blake2b/ref/blake2.h @@ -22,6 +22,7 @@ #include "crypto_generichash_blake2b.h" #include "export.h" +#include "private/quirks.h" enum blake2b_constant { BLAKE2B_BLOCKBYTES = 128, diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-core.h b/src/libsodium/crypto_pwhash/argon2/argon2-core.h index 2fd7f41c..22ec39d1 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-core.h +++ b/src/libsodium/crypto_pwhash/argon2/argon2-core.h @@ -17,6 +17,7 @@ #include #include "argon2.h" +#include "private/quirks.h" /*************************Argon2 internal * constants**************************************************/ diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h b/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h index c35fbf42..df66b38a 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h +++ b/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h @@ -2,6 +2,7 @@ #define argon2_encoding_H #include "argon2.h" +#include "private/quirks.h" /* * encode an Argon2 hash string into the provided buffer. 'dst_len' diff --git a/src/libsodium/crypto_pwhash/argon2/argon2.h b/src/libsodium/crypto_pwhash/argon2/argon2.h index 3b05daac..264a35e5 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2.h +++ b/src/libsodium/crypto_pwhash/argon2/argon2.h @@ -16,6 +16,8 @@ #include #include +#include "private/quirks.h" + /* * Argon2 input parameter restrictions */ diff --git a/src/libsodium/crypto_pwhash/argon2/blake2b-long.h b/src/libsodium/crypto_pwhash/argon2/blake2b-long.h index 3d6d7755..38a422e5 100644 --- a/src/libsodium/crypto_pwhash/argon2/blake2b-long.h +++ b/src/libsodium/crypto_pwhash/argon2/blake2b-long.h @@ -2,6 +2,7 @@ #define blake2b_long_H #include +#include "private/quirks.h" int blake2b_long(void *pout, size_t outlen, const void *in, size_t inlen); diff --git a/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h b/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h index eee7b8b1..2030b5f1 100644 --- a/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h +++ b/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h @@ -34,6 +34,8 @@ #include #include +#include "private/quirks.h" + #if SIZE_MAX > 0xffffffffULL #define ARCH_BITS 64 #else diff --git a/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h b/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h index 962b4331..d0efc31d 100644 --- a/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h +++ b/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h @@ -33,6 +33,7 @@ #include #include "crypto_auth_hmacsha256.h" +#include "private/quirks.h" /** * escrypt_PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): diff --git a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h index 9f81fa61..17add872 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h +++ b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h @@ -1,20 +1,20 @@ #ifndef consts_namespace_H #define consts_namespace_H -#define v0_0 crypto_scalarmult_curve25519_sandy2x_v0_0 -#define v1_0 crypto_scalarmult_curve25519_sandy2x_v1_0 -#define v2_1 crypto_scalarmult_curve25519_sandy2x_v2_1 -#define v9_0 crypto_scalarmult_curve25519_sandy2x_v9_0 -#define v9_9 crypto_scalarmult_curve25519_sandy2x_v9_9 -#define v19_19 crypto_scalarmult_curve25519_sandy2x_v19_19 -#define v38_1 crypto_scalarmult_curve25519_sandy2x_v38_1 -#define v38_38 crypto_scalarmult_curve25519_sandy2x_v38_38 -#define v121666_121666 crypto_scalarmult_curve25519_sandy2x_v121666_121666 -#define m25 crypto_scalarmult_curve25519_sandy2x_m25 -#define m26 crypto_scalarmult_curve25519_sandy2x_m26 -#define subc0 crypto_scalarmult_curve25519_sandy2x_subc0 -#define subc2 crypto_scalarmult_curve25519_sandy2x_subc2 -#define REDMASK51 crypto_scalarmult_curve25519_sandy2x_REDMASK51 +#define v0_0 _sodium_scalarmult_curve25519_sandy2x_v0_0 +#define v1_0 _sodium_scalarmult_curve25519_sandy2x_v1_0 +#define v2_1 _sodium_scalarmult_curve25519_sandy2x_v2_1 +#define v9_0 _sodium_scalarmult_curve25519_sandy2x_v9_0 +#define v9_9 _sodium_scalarmult_curve25519_sandy2x_v9_9 +#define v19_19 _sodium_scalarmult_curve25519_sandy2x_v19_19 +#define v38_1 _sodium_scalarmult_curve25519_sandy2x_v38_1 +#define v38_38 _sodium_scalarmult_curve25519_sandy2x_v38_38 +#define v121666_121666 _sodium_scalarmult_curve25519_sandy2x_v121666_121666 +#define m25 _sodium_scalarmult_curve25519_sandy2x_m25 +#define m26 _sodium_scalarmult_curve25519_sandy2x_m26 +#define subc0 _sodium_scalarmult_curve25519_sandy2x_subc0 +#define subc2 _sodium_scalarmult_curve25519_sandy2x_subc2 +#define REDMASK51 _sodium_scalarmult_curve25519_sandy2x_REDMASK51 #endif /* ifndef consts_namespace_H */ diff --git a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h index b1115f86..2484230c 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h +++ b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h @@ -19,7 +19,7 @@ t[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on context. */ -#define fe_frombytes crypto_scalarmult_curve25519_sandy2x_fe_frombytes +#define fe_frombytes _sodium_scalarmult_curve25519_sandy2x_fe_frombytes extern void fe_frombytes(fe, const unsigned char *); diff --git a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h index 057f242c..37d94010 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h +++ b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h @@ -1,16 +1,16 @@ #ifndef fe51_namespace_H #define fe51_namespace_H -#define fe51 crypto_scalarmult_curve25519_sandy2x_fe51 -#define _fe51 _crypto_scalarmult_curve25519_sandy2x_fe51 -#define fe51_pack crypto_scalarmult_curve25519_sandy2x_fe51_pack -#define _fe51_pack _crypto_scalarmult_curve25519_sandy2x_fe51_pack -#define fe51_mul crypto_scalarmult_curve25519_sandy2x_fe51_mul -#define _fe51_mul _crypto_scalarmult_curve25519_sandy2x_fe51_mul -#define fe51_nsquare crypto_scalarmult_curve25519_sandy2x_fe51_nsquare -#define _fe51_nsquare _crypto_scalarmult_curve25519_sandy2x_fe51_nsquare +#define fe51 _sodium_scalarmult_curve25519_sandy2x_fe51 +#define _fe51 __sodium_scalarmult_curve25519_sandy2x_fe51 +#define fe51_pack _sodium_scalarmult_curve25519_sandy2x_fe51_pack +#define _fe51_pack __sodium_scalarmult_curve25519_sandy2x_fe51_pack +#define fe51_mul _sodium_scalarmult_curve25519_sandy2x_fe51_mul +#define _fe51_mul __sodium_scalarmult_curve25519_sandy2x_fe51_mul +#define fe51_nsquare _sodium_scalarmult_curve25519_sandy2x_fe51_nsquare +#define _fe51_nsquare __sodium_scalarmult_curve25519_sandy2x_fe51_nsquare -#define fe51_invert crypto_scalarmult_curve25519_sandy2x_fe51_invert +#define fe51_invert _sodium_scalarmult_curve25519_sandy2x_fe51_invert #endif /* ifndef fe51_namespace_H */ diff --git a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h index 304546a1..d4cee1df 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h +++ b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h @@ -1,8 +1,8 @@ #ifndef ladder_base_namespace_H #define ladder_base_namespace_H -#define ladder_base crypto_scalarmult_curve25519_sandy2x_ladder_base -#define _ladder_base _crypto_scalarmult_curve25519_sandy2x_ladder_base +#define ladder_base _sodium_scalarmult_curve25519_sandy2x_ladder_base +#define _ladder_base __sodium_scalarmult_curve25519_sandy2x_ladder_base #endif /* ifndef ladder_base_namespace_H */ diff --git a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h index 6637074b..f663cc0e 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h +++ b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h @@ -1,8 +1,8 @@ #ifndef ladder_namespace_H #define ladder_namespace_H -#define ladder crypto_scalarmult_curve25519_sandy2x_ladder -#define _ladder _crypto_scalarmult_curve25519_sandy2x_ladder +#define ladder _sodium_scalarmult_curve25519_sandy2x_ladder +#define _ladder __sodium_scalarmult_curve25519_sandy2x_ladder #endif /* ifndef ladder_namespace_H */ diff --git a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S index 1fd63205..9da6b7a2 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S +++ b/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S @@ -1,4 +1,3 @@ - #ifdef HAVE_AVX_ASM #define IN_SANDY2X diff --git a/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h b/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h index 29f45a85..dd58a879 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h +++ b/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h @@ -1,6 +1,8 @@ #ifndef sign_ed25519_ref10_H #define sign_ed25519_ref10_H +#include "private/quirks.h" + void _crypto_sign_ed25519_ref10_hinit(crypto_hash_sha512_state *hs, int prehashed); diff --git a/src/libsodium/crypto_stream/salsa20/stream_salsa20.h b/src/libsodium/crypto_stream/salsa20/stream_salsa20.h index 1949d381..21704c6c 100644 --- a/src/libsodium/crypto_stream/salsa20/stream_salsa20.h +++ b/src/libsodium/crypto_stream/salsa20/stream_salsa20.h @@ -4,6 +4,8 @@ #include +#include "private/quirks.h" + typedef struct crypto_stream_salsa20_implementation { int (*stream)(unsigned char *c, unsigned long long clen, const unsigned char *n, const unsigned char *k); diff --git a/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S b/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S index 6d9f354e..a5289615 100644 --- a/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S +++ b/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S @@ -1,5 +1,7 @@ #ifdef HAVE_AMD64_ASM +#include "salsa20_xmm6-asm_namespace.h" + .text .p2align 5 diff --git a/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm_namespace.h b/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm_namespace.h new file mode 100644 index 00000000..15c5212e --- /dev/null +++ b/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm_namespace.h @@ -0,0 +1,10 @@ +#ifndef salsa20_xmm6_asm_namespace_H +#define salsa20_xmm6_asm_namespace_H + +#define stream_salsa20_xmm6 _sodium_stream_salsa20_xmm6 +#define _stream_salsa20_xmm6 __sodium_stream_salsa20_xmm6 + +#define stream_salsa20_xmm6_xor_ic _sodium_stream_salsa20_xmm6_xor_ic +#define _stream_salsa20_xmm6_xor_ic __sodium_stream_salsa20_xmm6_xor_ic + +#endif diff --git a/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h b/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h index d38473a9..29d88038 100644 --- a/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h +++ b/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h @@ -3,6 +3,7 @@ #include "../stream_salsa20.h" #include "crypto_stream_salsa20.h" +#include "salsa20_xmm6-asm_namespace.h" extern struct crypto_stream_salsa20_implementation crypto_stream_salsa20_xmm6_implementation; diff --git a/src/libsodium/include/sodium/private/chacha20_ietf_ext.h b/src/libsodium/include/sodium/private/chacha20_ietf_ext.h index 2c80b96a..8024b59c 100644 --- a/src/libsodium/include/sodium/private/chacha20_ietf_ext.h +++ b/src/libsodium/include/sodium/private/chacha20_ietf_ext.h @@ -3,6 +3,8 @@ #include +#include "private/quirks.h" + /* The ietf_ext variant allows the internal counter to overflow into the IV */ int crypto_stream_chacha20_ietf_ext(unsigned char *c, unsigned long long clen, diff --git a/src/libsodium/include/sodium/private/common.h b/src/libsodium/include/sodium/private/common.h index dd95f0fa..2ea7a1b2 100644 --- a/src/libsodium/include/sodium/private/common.h +++ b/src/libsodium/include/sodium/private/common.h @@ -20,6 +20,8 @@ #include #include +#include "private/quirks.h" + #define COMPILER_ASSERT(X) (void) sizeof(char[(X) ? 1 : -1]) #ifdef HAVE_TI_MODE diff --git a/src/libsodium/include/sodium/private/ed25519_ref10.h b/src/libsodium/include/sodium/private/ed25519_ref10.h index 3f4c45ca..0d3bd373 100644 --- a/src/libsodium/include/sodium/private/ed25519_ref10.h +++ b/src/libsodium/include/sodium/private/ed25519_ref10.h @@ -4,6 +4,8 @@ #include #include +#include "private/quirks.h" + /* fe means field element. Here the field is \Z/(2^255-19). diff --git a/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h b/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h index 5a0b6148..a20801f4 100644 --- a/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h +++ b/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h @@ -1,6 +1,7 @@ #include #include "private/common.h" +#include "private/quirks.h" #include "utils.h" /* diff --git a/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h b/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h index 3a30f301..6a5c0121 100644 --- a/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h +++ b/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h @@ -1,6 +1,7 @@ #include #include "private/common.h" +#include "private/quirks.h" #include "utils.h" /* diff --git a/src/libsodium/include/sodium/private/implementations.h b/src/libsodium/include/sodium/private/implementations.h index c7237f85..613bf780 100644 --- a/src/libsodium/include/sodium/private/implementations.h +++ b/src/libsodium/include/sodium/private/implementations.h @@ -1,6 +1,8 @@ #ifndef implementations_H #define implementations_H +#include "private/quirks.h" + int _crypto_generichash_blake2b_pick_best_implementation(void); int _crypto_onetimeauth_poly1305_pick_best_implementation(void); int _crypto_pwhash_argon2_pick_best_implementation(void); diff --git a/src/libsodium/include/sodium/private/mutex.h b/src/libsodium/include/sodium/private/mutex.h index 322b6742..cd2346c7 100644 --- a/src/libsodium/include/sodium/private/mutex.h +++ b/src/libsodium/include/sodium/private/mutex.h @@ -1,6 +1,8 @@ #ifndef mutex_H #define mutex_H 1 +#include "private/quirks.h" + extern int sodium_crit_enter(void); extern int sodium_crit_leave(void); diff --git a/src/libsodium/include/sodium/private/quirks.h b/src/libsodium/include/sodium/private/quirks.h new file mode 100644 index 00000000..858548da --- /dev/null +++ b/src/libsodium/include/sodium/private/quirks.h @@ -0,0 +1,81 @@ +/* This is an automatically generated file */ + +#ifndef quirks_H +#ifndef NO_QUIRKS + +#define argon2_ctx _sodium_argon2_ctx +#define argon2_decode_string _sodium_argon2_decode_string +#define argon2_encode_string _sodium_argon2_encode_string +#define argon2_fill_memory_blocks _sodium_argon2_fill_memory_blocks +#define argon2_fill_segment_avx2 _sodium_argon2_fill_segment_avx2 +#define argon2_fill_segment_avx512f _sodium_argon2_fill_segment_avx512f +#define argon2_fill_segment_ref _sodium_argon2_fill_segment_ref +#define argon2_fill_segment_ssse3 _sodium_argon2_fill_segment_ssse3 +#define argon2_finalize _sodium_argon2_finalize +#define argon2_hash _sodium_argon2_hash +#define argon2_initialize _sodium_argon2_initialize +#define argon2_validate_inputs _sodium_argon2_validate_inputs +#define argon2_verify _sodium_argon2_verify +#define argon2i_hash_encoded _sodium_argon2i_hash_encoded +#define argon2i_hash_raw _sodium_argon2i_hash_raw +#define argon2i_verify _sodium_argon2i_verify +#define argon2id_hash_encoded _sodium_argon2id_hash_encoded +#define argon2id_hash_raw _sodium_argon2id_hash_raw +#define argon2id_verify _sodium_argon2id_verify +#define blake2b _sodium_blake2b +#define blake2b_compress_avx2 _sodium_blake2b_compress_avx2 +#define blake2b_compress_ref _sodium_blake2b_compress_ref +#define blake2b_compress_sse41 _sodium_blake2b_compress_sse41 +#define blake2b_compress_ssse3 _sodium_blake2b_compress_ssse3 +#define blake2b_final _sodium_blake2b_final +#define blake2b_init _sodium_blake2b_init +#define blake2b_init_key _sodium_blake2b_init_key +#define blake2b_init_key_salt_personal _sodium_blake2b_init_key_salt_personal +#define blake2b_init_param _sodium_blake2b_init_param +#define blake2b_init_salt_personal _sodium_blake2b_init_salt_personal +#define blake2b_long _sodium_blake2b_long +#define blake2b_pick_best_implementation _sodium_blake2b_pick_best_implementation +#define blake2b_salt_personal _sodium_blake2b_salt_personal +#define blake2b_update _sodium_blake2b_update +#define escrypt_PBKDF2_SHA256 _sodium_escrypt_PBKDF2_SHA256 +#define escrypt_alloc_region _sodium_escrypt_alloc_region +#define escrypt_free_local _sodium_escrypt_free_local +#define escrypt_free_region _sodium_escrypt_free_region +#define escrypt_gensalt_r _sodium_escrypt_gensalt_r +#define escrypt_init_local _sodium_escrypt_init_local +#define escrypt_kdf_nosse _sodium_escrypt_kdf_nosse +#define escrypt_kdf_sse _sodium_escrypt_kdf_sse +#define escrypt_parse_setting _sodium_escrypt_parse_setting +#define escrypt_r _sodium_escrypt_r +#define fe25519_frombytes _sodium_fe25519_frombytes +#define fe25519_invert _sodium_fe25519_invert +#define fe25519_tobytes _sodium_fe25519_tobytes +#define ge25519_add _sodium_ge25519_add +#define ge25519_double_scalarmult_vartime _sodium_ge25519_double_scalarmult_vartime +#define ge25519_from_hash _sodium_ge25519_from_hash +#define ge25519_from_uniform _sodium_ge25519_from_uniform +#define ge25519_frombytes _sodium_ge25519_frombytes +#define ge25519_frombytes_negate_vartime _sodium_ge25519_frombytes_negate_vartime +#define ge25519_has_small_order _sodium_ge25519_has_small_order +#define ge25519_is_canonical _sodium_ge25519_is_canonical +#define ge25519_is_on_curve _sodium_ge25519_is_on_curve +#define ge25519_is_on_main_subgroup _sodium_ge25519_is_on_main_subgroup +#define ge25519_p1p1_to_p2 _sodium_ge25519_p1p1_to_p2 +#define ge25519_p1p1_to_p3 _sodium_ge25519_p1p1_to_p3 +#define ge25519_p3_to_cached _sodium_ge25519_p3_to_cached +#define ge25519_p3_tobytes _sodium_ge25519_p3_tobytes +#define ge25519_scalarmult _sodium_ge25519_scalarmult +#define ge25519_scalarmult_base _sodium_ge25519_scalarmult_base +#define ge25519_sub _sodium_ge25519_sub +#define ge25519_tobytes _sodium_ge25519_tobytes +#define ristretto255_from_hash _sodium_ristretto255_from_hash +#define ristretto255_frombytes _sodium_ristretto255_frombytes +#define ristretto255_p3_tobytes _sodium_ristretto255_p3_tobytes +#define sc25519_invert _sodium_sc25519_invert +#define sc25519_is_canonical _sodium_sc25519_is_canonical +#define sc25519_mul _sodium_sc25519_mul +#define sc25519_muladd _sodium_sc25519_muladd +#define sc25519_reduce _sodium_sc25519_reduce + +#endif +#endif diff --git a/test/rename-globals.sh b/test/rename-globals.sh new file mode 100755 index 00000000..f054b39e --- /dev/null +++ b/test/rename-globals.sh @@ -0,0 +1,179 @@ +#! /bin/sh + +LIBSODIUM_DIR="$(mktemp -d)" +LIBSODIUM_PATH="${LIBSODIUM_DIR}/lib/libsodium.a" +SYMBOLS_DIR="test/symbols" +ALL_HOST_SYMBOLS="${SYMBOLS_DIR}/all-host-symbols.txt" +ALL_HOST_SYMBOLS_NEW="${ALL_HOST_SYMBOLS}.new" +ALL_SYMBOLS="${SYMBOLS_DIR}/all-symbols.txt" +ALL_SYMBOLS_NEW="${ALL_SYMBOLS}.new" +INTERNAL_HOST_SYMBOLS="${SYMBOLS_DIR}/internal-host-symbols.txt" +INTERNAL_HOST_SYMBOLS_NEW="${INTERNAL_HOST_SYMBOLS}.new" +INTERNAL_SYMBOLS="${SYMBOLS_DIR}/internal-symbols.txt" +INTERNAL_SYMBOLS_NEW="${INTERNAL_SYMBOLS}.new" +INTERNAL_SYMBOL_PREFIX="_sodium_" +QUIRKS_H="src/libsodium/include/sodium/private/quirks.h" +QUIRKS_H_NEW="${QUIRKS_H}.new" +CFLAGS_UNOPTIMIZED="-O0 -fno-lto" +MAKE_OPTS="-j$(getconf NPROCESSORS_ONLN 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)" + +NM="nm" +NM_OPTS="" + +export LC_ALL=C +export LC_COLLATE=C + +if [ ! -r "$QUIRKS_H" ]; then + cd .. + if [ ! -r "$QUIRKS_H" ]; then + echo "[$QUIRKS_H] not found" >&2 + exit 1 + fi +fi + +echo "Compiling without quirks..." +make distclean 2>/dev/null +env CFLAGS="$CFLAGS_UNOPTIMIZED" CPPFLAGS="-DNO_QUIRKS=1 -DDEV_MODE=1" \ + ./configure --prefix="$LIBSODIUM_DIR" \ + --disable-shared --enable-static --disable-dependency-tracking >/dev/null || exit 1 +make clean >/dev/null || exit 1 +make $MAKE_OPTS install >/dev/null 2>&1 || exit 1 +echo "Done." +echo + +mkdir -p "$SYMBOLS_DIR" || exit 1 +[ -e "$ALL_SYMBOLS" ] || touch "$ALL_SYMBOLS" +[ -e "$ALL_HOST_SYMBOLS" ] || touch "$ALL_HOST_SYMBOLS" +[ -e "$QUIRKS_H" ] || touch "$QUIRKS_H" +if [ -e "$INTERNAL_SYMBOLS" ]; then + grep -v "^sodium_" "$ALL_SYMBOLS" | + grep -v "^crypto_" | + grep -v "^randombytes" >"$INTERNAL_SYMBOLS" +fi + +for opt in --demangle --defined-only -P; do + "$NM" $NM_OPTS $opt "$LIBSODIUM_PATH" >/dev/null 2>&1 && + NM_OPTS="${NM_OPTS} ${opt}" +done +echo "nm: [${NM} ${NM_OPTS}]" + +sodium_init_symbol=$("$NM" $NM_OPTS "$LIBSODIUM_PATH" | + grep "^[^ ]*sodium_init T " | cut -d " " -f1 | cut -d "(" -f1) +if ! echo "$sodium_init_symbol" | grep -q "sodium_init$"; then + echo "Unable to parse symbols" >&2 + exit 1 +fi + +SYMBOL_PREFIX=$(echo "$sodium_init_symbol" | sed "s/sodium_init$//") +echo "symbol prefix: [${SYMBOL_PREFIX}]" + +"$NM" $NM_OPTS "$LIBSODIUM_PATH" | grep "^${SYMBOL_PREFIX}[^ ]* T " | + cut -d " " -f1 | cut -d "(" -f1 | sed "s/^${SYMBOL_PREFIX}//" | + grep -v "^_" | sort -u >"${ALL_HOST_SYMBOLS_NEW}.tmp" + +cat "${ALL_HOST_SYMBOLS_NEW}.tmp" "$ALL_HOST_SYMBOLS" | sort -u >"$ALL_HOST_SYMBOLS_NEW" && + rm -f "${ALL_HOST_SYMBOLS_NEW}.tmp" +cat "$ALL_HOST_SYMBOLS_NEW" "$ALL_SYMBOLS" | sort -u >"$ALL_SYMBOLS_NEW" + +grep -v "^sodium_" "$ALL_HOST_SYMBOLS_NEW" | + grep -v "^crypto_" | + grep -v "^randombytes" >"$INTERNAL_HOST_SYMBOLS_NEW" + +grep -v "^sodium_" "$ALL_SYMBOLS_NEW" | + grep -v "^crypto_" | + grep -v "^randombytes" >"$INTERNAL_SYMBOLS_NEW" + +cat >"$QUIRKS_H_NEW" <&2 + exit 1 + fi + echo "#define ${fn} ${prefixed_fn}" >>"$QUIRKS_H_NEW" +done <"$INTERNAL_SYMBOLS_NEW" +cat >>"$QUIRKS_H_NEW" </dev/null; then + echo "The quirks header file needs an update." >&2 + exit 1 +fi +if ! cmp "$QUIRKS_H" "$QUIRKS_H_NEW"; then + echo "The quirks header file may need an update." >&2 +fi + +mv -f "$QUIRKS_H" "${QUIRKS_H}.old" +mv -f "$QUIRKS_H_NEW" "$QUIRKS_H" +mv -f "$ALL_HOST_SYMBOLS_NEW" "$ALL_HOST_SYMBOLS" +mv -f "$ALL_SYMBOLS_NEW" "$ALL_SYMBOLS" +mv -f "$INTERNAL_HOST_SYMBOLS_NEW" "$INTERNAL_HOST_SYMBOLS" +mv -f "$INTERNAL_SYMBOLS_NEW" "$INTERNAL_SYMBOLS" + +echo "Compiling with quirks..." +env CFLAGS="$CFLAGS_UNOPTIMIZED" CPPFLAGS="-DDEV_MODE=1" \ + ./configure --prefix="$LIBSODIUM_DIR" \ + --disable-shared --enable-static --disable-dependency-tracking >/dev/null || exit 1 +make clean >/dev/null || exit 1 +make $MAKE_OPTS install >/dev/null 2>&1 || exit 1 + +"$NM" $NM_OPTS "$LIBSODIUM_PATH" | grep "^${SYMBOL_PREFIX}[^ ]* T " | + cut -d " " -f1 | cut -d "(" -f1 | sed "s/^${SYMBOL_PREFIX}//" | + grep -v "^_" | sort -u | + grep -v "^sodium_" | + grep -v "^crypto_" | + grep -v "^randombytes" >"$INTERNAL_HOST_SYMBOLS_NEW" + +if [ -s "$INTERNAL_SYMBOLS_NEW" ]; then + echo "Internal symbols are still present:" >&2 + echo >&2 + cat "$INTERNAL_HOST_SYMBOLS_NEW" >&2 + exit 1 +fi + +rm -f "$INTERNAL_HOST_SYMBOLS_NEW" + +rm -fr "$LIBSODIUM_DIR" + +echo "Done." diff --git a/test/symbols/all-symbols.txt b/test/symbols/all-symbols.txt new file mode 100644 index 00000000..d006cd6d --- /dev/null +++ b/test/symbols/all-symbols.txt @@ -0,0 +1,691 @@ +argon2_ctx +argon2_decode_string +argon2_encode_string +argon2_fill_memory_blocks +argon2_fill_segment_avx2 +argon2_fill_segment_avx512f +argon2_fill_segment_ref +argon2_fill_segment_ssse3 +argon2_finalize +argon2_hash +argon2_initialize +argon2_validate_inputs +argon2_verify +argon2i_hash_encoded +argon2i_hash_raw +argon2i_verify +argon2id_hash_encoded +argon2id_hash_raw +argon2id_verify +blake2b +blake2b_compress_avx2 +blake2b_compress_ref +blake2b_compress_sse41 +blake2b_compress_ssse3 +blake2b_final +blake2b_init +blake2b_init_key +blake2b_init_key_salt_personal +blake2b_init_param +blake2b_init_salt_personal +blake2b_long +blake2b_pick_best_implementation +blake2b_salt_personal +blake2b_update +crypto_aead_aes256gcm_abytes +crypto_aead_aes256gcm_beforenm +crypto_aead_aes256gcm_decrypt +crypto_aead_aes256gcm_decrypt_afternm +crypto_aead_aes256gcm_decrypt_detached +crypto_aead_aes256gcm_decrypt_detached_afternm +crypto_aead_aes256gcm_encrypt +crypto_aead_aes256gcm_encrypt_afternm +crypto_aead_aes256gcm_encrypt_detached +crypto_aead_aes256gcm_encrypt_detached_afternm +crypto_aead_aes256gcm_is_available +crypto_aead_aes256gcm_keybytes +crypto_aead_aes256gcm_keygen +crypto_aead_aes256gcm_messagebytes_max +crypto_aead_aes256gcm_npubbytes +crypto_aead_aes256gcm_nsecbytes +crypto_aead_aes256gcm_statebytes +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_edwards25519sha512batch +crypto_sign_edwards25519sha512batch_keypair +crypto_sign_edwards25519sha512batch_open +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_ext +crypto_stream_chacha20_ietf_ext_xor_ic +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 +escrypt_PBKDF2_SHA256 +escrypt_alloc_region +escrypt_free_local +escrypt_free_region +escrypt_gensalt_r +escrypt_init_local +escrypt_kdf_nosse +escrypt_kdf_sse +escrypt_parse_setting +escrypt_r +fe25519_frombytes +fe25519_invert +fe25519_tobytes +ge25519_add +ge25519_double_scalarmult_vartime +ge25519_from_hash +ge25519_from_uniform +ge25519_frombytes +ge25519_frombytes_negate_vartime +ge25519_has_small_order +ge25519_is_canonical +ge25519_is_on_curve +ge25519_is_on_main_subgroup +ge25519_p1p1_to_p2 +ge25519_p1p1_to_p3 +ge25519_p3_to_cached +ge25519_p3_tobytes +ge25519_scalarmult +ge25519_scalarmult_base +ge25519_sub +ge25519_tobytes +randombytes +randombytes_buf +randombytes_buf_deterministic +randombytes_close +randombytes_implementation_name +randombytes_random +randombytes_seedbytes +randombytes_set_implementation +randombytes_stir +randombytes_uniform +ristretto255_from_hash +ristretto255_frombytes +ristretto255_p3_tobytes +sc25519_invert +sc25519_is_canonical +sc25519_mul +sc25519_muladd +sc25519_reduce +sodium_add +sodium_allocarray +sodium_base642bin +sodium_base64_encoded_len +sodium_bin2base64 +sodium_bin2hex +sodium_compare +sodium_crit_enter +sodium_crit_leave +sodium_free +sodium_hex2bin +sodium_increment +sodium_init +sodium_is_zero +sodium_library_minimal +sodium_library_version_major +sodium_library_version_minor +sodium_malloc +sodium_memcmp +sodium_memzero +sodium_misuse +sodium_mlock +sodium_mprotect_noaccess +sodium_mprotect_readonly +sodium_mprotect_readwrite +sodium_munlock +sodium_pad +sodium_runtime_has_aesni +sodium_runtime_has_avx +sodium_runtime_has_avx2 +sodium_runtime_has_avx512f +sodium_runtime_has_neon +sodium_runtime_has_pclmul +sodium_runtime_has_rdrand +sodium_runtime_has_sse2 +sodium_runtime_has_sse3 +sodium_runtime_has_sse41 +sodium_runtime_has_ssse3 +sodium_scalarmult_curve25519_sandy2x_fe51_mul +sodium_scalarmult_curve25519_sandy2x_fe51_nsquare +sodium_scalarmult_curve25519_sandy2x_fe51_pack +sodium_scalarmult_curve25519_sandy2x_ladder +sodium_scalarmult_curve25519_sandy2x_ladder_base +sodium_set_misuse_handler +sodium_stackzero +sodium_stream_salsa20_xmm6 +sodium_stream_salsa20_xmm6_xor_ic +sodium_sub +sodium_unpad +sodium_version_string