diff options
Diffstat (limited to '')
-rw-r--r-- | src/regress/lib/libcrypto/cast/casttest.c | 285 |
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 | ||
68 | static unsigned char k[16]={ | 68 | static 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 | ||
73 | static unsigned char in[8]={ 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}; | 73 | static unsigned char in[8] = { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}; |
74 | 74 | ||
75 | static int k_len[3]={16,10,5}; | 75 | static int k_len[3] = {16,10,5}; |
76 | static unsigned char c[3][8]={ | 76 | static 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 | }; |
81 | static unsigned char out[80]; | 81 | static unsigned char out[80]; |
82 | 82 | ||
83 | static unsigned char in_a[16]={ | 83 | static 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 |
86 | static unsigned char in_b[16]={ | 86 | }; |
87 | 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78, | 87 | static 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 | |
90 | static 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}; | 92 | static unsigned char c_a[16] = { |
93 | static 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 | }; |
96 | static 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 |
98 | char *text="Hello to all people out there"; | 102 | char *text = "Hello to all people out there"; |
99 | 103 | ||
100 | static unsigned char cfb_key[16]={ | 104 | static 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 | }; |
104 | static unsigned char cfb_iv[80]={0x34,0x12,0x78,0x56,0xab,0x90,0xef,0xcd}; | 108 | static unsigned char cfb_iv[80] = {0x34,0x12,0x78,0x56,0xab,0x90,0xef,0xcd}; |
105 | static unsigned char cfb_buf1[40],cfb_buf2[40],cfb_tmp[8]; | 109 | static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8]; |
106 | #define CFB_TEST_SIZE 24 | 110 | #define CFB_TEST_SIZE 24 |
107 | static unsigned char plain[CFB_TEST_SIZE]= | 111 | static 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 | }; | 117 | static unsigned char cfb_cipher64[CFB_TEST_SIZE] = { |
114 | static 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 | ||
125 | int main(int argc, char *argv[]) | 128 | int |
126 | { | 129 | main(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 | } |