diff --git a/misc/.cvsignore b/misc/.cvsignore new file mode 100644 index 0000000000000000000000000000000000000000..a1363379944a5745ceb49c0e493d80eb9335c79a --- /dev/null +++ b/misc/.cvsignore @@ -0,0 +1 @@ +*.pdf diff --git a/misc/.gitignore b/misc/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..2bd18fa44c50410f251ef0996354f6ef19fcd381 --- /dev/null +++ b/misc/.gitignore @@ -0,0 +1 @@ +/*.pdf diff --git a/misc/Makefile b/misc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6cda206298a1e6372797500634aa7005d592f15a --- /dev/null +++ b/misc/Makefile @@ -0,0 +1,6 @@ +# Nothing here is built or distributed by default. + +all: serpent-sbox3.pdf serpent-sbox4.pdf serpent-sbox5.pdf + +%.pdf: %.dot + dot -Tpdf $< -o $@ diff --git a/misc/serpent-sbox3.dot b/misc/serpent-sbox3.dot new file mode 100644 index 0000000000000000000000000000000000000000..7fef079f0a13028430caaec7fd5d60d3452294e4 --- /dev/null +++ b/misc/serpent-sbox3.dot @@ -0,0 +1,20 @@ +strict digraph sbox3 { + x0 -> t01; x2 -> t01; // t01 = x0 ^ x2; + x0 -> t02; x3 -> t02; // t02 = x0 | x3; + x0 -> t03; x3 -> t03; // t03 = x0 & x3; + t01 -> t04; t02 -> t04; // t04 = t01 & t02; + x1 -> t05; t03 -> t05; // t05 = x1 | t03; + x0 -> t06; x1 -> t06; // t06 = x0 & x1; + x3 -> t07; t04 -> t07; // t07 = x3 ^ t04; + x2 -> t08; t06 -> t08; // t08 = x2 | t06; + x1 -> t09; t07 -> t09; // t09 = x1 ^ t07; + x3 -> t10; t05 -> t10; // t10 = x3 & t05; + t02 -> t11; t10 -> t11; // t11 = t02 ^ t10; + t08 -> y3; t09 -> y3; // y3 = t08 ^ t09; + x3 -> t13; y3 -> t13; // t13 = x3 | y3; + x0 -> t14; t07 -> t14; // t14 = x0 | t07; + x1 -> t15; t13 -> t15; // t15 = x1 & t13; + t08 -> y2; t11 -> y2; // y2 = t08 ^ t11; + t14 -> y0; t15 -> y0; // y0 = t14 ^ t15; + t05 -> y1; t04 -> y1; // y1 = t05 ^ t04; +} diff --git a/misc/serpent-sbox4.dot b/misc/serpent-sbox4.dot new file mode 100644 index 0000000000000000000000000000000000000000..d3e15f85f2a532e60ce97649205790d2af7327d0 --- /dev/null +++ b/misc/serpent-sbox4.dot @@ -0,0 +1,56 @@ +strict digraph sbox4 { + x0 [shape=box, label="\N"]; + x1 [shape=box, label="\N"]; + x2 [shape=box, label="\N"]; + x3 [shape=box, label="\N"]; + + t02 [label="\N\ny2\n1"]; + t01 [label="\N\ny3\n2"]; + + t03 [label="\N\ny2\n3"]; + t06 [label="\N\ny3\n4"]; + + t04 [label="\N\ny0\n5"]; + t05 [label="\N\nx3\n6"]; + t15 [label="\N\nx0\n7"]; + + t11 [label="\N\nx1\n8"]; + + t10 [label="\N\nx2\n9"]; + + y3 [shape=box, label="\N\n10"]; + + t13 [label="\N\ny2\n11"]; + + t08 [label="\N\ny1\n12"]; + + y2 [shape=box, label="\N\n13"]; + + t12 [label="\N\ny1\n14"]; + t16 [label="\N\ny1\n15"]; + y1 [shape=box, label="\N\n16"]; + + t09 [label="\N\ny0\n17"]; + t14 [label="\N\ny0\n18"]; + y0 [shape=box, label="\N\n19"]; + + x0 -> t01; x1 -> t01; // t01 = x0 | x1; + x1 -> t02; x2 -> t02; // t02 = x1 | x2; + x0 -> t03; t02 -> t03; // t03 = x0 ^ t02; + x1 -> t04; x3 -> t04; // t04 = x1 ^ x3; + x3 -> t05; t03 -> t05; // t05 = x3 | t03; + x3 -> t06; t01 -> t06; // t06 = x3 & t01; + t03 -> y3; t06 -> y3; // y3 = t03 ^ t06; + y3 -> t08; t04 -> t08; // t08 = y3 & t04; + t04 -> t09; t05 -> t09; // t09 = t04 & t05; + x2 -> t10; t06 -> t10; // t10 = x2 ^ t06; + x1 -> t11; x2 -> t11; // t11 = x1 & x2; + t04 -> t12; t08 -> t12; // t12 = t04 ^ t08; + t11 -> t13; t03 -> t13; // t13 = t11 | t03; + t10 -> t14; t09 -> t14; // t14 = t10 ^ t09; + x0 -> t15; t05 -> t15; // t15 = x0 & t05; + t11 -> t16; t12 -> t16; // t16 = t11 | t12; + t13 -> y2; t08 -> y2; // y2 = t13 ^ t08; + t15 -> y1; t16 -> y1; // y1 = t15 ^ t16; + t14 -> y0; // y0 = ~ t14; +} diff --git a/misc/serpent-sbox5.dot b/misc/serpent-sbox5.dot new file mode 100644 index 0000000000000000000000000000000000000000..8c8d39803f9de0710e5057f993bb545bab9cd520 --- /dev/null +++ b/misc/serpent-sbox5.dot @@ -0,0 +1,42 @@ +strict digraph sbox5 { + x0 [shape=box]; + x1 [shape=box]; + x2 [shape=box]; + x3 [shape=box]; + + t02 [label="\N\ny0\n1"]; + t04 [label="\N\ny0\n2"]; + t01 [label="\N\nx2\n3"]; + t07 [label="\N\ny2\n4"]; + t03 [label="\N\nx0\n5"]; + t05 [label="\N\ny0\n6"]; + t11 [label="\N\ny3\n7"]; + t09 [label="\N\nx1\n8"]; + y0 [shape=box, label="\N\n9"]; + t12 [label="\N\nx0\n10"]; + t14 [label="\N\ny3\n11"]; + y3 [shape=box, label="\N\n12"]; + t08 [label="\N\ny1\n13"]; + t10 [label="\N\nx3\n14"]; + y1 [shape=box, label="\N\n15"]; + t13 [label="\N\ny2\n16"]; + y2 [shape=box, label="\N\n17"]; + + x1 -> t01; x3 -> t01; // t01 = x1 ^ x3; + x1 -> t02; x3 -> t02; // t02 = x1 | x3; + x0 -> t03; t01 -> t03; // t03 = x0 & t01; + x2 -> t04; t02 -> t04; // t04 = x2 ^ t02; + t03 -> t05; t04 -> t05; // t05 = t03 ^ t04; + t05 -> y0; // y0 = ~ t05; + x0 -> t07; t01 -> t07; // t07 = x0 ^ t01; + x3 -> t08; y0 -> t08; // t08 = x3 | y0; + x1 -> t09; t05 -> t09; // t09 = x1 | t05; + x3 -> t10; t08 -> t10; // t10 = x3 ^ t08; + x1 -> t11; t07 -> t11; // t11 = x1 | t07; + t03 -> t12; y0 -> t12; // t12 = t03 | y0; + t07 -> t13; t10 -> t13; // t13 = t07 | t10; + t01 -> t14; t11 -> t14; // t14 = t01 ^ t11; + t09 -> y2; t13 -> y2; // y2 = t09 ^ t13; + t07 -> y1; t08 -> y1; // y1 = t07 ^ t08; + t12 -> y3; t14 -> y3; // y3 = t12 ^ t14; +}