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