Commit aecde8cd authored by Niels Möller's avatar Niels Möller
Browse files

(SBOX0_INVERSE): Eliminated temporaries.

Rev: nettle/serpent-decrypt.c:1.4
parent 0b166f3c
...@@ -66,33 +66,49 @@ ...@@ -66,33 +66,49 @@
(GPL), although some comments in the code still say otherwise. You (GPL), although some comments in the code still say otherwise. You
are welcome to use Serpent for any application." */ are welcome to use Serpent for any application." */
/* FIXME: Except when used within the key schedule, the inputs are not /* Original single-assignment form:
used after the substitution, and hence we could allow them to be
destroyed. Can this freedom be used to optimize the sboxes? */ t01 = x2 ^ x3;
t02 = x0 | x1;
t03 = x1 | x2;
t04 = x2 & t01;
t05 = t02 ^ t01;
t06 = x0 | t04;
y2 = ~ t05;
t08 = x1 ^ x3;
t09 = t03 & t08;
t10 = x3 | y2;
y1 = t09 ^ t06;
t12 = x0 | t05;
t13 = y1 ^ t12;
t14 = t03 ^ t10;
t15 = x0 ^ x2;
y3 = t14 ^ t13;
t17 = t05 & t13;
t18 = t14 | t17;
y0 = t15 ^ t18;
*/
#define SBOX0_INVERSE(type, x0, x1, x2, x3, y0, y1, y2, y3) \ #define SBOX0_INVERSE(type, x0, x1, x2, x3, y0, y1, y2, y3) \
do { \ do { \
type t02, t03, t04, t05, t06, t08, t09, t10; \ y0 = x0 ^ x2; \
type t12, t13, t14, t15, t17, t18, t01; \ y2 = x0 | x1; \
t01 = x2 ^ x3; \ y1 = x2 ^ x3; \
t02 = x0 | x1; \ y2 ^= y1; \
t03 = x1 | x2; \ y1 &= x2; \
t04 = x2 & t01; \ x2 |= x1; \
t05 = t02 ^ t01; \ x1 ^= x3; \
t06 = x0 | t04; \ y1 |= x0; \
y2 = ~ t05; \ x1 &= x2; \
t08 = x1 ^ x3; \ y1 ^= x1; \
t09 = t03 & t08; \ x0 |= y2; \
t10 = x3 | y2; \ x0 ^= y1; \
y1 = t09 ^ t06; \ x1 = y2 & x0; \
t12 = x0 | t05; \ y2 = ~ y2; \
t13 = y1 ^ t12; \ x3 |= y2; \
t14 = t03 ^ t10; \ x3 ^= x2; \
t15 = x0 ^ x2; \ y3 = x3 ^ x0; \
y3 = t14 ^ t13; \ x1 |= x3; \
t17 = t05 & t13; \ y0 ^= x1; \
t18 = t14 | t17; \
y0 = t15 ^ t18; \
} while (0) } while (0)
#define SBOX1_INVERSE(type, x0, x1, x2, x3, y0, y1, y2, y3) \ #define SBOX1_INVERSE(type, x0, x1, x2, x3, y0, y1, y2, y3) \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment