2 * Copyright (C) 2005, 2007, 2010-2024 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, see <https://www.gnu.org/licenses/>. */
18 /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */
28 main (int argc
, char *argv
[])
31 * DES Maintenance Test
35 char key
[8] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
36 char input
[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
37 char result
[8] = { 0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a };
38 char temp1
[8], temp2
[8], temp3
[8];
41 for (i
= 0; i
< 64; ++i
)
43 gl_des_setkey (&des
, key
);
44 gl_des_ecb_encrypt (&des
, input
, temp1
);
45 gl_des_ecb_encrypt (&des
, temp1
, temp2
);
46 gl_des_setkey (&des
, temp2
);
47 gl_des_ecb_decrypt (&des
, temp1
, temp3
);
48 memcpy (key
, temp3
, 8);
49 memcpy (input
, temp1
, 8);
51 if (memcmp (temp3
, result
, 8))
57 * Self made Triple-DES test (Does somebody know an official test?)
61 char input
[8] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
62 char key1
[8] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 };
63 char key2
[8] = { 0x11, 0x22, 0x33, 0x44, 0xff, 0xaa, 0xcc, 0xdd };
64 char result
[8] = { 0x7b, 0x38, 0x3b, 0x23, 0xa2, 0x7d, 0x26, 0xd3 };
68 for (i
= 0; i
< 16; ++i
)
70 gl_3des_set2keys (&des3
, key1
, key2
);
71 gl_3des_ecb_encrypt (&des3
, input
, key1
);
72 gl_3des_ecb_decrypt (&des3
, input
, key2
);
73 gl_3des_set3keys (&des3
, key1
, input
, key2
);
74 gl_3des_ecb_encrypt (&des3
, input
, input
);
76 if (memcmp (input
, result
, 8))
81 * More Triple-DES test. These are testvectors as used by SSLeay,
82 * thanks to Jeroen C. van Gelderen.
94 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
95 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
96 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
98 0x95, 0xF8, 0xA5, 0xE5, 0xDD, 0x31, 0xD9, 0x00},
100 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
103 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
104 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
105 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
107 0x9D, 0x64, 0x55, 0x5A, 0x9A, 0x10, 0xB8, 0x52,},
109 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}
113 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E,
114 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E,
115 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
117 0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
119 0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A}
123 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6,
124 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6,
125 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
127 0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
129 0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95}
133 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
134 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
135 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
137 0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61},
139 0x3D, 0x12, 0x4F, 0xE2, 0x19, 0x8B, 0xA3, 0x18}
143 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
144 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
145 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
147 0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61},
149 0xFB, 0xAB, 0xA1, 0xFF, 0x9D, 0x05, 0xE9, 0xB1}
153 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
154 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
155 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
157 0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61},
159 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72}
163 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
164 0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
165 0x64, 0x05, 0x6A, 0xBD, 0xFE, 0xA9, 0x34, 0x57},
167 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6C, 0x65},
169 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30}
173 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
174 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
175 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02},
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
179 0xe6, 0xe6, 0xdd, 0x5b, 0x7e, 0x72, 0x29, 0x74}
183 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
184 0x91, 0x07, 0xD0, 0x15, 0x89, 0x19, 0x01, 0x01,
185 0x19, 0x07, 0x92, 0x10, 0x98, 0x1A, 0x01, 0x01},
187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
189 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b}
197 for (i
= 0; i
< sizeof (testdata
) / sizeof (*testdata
); ++i
)
199 gl_3des_set3keys (&des3
, testdata
[i
].key
,
200 testdata
[i
].key
+ 8, testdata
[i
].key
+ 16);
202 gl_3des_ecb_encrypt (&des3
, testdata
[i
].plain
, result
);
203 if (memcmp (testdata
[i
].cipher
, result
, 8))
208 gl_3des_ecb_decrypt (&des3
, testdata
[i
].cipher
, result
);
209 if (memcmp (testdata
[i
].plain
, result
, 8))