2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
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
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.
22 int main(int argc, char *argv[])
24 printf("No RC5 support\n");
28 # include <openssl/rc5.h>
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},
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},
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},
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},
90 static unsigned char rc5_cbc_key[RC5_CBC_NUM][17] = {
98 {4, 0x00, 0x00, 0x00, 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},
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},
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,
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},
190 int main(int argc, char *argv[])
194 unsigned char buf[8], buf2[8], ivb[8];
196 for (n = 0; n < 5; n++) {
197 RC5_32_set_key(&key, 16, &(RC5key[n][0]), 12);
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);
203 for (i = 0; i < 8; i++)
204 printf("%02X ", buf[i]);
207 for (i = 0; i < 8; i++)
208 printf("%02X ", RC5cipher[n][i]);
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);
217 for (i = 0; i < 8; i++)
218 printf("%02X ", buf2[i]);
221 for (i = 0; i < 8; i++)
222 printf("%02X ", RC5plain[n][i]);
228 printf("ecb RC5 ok\n");
230 for (n = 0; n < RC5_CBC_NUM; n++) {
231 i = rc5_cbc_rounds[n];
235 RC5_32_set_key(&key, rc5_cbc_key[n][0], &(rc5_cbc_key[n][1]), i);
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);
241 if (memcmp(&(rc5_cbc_cipher[n][0]), buf, 8) != 0) {
242 printf("cbc RC5 error encrypting (%d)\n", n + 1);
244 for (i = 0; i < 8; i++)
245 printf("%02X ", buf[i]);
248 for (i = 0; i < 8; i++)
249 printf("%02X ", rc5_cbc_cipher[n][i]);
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);
259 for (i = 0; i < 8; i++)
260 printf("%02X ", buf2[i]);
263 for (i = 0; i < 8; i++)
264 printf("%02X ", rc5_cbc_plain[n][i]);
270 printf("cbc RC5 ok\n");