diff --git a/serpent-encrypt.c b/serpent-encrypt.c index d46c48d763f81d0716b8fc5d29ed200cd66dbe77..78321912e7b33607fca9d52e07cfa4350611e23c 100644 --- a/serpent-encrypt.c +++ b/serpent-encrypt.c @@ -141,6 +141,27 @@ } while (0) /* S3: 0 15 11 8 12 9 6 3 13 1 2 4 10 7 5 14 */ +/* Original single-assignment form: + + t01 = x0 ^ x2; + t02 = x0 | x3; + t03 = x0 & x3; + t04 = t01 & t02; + t05 = x1 | t03; + t06 = x0 & x1; + t07 = x3 ^ t04; + t08 = x2 | t06; + t09 = x1 ^ t07; + t10 = x3 & t05; + t11 = t02 ^ t10; + y3 = t08 ^ t09; + t13 = x3 | y3; + t14 = x0 | t07; + t15 = x1 & t13; + y2 = t08 ^ t11; + y0 = t14 ^ t15; + y1 = t05 ^ t04; +*/ #define SBOX3(type, x0, x1, x2, x3, y0, y1, y2, y3) \ do { \ y2 = x0 ^ x2; \ @@ -163,30 +184,52 @@ y0 = x0 ^ x1; \ } while (0) + /* S4: 1 15 8 3 12 0 11 6 2 5 4 10 9 14 7 13 */ +/* Original single-assignment form: + t01 = x0 | x1; + t02 = x1 | x2; + t03 = x0 ^ t02; + t04 = x1 ^ x3; + t05 = x3 | t03; + t06 = x3 & t01; + y3 = t03 ^ t06; + t08 = y3 & t04; + t09 = t04 & t05; + t10 = x2 ^ t06; + t11 = x1 & x2; + t12 = t04 ^ t08; + t13 = t11 | t03; + t14 = t10 ^ t09; + t15 = x0 & t05; + t16 = t11 | t12; + y2 = t13 ^ t08; + y1 = t15 ^ t16; + y0 = ~ t14; +*/ #define SBOX4(type, x0, x1, x2, x3, y0, y1, y2, y3) \ do { \ type t02, t03, t04, t05, t06, t08, t09; \ type t10, t11, t12, t13, t14, t15, t16, t01; \ - t01 = x0 | x1 ; \ - t02 = x1 | x2 ; \ - t03 = x0 ^ t02; \ - t04 = x1 ^ x3 ; \ - t05 = x3 | t03; \ - t06 = x3 & t01; \ - y3 = t03 ^ t06; \ - t08 = y3 & t04; \ + t01 = x0 | x1; \ + t02 = x1 | x2; \ + t03 = x0 ^ t02; \ + t04 = x1 ^ x3; \ + t05 = x3 | t03; \ + t06 = x3 & t01; \ + y3 = t03 ^ t06; \ + t08 = y3 & t04; \ t09 = t04 & t05; \ - t10 = x2 ^ t06; \ - t11 = x1 & x2 ; \ + t10 = x2 ^ t06; \ + t11 = x1 & x2; \ t12 = t04 ^ t08; \ t13 = t11 | t03; \ t14 = t10 ^ t09; \ - t15 = x0 & t05; \ + t15 = x0 & t05; \ t16 = t11 | t12; \ - y2 = t13 ^ t08; \ - y1 = t15 ^ t16; \ - y0 = ~ t14; \ + y2 = t13 ^ t08; \ + y1 = t15 ^ t16; \ + y0 = ~ t14; \ } while (0) /* S5: 15 5 2 11 4 10 9 12 0 3 14 8 13 6 7 1 */