2 * Copyright (C) 2005, 2007, 2010-2011 Free Software Foundation, Inc.
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 3, 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))