VirtualBox

source: vbox/trunk/src/libs/openssl-3.1.5/test/rc5test.c@ 105770

Last change on this file since 105770 was 104078, checked in by vboxsync, 8 months ago

openssl-3.1.5: Applied and adjusted our OpenSSL changes to 3.1.4. bugref:10638

File size: 9.1 KB
Line 
1/*
2 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (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
8 */
9
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
16#include <string.h>
17
18#include "internal/nelem.h"
19#include "testutil.h"
20
21#ifndef OPENSSL_NO_RC5
22# include <openssl/rc5.h>
23
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};
36
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};
44
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};
52
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};
83
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};
116
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};
146
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};
153
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};
183
184static int test_rc5_ecb(int n)
185{
186 int testresult = 1;
187 RC5_32_KEY key;
188 unsigned char buf[8], buf2[8];
189
190 if (!TEST_true(RC5_32_set_key(&key, 16, &RC5key[n][0], 12)))
191 return 0;
192
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;
196
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;
200
201 return testresult;
202}
203
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) {
213 if (!TEST_true(RC5_32_set_key(&key, rc5_cbc_key[n][0],
214 &rc5_cbc_key[n][1], i)))
215 return 0;
216
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);
220
221 if (!TEST_mem_eq(&rc5_cbc_cipher[n][0], sizeof(rc5_cbc_cipher[0]),
222 buf, sizeof(buf)))
223 testresult = 0;
224
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]),
228 buf2, sizeof(buf2)))
229 testresult = 0;
230 }
231
232 return testresult;
233}
234#endif
235
236int setup_tests(void)
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);
241#endif
242 return 1;
243}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette