]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/rc5test.c
Implement EVP_MAC_do_all_ex()
[thirdparty/openssl.git] / test / rc5test.c
CommitLineData
440e5d80 1/*
7f13fad2 2 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
0f113f3e 3 *
909f1a2e 4 * Licensed under the Apache License 2.0 (the "License"). You may not use
440e5d80
RS
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
9a131ad7
MC
184 if (!TEST_true(RC5_32_set_key(&key, 16, &RC5key[n][0], 12)))
185 return 0;
58964a49 186
7f13fad2
P
187 RC5_32_ecb_encrypt(&RC5plain[n][0], buf, &key, RC5_ENCRYPT);
188 if (!TEST_mem_eq(&RC5cipher[n][0], sizeof(RC5cipher[0]), buf, sizeof(buf)))
189 testresult = 0;
58964a49 190
7f13fad2
P
191 RC5_32_ecb_encrypt(buf, buf2, &key, RC5_DECRYPT);
192 if (!TEST_mem_eq(&RC5plain[n][0], sizeof(RC5cipher[0]), buf2, sizeof(buf2)))
193 testresult = 0;
58964a49 194
7f13fad2
P
195 return testresult;
196}
58964a49 197
7f13fad2
P
198static int test_rc5_cbc(int n)
199{
200 int testresult = 1;
201 int i;
202 RC5_32_KEY key;
203 unsigned char buf[8], buf2[8], ivb[8];
204
205 i = rc5_cbc_rounds[n];
206 if (i >= 8) {
9a131ad7
MC
207 if (!TEST_true(RC5_32_set_key(&key, rc5_cbc_key[n][0],
208 &rc5_cbc_key[n][1], i)))
209 return 0;
58964a49 210
7f13fad2
P
211 memcpy(ivb, &rc5_cbc_iv[n][0], 8);
212 RC5_32_cbc_encrypt(&rc5_cbc_plain[n][0], buf, 8,
213 &key, &ivb[0], RC5_ENCRYPT);
58964a49 214
7f13fad2
P
215 if (!TEST_mem_eq(&rc5_cbc_cipher[n][0], sizeof(rc5_cbc_cipher[0]),
216 buf, sizeof(buf)))
217 testresult = 0;
58964a49 218
7f13fad2
P
219 memcpy(ivb, &rc5_cbc_iv[n][0], 8);
220 RC5_32_cbc_encrypt(buf, buf2, 8, &key, &ivb[0], RC5_DECRYPT);
221 if (!TEST_mem_eq(&rc5_cbc_plain[n][0], sizeof(rc5_cbc_plain[0]),
292247ea 222 buf2, sizeof(buf2)))
7f13fad2 223 testresult = 0;
0f113f3e 224 }
58964a49 225
7f13fad2 226 return testresult;
0f113f3e 227}
7f13fad2 228#endif
58964a49 229
ad887416 230int setup_tests(void)
7f13fad2
P
231{
232#ifndef OPENSSL_NO_RC5
233 ADD_ALL_TESTS(test_rc5_ecb, OSSL_NELEM(RC5key));
234 ADD_ALL_TESTS(test_rc5_cbc, RC5_CBC_NUM);
f5d7a031 235#endif
ad887416 236 return 1;
7f13fad2 237}