diff --git a/serpent-encrypt.c b/serpent-encrypt.c index a64a2ef6cab5934febf8528d11916431f93f0312..03ba0de0a7a4fdcfdfa0013629d5722c3ed04df4 100644 --- a/serpent-encrypt.c +++ b/serpent-encrypt.c @@ -96,7 +96,28 @@ /* FIXME: Arrange for some overlap between inputs and outputs? */ /* S1: 15 12 2 7 9 0 5 10 1 11 14 8 6 13 3 4 */ -#define SBOX1(x0, x1, x2, x3, y0, y1, y2, y3) \ +/* Original single-assignment form: + + t01 = x0 | x3; 0 + t02 = x2 ^ x3; 0 + t03 = ~ x1; 0 + t04 = x0 ^ x2; 0 + t05 = x0 | t03; 0 + t06 = x3 & t04; 0 + t07 = t01 & t02; 0 + t08 = x1 | t06; 0 + y2 = t02 ^ t05; 0 + t10 = t07 ^ t08; 0 + t11 = t01 ^ t10; 0 + t12 = y2 ^ t11; 0 + t13 = x1 & x3; 0 + y3 = ~ t10; + y1 = t13 ^ t12; 0 + t16 = t10 | y1; 0 + t17 = t05 & t16; 0 + y0 = x2 ^ t17; 0 +*/ +#define SBOX1(x0, x1, x2, x3, y0, y1, y2, y3) \ do { \ y1 = x0 | x3; \ y2 = x2 ^ x3; \ @@ -112,7 +133,7 @@ x0 ^= y2; \ y1 = x1 & x3; \ y1 ^= x0; \ - x3 = y3 | y1; \ + x3 = y1 | y3; \ y3 = ~ y3; \ y0 &= x3; \ y0 ^= x2; \