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