]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/rc5test.c
Add support for parameterized SipHash
[thirdparty/openssl.git] / test / rc5test.c
CommitLineData
440e5d80
RS
1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
0f113f3e 3 *
440e5d80
RS
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
58964a49
RE
8 */
9
0f113f3e
MC
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 */
58964a49
RE
14
15#include <stdio.h>
16#include <string.h>
17#include <stdlib.h>
f5d7a031 18
55f78baf
RL
19#include "../e_os.h"
20
cf1b7d96 21#ifdef OPENSSL_NO_RC5
f5d7a031
UM
22int main(int argc, char *argv[])
23{
24 printf("No RC5 support\n");
0f113f3e 25 return (0);
f5d7a031
UM
26}
27#else
0f113f3e 28# include <openssl/rc5.h>
58964a49 29
0f113f3e
MC
30static 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};
58964a49 42
0f113f3e
MC
43static 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};
58964a49 50
0f113f3e
MC
51static 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};
58964a49 58
0f113f3e
MC
59# define RC5_CBC_NUM 27
60static 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};
58964a49 89
0f113f3e
MC
90static 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};
58964a49 122
0f113f3e
MC
123static 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};
58964a49 152
0f113f3e
MC
153static 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};
58964a49 159
0f113f3e
MC
160static 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};
58964a49 189
6b691a5c 190int main(int argc, char *argv[])
0f113f3e
MC
191{
192 int i, n, err = 0;
193 RC5_32_KEY key;
194 unsigned char buf[8], buf2[8], ivb[8];
58964a49 195
0f113f3e
MC
196 for (n = 0; n < 5; n++) {
197 RC5_32_set_key(&key, 16, &(RC5key[n][0]), 12);
58964a49 198
0f113f3e
MC
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 }
58964a49 212
0f113f3e
MC
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");
58964a49 229
0f113f3e
MC
230 for (n = 0; n < RC5_CBC_NUM; n++) {
231 i = rc5_cbc_rounds[n];
232 if (i < 8)
233 continue;
58964a49 234
0f113f3e 235 RC5_32_set_key(&key, rc5_cbc_key[n][0], &(rc5_cbc_key[n][1]), i);
58964a49 236
0f113f3e
MC
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);
58964a49 240
0f113f3e
MC
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 }
58964a49 253
0f113f3e
MC
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");
58964a49 271
0f113f3e
MC
272 EXIT(err);
273 return (err);
274}
58964a49 275
f5d7a031 276#endif