Remove debug printf
[heimdal.git] / lib / hcrypto / gen-des.pl
bloba71a6825d05cc7eaf09affd22cd3ef08f70dce6c
1 #!/usr/pkg/bin/perl
3 # $Id$
5 use strict;
7 print "/* GENERATE FILE from gen-des.pl, do not edit */\n\n";
9 my $gen = 1;
11 sub gen_pattern
13 my $n = shift;
14 my $r = shift;
15 my $a = shift;
16 my $o = shift;
17 my $s = shift;
18 print "/* $n bit pattern ";
19 foreach my $k (@$a) {
20 print "$k ";
22 print "*/\n";
23 print "static int $n\[", $r + 1, "\] = {\n ";
24 foreach my $i (0..$r) {
25 my $j = 0;
26 my $b = 1;
27 foreach my $k (reverse @$a) {
28 if ($i & $b) {
29 $j |= ($s >>($k - $o - 1));
31 $b = $b << 1;
33 printf "0x%08x", $j;
34 print ", " if ($i != $r);
35 if (($i % 4) == 3) {
36 print "\n";
37 print " " if ($i != $r);
40 print "};\n";
43 if ($gen) {
44 gen_pattern("pc1_c_3", 7, [ 5, 13, 21 ], 0, 0x1000000);
45 gen_pattern("pc1_c_4", 15, [ 1, 9, 17, 25 ], 0, 0x1000000);
46 gen_pattern("pc1_d_3", 7, [ 49, 41, 33 ], 32, 0x1000000);
47 gen_pattern("pc1_d_4", 15, [ 57, 53, 45, 37 ], 32, 0x1000000);
49 gen_pattern("pc2_c_1", 63, [ 5, 24, 7, 16, 6, 10 ], 0, 0x800000);
50 gen_pattern("pc2_c_2", 63, [ 20, 18, 12, 3, 15, 23 ], 0, 0x800000);
51 gen_pattern("pc2_c_3", 63, [ 1, 9, 19, 2, 14, 22 ], 0, 0x800000);
52 gen_pattern("pc2_c_4", 63, [ 11, 13, 4, 17, 21, 8 ], 0, 0x800000);
54 gen_pattern("pc2_d_1", 63, [ 51, 35, 31, 52, 39, 45 ], 28, 0x800000);
55 gen_pattern("pc2_d_2", 63, [ 50, 32, 43, 36, 29, 48 ], 28, 0x800000);
56 gen_pattern("pc2_d_3", 63, [ 41, 38, 47, 33, 40, 42 ], 28, 0x800000);
57 gen_pattern("pc2_d_4", 63, [ 49, 37, 30, 46, 34, 44 ], 28, 0x800000);
60 sub
61 pbox_mutation
63 my $n = shift;
64 my $res = 0;
66 my @pbox = (
67 16, 7, 20, 21,
68 29, 12, 28, 17,
69 1, 15, 23, 26,
70 5, 18, 31, 10,
71 2, 8, 24, 14,
72 32, 27, 3, 9,
73 19, 13, 30, 6,
74 22, 11, 4, 25
77 foreach my $i (0..31) {
78 if ($n & (1 << ($pbox[$i] - 1))) {
79 # print "$i ", ($pbox[$i] - 1), "\n";
80 $res |= 1 << $i;
84 return $res;
88 my @S1 = (
89 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
90 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
91 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
92 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,
94 my @S2 = (
95 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
96 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
97 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
98 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,
100 my @S3 = (
101 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
102 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
103 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
104 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,
106 my @S4 = (
107 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
108 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
109 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
110 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,
112 my @S5 = (
113 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
114 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
115 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
116 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,
118 my @S6 = (
119 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
120 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
121 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
122 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,
124 my @S7 = (
125 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
126 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
127 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
128 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,
131 my @S8 = (
132 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
133 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
134 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
135 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11,
138 my @SBox = ( \@S1, \@S2, \@S3, \@S4, \@S5, \@S6, \@S7, \@S8 );
141 one_num_in_one_sbox
143 my $i = shift;
144 my $n = shift;
145 my $r = shift;
147 my $index = (($n & 1) << 4) | (($n & 0x20)) |
148 (($n >> 1) & 0x1) << 0 |
149 (($n >> 2) & 0x1) << 1 |
150 (($n >> 3) & 0x1) << 2 |
151 (($n >> 4) & 0x1) << 3;
153 die "argh" if ($index > 63 || $index < 0);
155 my $S = $SBox[$i - 1];
156 my $val = $$S[$index];
158 my $res = $val << (($i - 1) * 4);
160 my $p = &pbox_mutation($res);
162 print " $r ";
164 # $p = ($p >> $r) | ($p << (32 - $r - 1));
166 printf "0x%08x", $p;
167 print ", " if ($n != 63 or 1);
168 if (($n % 4) == 3) {
169 print " /* $i */" if ($n == 3);
170 print "\n";
171 print "\t" if ($n != 63);
176 one_sbox
178 my $i = shift;
179 my $s = 0;
181 # print "static uint32_t sbox". $i ."[] = {\n\t";
182 print "\t";
183 foreach my $n (0..63) {
184 one_num_in_one_sbox($i, $n, $s);
186 print "\n";
187 # print "};\n";
190 if ($gen and 0) {
191 foreach my $sbox (7, 1, 3, 5, 4, 6, 8, 2) {
192 one_sbox($sbox, 1);
196 #my $num = 1;
197 #printf "pbox: %d -> 0x%08x\n", $num, pbox_mutation($num);
198 #$num = 0xc000000;
199 #printf "pbox: 0x%08x -> 0x%08x\n", $num, pbox_mutation($num);
201 print "static unsigned char odd_parity[256] = { \n";
202 foreach my $i (0..255) {
203 my $num = 0;
204 foreach my $b (1..7) {
205 $num++ if (($i >> $b) & 1);
207 my $t;
208 if (($num & 1) == 0) {
209 $t = $i | 1;
210 } else {
211 $t = 0xfe & $i;
213 printf "%3d,", $t;
214 printf "\n" if (($i % 16) == 15);
217 print " };\n";