summaryrefslogtreecommitdiff
path: root/node/Salsa20.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2017-04-17 16:43:03 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2017-04-17 16:43:03 -0700
commitdf48738ac96a6eab5e3baa03f6dd1fb62bdc8040 (patch)
tree703957cc758a396cef0416bfe8571a47a8f4bebf /node/Salsa20.cpp
parentd8f5cfdee4665451960505d375bd7a20fb0d6f04 (diff)
downloadinfinitytier-df48738ac96a6eab5e3baa03f6dd1fb62bdc8040.tar.gz
infinitytier-df48738ac96a6eab5e3baa03f6dd1fb62bdc8040.zip
Enable use of NaCl for faster X64 Salsa20 implementations. Also include binary for OSX for easy build. Blazingly fast.
Diffstat (limited to 'node/Salsa20.cpp')
-rw-r--r--node/Salsa20.cpp29
1 files changed, 10 insertions, 19 deletions
diff --git a/node/Salsa20.cpp b/node/Salsa20.cpp
index 1a4641f7..1e2b4b0f 100644
--- a/node/Salsa20.cpp
+++ b/node/Salsa20.cpp
@@ -10,6 +10,8 @@
#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)))
@@ -66,8 +68,7 @@ static const _s20sseconsts _S20SSECONSTANTS;
namespace ZeroTier {
-void Salsa20::init(const void *key,unsigned int kbits,const void *iv)
- throw()
+void Salsa20::init(const void *key,const void *iv)
{
#ifdef ZT_SALSA20_SSE
const uint32_t *k = (const uint32_t *)key;
@@ -78,14 +79,9 @@ void Salsa20::init(const void *key,unsigned int kbits,const void *iv)
_state.i[10] = k[1];
_state.i[7] = k[2];
_state.i[4] = k[3];
- if (kbits == 256) {
- k += 4;
- _state.i[1] = 0x3320646e;
- _state.i[2] = 0x79622d32;
- } else {
- _state.i[1] = 0x3120646e;
- _state.i[2] = 0x79622d36;
- }
+ k += 4;
+ _state.i[1] = 0x3320646e;
+ _state.i[2] = 0x79622d32;
_state.i[15] = k[0];
_state.i[12] = k[1];
_state.i[9] = k[2];
@@ -95,19 +91,14 @@ void Salsa20::init(const void *key,unsigned int kbits,const void *iv)
_state.i[5] = 0;
_state.i[8] = 0;
#else
- const char *constants;
+ const char *const constants = "expand 32-byte k";
const uint8_t *k = (const uint8_t *)key;
_state.i[1] = U8TO32_LITTLE(k + 0);
_state.i[2] = U8TO32_LITTLE(k + 4);
_state.i[3] = U8TO32_LITTLE(k + 8);
_state.i[4] = U8TO32_LITTLE(k + 12);
- if (kbits == 256) { /* recommended */
- k += 16;
- constants = "expand 32-byte k";
- } else { /* kbits == 128 */
- constants = "expand 16-byte k";
- }
+ k += 16;
_state.i[5] = U8TO32_LITTLE(constants + 4);
_state.i[6] = U8TO32_LITTLE(((const uint8_t *)iv) + 0);
_state.i[7] = U8TO32_LITTLE(((const uint8_t *)iv) + 4);
@@ -124,7 +115,6 @@ void Salsa20::init(const void *key,unsigned int kbits,const void *iv)
}
void Salsa20::crypt12(const void *in,void *out,unsigned int bytes)
- throw()
{
uint8_t tmp[64];
const uint8_t *m = (const uint8_t *)in;
@@ -624,7 +614,6 @@ void Salsa20::crypt12(const void *in,void *out,unsigned int bytes)
}
void Salsa20::crypt20(const void *in,void *out,unsigned int bytes)
- throw()
{
uint8_t tmp[64];
const uint8_t *m = (const uint8_t *)in;
@@ -1356,3 +1345,5 @@ void Salsa20::crypt20(const void *in,void *out,unsigned int bytes)
}
} // namespace ZeroTier
+
+#endif // !ZT_USE_LIBSODIUM