From 7a94f6305812b7ea5748283a6ec9503f4ea9c7e1 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 17 Apr 2017 17:54:12 -0700 Subject: [PATCH] Back out NaCl since the old one with xmm6 salsa2012 does not support multi-block use and the new one is slower. --- ext/bin/cnacl-osx-amd64/README.md | 53 ------------ .../include/sodium/crypto_auth_hmacsha256.h | 27 ------ .../sodium/crypto_auth_hmacsha512256.h | 27 ------ .../crypto_box_curve25519xsalsa20poly1305.h | 44 ---------- .../include/sodium/crypto_core_hsalsa20.h | 27 ------ .../include/sodium/crypto_core_salsa20.h | 27 ------ .../include/sodium/crypto_core_salsa2012.h | 27 ------ .../include/sodium/crypto_core_salsa208.h | 27 ------ .../include/sodium/crypto_hash_sha256.h | 22 ----- .../include/sodium/crypto_hash_sha512.h | 22 ----- .../include/sodium/crypto_hashblocks_sha256.h | 23 ------ .../include/sodium/crypto_hashblocks_sha512.h | 23 ------ .../sodium/crypto_onetimeauth_poly1305.h | 27 ------ .../sodium/crypto_scalarmult_curve25519.h | 27 ------ .../crypto_secretbox_xsalsa20poly1305.h | 31 ------- .../crypto_sign_edwards25519sha512batch.h | 32 ------- .../include/sodium/crypto_stream_aes128ctr.h | 35 -------- .../include/sodium/crypto_stream_salsa20.h | 34 -------- .../include/sodium/crypto_stream_salsa2012.h | 34 -------- .../include/sodium/crypto_stream_salsa208.h | 34 -------- .../include/sodium/crypto_stream_xsalsa20.h | 34 -------- .../include/sodium/crypto_types.h | 11 --- .../include/sodium/crypto_verify_16.h | 21 ----- .../include/sodium/crypto_verify_32.h | 21 ----- ext/bin/cnacl-osx-amd64/libnacl.a | Bin 401672 -> 0 bytes make-mac.mk | 6 -- node/Node.cpp | 22 +++-- node/Node.hpp | 8 +- node/Salsa20.cpp | 4 - node/Salsa20.hpp | 78 ++---------------- node/Utils.cpp | 2 + 31 files changed, 18 insertions(+), 792 deletions(-) delete mode 100644 ext/bin/cnacl-osx-amd64/README.md delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha256.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha512256.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_box_curve25519xsalsa20poly1305.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_hsalsa20.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa20.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa2012.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa208.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha256.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha512.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha256.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha512.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_onetimeauth_poly1305.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_scalarmult_curve25519.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_secretbox_xsalsa20poly1305.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_sign_edwards25519sha512batch.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_aes128ctr.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa20.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa2012.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa208.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_xsalsa20.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_types.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_16.h delete mode 100644 ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_32.h delete mode 100644 ext/bin/cnacl-osx-amd64/libnacl.a diff --git a/ext/bin/cnacl-osx-amd64/README.md b/ext/bin/cnacl-osx-amd64/README.md deleted file mode 100644 index 354262867..000000000 --- a/ext/bin/cnacl-osx-amd64/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# cNaCl - - If you would like to be confusing, you could pronounce it sea-salt - -This is a fork NaCl by Daniel J. Bernstein and Tanja Lange. -The build has been ported to cmake so it can be cross compiled and build output is reliable. -Since it uses cmake, it could theoretically be built on windows but this has not been tested. -It does compile using mingw32. - -## How do I make this thing work? - - mkdir cbuild - cd cbuild - cmake .. - make - -## Ok now how about cross compiling? - - mkdir cbuildw32 - cd cbuildw32 - cmake -DCMAKE_TOOLCHAIN_FILE=../CMakeWindows.txt .. - make - -## Why fork? - -NaCl builds using a shell script called `./do`. This script does compiling, testing, measuring -and selection of the best implementation of each algorithm for the given machine. It also generates -the header files which will be used. - -The problems with `./do` are it's slow, it tries compiling with multiple different compiler -profiles, it's very platform independent but it doesn't run on Windows and most importantly, with -compiling, testing and measuring so tightly bound, it is impossible to cross compile for a -different operating system. - - -## How it works - -The first time you build for a new ABI, it will trigger the traditional nacl `./do` script. -What cNaCl does is parse the resulting headers from the `./do` build and create a plan so that it -can repeat roughly the same build. - -If there is already a plan for the given ABI, the build uses this plan and the build is very fast. - -Plans are stored in `./cmake/plans/` and I will be adding plans as I find new ones. - - -## What else is new? - -There is a problem with the `./do` build which prevents it from running on some ARM based machines, -this was fixed by adding a more lax method for measuring CPU speed as a fall back. - - -`#EOF#` diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha256.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha256.h deleted file mode 100644 index 6b5600f34..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha256.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_auth_hmacsha256_H -#define crypto_auth_hmacsha256_H - -#define crypto_auth_hmacsha256_ref_BYTES 32 -#define crypto_auth_hmacsha256_ref_KEYBYTES 32 -#ifdef __cplusplus -#include -extern std::string crypto_auth_hmacsha256_ref(const std::string &,const std::string &); -extern void crypto_auth_hmacsha256_ref_verify(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_auth_hmacsha256_ref(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_auth_hmacsha256_ref_verify(const unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_auth_hmacsha256 crypto_auth_hmacsha256_ref -#define crypto_auth_hmacsha256_verify crypto_auth_hmacsha256_ref_verify -#define crypto_auth_hmacsha256_BYTES crypto_auth_hmacsha256_ref_BYTES -#define crypto_auth_hmacsha256_KEYBYTES crypto_auth_hmacsha256_ref_KEYBYTES -#define crypto_auth_hmacsha256_IMPLEMENTATION "crypto_auth/hmacsha256/ref" -#ifndef crypto_auth_hmacsha256_ref_VERSION -#define crypto_auth_hmacsha256_ref_VERSION "-" -#endif -#define crypto_auth_hmacsha256_VERSION crypto_auth_hmacsha256_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha512256.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha512256.h deleted file mode 100644 index c9bd96e4d..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_auth_hmacsha512256.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_auth_hmacsha512256_H -#define crypto_auth_hmacsha512256_H - -#define crypto_auth_hmacsha512256_ref_BYTES 32 -#define crypto_auth_hmacsha512256_ref_KEYBYTES 32 -#ifdef __cplusplus -#include -extern std::string crypto_auth_hmacsha512256_ref(const std::string &,const std::string &); -extern void crypto_auth_hmacsha512256_ref_verify(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_auth_hmacsha512256_ref(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_auth_hmacsha512256_ref_verify(const unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_auth_hmacsha512256 crypto_auth_hmacsha512256_ref -#define crypto_auth_hmacsha512256_verify crypto_auth_hmacsha512256_ref_verify -#define crypto_auth_hmacsha512256_BYTES crypto_auth_hmacsha512256_ref_BYTES -#define crypto_auth_hmacsha512256_KEYBYTES crypto_auth_hmacsha512256_ref_KEYBYTES -#define crypto_auth_hmacsha512256_IMPLEMENTATION "crypto_auth/hmacsha512256/ref" -#ifndef crypto_auth_hmacsha512256_ref_VERSION -#define crypto_auth_hmacsha512256_ref_VERSION "-" -#endif -#define crypto_auth_hmacsha512256_VERSION crypto_auth_hmacsha512256_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_box_curve25519xsalsa20poly1305.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_box_curve25519xsalsa20poly1305.h deleted file mode 100644 index e2c3b4ccc..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_box_curve25519xsalsa20poly1305.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef crypto_box_curve25519xsalsa20poly1305_H -#define crypto_box_curve25519xsalsa20poly1305_H - -#define crypto_box_curve25519xsalsa20poly1305_ref_PUBLICKEYBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_ref_SECRETKEYBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_ref_BEFORENMBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_ref_NONCEBYTES 24 -#define crypto_box_curve25519xsalsa20poly1305_ref_ZEROBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_ref_BOXZEROBYTES 16 -#ifdef __cplusplus -#include -extern std::string crypto_box_curve25519xsalsa20poly1305_ref(const std::string &,const std::string &,const std::string &,const std::string &); -extern std::string crypto_box_curve25519xsalsa20poly1305_ref_open(const std::string &,const std::string &,const std::string &,const std::string &); -extern std::string crypto_box_curve25519xsalsa20poly1305_ref_keypair(std::string *); -extern "C" { -#endif -extern int crypto_box_curve25519xsalsa20poly1305_ref(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_ref_open(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_ref_keypair(unsigned char *,unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_ref_beforenm(unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_ref_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_ref_open_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_box_curve25519xsalsa20poly1305 crypto_box_curve25519xsalsa20poly1305_ref -#define crypto_box_curve25519xsalsa20poly1305_open crypto_box_curve25519xsalsa20poly1305_ref_open -#define crypto_box_curve25519xsalsa20poly1305_keypair crypto_box_curve25519xsalsa20poly1305_ref_keypair -#define crypto_box_curve25519xsalsa20poly1305_beforenm crypto_box_curve25519xsalsa20poly1305_ref_beforenm -#define crypto_box_curve25519xsalsa20poly1305_afternm crypto_box_curve25519xsalsa20poly1305_ref_afternm -#define crypto_box_curve25519xsalsa20poly1305_open_afternm crypto_box_curve25519xsalsa20poly1305_ref_open_afternm -#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_ref_PUBLICKEYBYTES -#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_ref_SECRETKEYBYTES -#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_ref_BEFORENMBYTES -#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_ref_NONCEBYTES -#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ref_ZEROBYTES -#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_ref_BOXZEROBYTES -#define crypto_box_curve25519xsalsa20poly1305_IMPLEMENTATION "crypto_box/curve25519xsalsa20poly1305/ref" -#ifndef crypto_box_curve25519xsalsa20poly1305_ref_VERSION -#define crypto_box_curve25519xsalsa20poly1305_ref_VERSION "-" -#endif -#define crypto_box_curve25519xsalsa20poly1305_VERSION crypto_box_curve25519xsalsa20poly1305_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_hsalsa20.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_hsalsa20.h deleted file mode 100644 index abae188ee..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_hsalsa20.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_core_hsalsa20_H -#define crypto_core_hsalsa20_H - -#define crypto_core_hsalsa20_ref_OUTPUTBYTES 32 -#define crypto_core_hsalsa20_ref_INPUTBYTES 16 -#define crypto_core_hsalsa20_ref_KEYBYTES 32 -#define crypto_core_hsalsa20_ref_CONSTBYTES 16 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_core_hsalsa20_ref(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_core_hsalsa20 crypto_core_hsalsa20_ref -#define crypto_core_hsalsa20_OUTPUTBYTES crypto_core_hsalsa20_ref_OUTPUTBYTES -#define crypto_core_hsalsa20_INPUTBYTES crypto_core_hsalsa20_ref_INPUTBYTES -#define crypto_core_hsalsa20_KEYBYTES crypto_core_hsalsa20_ref_KEYBYTES -#define crypto_core_hsalsa20_CONSTBYTES crypto_core_hsalsa20_ref_CONSTBYTES -#define crypto_core_hsalsa20_IMPLEMENTATION "crypto_core/hsalsa20/ref" -#ifndef crypto_core_hsalsa20_ref_VERSION -#define crypto_core_hsalsa20_ref_VERSION "-" -#endif -#define crypto_core_hsalsa20_VERSION crypto_core_hsalsa20_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa20.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa20.h deleted file mode 100644 index 9737b101c..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa20.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_core_salsa20_H -#define crypto_core_salsa20_H - -#define crypto_core_salsa20_ref_OUTPUTBYTES 64 -#define crypto_core_salsa20_ref_INPUTBYTES 16 -#define crypto_core_salsa20_ref_KEYBYTES 32 -#define crypto_core_salsa20_ref_CONSTBYTES 16 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_core_salsa20_ref(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_core_salsa20 crypto_core_salsa20_ref -#define crypto_core_salsa20_OUTPUTBYTES crypto_core_salsa20_ref_OUTPUTBYTES -#define crypto_core_salsa20_INPUTBYTES crypto_core_salsa20_ref_INPUTBYTES -#define crypto_core_salsa20_KEYBYTES crypto_core_salsa20_ref_KEYBYTES -#define crypto_core_salsa20_CONSTBYTES crypto_core_salsa20_ref_CONSTBYTES -#define crypto_core_salsa20_IMPLEMENTATION "crypto_core/salsa20/ref" -#ifndef crypto_core_salsa20_ref_VERSION -#define crypto_core_salsa20_ref_VERSION "-" -#endif -#define crypto_core_salsa20_VERSION crypto_core_salsa20_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa2012.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa2012.h deleted file mode 100644 index 137cd47f0..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa2012.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_core_salsa2012_H -#define crypto_core_salsa2012_H - -#define crypto_core_salsa2012_ref_OUTPUTBYTES 64 -#define crypto_core_salsa2012_ref_INPUTBYTES 16 -#define crypto_core_salsa2012_ref_KEYBYTES 32 -#define crypto_core_salsa2012_ref_CONSTBYTES 16 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_core_salsa2012_ref(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_core_salsa2012 crypto_core_salsa2012_ref -#define crypto_core_salsa2012_OUTPUTBYTES crypto_core_salsa2012_ref_OUTPUTBYTES -#define crypto_core_salsa2012_INPUTBYTES crypto_core_salsa2012_ref_INPUTBYTES -#define crypto_core_salsa2012_KEYBYTES crypto_core_salsa2012_ref_KEYBYTES -#define crypto_core_salsa2012_CONSTBYTES crypto_core_salsa2012_ref_CONSTBYTES -#define crypto_core_salsa2012_IMPLEMENTATION "crypto_core/salsa2012/ref" -#ifndef crypto_core_salsa2012_ref_VERSION -#define crypto_core_salsa2012_ref_VERSION "-" -#endif -#define crypto_core_salsa2012_VERSION crypto_core_salsa2012_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa208.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa208.h deleted file mode 100644 index 4895bbbe9..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_core_salsa208.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_core_salsa208_H -#define crypto_core_salsa208_H - -#define crypto_core_salsa208_ref_OUTPUTBYTES 64 -#define crypto_core_salsa208_ref_INPUTBYTES 16 -#define crypto_core_salsa208_ref_KEYBYTES 32 -#define crypto_core_salsa208_ref_CONSTBYTES 16 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_core_salsa208_ref(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_core_salsa208 crypto_core_salsa208_ref -#define crypto_core_salsa208_OUTPUTBYTES crypto_core_salsa208_ref_OUTPUTBYTES -#define crypto_core_salsa208_INPUTBYTES crypto_core_salsa208_ref_INPUTBYTES -#define crypto_core_salsa208_KEYBYTES crypto_core_salsa208_ref_KEYBYTES -#define crypto_core_salsa208_CONSTBYTES crypto_core_salsa208_ref_CONSTBYTES -#define crypto_core_salsa208_IMPLEMENTATION "crypto_core/salsa208/ref" -#ifndef crypto_core_salsa208_ref_VERSION -#define crypto_core_salsa208_ref_VERSION "-" -#endif -#define crypto_core_salsa208_VERSION crypto_core_salsa208_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha256.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha256.h deleted file mode 100644 index 20d18703b..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha256.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef crypto_hash_sha256_H -#define crypto_hash_sha256_H - -#define crypto_hash_sha256_ref_BYTES 32 -#ifdef __cplusplus -#include -extern std::string crypto_hash_sha256_ref(const std::string &); -extern "C" { -#endif -extern int crypto_hash_sha256_ref(unsigned char *,const unsigned char *,unsigned long long); -#ifdef __cplusplus -} -#endif -#define crypto_hash_sha256 crypto_hash_sha256_ref -#define crypto_hash_sha256_BYTES crypto_hash_sha256_ref_BYTES -#define crypto_hash_sha256_IMPLEMENTATION "crypto_hash/sha256/ref" -#ifndef crypto_hash_sha256_ref_VERSION -#define crypto_hash_sha256_ref_VERSION "-" -#endif -#define crypto_hash_sha256_VERSION crypto_hash_sha256_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha512.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha512.h deleted file mode 100644 index fe19d2d9c..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hash_sha512.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef crypto_hash_sha512_H -#define crypto_hash_sha512_H - -#define crypto_hash_sha512_ref_BYTES 64 -#ifdef __cplusplus -#include -extern std::string crypto_hash_sha512_ref(const std::string &); -extern "C" { -#endif -extern int crypto_hash_sha512_ref(unsigned char *,const unsigned char *,unsigned long long); -#ifdef __cplusplus -} -#endif -#define crypto_hash_sha512 crypto_hash_sha512_ref -#define crypto_hash_sha512_BYTES crypto_hash_sha512_ref_BYTES -#define crypto_hash_sha512_IMPLEMENTATION "crypto_hash/sha512/ref" -#ifndef crypto_hash_sha512_ref_VERSION -#define crypto_hash_sha512_ref_VERSION "-" -#endif -#define crypto_hash_sha512_VERSION crypto_hash_sha512_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha256.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha256.h deleted file mode 100644 index 3b473e6ce..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha256.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef crypto_hashblocks_sha256_H -#define crypto_hashblocks_sha256_H - -#define crypto_hashblocks_sha256_inplace_STATEBYTES 32 -#define crypto_hashblocks_sha256_inplace_BLOCKBYTES 64 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_hashblocks_sha256_inplace(unsigned char *,const unsigned char *,unsigned long long); -#ifdef __cplusplus -} -#endif -#define crypto_hashblocks_sha256 crypto_hashblocks_sha256_inplace -#define crypto_hashblocks_sha256_STATEBYTES crypto_hashblocks_sha256_inplace_STATEBYTES -#define crypto_hashblocks_sha256_BLOCKBYTES crypto_hashblocks_sha256_inplace_BLOCKBYTES -#define crypto_hashblocks_sha256_IMPLEMENTATION "crypto_hashblocks/sha256/inplace" -#ifndef crypto_hashblocks_sha256_inplace_VERSION -#define crypto_hashblocks_sha256_inplace_VERSION "-" -#endif -#define crypto_hashblocks_sha256_VERSION crypto_hashblocks_sha256_inplace_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha512.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha512.h deleted file mode 100644 index f66edd090..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_hashblocks_sha512.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef crypto_hashblocks_sha512_H -#define crypto_hashblocks_sha512_H - -#define crypto_hashblocks_sha512_ref_STATEBYTES 64 -#define crypto_hashblocks_sha512_ref_BLOCKBYTES 128 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_hashblocks_sha512_ref(unsigned char *,const unsigned char *,unsigned long long); -#ifdef __cplusplus -} -#endif -#define crypto_hashblocks_sha512 crypto_hashblocks_sha512_ref -#define crypto_hashblocks_sha512_STATEBYTES crypto_hashblocks_sha512_ref_STATEBYTES -#define crypto_hashblocks_sha512_BLOCKBYTES crypto_hashblocks_sha512_ref_BLOCKBYTES -#define crypto_hashblocks_sha512_IMPLEMENTATION "crypto_hashblocks/sha512/ref" -#ifndef crypto_hashblocks_sha512_ref_VERSION -#define crypto_hashblocks_sha512_ref_VERSION "-" -#endif -#define crypto_hashblocks_sha512_VERSION crypto_hashblocks_sha512_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_onetimeauth_poly1305.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_onetimeauth_poly1305.h deleted file mode 100644 index de08dc9f8..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_onetimeauth_poly1305.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_onetimeauth_poly1305_H -#define crypto_onetimeauth_poly1305_H - -#define crypto_onetimeauth_poly1305_53_BYTES 16 -#define crypto_onetimeauth_poly1305_53_KEYBYTES 32 -#ifdef __cplusplus -#include -extern std::string crypto_onetimeauth_poly1305_53(const std::string &,const std::string &); -extern void crypto_onetimeauth_poly1305_53_verify(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_onetimeauth_poly1305_53(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_onetimeauth_poly1305_53_verify(const unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_onetimeauth_poly1305 crypto_onetimeauth_poly1305_53 -#define crypto_onetimeauth_poly1305_verify crypto_onetimeauth_poly1305_53_verify -#define crypto_onetimeauth_poly1305_BYTES crypto_onetimeauth_poly1305_53_BYTES -#define crypto_onetimeauth_poly1305_KEYBYTES crypto_onetimeauth_poly1305_53_KEYBYTES -#define crypto_onetimeauth_poly1305_IMPLEMENTATION "crypto_onetimeauth/poly1305/53" -#ifndef crypto_onetimeauth_poly1305_53_VERSION -#define crypto_onetimeauth_poly1305_53_VERSION "-" -#endif -#define crypto_onetimeauth_poly1305_VERSION crypto_onetimeauth_poly1305_53_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_scalarmult_curve25519.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_scalarmult_curve25519.h deleted file mode 100644 index 550c4e3da..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_scalarmult_curve25519.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef crypto_scalarmult_curve25519_H -#define crypto_scalarmult_curve25519_H - -#define crypto_scalarmult_curve25519_donna_c64_BYTES 32 -#define crypto_scalarmult_curve25519_donna_c64_SCALARBYTES 32 -#ifdef __cplusplus -#include -extern std::string crypto_scalarmult_curve25519_donna_c64(const std::string &,const std::string &); -extern std::string crypto_scalarmult_curve25519_donna_c64_base(const std::string &); -extern "C" { -#endif -extern int crypto_scalarmult_curve25519_donna_c64(unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_scalarmult_curve25519_donna_c64_base(unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_scalarmult_curve25519 crypto_scalarmult_curve25519_donna_c64 -#define crypto_scalarmult_curve25519_base crypto_scalarmult_curve25519_donna_c64_base -#define crypto_scalarmult_curve25519_BYTES crypto_scalarmult_curve25519_donna_c64_BYTES -#define crypto_scalarmult_curve25519_SCALARBYTES crypto_scalarmult_curve25519_donna_c64_SCALARBYTES -#define crypto_scalarmult_curve25519_IMPLEMENTATION "crypto_scalarmult/curve25519/donna_c64" -#ifndef crypto_scalarmult_curve25519_donna_c64_VERSION -#define crypto_scalarmult_curve25519_donna_c64_VERSION "-" -#endif -#define crypto_scalarmult_curve25519_VERSION crypto_scalarmult_curve25519_donna_c64_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_secretbox_xsalsa20poly1305.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_secretbox_xsalsa20poly1305.h deleted file mode 100644 index c930b6f19..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_secretbox_xsalsa20poly1305.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef crypto_secretbox_xsalsa20poly1305_H -#define crypto_secretbox_xsalsa20poly1305_H - -#define crypto_secretbox_xsalsa20poly1305_ref_KEYBYTES 32 -#define crypto_secretbox_xsalsa20poly1305_ref_NONCEBYTES 24 -#define crypto_secretbox_xsalsa20poly1305_ref_ZEROBYTES 32 -#define crypto_secretbox_xsalsa20poly1305_ref_BOXZEROBYTES 16 -#ifdef __cplusplus -#include -extern std::string crypto_secretbox_xsalsa20poly1305_ref(const std::string &,const std::string &,const std::string &); -extern std::string crypto_secretbox_xsalsa20poly1305_ref_open(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_secretbox_xsalsa20poly1305_ref(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_secretbox_xsalsa20poly1305_ref_open(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_secretbox_xsalsa20poly1305 crypto_secretbox_xsalsa20poly1305_ref -#define crypto_secretbox_xsalsa20poly1305_open crypto_secretbox_xsalsa20poly1305_ref_open -#define crypto_secretbox_xsalsa20poly1305_KEYBYTES crypto_secretbox_xsalsa20poly1305_ref_KEYBYTES -#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES crypto_secretbox_xsalsa20poly1305_ref_NONCEBYTES -#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ref_ZEROBYTES -#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_ref_BOXZEROBYTES -#define crypto_secretbox_xsalsa20poly1305_IMPLEMENTATION "crypto_secretbox/xsalsa20poly1305/ref" -#ifndef crypto_secretbox_xsalsa20poly1305_ref_VERSION -#define crypto_secretbox_xsalsa20poly1305_ref_VERSION "-" -#endif -#define crypto_secretbox_xsalsa20poly1305_VERSION crypto_secretbox_xsalsa20poly1305_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_sign_edwards25519sha512batch.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_sign_edwards25519sha512batch.h deleted file mode 100644 index 936108ef7..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_sign_edwards25519sha512batch.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef crypto_sign_edwards25519sha512batch_H -#define crypto_sign_edwards25519sha512batch_H - -#define crypto_sign_edwards25519sha512batch_ref_SECRETKEYBYTES 64 -#define crypto_sign_edwards25519sha512batch_ref_PUBLICKEYBYTES 32 -#define crypto_sign_edwards25519sha512batch_ref_BYTES 64 -#ifdef __cplusplus -#include -extern std::string crypto_sign_edwards25519sha512batch_ref(const std::string &,const std::string &); -extern std::string crypto_sign_edwards25519sha512batch_ref_open(const std::string &,const std::string &); -extern std::string crypto_sign_edwards25519sha512batch_ref_keypair(std::string *); -extern "C" { -#endif -extern int crypto_sign_edwards25519sha512batch_ref(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_sign_edwards25519sha512batch_ref_open(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_sign_edwards25519sha512batch_ref_keypair(unsigned char *,unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_sign_edwards25519sha512batch crypto_sign_edwards25519sha512batch_ref -#define crypto_sign_edwards25519sha512batch_open crypto_sign_edwards25519sha512batch_ref_open -#define crypto_sign_edwards25519sha512batch_keypair crypto_sign_edwards25519sha512batch_ref_keypair -#define crypto_sign_edwards25519sha512batch_BYTES crypto_sign_edwards25519sha512batch_ref_BYTES -#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES crypto_sign_edwards25519sha512batch_ref_PUBLICKEYBYTES -#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES crypto_sign_edwards25519sha512batch_ref_SECRETKEYBYTES -#define crypto_sign_edwards25519sha512batch_IMPLEMENTATION "crypto_sign/edwards25519sha512batch/ref" -#ifndef crypto_sign_edwards25519sha512batch_ref_VERSION -#define crypto_sign_edwards25519sha512batch_ref_VERSION "-" -#endif -#define crypto_sign_edwards25519sha512batch_VERSION crypto_sign_edwards25519sha512batch_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_aes128ctr.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_aes128ctr.h deleted file mode 100644 index 76bf9137c..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_aes128ctr.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef crypto_stream_aes128ctr_H -#define crypto_stream_aes128ctr_H - -#define crypto_stream_aes128ctr_portable_KEYBYTES 16 -#define crypto_stream_aes128ctr_portable_NONCEBYTES 16 -#define crypto_stream_aes128ctr_portable_BEFORENMBYTES 1408 -#ifdef __cplusplus -#include -extern std::string crypto_stream_aes128ctr_portable(size_t,const std::string &,const std::string &); -extern std::string crypto_stream_aes128ctr_portable_xor(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_stream_aes128ctr_portable(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_aes128ctr_portable_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_aes128ctr_portable_beforenm(unsigned char *,const unsigned char *); -extern int crypto_stream_aes128ctr_portable_afternm(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_aes128ctr_portable_xor_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_stream_aes128ctr crypto_stream_aes128ctr_portable -#define crypto_stream_aes128ctr_xor crypto_stream_aes128ctr_portable_xor -#define crypto_stream_aes128ctr_beforenm crypto_stream_aes128ctr_portable_beforenm -#define crypto_stream_aes128ctr_afternm crypto_stream_aes128ctr_portable_afternm -#define crypto_stream_aes128ctr_xor_afternm crypto_stream_aes128ctr_portable_xor_afternm -#define crypto_stream_aes128ctr_KEYBYTES crypto_stream_aes128ctr_portable_KEYBYTES -#define crypto_stream_aes128ctr_NONCEBYTES crypto_stream_aes128ctr_portable_NONCEBYTES -#define crypto_stream_aes128ctr_BEFORENMBYTES crypto_stream_aes128ctr_portable_BEFORENMBYTES -#define crypto_stream_aes128ctr_IMPLEMENTATION "crypto_stream/aes128ctr/portable" -#ifndef crypto_stream_aes128ctr_portable_VERSION -#define crypto_stream_aes128ctr_portable_VERSION "-" -#endif -#define crypto_stream_aes128ctr_VERSION crypto_stream_aes128ctr_portable_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa20.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa20.h deleted file mode 100644 index c96d20b48..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa20.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef crypto_stream_salsa20_H -#define crypto_stream_salsa20_H - -#define crypto_stream_salsa20_amd64_xmm6_KEYBYTES 32 -#define crypto_stream_salsa20_amd64_xmm6_NONCEBYTES 8 -#ifdef __cplusplus -#include -extern std::string crypto_stream_salsa20_amd64_xmm6(size_t,const std::string &,const std::string &); -extern std::string crypto_stream_salsa20_amd64_xmm6_xor(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_stream_salsa20_amd64_xmm6(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa20_amd64_xmm6_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa20_amd64_xmm6_beforenm(unsigned char *,const unsigned char *); -extern int crypto_stream_salsa20_amd64_xmm6_afternm(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa20_amd64_xmm6_xor_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_stream_salsa20 crypto_stream_salsa20_amd64_xmm6 -#define crypto_stream_salsa20_xor crypto_stream_salsa20_amd64_xmm6_xor -#define crypto_stream_salsa20_beforenm crypto_stream_salsa20_amd64_xmm6_beforenm -#define crypto_stream_salsa20_afternm crypto_stream_salsa20_amd64_xmm6_afternm -#define crypto_stream_salsa20_xor_afternm crypto_stream_salsa20_amd64_xmm6_xor_afternm -#define crypto_stream_salsa20_KEYBYTES crypto_stream_salsa20_amd64_xmm6_KEYBYTES -#define crypto_stream_salsa20_NONCEBYTES crypto_stream_salsa20_amd64_xmm6_NONCEBYTES -#define crypto_stream_salsa20_BEFORENMBYTES crypto_stream_salsa20_amd64_xmm6_BEFORENMBYTES -#define crypto_stream_salsa20_IMPLEMENTATION "crypto_stream/salsa20/amd64_xmm6" -#ifndef crypto_stream_salsa20_amd64_xmm6_VERSION -#define crypto_stream_salsa20_amd64_xmm6_VERSION "-" -#endif -#define crypto_stream_salsa20_VERSION crypto_stream_salsa20_amd64_xmm6_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa2012.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa2012.h deleted file mode 100644 index 051e4e39f..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa2012.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef crypto_stream_salsa2012_H -#define crypto_stream_salsa2012_H - -#define crypto_stream_salsa2012_amd64_xmm6_KEYBYTES 32 -#define crypto_stream_salsa2012_amd64_xmm6_NONCEBYTES 8 -#ifdef __cplusplus -#include -extern std::string crypto_stream_salsa2012_amd64_xmm6(size_t,const std::string &,const std::string &); -extern std::string crypto_stream_salsa2012_amd64_xmm6_xor(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_stream_salsa2012_amd64_xmm6(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa2012_amd64_xmm6_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa2012_amd64_xmm6_beforenm(unsigned char *,const unsigned char *); -extern int crypto_stream_salsa2012_amd64_xmm6_afternm(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa2012_amd64_xmm6_xor_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_stream_salsa2012 crypto_stream_salsa2012_amd64_xmm6 -#define crypto_stream_salsa2012_xor crypto_stream_salsa2012_amd64_xmm6_xor -#define crypto_stream_salsa2012_beforenm crypto_stream_salsa2012_amd64_xmm6_beforenm -#define crypto_stream_salsa2012_afternm crypto_stream_salsa2012_amd64_xmm6_afternm -#define crypto_stream_salsa2012_xor_afternm crypto_stream_salsa2012_amd64_xmm6_xor_afternm -#define crypto_stream_salsa2012_KEYBYTES crypto_stream_salsa2012_amd64_xmm6_KEYBYTES -#define crypto_stream_salsa2012_NONCEBYTES crypto_stream_salsa2012_amd64_xmm6_NONCEBYTES -#define crypto_stream_salsa2012_BEFORENMBYTES crypto_stream_salsa2012_amd64_xmm6_BEFORENMBYTES -#define crypto_stream_salsa2012_IMPLEMENTATION "crypto_stream/salsa2012/amd64_xmm6" -#ifndef crypto_stream_salsa2012_amd64_xmm6_VERSION -#define crypto_stream_salsa2012_amd64_xmm6_VERSION "-" -#endif -#define crypto_stream_salsa2012_VERSION crypto_stream_salsa2012_amd64_xmm6_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa208.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa208.h deleted file mode 100644 index 4bd470c36..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_salsa208.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef crypto_stream_salsa208_H -#define crypto_stream_salsa208_H - -#define crypto_stream_salsa208_amd64_xmm6_KEYBYTES 32 -#define crypto_stream_salsa208_amd64_xmm6_NONCEBYTES 8 -#ifdef __cplusplus -#include -extern std::string crypto_stream_salsa208_amd64_xmm6(size_t,const std::string &,const std::string &); -extern std::string crypto_stream_salsa208_amd64_xmm6_xor(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_stream_salsa208_amd64_xmm6(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa208_amd64_xmm6_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa208_amd64_xmm6_beforenm(unsigned char *,const unsigned char *); -extern int crypto_stream_salsa208_amd64_xmm6_afternm(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa208_amd64_xmm6_xor_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_stream_salsa208 crypto_stream_salsa208_amd64_xmm6 -#define crypto_stream_salsa208_xor crypto_stream_salsa208_amd64_xmm6_xor -#define crypto_stream_salsa208_beforenm crypto_stream_salsa208_amd64_xmm6_beforenm -#define crypto_stream_salsa208_afternm crypto_stream_salsa208_amd64_xmm6_afternm -#define crypto_stream_salsa208_xor_afternm crypto_stream_salsa208_amd64_xmm6_xor_afternm -#define crypto_stream_salsa208_KEYBYTES crypto_stream_salsa208_amd64_xmm6_KEYBYTES -#define crypto_stream_salsa208_NONCEBYTES crypto_stream_salsa208_amd64_xmm6_NONCEBYTES -#define crypto_stream_salsa208_BEFORENMBYTES crypto_stream_salsa208_amd64_xmm6_BEFORENMBYTES -#define crypto_stream_salsa208_IMPLEMENTATION "crypto_stream/salsa208/amd64_xmm6" -#ifndef crypto_stream_salsa208_amd64_xmm6_VERSION -#define crypto_stream_salsa208_amd64_xmm6_VERSION "-" -#endif -#define crypto_stream_salsa208_VERSION crypto_stream_salsa208_amd64_xmm6_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_xsalsa20.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_xsalsa20.h deleted file mode 100644 index d75268c6b..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_stream_xsalsa20.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef crypto_stream_xsalsa20_H -#define crypto_stream_xsalsa20_H - -#define crypto_stream_xsalsa20_ref_KEYBYTES 32 -#define crypto_stream_xsalsa20_ref_NONCEBYTES 24 -#ifdef __cplusplus -#include -extern std::string crypto_stream_xsalsa20_ref(size_t,const std::string &,const std::string &); -extern std::string crypto_stream_xsalsa20_ref_xor(const std::string &,const std::string &,const std::string &); -extern "C" { -#endif -extern int crypto_stream_xsalsa20_ref(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_xsalsa20_ref_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_xsalsa20_ref_beforenm(unsigned char *,const unsigned char *); -extern int crypto_stream_xsalsa20_ref_afternm(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_xsalsa20_ref_xor_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_stream_xsalsa20 crypto_stream_xsalsa20_ref -#define crypto_stream_xsalsa20_xor crypto_stream_xsalsa20_ref_xor -#define crypto_stream_xsalsa20_beforenm crypto_stream_xsalsa20_ref_beforenm -#define crypto_stream_xsalsa20_afternm crypto_stream_xsalsa20_ref_afternm -#define crypto_stream_xsalsa20_xor_afternm crypto_stream_xsalsa20_ref_xor_afternm -#define crypto_stream_xsalsa20_KEYBYTES crypto_stream_xsalsa20_ref_KEYBYTES -#define crypto_stream_xsalsa20_NONCEBYTES crypto_stream_xsalsa20_ref_NONCEBYTES -#define crypto_stream_xsalsa20_BEFORENMBYTES crypto_stream_xsalsa20_ref_BEFORENMBYTES -#define crypto_stream_xsalsa20_IMPLEMENTATION "crypto_stream/xsalsa20/ref" -#ifndef crypto_stream_xsalsa20_ref_VERSION -#define crypto_stream_xsalsa20_ref_VERSION "-" -#endif -#define crypto_stream_xsalsa20_VERSION crypto_stream_xsalsa20_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_types.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_types.h deleted file mode 100644 index b0ce96568..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_types.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef crypto_types_h -#define crypto_types_h -typedef short crypto_int16; -typedef int crypto_int32; -typedef long long crypto_int64; -typedef signed char crypto_int8; -typedef unsigned short crypto_uint16; -typedef unsigned int crypto_uint32; -typedef unsigned long long crypto_uint64; -typedef unsigned char crypto_uint8; -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_16.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_16.h deleted file mode 100644 index 6bf6ca119..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_16.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef crypto_verify_16_H -#define crypto_verify_16_H - -#define crypto_verify_16_ref_BYTES 16 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_verify_16_ref(const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_verify_16 crypto_verify_16_ref -#define crypto_verify_16_BYTES crypto_verify_16_ref_BYTES -#define crypto_verify_16_IMPLEMENTATION "crypto_verify/16/ref" -#ifndef crypto_verify_16_ref_VERSION -#define crypto_verify_16_ref_VERSION "-" -#endif -#define crypto_verify_16_VERSION crypto_verify_16_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_32.h b/ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_32.h deleted file mode 100644 index bd5fc6449..000000000 --- a/ext/bin/cnacl-osx-amd64/include/sodium/crypto_verify_32.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef crypto_verify_32_H -#define crypto_verify_32_H - -#define crypto_verify_32_ref_BYTES 32 -#ifdef __cplusplus -#include -extern "C" { -#endif -extern int crypto_verify_32_ref(const unsigned char *,const unsigned char *); -#ifdef __cplusplus -} -#endif -#define crypto_verify_32 crypto_verify_32_ref -#define crypto_verify_32_BYTES crypto_verify_32_ref_BYTES -#define crypto_verify_32_IMPLEMENTATION "crypto_verify/32/ref" -#ifndef crypto_verify_32_ref_VERSION -#define crypto_verify_32_ref_VERSION "-" -#endif -#define crypto_verify_32_VERSION crypto_verify_32_ref_VERSION - -#endif diff --git a/ext/bin/cnacl-osx-amd64/libnacl.a b/ext/bin/cnacl-osx-amd64/libnacl.a deleted file mode 100644 index d46fffab1e16a4eece6f68c1c27dd47262473703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401672 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 diff --git a/make-mac.mk b/make-mac.mk index b71ca2fe9..8ff1b7728 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -33,12 +33,6 @@ else DEFS+=-DZT_SOFTWARE_UPDATE_DEFAULT="\"download\"" endif -# Use precompiled extremely fast Salsa20/12 from "cnacl" included in ext/bin -# See https://github.com/cjdelisle/cnacl -DEFS+=-DZT_USE_LIBSODIUM -CFLAGS+=-Iext/bin/cnacl-osx-amd64/include -LIBS+=ext/bin/cnacl-osx-amd64/libnacl.a - ifeq ($(ZT_ENABLE_CLUSTER),1) DEFS+=-DZT_ENABLE_CLUSTER endif diff --git a/node/Node.cpp b/node/Node.cpp index 55fb4e72e..2b3f79968 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -50,7 +50,6 @@ Node::Node(void *uptr,void *tptr,const struct ZT_Node_Callbacks *callbacks,uint6 _RR(this), RR(&_RR), _uPtr(uptr), - _prngStreamPtr(0), _now(now), _lastPingCheck(0), _lastHousekeepingRun(0) @@ -59,19 +58,14 @@ Node::Node(void *uptr,void *tptr,const struct ZT_Node_Callbacks *callbacks,uint6 throw std::runtime_error("callbacks struct version mismatch"); memcpy(&_cb,callbacks,sizeof(ZT_Node_Callbacks)); + Utils::getSecureRandom((void *)_prngState,sizeof(_prngState)); + _online = false; memset(_expectingRepliesToBucketPtr,0,sizeof(_expectingRepliesToBucketPtr)); memset(_expectingRepliesTo,0,sizeof(_expectingRepliesTo)); memset(_lastIdentityVerification,0,sizeof(_lastIdentityVerification)); - // Use Salsa20 alone as a high-quality non-crypto PRNG - char foo[64]; - Utils::getSecureRandom(foo,64); - _prng.init(foo,foo + 32); - memset(_prngStream,0,sizeof(_prngStream)); - _prng.crypt12(_prngStream,_prngStream,sizeof(_prngStream)); - std::string idtmp(dataStoreGet(tptr,"identity.secret")); if ((!idtmp.length())||(!RR->identity.fromString(idtmp))||(!RR->identity.hasPrivate())) { TRACE("identity.secret not found, generating..."); @@ -701,10 +695,14 @@ void Node::postTrace(const char *module,unsigned int line,const char *fmt,...) uint64_t Node::prng() { - unsigned int p = (++_prngStreamPtr % ZT_NODE_PRNG_BUF_SIZE); - if (!p) - _prng.crypt12(_prngStream,_prngStream,sizeof(_prngStream)); - return _prngStream[p]; + // https://en.wikipedia.org/wiki/Xorshift#xorshift.2B + uint64_t x = _prngState[0]; + const uint64_t y = _prngState[1]; + _prngState[0] = y; + x ^= x << 23; + const uint64_t z = x ^ y ^ (x >> 17) ^ (y >> 26); + _prngState[1] = z; + return z + y; } void Node::postCircuitTestReport(const ZT_CircuitTestReport *report) diff --git a/node/Node.hpp b/node/Node.hpp index 03bd7a8cf..d25a619bd 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -50,9 +50,6 @@ #define ZT_EXPECTING_REPLIES_BUCKET_MASK1 255 #define ZT_EXPECTING_REPLIES_BUCKET_MASK2 31 -// Size of PRNG stream buffer -#define ZT_NODE_PRNG_BUF_SIZE 64 - namespace ZeroTier { class World; @@ -312,13 +309,10 @@ private: Mutex _backgroundTasksLock; - unsigned int _prngStreamPtr; - Salsa20 _prng; - uint64_t _prngStream[ZT_NODE_PRNG_BUF_SIZE]; // repeatedly encrypted with _prng to yield a high-quality non-crypto PRNG stream - uint64_t _now; uint64_t _lastPingCheck; uint64_t _lastHousekeepingRun; + volatile uint64_t _prngState[2]; bool _online; }; diff --git a/node/Salsa20.cpp b/node/Salsa20.cpp index 1e2b4b0f7..2a8025557 100644 --- a/node/Salsa20.cpp +++ b/node/Salsa20.cpp @@ -10,8 +10,6 @@ #include "Constants.hpp" #include "Salsa20.hpp" -#ifndef ZT_USE_LIBSODIUM - #define ROTATE(v,c) (((v) << (c)) | ((v) >> (32 - (c)))) #define XOR(v,w) ((v) ^ (w)) #define PLUS(v,w) ((uint32_t)((v) + (w))) @@ -1345,5 +1343,3 @@ void Salsa20::crypt20(const void *in,void *out,unsigned int bytes) } } // namespace ZeroTier - -#endif // !ZT_USE_LIBSODIUM diff --git a/node/Salsa20.hpp b/node/Salsa20.hpp index 5e4c68be2..c6af57009 100644 --- a/node/Salsa20.hpp +++ b/node/Salsa20.hpp @@ -15,77 +15,6 @@ #include "Constants.hpp" #include "Utils.hpp" -#ifdef ZT_USE_LIBSODIUM - -#include -#include - -namespace ZeroTier { - -/** - * Salsa20 stream cipher - */ -class Salsa20 -{ -public: - Salsa20() {} - ~Salsa20() { Utils::burn(_k,sizeof(_k)); } - - /** - * @param key 256-bit (32 byte) key - * @param iv 64-bit initialization vector - */ - Salsa20(const void *key,const void *iv) - { - memcpy(_k,key,32); - memcpy(&_iv,iv,8); - } - - /** - * Initialize cipher - * - * @param key Key bits - * @param iv 64-bit initialization vector - */ - inline void init(const void *key,const void *iv) - { - memcpy(_k,key,32); - memcpy(&_iv,iv,8); - } - - /** - * Encrypt/decrypt data using Salsa20/12 - * - * @param in Input data - * @param out Output buffer - * @param bytes Length of data - */ - inline void crypt12(const void *in,void *out,unsigned int bytes) - { - crypto_stream_salsa2012_xor(reinterpret_cast(out),reinterpret_cast(in),bytes,reinterpret_cast(&_iv),reinterpret_cast(_k)); - } - - /** - * Encrypt/decrypt data using Salsa20/20 - * - * @param in Input data - * @param out Output buffer - * @param bytes Length of data - */ - inline void crypt20(const void *in,void *out,unsigned int bytes) - { - crypto_stream_salsa20_xor(reinterpret_cast(out),reinterpret_cast(in),bytes,reinterpret_cast(&_iv),reinterpret_cast(_k)); - } - -private: - uint64_t _k[4]; - uint64_t _iv; -}; - -} // namespace ZeroTier - -#else // !ZT_USE_LIBSODIUM - #if (!defined(ZT_SALSA20_SSE)) && (defined(__SSE2__) || defined(__WINDOWS__)) #define ZT_SALSA20_SSE 1 #endif @@ -105,6 +34,11 @@ public: Salsa20() {} ~Salsa20() { Utils::burn(&_state,sizeof(_state)); } + /** + * If this returns true, crypt can only be done once + */ + static inline bool singleUseOnly() { return false; } + /** * @param key 256-bit (32 byte) key * @param iv 64-bit initialization vector @@ -151,6 +85,4 @@ private: } // namespace ZeroTier -#endif // ZT_USE_LIBSODIUM - #endif diff --git a/node/Utils.cpp b/node/Utils.cpp index 92d14d19b..9ce1bf050 100644 --- a/node/Utils.cpp +++ b/node/Utils.cpp @@ -177,6 +177,7 @@ void Utils::getSecureRandom(void *buf,unsigned int bytes) } randomPtr = 0; s20.crypt12(randomBuf,randomBuf,sizeof(randomBuf)); + s20.init(randomBuf,randomBuf); } ((uint8_t *)buf)[i] = randomBuf[randomPtr++]; } @@ -209,6 +210,7 @@ void Utils::getSecureRandom(void *buf,unsigned int bytes) } randomPtr = 0; s20.crypt12(randomBuf,randomBuf,sizeof(randomBuf)); + s20.init(randomBuf,randomBuf); } ((uint8_t *)buf)[i] = randomBuf[randomPtr++]; }