2
* Copyright (C) 2005, 2007 Free Software Foundation
3
* Written by Simon Josefsson
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2, or (at your option)
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20
/* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */
30
main (int argc, char *argv[])
33
* DES Maintenance Test
37
char key[8] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
38
char input[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
39
char result[8] = { 0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a };
40
char temp1[8], temp2[8], temp3[8];
43
for (i = 0; i < 64; ++i)
45
gl_des_setkey (&des, key);
46
gl_des_ecb_encrypt (&des, input, temp1);
47
gl_des_ecb_encrypt (&des, temp1, temp2);
48
gl_des_setkey (&des, temp2);
49
gl_des_ecb_decrypt (&des, temp1, temp3);
50
memcpy (key, temp3, 8);
51
memcpy (input, temp1, 8);
53
if (memcmp (temp3, result, 8))
59
* Self made Triple-DES test (Does somebody know an official test?)
63
char input[8] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
64
char key1[8] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 };
65
char key2[8] = { 0x11, 0x22, 0x33, 0x44, 0xff, 0xaa, 0xcc, 0xdd };
66
char result[8] = { 0x7b, 0x38, 0x3b, 0x23, 0xa2, 0x7d, 0x26, 0xd3 };
70
for (i = 0; i < 16; ++i)
72
gl_3des_set2keys (&des3, key1, key2);
73
gl_3des_ecb_encrypt (&des3, input, key1);
74
gl_3des_ecb_decrypt (&des3, input, key2);
75
gl_3des_set3keys (&des3, key1, input, key2);
76
gl_3des_ecb_encrypt (&des3, input, input);
78
if (memcmp (input, result, 8))
83
* More Triple-DES test. These are testvectors as used by SSLeay,
84
* thanks to Jeroen C. van Gelderen.
96
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
97
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
98
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
100
0x95, 0xF8, 0xA5, 0xE5, 0xDD, 0x31, 0xD9, 0x00},
102
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
105
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
106
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
107
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
109
0x9D, 0x64, 0x55, 0x5A, 0x9A, 0x10, 0xB8, 0x52,},
111
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}
115
0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E,
116
0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E,
117
0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
119
0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
121
0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A}
125
0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6,
126
0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6,
127
0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
129
0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
131
0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95}
135
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
136
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
137
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
139
0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61},
141
0x3D, 0x12, 0x4F, 0xE2, 0x19, 0x8B, 0xA3, 0x18}
145
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
146
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
147
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
149
0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61},
151
0xFB, 0xAB, 0xA1, 0xFF, 0x9D, 0x05, 0xE9, 0xB1}
155
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
156
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
157
0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
159
0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61},
161
0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72}
165
0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
166
0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
167
0x64, 0x05, 0x6A, 0xBD, 0xFE, 0xA9, 0x34, 0x57},
169
0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6C, 0x65},
171
0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30}
175
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
176
0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
177
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02},
179
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
181
0xe6, 0xe6, 0xdd, 0x5b, 0x7e, 0x72, 0x29, 0x74}
185
0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
186
0x91, 0x07, 0xD0, 0x15, 0x89, 0x19, 0x01, 0x01,
187
0x19, 0x07, 0x92, 0x10, 0x98, 0x1A, 0x01, 0x01},
189
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
191
0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b}
199
for (i = 0; i < sizeof (testdata) / sizeof (*testdata); ++i)
201
gl_3des_set3keys (&des3, testdata[i].key,
202
testdata[i].key + 8, testdata[i].key + 16);
204
gl_3des_ecb_encrypt (&des3, testdata[i].plain, result);
205
if (memcmp (testdata[i].cipher, result, 8))
210
gl_3des_ecb_decrypt (&des3, testdata[i].cipher, result);
211
if (memcmp (testdata[i].plain, result, 8))