summaryrefslogtreecommitdiff
path: root/src/regress/lib
diff options
context:
space:
mode:
authortb <>2021-11-18 15:11:17 +0000
committertb <>2021-11-18 15:11:17 +0000
commitfbe8d32d6dd4ab8cee272a3e7dcd90eb9b8f5026 (patch)
tree66a96ed55a5ffbc23e329dc08dcf7a9cc448e583 /src/regress/lib
parentb44b9125107c56a0df5525ef65a3ff84df775c59 (diff)
downloadopenbsd-fbe8d32d6dd4ab8cee272a3e7dcd90eb9b8f5026.tar.gz
openbsd-fbe8d32d6dd4ab8cee272a3e7dcd90eb9b8f5026.tar.bz2
openbsd-fbe8d32d6dd4ab8cee272a3e7dcd90eb9b8f5026.zip
dsatest: make this work with opaque BN. Some more fixes will be needed
for opaque DSA. I'll deal with that later. I also lobbed a KNF grenade in here.
Diffstat (limited to 'src/regress/lib')
-rw-r--r--src/regress/lib/libcrypto/dsa/dsatest.c238
1 files changed, 124 insertions, 114 deletions
diff --git a/src/regress/lib/libcrypto/dsa/dsatest.c b/src/regress/lib/libcrypto/dsa/dsatest.c
index dd3e3166f7..004bd3c33e 100644
--- a/src/regress/lib/libcrypto/dsa/dsatest.c
+++ b/src/regress/lib/libcrypto/dsa/dsatest.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: dsatest.c,v 1.5 2018/07/17 17:06:49 tb Exp $ */ 1/* $OpenBSD: dsatest.c,v 1.6 2021/11/18 15:11:17 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
@@ -62,6 +62,7 @@
62#undef OPENSSL_NO_DEPRECATED 62#undef OPENSSL_NO_DEPRECATED
63#endif 63#endif
64 64
65#include <err.h>
65#include <stdio.h> 66#include <stdio.h>
66#include <stdlib.h> 67#include <stdlib.h>
67#include <string.h> 68#include <string.h>
@@ -79,146 +80,155 @@ static int dsa_cb(int p, int n, BN_GENCB *arg);
79 80
80/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to 81/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to
81 * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */ 82 * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */
82static unsigned char seed[20]={ 83static unsigned char seed[20] = {
83 0xd5,0x01,0x4e,0x4b,0x60,0xef,0x2b,0xa8,0xb6,0x21,0x1b,0x40, 84 0xd5, 0x01, 0x4e, 0x4b, 0x60, 0xef, 0x2b, 0xa8, 0xb6, 0x21, 0x1b, 0x40,
84 0x62,0xba,0x32,0x24,0xe0,0x42,0x7d,0xd3, 85 0x62, 0xba, 0x32, 0x24, 0xe0, 0x42, 0x7d, 0xd3,
85 }; 86};
86 87
87static unsigned char out_p[]={ 88static unsigned char out_p[] = {
88 0x8d,0xf2,0xa4,0x94,0x49,0x22,0x76,0xaa, 89 0x8d, 0xf2, 0xa4, 0x94, 0x49, 0x22, 0x76, 0xaa,
89 0x3d,0x25,0x75,0x9b,0xb0,0x68,0x69,0xcb, 90 0x3d, 0x25, 0x75, 0x9b, 0xb0, 0x68, 0x69, 0xcb,
90 0xea,0xc0,0xd8,0x3a,0xfb,0x8d,0x0c,0xf7, 91 0xea, 0xc0, 0xd8, 0x3a, 0xfb, 0x8d, 0x0c, 0xf7,
91 0xcb,0xb8,0x32,0x4f,0x0d,0x78,0x82,0xe5, 92 0xcb, 0xb8, 0x32, 0x4f, 0x0d, 0x78, 0x82, 0xe5,
92 0xd0,0x76,0x2f,0xc5,0xb7,0x21,0x0e,0xaf, 93 0xd0, 0x76, 0x2f, 0xc5, 0xb7, 0x21, 0x0e, 0xaf,
93 0xc2,0xe9,0xad,0xac,0x32,0xab,0x7a,0xac, 94 0xc2, 0xe9, 0xad, 0xac, 0x32, 0xab, 0x7a, 0xac,
94 0x49,0x69,0x3d,0xfb,0xf8,0x37,0x24,0xc2, 95 0x49, 0x69, 0x3d, 0xfb, 0xf8, 0x37, 0x24, 0xc2,
95 0xec,0x07,0x36,0xee,0x31,0xc8,0x02,0x91, 96 0xec, 0x07, 0x36, 0xee, 0x31, 0xc8, 0x02, 0x91,
96 }; 97};
97 98
98static unsigned char out_q[]={ 99static unsigned char out_q[] = {
99 0xc7,0x73,0x21,0x8c,0x73,0x7e,0xc8,0xee, 100 0xc7, 0x73, 0x21, 0x8c, 0x73, 0x7e, 0xc8, 0xee,
100 0x99,0x3b,0x4f,0x2d,0xed,0x30,0xf4,0x8e, 101 0x99, 0x3b, 0x4f, 0x2d, 0xed, 0x30, 0xf4, 0x8e,
101 0xda,0xce,0x91,0x5f, 102 0xda, 0xce, 0x91, 0x5f,
102 }; 103};
103 104
104static unsigned char out_g[]={ 105static unsigned char out_g[] = {
105 0x62,0x6d,0x02,0x78,0x39,0xea,0x0a,0x13, 106 0x62, 0x6d, 0x02, 0x78, 0x39, 0xea, 0x0a, 0x13,
106 0x41,0x31,0x63,0xa5,0x5b,0x4c,0xb5,0x00, 107 0x41, 0x31, 0x63, 0xa5, 0x5b, 0x4c, 0xb5, 0x00,
107 0x29,0x9d,0x55,0x22,0x95,0x6c,0xef,0xcb, 108 0x29, 0x9d, 0x55, 0x22, 0x95, 0x6c, 0xef, 0xcb,
108 0x3b,0xff,0x10,0xf3,0x99,0xce,0x2c,0x2e, 109 0x3b, 0xff, 0x10, 0xf3, 0x99, 0xce, 0x2c, 0x2e,
109 0x71,0xcb,0x9d,0xe5,0xfa,0x24,0xba,0xbf, 110 0x71, 0xcb, 0x9d, 0xe5, 0xfa, 0x24, 0xba, 0xbf,
110 0x58,0xe5,0xb7,0x95,0x21,0x92,0x5c,0x9c, 111 0x58, 0xe5, 0xb7, 0x95, 0x21, 0x92, 0x5c, 0x9c,
111 0xc4,0x2e,0x9f,0x6f,0x46,0x4b,0x08,0x8c, 112 0xc4, 0x2e, 0x9f, 0x6f, 0x46, 0x4b, 0x08, 0x8c,
112 0xc5,0x72,0xaf,0x53,0xe6,0xd7,0x88,0x02, 113 0xc5, 0x72, 0xaf, 0x53, 0xe6, 0xd7, 0x88, 0x02,
113 }; 114};
114 115
115static const unsigned char str1[]="12345678901234567890"; 116static const unsigned char str1[] = "12345678901234567890";
116 117
117static BIO *bio_err=NULL; 118static BIO *bio_err = NULL;
118 119
119int main(int argc, char **argv) 120int
120 { 121main(int argc, char **argv)
121 BN_GENCB cb; 122{
122 DSA *dsa=NULL; 123 BN_GENCB *cb;
123 int counter,ret=0,i,j; 124 DSA *dsa = NULL;
125 int counter, i, j;
124 unsigned char buf[256]; 126 unsigned char buf[256];
125 unsigned long h; 127 unsigned long h;
126 unsigned char sig[256]; 128 unsigned char sig[256];
127 unsigned int siglen; 129 unsigned int siglen;
130 int ret = 0;
128 131
129 if (bio_err == NULL) 132 if (bio_err == NULL)
130 bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); 133 bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
131 134
132 ERR_load_crypto_strings(); 135 ERR_load_crypto_strings();
133 136
134 BIO_printf(bio_err,"test generation of DSA parameters\n"); 137 BIO_printf(bio_err, "test generation of DSA parameters\n");
135 138
136 BN_GENCB_set(&cb, dsa_cb, bio_err); 139 if ((cb = BN_GENCB_new()) == NULL)
137 if(((dsa = DSA_new()) == NULL) || !DSA_generate_parameters_ex(dsa, 512,
138 seed, 20, &counter, &h, &cb))
139 goto end; 140 goto end;
140 141
141 BIO_printf(bio_err,"seed\n"); 142 BN_GENCB_set(cb, dsa_cb, bio_err);
142 for (i=0; i<20; i+=4) 143 if ((dsa = DSA_new()) == NULL)
143 {
144 BIO_printf(bio_err,"%02X%02X%02X%02X ",
145 seed[i],seed[i+1],seed[i+2],seed[i+3]);
146 }
147 BIO_printf(bio_err,"\ncounter=%d h=%ld\n",counter,h);
148
149 DSA_print(bio_err,dsa,0);
150 if (counter != 105)
151 {
152 BIO_printf(bio_err,"counter should be 105\n");
153 goto end; 144 goto end;
154 } 145
155 if (h != 2) 146 if (!DSA_generate_parameters_ex(dsa, 512, seed, 20, &counter, &h, cb))
156 {
157 BIO_printf(bio_err,"h should be 2\n");
158 goto end; 147 goto end;
159 }
160 148
161 i=BN_bn2bin(dsa->q,buf); 149 BIO_printf(bio_err, "seed\n");
162 j=sizeof(out_q); 150 for (i = 0; i < 20; i += 4) {
163 if ((i != j) || (memcmp(buf,out_q,i) != 0)) 151 BIO_printf(bio_err, "%02X%02X%02X%02X ",
164 { 152 seed[i], seed[i + 1], seed[i + 2], seed[i + 3]);
165 BIO_printf(bio_err,"q value is wrong\n"); 153 }
154 BIO_printf(bio_err, "\ncounter=%d h=%ld\n", counter, h);
155
156 DSA_print(bio_err, dsa, 0);
157 if (counter != 105) {
158 BIO_printf(bio_err, "counter should be 105\n");
159 goto end;
160 }
161 if (h != 2) {
162 BIO_printf(bio_err, "h should be 2\n");
166 goto end; 163 goto end;
167 } 164 }
168 165
169 i=BN_bn2bin(dsa->p,buf); 166 i = BN_bn2bin(dsa->q, buf);
170 j=sizeof(out_p); 167 j = sizeof(out_q);
171 if ((i != j) || (memcmp(buf,out_p,i) != 0)) 168 if ((i != j) || (memcmp(buf, out_q, i) != 0)) {
172 { 169 BIO_printf(bio_err, "q value is wrong\n");
173 BIO_printf(bio_err,"p value is wrong\n");
174 goto end; 170 goto end;
175 } 171 }
176 172
177 i=BN_bn2bin(dsa->g,buf); 173 i = BN_bn2bin(dsa->p, buf);
178 j=sizeof(out_g); 174 j = sizeof(out_p);
179 if ((i != j) || (memcmp(buf,out_g,i) != 0)) 175 if ((i != j) || (memcmp(buf, out_p, i) != 0)) {
180 { 176 BIO_printf(bio_err, "p value is wrong\n");
181 BIO_printf(bio_err,"g value is wrong\n");
182 goto end; 177 goto end;
183 } 178 }
179
180 i = BN_bn2bin(dsa->g, buf);
181 j = sizeof(out_g);
182 if ((i != j) || (memcmp(buf, out_g, i) != 0)) {
183 BIO_printf(bio_err, "g value is wrong\n");
184 goto end;
185 }
184 186
185 DSA_generate_key(dsa); 187 DSA_generate_key(dsa);
186 DSA_sign(0, str1, 20, sig, &siglen, dsa); 188 DSA_sign(0, str1, 20, sig, &siglen, dsa);
187 if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1) 189 if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1)
188 ret=1; 190 ret = 1;
189 191
190end: 192end:
193 BN_GENCB_free(cb);
191 if (!ret) 194 if (!ret)
192 ERR_print_errors(bio_err); 195 ERR_print_errors(bio_err);
193 if (dsa != NULL) DSA_free(dsa); 196 DSA_free(dsa);
194 CRYPTO_cleanup_all_ex_data(); 197 CRYPTO_cleanup_all_ex_data();
195 ERR_remove_thread_state(NULL); 198 ERR_remove_thread_state(NULL);
196 ERR_free_strings(); 199 ERR_free_strings();
197 CRYPTO_mem_leaks(bio_err); 200 CRYPTO_mem_leaks(bio_err);
198 if (bio_err != NULL) 201 BIO_free(bio_err);
199 { 202 bio_err = NULL;
200 BIO_free(bio_err); 203
201 bio_err = NULL; 204 return !ret;
202 } 205}
203 exit(!ret); 206
207static int
208dsa_cb(int p, int n, BN_GENCB *arg)
209{
210 char c = '*';
211 static int ok = 0, num = 0;
212
213 if (p == 0) {
214 c = '.';
215 num++;
216 }
217 if (p == 1)
218 c = '+';
219 if (p == 2) {
220 c = '*';
221 ok++;
204 } 222 }
205 223
206static int dsa_cb(int p, int n, BN_GENCB *arg) 224 if (p == 3)
207 { 225 c = '\n';
208 char c='*'; 226 BIO_write(BN_GENCB_get_arg(arg), &c, 1);
209 static int ok=0,num=0; 227 (void)BIO_flush(BN_GENCB_get_arg(arg));
210 228
211 if (p == 0) { c='.'; num++; }; 229 if (!ok && (p == 0) && (num > 1)) {
212 if (p == 1) c='+'; 230 BIO_printf((BIO *)arg, "error in dsatest\n");
213 if (p == 2) { c='*'; ok++; }
214 if (p == 3) c='\n';
215 BIO_write(arg->arg,&c,1);
216 (void)BIO_flush(arg->arg);
217
218 if (!ok && (p == 0) && (num > 1))
219 {
220 BIO_printf((BIO *)arg,"error in dsatest\n");
221 return 0; 231 return 0;
222 }
223 return 1;
224 } 232 }
233 return 1;
234}