summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/regress/lib/libcrypto/cast/casttest.c285
1 files changed, 146 insertions, 139 deletions
diff --git a/src/regress/lib/libcrypto/cast/casttest.c b/src/regress/lib/libcrypto/cast/casttest.c
index 81b878ee7f..88c374ed65 100644
--- a/src/regress/lib/libcrypto/cast/casttest.c
+++ b/src/regress/lib/libcrypto/cast/casttest.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: casttest.c,v 1.2 2018/07/17 17:06:49 tb Exp $ */ 1/* $OpenBSD: casttest.c,v 1.3 2023/08/20 22:26:24 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used. 19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or 20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -65,158 +65,165 @@
65 65
66#define FULL_TEST 66#define FULL_TEST
67 67
68static unsigned char k[16]={ 68static unsigned char k[16] = {
69 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78, 69 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
70 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A 70 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
71 }; 71};
72 72
73static unsigned char in[8]={ 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}; 73static unsigned char in[8] = { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
74 74
75static int k_len[3]={16,10,5}; 75static int k_len[3] = {16,10,5};
76static unsigned char c[3][8]={ 76static unsigned char c[3][8] = {
77 {0x23,0x8B,0x4F,0xE5,0x84,0x7E,0x44,0xB2}, 77 {0x23,0x8B,0x4F,0xE5,0x84,0x7E,0x44,0xB2},
78 {0xEB,0x6A,0x71,0x1A,0x2C,0x02,0x27,0x1B}, 78 {0xEB,0x6A,0x71,0x1A,0x2C,0x02,0x27,0x1B},
79 {0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E}, 79 {0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E},
80 }; 80};
81static unsigned char out[80]; 81static unsigned char out[80];
82 82
83static unsigned char in_a[16]={ 83static unsigned char in_a[16] = {
84 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78, 84 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
85 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A}; 85 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
86static unsigned char in_b[16]={ 86};
87 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78, 87static unsigned char in_b[16] = {
88 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A}; 88 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
89 89 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
90static unsigned char c_a[16]={ 90};
91 0xEE,0xA9,0xD0,0xA2,0x49,0xFD,0x3B,0xA6, 91
92 0xB3,0x43,0x6F,0xB8,0x9D,0x6D,0xCA,0x92}; 92static unsigned char c_a[16] = {
93static unsigned char c_b[16]={ 93 0xEE, 0xA9, 0xD0, 0xA2, 0x49, 0xFD, 0x3B, 0xA6,
94 0xB2,0xC9,0x5E,0xB0,0x0C,0x31,0xAD,0x71, 94 0xB3, 0x43, 0x6F, 0xB8, 0x9D, 0x6D, 0xCA, 0x92
95 0x80,0xAC,0x05,0xB8,0xE8,0x3D,0x69,0x6E}; 95};
96static unsigned char c_b[16] = {
97 0xB2, 0xC9, 0x5E, 0xB0, 0x0C, 0x31, 0xAD, 0x71,
98 0x80, 0xAC, 0x05, 0xB8, 0xE8, 0x3D, 0x69, 0x6E
99};
96 100
97#if 0 101#if 0
98char *text="Hello to all people out there"; 102char *text = "Hello to all people out there";
99 103
100static unsigned char cfb_key[16]={ 104static unsigned char cfb_key[16] = {
101 0xe1,0xf0,0xc3,0xd2,0xa5,0xb4,0x87,0x96, 105 0xe1, 0xf0, 0xc3, 0xd2, 0xa5, 0xb4, 0x87, 0x96,
102 0x69,0x78,0x4b,0x5a,0x2d,0x3c,0x0f,0x1e, 106 0x69, 0x78, 0x4b, 0x5a, 0x2d, 0x3c, 0x0f, 0x1e,
103 }; 107};
104static unsigned char cfb_iv[80]={0x34,0x12,0x78,0x56,0xab,0x90,0xef,0xcd}; 108static unsigned char cfb_iv[80] = {0x34,0x12,0x78,0x56,0xab,0x90,0xef,0xcd};
105static unsigned char cfb_buf1[40],cfb_buf2[40],cfb_tmp[8]; 109static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
106#define CFB_TEST_SIZE 24 110#define CFB_TEST_SIZE 24
107static unsigned char plain[CFB_TEST_SIZE]= 111static unsigned char plain[CFB_TEST_SIZE] = {
108 { 112 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
109 0x4e,0x6f,0x77,0x20,0x69,0x73, 113 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
110 0x20,0x74,0x68,0x65,0x20,0x74, 114 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
111 0x69,0x6d,0x65,0x20,0x66,0x6f, 115 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
112 0x72,0x20,0x61,0x6c,0x6c,0x20 116};
113 }; 117static unsigned char cfb_cipher64[CFB_TEST_SIZE] = {
114static unsigned char cfb_cipher64[CFB_TEST_SIZE]={ 118 0x59, 0xD8, 0xE2, 0x65, 0x00, 0x58, 0x6C, 0x3F,
115 0x59,0xD8,0xE2,0x65,0x00,0x58,0x6C,0x3F, 119 0x2C, 0x17, 0x25, 0xD0, 0x1A, 0x38, 0xB7, 0x2A,
116 0x2C,0x17,0x25,0xD0,0x1A,0x38,0xB7,0x2A, 120 0x39, 0x61, 0x37, 0xDC, 0x79, 0xFB, 0x9F, 0x45
117 0x39,0x61,0x37,0xDC,0x79,0xFB,0x9F,0x45
118 121
119/* 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38, 122/* 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
120 0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9, 123 0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
121 0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/ 124 0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
122 }; 125};
123#endif 126#endif
124 127
125int main(int argc, char *argv[]) 128int
126 { 129main(int argc, char *argv[])
130{
127#ifdef FULL_TEST 131#ifdef FULL_TEST
128 long l; 132 long l;
129 CAST_KEY key_b; 133 CAST_KEY key_b;
130#endif 134#endif
131 int i,z,err=0; 135 int i, z, err = 0;
132 CAST_KEY key; 136 CAST_KEY key;
133 137
134 for (z=0; z<3; z++) 138 for (z = 0; z < 3; z++) {
135 { 139 CAST_set_key(&key, k_len[z], k);
136 CAST_set_key(&key,k_len[z],k); 140
137 141 CAST_ecb_encrypt(in, out, &key, CAST_ENCRYPT);
138 CAST_ecb_encrypt(in,out,&key,CAST_ENCRYPT); 142 if (memcmp(out, &(c[z][0]), 8) != 0) {
139 if (memcmp(out,&(c[z][0]),8) != 0) 143 printf("ecb cast error encrypting for keysize %d\n",
140 { 144 k_len[z]*8);
141 printf("ecb cast error encrypting for keysize %d\n",k_len[z]*8); 145 printf("got :");
142 printf("got :"); 146 for (i = 0; i < 8; i++)
143 for (i=0; i<8; i++) 147 printf("%02X ", out[i]);
144 printf("%02X ",out[i]); 148 printf("\n");
145 printf("\n"); 149 printf("expected:");
146 printf("expected:"); 150 for (i = 0; i < 8; i++)
147 for (i=0; i<8; i++) 151 printf("%02X ", c[z][i]);
148 printf("%02X ",c[z][i]); 152 err = 20;
149 err=20; 153 printf("\n");
150 printf("\n"); 154 }
151 } 155
152 156 CAST_ecb_encrypt(out, out, &key, CAST_DECRYPT);
153 CAST_ecb_encrypt(out,out,&key,CAST_DECRYPT); 157 if (memcmp(out, in, 8) != 0) {
154 if (memcmp(out,in,8) != 0) 158 printf("ecb cast error decrypting for keysize %d\n",
155 { 159 k_len[z]*8);
156 printf("ecb cast error decrypting for keysize %d\n",k_len[z]*8); 160 printf("got :");
157 printf("got :"); 161 for (i = 0; i < 8; i++)
158 for (i=0; i<8; i++) 162 printf("%02X ", out[i]);
159 printf("%02X ",out[i]); 163 printf("\n");
160 printf("\n"); 164 printf("expected:");
161 printf("expected:"); 165 for (i = 0; i < 8; i++)
162 for (i=0; i<8; i++) 166 printf("%02X ", in[i]);
163 printf("%02X ",in[i]); 167 printf("\n");
164 printf("\n"); 168 err = 3;
165 err=3; 169 }
166 }
167 } 170 }
168 if (err == 0) 171 if (err == 0)
169 printf("ecb cast5 ok\n"); 172 printf("ecb cast5 ok\n");
170 173
171#ifdef FULL_TEST 174#ifdef FULL_TEST
172 { 175 {
173 unsigned char out_a[16],out_b[16]; 176 unsigned char out_a[16], out_b[16];
174 static char *hex="0123456789ABCDEF"; 177 static char *hex = "0123456789ABCDEF";
175 178
176 printf("This test will take some time...."); 179 printf("This test will take some time....");
177 fflush(stdout); 180 fflush(stdout);
178 memcpy(out_a,in_a,sizeof(in_a)); 181 memcpy(out_a, in_a, sizeof(in_a));
179 memcpy(out_b,in_b,sizeof(in_b)); 182 memcpy(out_b, in_b, sizeof(in_b));
180 i=1; 183 i = 1;
181 184
182 for (l=0; l<1000000L; l++) 185 for (l = 0; l < 1000000L; l++) {
183 { 186 CAST_set_key(&key_b, 16, out_b);
184 CAST_set_key(&key_b,16,out_b); 187 CAST_ecb_encrypt(&(out_a[0]), &(out_a[0]), &key_b,
185 CAST_ecb_encrypt(&(out_a[0]),&(out_a[0]),&key_b,CAST_ENCRYPT); 188 CAST_ENCRYPT);
186 CAST_ecb_encrypt(&(out_a[8]),&(out_a[8]),&key_b,CAST_ENCRYPT); 189 CAST_ecb_encrypt(&(out_a[8]), &(out_a[8]), &key_b,
187 CAST_set_key(&key,16,out_a); 190 CAST_ENCRYPT);
188 CAST_ecb_encrypt(&(out_b[0]),&(out_b[0]),&key,CAST_ENCRYPT); 191 CAST_set_key(&key, 16, out_a);
189 CAST_ecb_encrypt(&(out_b[8]),&(out_b[8]),&key,CAST_ENCRYPT); 192 CAST_ecb_encrypt(&(out_b[0]), &(out_b[0]), &key,
190 if ((l & 0xffff) == 0xffff) 193 CAST_ENCRYPT);
191 { 194 CAST_ecb_encrypt(&(out_b[8]), &(out_b[8]), &key,
192 printf("%c",hex[i&0x0f]); 195 CAST_ENCRYPT);
193 fflush(stdout); 196 if ((l & 0xffff) == 0xffff) {
194 i++; 197 printf("%c", hex[i & 0x0f]);
195 } 198 fflush(stdout);
196 } 199 i++;
197 200 }
198 if ( (memcmp(out_a,c_a,sizeof(c_a)) != 0) || 201 }
199 (memcmp(out_b,c_b,sizeof(c_b)) != 0)) 202
200 { 203 if ((memcmp(out_a, c_a, sizeof(c_a)) != 0) ||
201 printf("\n"); 204 (memcmp(out_b, c_b, sizeof(c_b)) != 0)) {
202 printf("Error\n"); 205 printf("\n");
203 206 printf("Error\n");
204 printf("A out ="); 207
205 for (i=0; i<16; i++) printf("%02X ",out_a[i]); 208 printf("A out =");
206 printf("\nactual="); 209 for (i = 0; i < 16; i++)
207 for (i=0; i<16; i++) printf("%02X ",c_a[i]); 210 printf("%02X ", out_a[i]);
208 printf("\n"); 211 printf("\nactual=");
209 212 for (i = 0; i < 16; i++)
210 printf("B out ="); 213 printf("%02X ", c_a[i]);
211 for (i=0; i<16; i++) printf("%02X ",out_b[i]); 214 printf("\n");
212 printf("\nactual="); 215
213 for (i=0; i<16; i++) printf("%02X ",c_b[i]); 216 printf("B out =");
214 printf("\n"); 217 for (i = 0; i < 16; i++)
215 } 218 printf("%02X ", out_b[i]);
216 else 219 printf("\nactual=");
217 printf(" ok\n"); 220 for (i = 0; i < 16; i++)
218 } 221 printf("%02X ", c_b[i]);
222 printf("\n");
223 } else
224 printf(" ok\n");
225 }
219#endif 226#endif
220 227
221 exit(err); 228 exit(err);
222 } 229}