]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
New macro QROUND.
authorNiels Möller <nisse@lysator.liu.se>
Sun, 1 Apr 2012 18:14:35 +0000 (20:14 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Sun, 1 Apr 2012 18:14:35 +0000 (20:14 +0200)
ChangeLog
salsa20.c

index d7ca20f746d44dcc30c31a14becb425461d5769d..29e6283d759186d70d0e4e3df91c03639944ec1b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 2012-04-01  Niels Möller  <nisse@lysator.liu.se>
 
        * salsa20.c (LE_SWAP32): Typo fix for big-endian case.
+       (QROUND): New macro.
+       (salsa20_hash): Use it.
 
 2012-03-31  Niels Möller  <nisse@lysator.liu.se>
 
index 927cefc8e8d2888c235f6ac7216c6ea7d246ad14..19c82056f9fb47c28c91d080d6667e808c0937ce 100644 (file)
--- a/salsa20.c
+++ b/salsa20.c
 #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)
+
 static void
 salsa20_hash(uint32_t *output, const uint32_t *input)
 {
@@ -58,38 +65,15 @@ salsa20_hash(uint32_t *output, const uint32_t *input)
   memcpy (x, input, sizeof (x));
 
   for (i = 20;i > 0;i -= 2) {
-    x[ 4] ^= ROTL32( 7, x[ 0] + x[12]);
-    x[ 8] ^= ROTL32( 9, x[ 4] + x[ 0]);
-    x[12] ^= ROTL32(13, x[ 8] + x[ 4]);
-    x[ 0] ^= ROTL32(18, x[12] + x[ 8]);
-    x[ 9] ^= ROTL32( 7, x[ 5] + x[ 1]);
-    x[13] ^= ROTL32( 9, x[ 9] + x[ 5]);
-    x[ 1] ^= ROTL32(13, x[13] + x[ 9]);
-    x[ 5] ^= ROTL32(18, x[ 1] + x[13]);
-    x[14] ^= ROTL32( 7, x[10] + x[ 6]);
-    x[ 2] ^= ROTL32( 9, x[14] + x[10]);
-    x[ 6] ^= ROTL32(13, x[ 2] + x[14]);
-    x[10] ^= ROTL32(18, x[ 6] + x[ 2]);
-    x[ 3] ^= ROTL32( 7, x[15] + x[11]);
-    x[ 7] ^= ROTL32( 9, x[ 3] + x[15]);
-    x[11] ^= ROTL32(13, x[ 7] + x[ 3]);
-    x[15] ^= ROTL32(18, x[11] + x[ 7]);
-    x[ 1] ^= ROTL32( 7, x[ 0] + x[ 3]);
-    x[ 2] ^= ROTL32( 9, x[ 1] + x[ 0]);
-    x[ 3] ^= ROTL32(13, x[ 2] + x[ 1]);
-    x[ 0] ^= ROTL32(18, x[ 3] + x[ 2]);
-    x[ 6] ^= ROTL32( 7, x[ 5] + x[ 4]);
-    x[ 7] ^= ROTL32( 9, x[ 6] + x[ 5]);
-    x[ 4] ^= ROTL32(13, x[ 7] + x[ 6]);
-    x[ 5] ^= ROTL32(18, x[ 4] + x[ 7]);
-    x[11] ^= ROTL32( 7, x[10] + x[ 9]);
-    x[ 8] ^= ROTL32( 9, x[11] + x[10]);
-    x[ 9] ^= ROTL32(13, x[ 8] + x[11]);
-    x[10] ^= ROTL32(18, x[ 9] + x[ 8]);
-    x[12] ^= ROTL32( 7, x[15] + x[14]);
-    x[13] ^= ROTL32( 9, x[12] + x[15]);
-    x[14] ^= ROTL32(13, x[13] + x[12]);
-    x[15] ^= ROTL32(18, x[14] + x[13]);
+    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)
     {