Import of old SSLeay release: SSLeay 0.8.1b
[openssl.git] / crypto / des / testdes.pl
1 #!/usr/local/bin/perl
2
3 # des.pl tesing code
4
5 require 'des.pl';
6
7 $num_tests=34;
8 @key_data=(
9         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
10         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
11         0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
12         0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
13         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
14         0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
15         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
16         0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,
17         0x7C,0xA1,0x10,0x45,0x4A,0x1A,0x6E,0x57,
18         0x01,0x31,0xD9,0x61,0x9D,0xC1,0x37,0x6E,
19         0x07,0xA1,0x13,0x3E,0x4A,0x0B,0x26,0x86,
20         0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E,
21         0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6,
22         0x01,0x13,0xB9,0x70,0xFD,0x34,0xF2,0xCE,
23         0x01,0x70,0xF1,0x75,0x46,0x8F,0xB5,0xE6,
24         0x43,0x29,0x7F,0xAD,0x38,0xE3,0x73,0xFE,
25         0x07,0xA7,0x13,0x70,0x45,0xDA,0x2A,0x16,
26         0x04,0x68,0x91,0x04,0xC2,0xFD,0x3B,0x2F,
27         0x37,0xD0,0x6B,0xB5,0x16,0xCB,0x75,0x46,
28         0x1F,0x08,0x26,0x0D,0x1A,0xC2,0x46,0x5E,
29         0x58,0x40,0x23,0x64,0x1A,0xBA,0x61,0x76,
30         0x02,0x58,0x16,0x16,0x46,0x29,0xB0,0x07,
31         0x49,0x79,0x3E,0xBC,0x79,0xB3,0x25,0x8F,
32         0x4F,0xB0,0x5E,0x15,0x15,0xAB,0x73,0xA7,
33         0x49,0xE9,0x5D,0x6D,0x4C,0xA2,0x29,0xBF,
34         0x01,0x83,0x10,0xDC,0x40,0x9B,0x26,0xD6,
35         0x1C,0x58,0x7F,0x1C,0x13,0x92,0x4F,0xEF,
36         0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
37         0x1F,0x1F,0x1F,0x1F,0x0E,0x0E,0x0E,0x0E,
38         0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE,
39         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
40         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
41         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
42         0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,
43         );
44
45 @plain_data=(
46         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
47         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
48         0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
49         0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
50         0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
51         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
52         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
54         0x01,0xA1,0xD6,0xD0,0x39,0x77,0x67,0x42,
55         0x5C,0xD5,0x4C,0xA8,0x3D,0xEF,0x57,0xDA,
56         0x02,0x48,0xD4,0x38,0x06,0xF6,0x71,0x72,
57         0x51,0x45,0x4B,0x58,0x2D,0xDF,0x44,0x0A,
58         0x42,0xFD,0x44,0x30,0x59,0x57,0x7F,0xA2,
59         0x05,0x9B,0x5E,0x08,0x51,0xCF,0x14,0x3A,
60         0x07,0x56,0xD8,0xE0,0x77,0x47,0x61,0xD2,
61         0x76,0x25,0x14,0xB8,0x29,0xBF,0x48,0x6A,
62         0x3B,0xDD,0x11,0x90,0x49,0x37,0x28,0x02,
63         0x26,0x95,0x5F,0x68,0x35,0xAF,0x60,0x9A,
64         0x16,0x4D,0x5E,0x40,0x4F,0x27,0x52,0x32,
65         0x6B,0x05,0x6E,0x18,0x75,0x9F,0x5C,0xCA,
66         0x00,0x4B,0xD6,0xEF,0x09,0x17,0x60,0x62,
67         0x48,0x0D,0x39,0x00,0x6E,0xE7,0x62,0xF2,
68         0x43,0x75,0x40,0xC8,0x69,0x8F,0x3C,0xFA,
69         0x07,0x2D,0x43,0xA0,0x77,0x07,0x52,0x92,
70         0x02,0xFE,0x55,0x77,0x81,0x17,0xF1,0x2A,
71         0x1D,0x9D,0x5C,0x50,0x18,0xF7,0x28,0xC2,
72         0x30,0x55,0x32,0x28,0x6D,0x6F,0x29,0x5A,
73         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
74         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
75         0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
76         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
77         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
78         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
79         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);
80
81 @cipher_data=(
82         0x8C,0xA6,0x4D,0xE9,0xC1,0xB1,0x23,0xA7,
83         0x73,0x59,0xB2,0x16,0x3E,0x4E,0xDC,0x58,
84         0x95,0x8E,0x6E,0x62,0x7A,0x05,0x55,0x7B,
85         0xF4,0x03,0x79,0xAB,0x9E,0x0E,0xC5,0x33,
86         0x17,0x66,0x8D,0xFC,0x72,0x92,0x53,0x2D,
87         0x8A,0x5A,0xE1,0xF8,0x1A,0xB8,0xF2,0xDD,
88         0x8C,0xA6,0x4D,0xE9,0xC1,0xB1,0x23,0xA7,
89         0xED,0x39,0xD9,0x50,0xFA,0x74,0xBC,0xC4,
90         0x69,0x0F,0x5B,0x0D,0x9A,0x26,0x93,0x9B,
91         0x7A,0x38,0x9D,0x10,0x35,0x4B,0xD2,0x71,
92         0x86,0x8E,0xBB,0x51,0xCA,0xB4,0x59,0x9A,
93         0x71,0x78,0x87,0x6E,0x01,0xF1,0x9B,0x2A,
94         0xAF,0x37,0xFB,0x42,0x1F,0x8C,0x40,0x95,
95         0x86,0xA5,0x60,0xF1,0x0E,0xC6,0xD8,0x5B,
96         0x0C,0xD3,0xDA,0x02,0x00,0x21,0xDC,0x09,
97         0xEA,0x67,0x6B,0x2C,0xB7,0xDB,0x2B,0x7A,
98         0xDF,0xD6,0x4A,0x81,0x5C,0xAF,0x1A,0x0F,
99         0x5C,0x51,0x3C,0x9C,0x48,0x86,0xC0,0x88,
100         0x0A,0x2A,0xEE,0xAE,0x3F,0xF4,0xAB,0x77,
101         0xEF,0x1B,0xF0,0x3E,0x5D,0xFA,0x57,0x5A,
102         0x88,0xBF,0x0D,0xB6,0xD7,0x0D,0xEE,0x56,
103         0xA1,0xF9,0x91,0x55,0x41,0x02,0x0B,0x56,
104         0x6F,0xBF,0x1C,0xAF,0xCF,0xFD,0x05,0x56,
105         0x2F,0x22,0xE4,0x9B,0xAB,0x7C,0xA1,0xAC,
106         0x5A,0x6B,0x61,0x2C,0xC2,0x6C,0xCE,0x4A,
107         0x5F,0x4C,0x03,0x8E,0xD1,0x2B,0x2E,0x41,
108         0x63,0xFA,0xC0,0xD0,0x34,0xD9,0xF7,0x93,
109         0x61,0x7B,0x3A,0x0C,0xE8,0xF0,0x71,0x00,
110         0xDB,0x95,0x86,0x05,0xF8,0xC8,0xC6,0x06,
111         0xED,0xBF,0xD1,0xC6,0x6C,0x29,0xCC,0xC7,
112         0x35,0x55,0x50,0xB2,0x15,0x0E,0x24,0x51,
113         0xCA,0xAA,0xAF,0x4D,0xEA,0xF1,0xDB,0xAE,
114         0xD5,0xD4,0x4F,0xF7,0x20,0x68,0x3D,0x0D,
115         0x2A,0x2B,0xB0,0x08,0xDF,0x97,0xC2,0xF2);
116
117 print "Doing ecb tests\n";
118 for ($i=0; $i<$num_tests; $i++)
119         {
120         printf "Doing test $i\n";
121         $key =pack("C8",splice(@key_data   ,0,8));
122         $data=pack("C8",splice(@plain_data ,0,8));
123         $res =pack("C8",splice(@cipher_data,0,8));
124
125         @ks=  &des_set_key($key);
126         $out1= &des_ecb_encrypt(*ks,1,$data);
127         $out2= &des_ecb_encrypt(*ks,0,$out1);
128         $out3= &des_ecb_encrypt(*ks,0,$res);
129         &eprint("encryption failure",$res,$out1)
130                 if ($out1 ne $res);
131         &eprint("encryption/decryption failure",$data,$out2)
132                 if ($out2 ne $data);
133         &eprint("decryption failure",$data,$out3)
134                 if ($data ne $out3);
135         }
136 print "Done\n";
137
138 print "doing speed test over 30 seconds\n";
139 $SIG{'ALRM'}='done';
140 sub done {$done=1;}
141 $done=0;
142
143 $count=0;
144 $d=pack("C8",0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef);
145 @ks=  &des_set_key($d);
146 alarm(30);
147 $start=(times)[0];
148 while (!$done)
149         {
150         $count++;
151         $d=&des_ecb_encrypt(*ks,1,$d);
152         }
153 $end=(times)[0];
154 $t=$end-$start;
155 printf "$count DESs in %.2f seconds is %.2f DESs/sec or %.2f bytes/sec\n",
156         1.0*$t,1.0*$count/$t,$count*8.0/$t;
157
158 sub eprint
159         {
160         local($s,$c,$e)=@_;
161         local(@k);
162
163         @k=unpack("C8",$c);
164         printf "%02x%02x%02x%02x %02x%02x%02x%02x - ",unpack("C8",$c);
165         printf "%02x%02x%02x%02x %02x%02x%02x%02x :",unpack("C8",$e);
166         print " $s\n";
167         }