diff options
Diffstat (limited to 'src/regress/lib')
| -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 | } |
