summaryrefslogtreecommitdiff
path: root/salsa20-crypt.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2012-09-23 21:08:28 +0200
committerNiels Möller <nisse@lysator.liu.se>2012-09-23 21:08:28 +0200
commitc9f986d22805996cf249d8e9bd406a6df06c5d88 (patch)
treef5f0a26d5783aa086f1364b029d8611d2f601eac /salsa20-crypt.c
parent3eff4cc8c5c7bc1a5569453ef312ed7afb1d11c6 (diff)
downloadnettle-c9f986d22805996cf249d8e9bd406a6df06c5d88.tar.gz
Extracted function _salsa20_core.
Diffstat (limited to 'salsa20-crypt.c')
-rw-r--r--salsa20-crypt.c35
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);