diff options
author | Niels Möller <nisse@lysator.liu.se> | 2012-09-23 21:08:28 +0200 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2012-09-23 21:08:28 +0200 |
commit | c9f986d22805996cf249d8e9bd406a6df06c5d88 (patch) | |
tree | f5f0a26d5783aa086f1364b029d8611d2f601eac /salsa20-crypt.c | |
parent | 3eff4cc8c5c7bc1a5569453ef312ed7afb1d11c6 (diff) | |
download | nettle-c9f986d22805996cf249d8e9bd406a6df06c5d88.tar.gz |
Extracted function _salsa20_core.
Diffstat (limited to 'salsa20-crypt.c')
-rw-r--r-- | salsa20-crypt.c | 35 |
1 files changed, 1 insertions, 34 deletions
diff --git a/salsa20-crypt.c b/salsa20-crypt.c index eae3cea5..b061b4b8 100644 --- a/salsa20-crypt.c +++ b/salsa20-crypt.c @@ -40,21 +40,6 @@ #include "macros.h" #include "memxor.h" -#ifdef WORDS_BIGENDIAN -#define LE_SWAP32(v) \ - ((ROTL32(8, v) & 0x00FF00FFUL) | \ - (ROTL32(24, v) & 0xFF00FF00UL)) -#else -#define LE_SWAP32(v) (v) -#endif - -#define QROUND(x0, x1, x2, x3) do { \ - x1 ^= ROTL32(7, x0 + x3); \ - x2 ^= ROTL32(9, x1 + x0); \ - x3 ^= ROTL32(13, x2 + x1); \ - x0 ^= ROTL32(18, x3 + x2); \ - } while(0) - void salsa20_crypt(struct salsa20_ctx *ctx, unsigned length, @@ -67,26 +52,8 @@ salsa20_crypt(struct salsa20_ctx *ctx, for (;;) { uint32_t x[_SALSA20_INPUT_LENGTH]; - int i; - memcpy (x, ctx->input, sizeof(x)); - for (i = 0;i < 10;i ++) - { - QROUND(x[0], x[4], x[8], x[12]); - QROUND(x[5], x[9], x[13], x[1]); - QROUND(x[10], x[14], x[2], x[6]); - QROUND(x[15], x[3], x[7], x[11]); - QROUND(x[0], x[1], x[2], x[3]); - QROUND(x[5], x[6], x[7], x[4]); - QROUND(x[10], x[11], x[8], x[9]); - QROUND(x[15], x[12], x[13], x[14]); - } - - for (i = 0;i < _SALSA20_INPUT_LENGTH;++i) - { - uint32_t t = x[i] + ctx->input[i]; - x[i] = LE_SWAP32 (t); - } + _salsa20_core (x, ctx->input, 20); ctx->input[9] += (++ctx->input[8] == 0); |