1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/dsa/dsatest.c */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Until the key-gen callbacks are modified to use newer prototypes, we allow
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * deprecated functions for openssl-internal code */
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_NO_DEPRECATED
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef OPENSSL_NO_DEPRECATED
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h>
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <string.h>
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/types.h>
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/stat.h>
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "../e_os.h"
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/crypto.h>
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/rand.h>
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/bio.h>
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/err.h>
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/bn.h>
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_NO_DSA
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint main(int argc, char *argv[])
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    printf("No DSA support\n");
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    return(0);
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/dsa.h>
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_SYS_WIN16
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MS_CALLBACK     _far _loadds
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MS_CALLBACK
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *arg);
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic unsigned char seed[20]={
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xd5,0x01,0x4e,0x4b,0x60,0xef,0x2b,0xa8,0xb6,0x21,0x1b,0x40,
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x62,0xba,0x32,0x24,0xe0,0x42,0x7d,0xd3,
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic unsigned char out_p[]={
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x8d,0xf2,0xa4,0x94,0x49,0x22,0x76,0xaa,
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x3d,0x25,0x75,0x9b,0xb0,0x68,0x69,0xcb,
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xea,0xc0,0xd8,0x3a,0xfb,0x8d,0x0c,0xf7,
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xcb,0xb8,0x32,0x4f,0x0d,0x78,0x82,0xe5,
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xd0,0x76,0x2f,0xc5,0xb7,0x21,0x0e,0xaf,
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xc2,0xe9,0xad,0xac,0x32,0xab,0x7a,0xac,
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x49,0x69,0x3d,0xfb,0xf8,0x37,0x24,0xc2,
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xec,0x07,0x36,0xee,0x31,0xc8,0x02,0x91,
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic unsigned char out_q[]={
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xc7,0x73,0x21,0x8c,0x73,0x7e,0xc8,0xee,
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x99,0x3b,0x4f,0x2d,0xed,0x30,0xf4,0x8e,
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xda,0xce,0x91,0x5f,
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic unsigned char out_g[]={
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x62,0x6d,0x02,0x78,0x39,0xea,0x0a,0x13,
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x41,0x31,0x63,0xa5,0x5b,0x4c,0xb5,0x00,
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x29,0x9d,0x55,0x22,0x95,0x6c,0xef,0xcb,
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x3b,0xff,0x10,0xf3,0x99,0xce,0x2c,0x2e,
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x71,0xcb,0x9d,0xe5,0xfa,0x24,0xba,0xbf,
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x58,0xe5,0xb7,0x95,0x21,0x92,0x5c,0x9c,
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xc4,0x2e,0x9f,0x6f,0x46,0x4b,0x08,0x8c,
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xc5,0x72,0xaf,0x53,0xe6,0xd7,0x88,0x02,
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const unsigned char str1[]="12345678901234567890";
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const char rnd_seed[] = "string to make the random number generator think it has entropy";
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic BIO *bio_err=NULL;
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint main(int argc, char **argv)
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BN_GENCB cb;
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DSA *dsa=NULL;
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int counter,ret=0,i,j;
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char buf[256];
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long h;
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char sig[256];
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int siglen;
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (bio_err == NULL)
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_malloc_debug_init();
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ERR_load_crypto_strings();
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	RAND_seed(rnd_seed, sizeof rnd_seed);
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO_printf(bio_err,"test generation of DSA parameters\n");
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BN_GENCB_set(&cb, dsa_cb, bio_err);
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if(((dsa = DSA_new()) == NULL) || !DSA_generate_parameters_ex(dsa, 512,
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				seed, 20, &counter, &h, &cb))
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		goto end;
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO_printf(bio_err,"seed\n");
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (i=0; i<20; i+=4)
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf(bio_err,"%02X%02X%02X%02X ",
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			seed[i],seed[i+1],seed[i+2],seed[i+3]);
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO_printf(bio_err,"\ncounter=%d h=%ld\n",counter,h);
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DSA_print(bio_err,dsa,0);
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (counter != 105)
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf(bio_err,"counter should be 105\n");
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		goto end;
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (h != 2)
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf(bio_err,"h should be 2\n");
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		goto end;
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	i=BN_bn2bin(dsa->q,buf);
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	j=sizeof(out_q);
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((i != j) || (memcmp(buf,out_q,i) != 0))
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf(bio_err,"q value is wrong\n");
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		goto end;
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	i=BN_bn2bin(dsa->p,buf);
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	j=sizeof(out_p);
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((i != j) || (memcmp(buf,out_p,i) != 0))
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf(bio_err,"p value is wrong\n");
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		goto end;
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	i=BN_bn2bin(dsa->g,buf);
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	j=sizeof(out_g);
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((i != j) || (memcmp(buf,out_g,i) != 0))
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf(bio_err,"g value is wrong\n");
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		goto end;
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	dsa->flags |= DSA_FLAG_NO_EXP_CONSTTIME;
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DSA_generate_key(dsa);
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DSA_sign(0, str1, 20, sig, &siglen, dsa);
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1)
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=1;
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	dsa->flags &= ~DSA_FLAG_NO_EXP_CONSTTIME;
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DSA_generate_key(dsa);
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DSA_sign(0, str1, 20, sig, &siglen, dsa);
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1)
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=1;
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectend:
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!ret)
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ERR_print_errors(bio_err);
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (dsa != NULL) DSA_free(dsa);
224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_cleanup_all_ex_data();
225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	ERR_remove_thread_state(NULL);
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ERR_free_strings();
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_mem_leaks(bio_err);
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (bio_err != NULL)
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_free(bio_err);
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		bio_err = NULL;
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_SYS_NETWARE
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    if (!ret) printf("ERROR\n");
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	EXIT(!ret);
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(0);
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *arg)
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	char c='*';
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static int ok=0,num=0;
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (p == 0) { c='.'; num++; };
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (p == 1) c='+';
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (p == 2) { c='*'; ok++; }
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (p == 3) c='\n';
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO_write(arg->arg,&c,1);
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	(void)BIO_flush(arg->arg);
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!ok && (p == 0) && (num > 1))
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BIO_printf((BIO *)arg,"error in dsatest\n");
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
260