From 9474fe42b7d5c10c21345cf26831c0087745d38d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Fri, 10 Jun 2011 11:26:34 +0200
Subject: [PATCH] (SBOX5): Renamed arguments. Eliminated temporaries.

Rev: nettle/ChangeLog:1.184
Rev: nettle/serpent-encrypt.c:1.9
---
 ChangeLog         |  5 ++++
 serpent-encrypt.c | 59 ++++++++++++++++++++++++++++++-----------------
 2 files changed, 43 insertions(+), 21 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index bf273594..75f13e2a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-10  Niels M�ller  <nisse@lysator.liu.se>
+
+	* serpent-encrypt.c (SBOX5): Renamed arguments. Eliminated
+	temporaries.
+
 2011-06-09  Niels M�ller  <nisse@lysator.liu.se>
 
 	* serpent-encrypt.c (SBOX4): Renamed arguments. Eliminated
diff --git a/serpent-encrypt.c b/serpent-encrypt.c
index f86f8f95..5b9dab02 100644
--- a/serpent-encrypt.c
+++ b/serpent-encrypt.c
@@ -231,27 +231,44 @@
   } while (0)
 
 /* S5: 15  5  2 11  4 10  9 12  0  3 14  8 13  6  7  1 */
-#define SBOX5(type, a, b, c, d, w, x, y, z)	\
-  do { \
-    type t02, t03, t04, t05, t07, t08, t09; \
-    type t10, t11, t12, t13, t14, t01; \
-    t01 = b   ^ d  ; \
-    t02 = b   | d  ; \
-    t03 = a   & t01; \
-    t04 = c   ^ t02; \
-    t05 = t03 ^ t04; \
-    w   =     ~ t05; \
-    t07 = a   ^ t01; \
-    t08 = d   | w  ; \
-    t09 = b   | t05; \
-    t10 = d   ^ t08; \
-    t11 = b   | t07; \
-    t12 = t03 | w  ; \
-    t13 = t07 | t10; \
-    t14 = t01 ^ t11; \
-    y   = t09 ^ t13; \
-    x   = t07 ^ t08; \
-    z   = t12 ^ t14; \
+/* Original single-assignment form:
+    t01 = x1  ^ x3;
+    t02 = x1  | x3;
+    t03 = x0  & t01;
+    t04 = x2  ^ t02;
+    t05 = t03 ^ t04;
+    y0  =     ~ t05;
+    t07 = x0  ^ t01;
+    t08 = x3  | y0;
+    t09 = x1  | t05;
+    t10 = x3  ^ t08;
+    t11 = x1  | t07;
+    t12 = t03 | y0;
+    t13 = t07 | t10;
+    t14 = t01 ^ t11;
+    y2  = t09 ^ t13;
+    y1  = t07 ^ t08;
+    y3  = t12 ^ t14;
+*/
+#define SBOX5(type, x0, x1, x2, x3, y0, y1, y2, y3)	\
+  do {							\
+    y0  = x1 | x3;					\
+    y0 ^= x2;						\
+    x2  = x1 ^ x3;					\
+    y2  = x0 ^ x2;					\
+    x0 &= x2;						\
+    y0 ^= x0;						\
+    y3  = x1 | y2;					\
+    x1 |= y0;						\
+    y0  = ~y0;						\
+    x0 |= y0;						\
+    y3 ^= x2;						\
+    y3 ^= x0;						\
+    y1  = x3 | y0;					\
+    x3 ^= y1;						\
+    y1 ^= y2;						\
+    y2 |= x3;						\
+    y2 ^= x1;						\
   } while (0)
 
 /* S6:  7  2 12  5  8  4  6 11 14  9  1 15 13  3 10  0 */
-- 
GitLab