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