]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/rc5test.c
Configure: use $list_separator_re only for defines and includes
[thirdparty/openssl.git] / test / rc5test.c
CommitLineData
440e5d80 1/*
7f13fad2 2 * Copyright 1995-2017 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
58964a49 10#include <string.h>
f5d7a031 11
176db6dc 12#include "internal/nelem.h"
7f13fad2 13#include "testutil.h"
55f78baf 14
7f13fad2 15#ifndef OPENSSL_NO_RC5
0f113f3e 16# include <openssl/rc5.h>
58964a49 17
0f113f3e
MC
18static unsigned char RC5key[5][16] = {
19 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
21 {0x91, 0x5f, 0x46, 0x19, 0xbe, 0x41, 0xb2, 0x51,
22 0x63, 0x55, 0xa5, 0x01, 0x10, 0xa9, 0xce, 0x91},
23 {0x78, 0x33, 0x48, 0xe7, 0x5a, 0xeb, 0x0f, 0x2f,
24 0xd7, 0xb1, 0x69, 0xbb, 0x8d, 0xc1, 0x67, 0x87},
25 {0xdc, 0x49, 0xdb, 0x13, 0x75, 0xa5, 0x58, 0x4f,
26 0x64, 0x85, 0xb4, 0x13, 0xb5, 0xf1, 0x2b, 0xaf},
27 {0x52, 0x69, 0xf1, 0x49, 0xd4, 0x1b, 0xa0, 0x15,
28 0x24, 0x97, 0x57, 0x4d, 0x7f, 0x15, 0x31, 0x25},
29};
58964a49 30
0f113f3e
MC
31static unsigned char RC5plain[5][8] = {
32 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
33 {0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
34 {0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
35 {0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
36 {0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
37};
58964a49 38
0f113f3e
MC
39static unsigned char RC5cipher[5][8] = {
40 {0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
41 {0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
42 {0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
43 {0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
44 {0xEB, 0x44, 0xE4, 0x15, 0xDA, 0x31, 0x98, 0x24},
45};
58964a49 46
0f113f3e
MC
47# define RC5_CBC_NUM 27
48static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8] = {
49 {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1e},
50 {0x79, 0x7b, 0xba, 0x4d, 0x78, 0x11, 0x1d, 0x1e},
51 {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
52 {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
53 {0x8b, 0x9d, 0xed, 0x91, 0xce, 0x77, 0x94, 0xa6},
54 {0x2f, 0x75, 0x9f, 0xe7, 0xad, 0x86, 0xa3, 0x78},
55 {0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
56 {0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
57 {0xdc, 0xfe, 0x09, 0x85, 0x77, 0xec, 0xa5, 0xff},
58 {0x96, 0x46, 0xfb, 0x77, 0x63, 0x8f, 0x9c, 0xa8},
59 {0xb2, 0xb3, 0x20, 0x9d, 0xb6, 0x59, 0x4d, 0xa4},
60 {0x54, 0x5f, 0x7f, 0x32, 0xa5, 0xfc, 0x38, 0x36},
61 {0x82, 0x85, 0xe7, 0xc1, 0xb5, 0xbc, 0x74, 0x02},
62 {0xfc, 0x58, 0x6f, 0x92, 0xf7, 0x08, 0x09, 0x34},
63 {0xcf, 0x27, 0x0e, 0xf9, 0x71, 0x7f, 0xf7, 0xc4},
64 {0xe4, 0x93, 0xf1, 0xc1, 0xbb, 0x4d, 0x6e, 0x8c},
65 {0x5c, 0x4c, 0x04, 0x1e, 0x0f, 0x21, 0x7a, 0xc3},
66 {0x92, 0x1f, 0x12, 0x48, 0x53, 0x73, 0xb4, 0xf7},
67 {0x5b, 0xa0, 0xca, 0x6b, 0xbe, 0x7f, 0x5f, 0xad},
68 {0xc5, 0x33, 0x77, 0x1c, 0xd0, 0x11, 0x0e, 0x63},
69 {0x29, 0x4d, 0xdb, 0x46, 0xb3, 0x27, 0x8d, 0x60},
70 {0xda, 0xd6, 0xbd, 0xa9, 0xdf, 0xe8, 0xf7, 0xe8},
71 {0x97, 0xe0, 0x78, 0x78, 0x37, 0xed, 0x31, 0x7f},
72 {0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
73 {0x8f, 0x34, 0xc3, 0xc6, 0x81, 0xc9, 0x96, 0x95},
74 {0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
75 {0x7f, 0xd1, 0xa0, 0x23, 0xa5, 0xbb, 0xa2, 0x17},
76};
58964a49 77
0f113f3e
MC
78static unsigned char rc5_cbc_key[RC5_CBC_NUM][17] = {
79 {1, 0x00},
80 {1, 0x00},
81 {1, 0x00},
82 {1, 0x00},
83 {1, 0x00},
84 {1, 0x11},
85 {1, 0x00},
86 {4, 0x00, 0x00, 0x00, 0x00},
87 {1, 0x00},
88 {1, 0x00},
89 {1, 0x00},
90 {1, 0x00},
91 {4, 0x01, 0x02, 0x03, 0x04},
92 {4, 0x01, 0x02, 0x03, 0x04},
93 {4, 0x01, 0x02, 0x03, 0x04},
94 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
95 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
96 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
97 {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
98 {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
99 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
100 {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
101 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
102 {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
103 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
104 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
105 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
106 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
107 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
108 {5, 0x01, 0x02, 0x03, 0x04, 0x05},
109};
58964a49 110
0f113f3e
MC
111static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8] = {
112 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
113 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
114 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
115 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
116 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
117 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
118 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
119 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
120 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
121 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
122 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
123 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
124 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
125 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
126 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
127 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
128 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
129 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
130 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
131 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
132 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
133 {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
134 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
135 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
136 {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
137 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
138 {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x01},
139};
58964a49 140
0f113f3e
MC
141static int rc5_cbc_rounds[RC5_CBC_NUM] = {
142 0, 0, 0, 0, 0, 1, 2, 2,
143 8, 8, 12, 16, 8, 12, 16, 12,
144 8, 12, 16, 8, 12, 16, 12, 8,
145 8, 8, 8,
146};
58964a49 147
0f113f3e
MC
148static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8] = {
149 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
150 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
151 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
152 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
153 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
154 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
155 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
156 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
157 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
158 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
159 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
160 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
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, 0x00},
164 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
165 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
166 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
167 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
168 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
169 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
170 {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
171 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
172 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
173 {0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
174 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
175 {0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
176};
58964a49 177
7f13fad2 178static int test_rc5_ecb(int n)
0f113f3e 179{
7f13fad2 180 int testresult = 1;
0f113f3e 181 RC5_32_KEY key;
7f13fad2 182 unsigned char buf[8], buf2[8];
58964a49 183
7f13fad2 184 RC5_32_set_key(&key, 16, &RC5key[n][0], 12);
58964a49 185
7f13fad2
P
186 RC5_32_ecb_encrypt(&RC5plain[n][0], buf, &key, RC5_ENCRYPT);
187 if (!TEST_mem_eq(&RC5cipher[n][0], sizeof(RC5cipher[0]), buf, sizeof(buf)))
188 testresult = 0;
58964a49 189
7f13fad2
P
190 RC5_32_ecb_encrypt(buf, buf2, &key, RC5_DECRYPT);
191 if (!TEST_mem_eq(&RC5plain[n][0], sizeof(RC5cipher[0]), buf2, sizeof(buf2)))
192 testresult = 0;
58964a49 193
7f13fad2
P
194 return testresult;
195}
58964a49 196
7f13fad2
P
197static int test_rc5_cbc(int n)
198{
199 int testresult = 1;
200 int i;
201 RC5_32_KEY key;
202 unsigned char buf[8], buf2[8], ivb[8];
203
204 i = rc5_cbc_rounds[n];
205 if (i >= 8) {
206 RC5_32_set_key(&key, rc5_cbc_key[n][0], &rc5_cbc_key[n][1], i);
58964a49 207
7f13fad2
P
208 memcpy(ivb, &rc5_cbc_iv[n][0], 8);
209 RC5_32_cbc_encrypt(&rc5_cbc_plain[n][0], buf, 8,
210 &key, &ivb[0], RC5_ENCRYPT);
58964a49 211
7f13fad2
P
212 if (!TEST_mem_eq(&rc5_cbc_cipher[n][0], sizeof(rc5_cbc_cipher[0]),
213 buf, sizeof(buf)))
214 testresult = 0;
58964a49 215
7f13fad2
P
216 memcpy(ivb, &rc5_cbc_iv[n][0], 8);
217 RC5_32_cbc_encrypt(buf, buf2, 8, &key, &ivb[0], RC5_DECRYPT);
218 if (!TEST_mem_eq(&rc5_cbc_plain[n][0], sizeof(rc5_cbc_plain[0]),
292247ea 219 buf2, sizeof(buf2)))
7f13fad2 220 testresult = 0;
0f113f3e 221 }
58964a49 222
7f13fad2 223 return testresult;
0f113f3e 224}
7f13fad2 225#endif
58964a49 226
ad887416 227int setup_tests(void)
7f13fad2
P
228{
229#ifndef OPENSSL_NO_RC5
230 ADD_ALL_TESTS(test_rc5_ecb, OSSL_NELEM(RC5key));
231 ADD_ALL_TESTS(test_rc5_cbc, RC5_CBC_NUM);
f5d7a031 232#endif
ad887416 233 return 1;
7f13fad2 234}