BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num); BIO_printf(bio_err,"This could take some time\n");
BIO_printf(bio_err,"Generating DSA key, %d bits\n", BN_num_bits(dsa->p));
int MAIN(argc, argv)int argc;char **argv;	{	char buffer[200];	DSA *dsa=NULL;	int ret=1,num=DEFBITS;	char *outfile=NULL;	char *inrand=NULL,*randfile,*dsaparams=NULL;	BIO *out=NULL,*in=NULL;	apps_startup();	if (bio_err == NULL)		if ((bio_err=BIO_new(BIO_s_file())) != NULL)			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);	argv++;	argc--;	for (;;)		{		if (argc <= 0) break;		if (strcmp(*argv,"-out") == 0)			{			if (--argc < 1) goto bad;			outfile= *(++argv);			}		else if (strcmp(*argv,"-rand") == 0)			{			if (--argc < 1) goto bad;			inrand= *(++argv);			}		else if (strcmp(*argv,"-") == 0)			goto bad;		else if (dsaparams == NULL)			{			dsaparams= *argv;			}		else			goto bad;		argv++;		argc--;		}	if (dsaparams == NULL)		{bad:		BIO_printf(bio_err,"usage: gendsa [args] [numbits]\n");		BIO_printf(bio_err," -out file - output the key to 'file\n");		BIO_printf(bio_err," -rand file:file:...\n");		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");		BIO_printf(bio_err,"             the random number generator\n");		goto end;		}	in=BIO_new(BIO_s_file());	if (!(BIO_read_filename(in,"dsaparams")))		{		perror(dsaparams);		goto end;		}	if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL)) == NULL)		{		BIO_printf(bio_err,"unable to load DSA parameter file\n");		goto end;		}	BIO_free(in);			out=BIO_new(BIO_s_file());	if (out == NULL) goto end;	if (outfile == NULL)		BIO_set_fp(out,stdout,BIO_NOCLOSE);	else		{		if (BIO_write_filename(out,outfile) <= 0)			{			perror(outfile);			goto end;			}		}	randfile=RAND_file_name(buffer,200);	if ((randfile == NULL)|| !RAND_load_file(randfile,1024L*1024L))		BIO_printf(bio_err,"unable to load 'random state'\n");	if (inrand == NULL)		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");	else		{		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",			dsa_load_rand(inrand));		}	BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);	BIO_printf(bio_err,"This could take some time\n");	if (!DSA_generate_key(dsa)) goto end;	if (randfile == NULL)		BIO_printf(bio_err,"unable to write 'random state'\n");	else		RAND_write_file(randfile);	if (!PEM_write_bio_DSAPrivateKey(out,dsa,EVP_des_ede3_cbc(),NULL,0,NULL))		goto end;	ret=0;end:	if (ret != 0)		ERR_print_errors(bio_err);	if (out != NULL) BIO_free(out);	if (dsa != NULL) DSA_free(dsa);	EXIT(ret);	}