]> git.ipfire.org Git - thirdparty/openssl.git/blob - test/rc5test.c
Re-enable some BoringSSL tests
[thirdparty/openssl.git] / test / rc5test.c
1 /*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10 /*
11 * This has been a quickly hacked 'ideatest.c'. When I add tests for other
12 * RC5 modes, more of the code will be uncommented.
13 */
14
15 #include <stdio.h>
16 #include <string.h>
17 #include <stdlib.h>
18
19 #include "../e_os.h"
20
21 #ifdef OPENSSL_NO_RC5
22 int main(int argc, char *argv[])
23 {
24 printf("No RC5 support\n");
25 return (0);
26 }
27 #else
28 # include <openssl/rc5.h>
29
30 static unsigned char RC5key[5][16] = {
31 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
32 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
33 {0x91, 0x5f, 0x46, 0x19, 0xbe, 0x41, 0xb2, 0x51,
34 0x63, 0x55, 0xa5, 0x01, 0x10, 0xa9, 0xce, 0x91},
35 {0x78, 0x33, 0x48, 0xe7, 0x5a, 0xeb, 0x0f, 0x2f,
36 0xd7, 0xb1, 0x69, 0xbb, 0x8d, 0xc1, 0x67, 0x87},
37 {0xdc, 0x49, 0xdb, 0x13, 0x75, 0xa5, 0x58, 0x4f,
38 0x64, 0x85, 0xb4, 0x13, 0xb5, 0xf1, 0x2b, 0xaf},
39 {0x52, 0x69, 0xf1, 0x49, 0xd4, 0x1b, 0xa0, 0x15,
40 0x24, 0x97, 0x57, 0x4d, 0x7f, 0x15, 0x31, 0x25},
41 };
42
43 static unsigned char RC5plain[5][8] = {
44 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
45 {0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
46 {0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
47 {0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
48 {0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
49 };
50
51 static unsigned char RC5cipher[5][8] = {
52 {0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
53 {0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
54 {0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
55 {0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
56 {0xEB, 0x44, 0xE4, 0x15, 0xDA, 0x31, 0x98, 0x24},
57 };
58
59 # define RC5_CBC_NUM 27
60 static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8] = {
61 {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1e},
62 {0x79, 0x7b, 0xba, 0x4d, 0x78, 0x11, 0x1d, 0x1e},
63 {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
64 {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
65 {0x8b, 0x9d, 0xed, 0x91, 0xce, 0x77, 0x94, 0xa6},
66 {0x2f, 0x75, 0x9f, 0xe7, 0xad, 0x86, 0xa3, 0x78},
67 {0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
68 {0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
69 {0xdc, 0xfe, 0x09, 0x85, 0x77, 0xec, 0xa5, 0xff},
70 {0x96, 0x46, 0xfb, 0x77, 0x63, 0x8f, 0x9c, 0xa8},
71 {0xb2, 0xb3, 0x20, 0x9d, 0xb6, 0x59, 0x4d, 0xa4},
72 {0x54, 0x5f, 0x7f, 0x32, 0xa5, 0xfc, 0x38, 0x36},
73 {0x82, 0x85, 0xe7, 0xc1, 0xb5, 0xbc, 0x74, 0x02},
74 {0xfc, 0x58, 0x6f, 0x92, 0xf7, 0x08, 0x09, 0x34},
75 {0xcf, 0x27, 0x0e, 0xf9, 0x71, 0x7f, 0xf7, 0xc4},
76 {0xe4, 0x93, 0xf1, 0xc1, 0xbb, 0x4d, 0x6e, 0x8c},
77 {0x5c, 0x4c, 0x04, 0x1e, 0x0f, 0x21, 0x7a, 0xc3},
78 {0x92, 0x1f, 0x12, 0x48, 0x53, 0x73, 0xb4, 0xf7},
79 {0x5b, 0xa0, 0xca, 0x6b, 0xbe, 0x7f, 0x5f, 0xad},
80 {0xc5, 0x33, 0x77, 0x1c, 0xd0, 0x11, 0x0e, 0x63},
81 {0x29, 0x4d, 0xdb, 0x46, 0xb3, 0x27, 0x8d, 0x60},
82 {0xda, 0xd6, 0xbd, 0xa9, 0xdf, 0xe8, 0xf7, 0xe8},
83 {0x97, 0xe0, 0x78, 0x78, 0x37, 0xed, 0x31, 0x7f},
84 {0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
85 {0x8f, 0x34, 0xc3, 0xc6, 0x81, 0xc9, 0x96, 0x95},
86 {0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
87 {0x7f, 0xd1, 0xa0, 0x23, 0xa5, 0xbb, 0xa2, 0x17},
88 };
89
90 static unsigned char rc5_cbc_key[RC5_CBC_NUM][17] = {
91 {1, 0x00},
92 {1, 0x00},
93 {1, 0x00},
94 {1, 0x00},
95 {1, 0x00},
96 {1, 0x11},
97 {1, 0x00},
98 {4, 0x00, 0x00, 0x00, 0x00},
99 {1, 0x00},
100 {1, 0x00},
101 {1, 0x00},
102 {1, 0x00},
103 {4, 0x01, 0x02, 0x03, 0x04},
104 {4, 0x01, 0x02, 0x03, 0x04},
105 {4, 0x01, 0x02, 0x03, 0x04},
106 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
107 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
108 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
109 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
110 {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
111 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
112 {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
113 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
114 {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
115 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
116 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
117 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
118 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
119 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
120 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
121 };
122
123 static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8] = {
124 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
125 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
126 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
127 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
128 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
129 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
130 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
131 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
132 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
133 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
134 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
135 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
136 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
137 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
138 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
139 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
140 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
141 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
142 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
143 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
144 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
145 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
146 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
147 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
148 {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
149 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
150 {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x01},
151 };
152
153 static int rc5_cbc_rounds[RC5_CBC_NUM] = {
154 0, 0, 0, 0, 0, 1, 2, 2,
155 8, 8, 12, 16, 8, 12, 16, 12,
156 8, 12, 16, 8, 12, 16, 12, 8,
157 8, 8, 8,
158 };
159
160 static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8] = {
161 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
162 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
163 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
164 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
165 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
166 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
167 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
168 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
169 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
170 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
171 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
172 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
173 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
174 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
175 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
176 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
177 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
178 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
179 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
180 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
181 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
182 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
183 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
184 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
185 {0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
186 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
187 {0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
188 };
189
190 int main(int argc, char *argv[])
191 {
192 int i, n, err = 0;
193 RC5_32_KEY key;
194 unsigned char buf[8], buf2[8], ivb[8];
195
196 for (n = 0; n < 5; n++) {
197 RC5_32_set_key(&key, 16, &(RC5key[n][0]), 12);
198
199 RC5_32_ecb_encrypt(&(RC5plain[n][0]), buf, &key, RC5_ENCRYPT);
200 if (memcmp(&(RC5cipher[n][0]), buf, 8) != 0) {
201 printf("ecb RC5 error encrypting (%d)\n", n + 1);
202 printf("got :");
203 for (i = 0; i < 8; i++)
204 printf("%02X ", buf[i]);
205 printf("\n");
206 printf("expected:");
207 for (i = 0; i < 8; i++)
208 printf("%02X ", RC5cipher[n][i]);
209 err = 20;
210 printf("\n");
211 }
212
213 RC5_32_ecb_encrypt(buf, buf2, &key, RC5_DECRYPT);
214 if (memcmp(&(RC5plain[n][0]), buf2, 8) != 0) {
215 printf("ecb RC5 error decrypting (%d)\n", n + 1);
216 printf("got :");
217 for (i = 0; i < 8; i++)
218 printf("%02X ", buf2[i]);
219 printf("\n");
220 printf("expected:");
221 for (i = 0; i < 8; i++)
222 printf("%02X ", RC5plain[n][i]);
223 printf("\n");
224 err = 3;
225 }
226 }
227 if (err == 0)
228 printf("ecb RC5 ok\n");
229
230 for (n = 0; n < RC5_CBC_NUM; n++) {
231 i = rc5_cbc_rounds[n];
232 if (i < 8)
233 continue;
234
235 RC5_32_set_key(&key, rc5_cbc_key[n][0], &(rc5_cbc_key[n][1]), i);
236
237 memcpy(ivb, &(rc5_cbc_iv[n][0]), 8);
238 RC5_32_cbc_encrypt(&(rc5_cbc_plain[n][0]), buf, 8,
239 &key, &(ivb[0]), RC5_ENCRYPT);
240
241 if (memcmp(&(rc5_cbc_cipher[n][0]), buf, 8) != 0) {
242 printf("cbc RC5 error encrypting (%d)\n", n + 1);
243 printf("got :");
244 for (i = 0; i < 8; i++)
245 printf("%02X ", buf[i]);
246 printf("\n");
247 printf("expected:");
248 for (i = 0; i < 8; i++)
249 printf("%02X ", rc5_cbc_cipher[n][i]);
250 err = 30;
251 printf("\n");
252 }
253
254 memcpy(ivb, &(rc5_cbc_iv[n][0]), 8);
255 RC5_32_cbc_encrypt(buf, buf2, 8, &key, &(ivb[0]), RC5_DECRYPT);
256 if (memcmp(&(rc5_cbc_plain[n][0]), buf2, 8) != 0) {
257 printf("cbc RC5 error decrypting (%d)\n", n + 1);
258 printf("got :");
259 for (i = 0; i < 8; i++)
260 printf("%02X ", buf2[i]);
261 printf("\n");
262 printf("expected:");
263 for (i = 0; i < 8; i++)
264 printf("%02X ", rc5_cbc_plain[n][i]);
265 printf("\n");
266 err = 3;
267 }
268 }
269 if (err == 0)
270 printf("cbc RC5 ok\n");
271
272 EXIT(err);
273 return (err);
274 }
275
276 #endif