apps/dsaparam.c:329: error: UNINITIALIZED_VALUE
  The value read from num was never initialized.
Showing all 1 steps of the trace


apps/dsaparam.c:329:14: 
327.   	}
328.   #endif
329. > 	        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, cb))
330.   			{
331.   #ifdef GENCB_TEST

int MAIN(int argc, char **argv)
	{
	DSA *dsa=NULL;
	int i,badops=0,text=0;
	BIO *in=NULL,*out=NULL;
	int informat,outformat,noout=0,C=0,ret=1;
	char *infile,*outfile,*prog,*inrand=NULL;
	int numbits= -1,num,genkey=0;
	int need_rand=0;
	int non_fips_allow = 0;
	BN_GENCB *cb = NULL;
#ifndef OPENSSL_NO_ENGINE
	char *engine=NULL;
#endif
#ifdef GENCB_TEST
	int timebomb=0;
#endif
	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);
	if (!load_config(bio_err, NULL))
		goto end;
	infile=NULL;
	outfile=NULL;
	informat=FORMAT_PEM;
	outformat=FORMAT_PEM;
	prog=argv[0];
	argc--;
	argv++;
	while (argc >= 1)
		{
		if 	(strcmp(*argv,"-inform") == 0)
			{
			if (--argc < 1) goto bad;
			informat=str2fmt(*(++argv));
			}
		else if (strcmp(*argv,"-outform") == 0)
			{
			if (--argc < 1) goto bad;
			outformat=str2fmt(*(++argv));
			}
		else if (strcmp(*argv,"-in") == 0)
			{
			if (--argc < 1) goto bad;
			infile= *(++argv);
			}
		else if (strcmp(*argv,"-out") == 0)
			{
			if (--argc < 1) goto bad;
			outfile= *(++argv);
			}
#ifndef OPENSSL_NO_ENGINE
		else if(strcmp(*argv, "-engine") == 0)
			{
			if (--argc < 1) goto bad;
			engine = *(++argv);
			}
#endif
#ifdef GENCB_TEST
		else if(strcmp(*argv, "-timebomb") == 0)
			{
			if (--argc < 1) goto bad;
			timebomb = atoi(*(++argv));
			}
#endif
		else if (strcmp(*argv,"-text") == 0)
			text=1;
		else if (strcmp(*argv,"-C") == 0)
			C=1;
		else if (strcmp(*argv,"-genkey") == 0)
			{
			genkey=1;
			need_rand=1;
			}
		else if (strcmp(*argv,"-rand") == 0)
			{
			if (--argc < 1) goto bad;
			inrand= *(++argv);
			need_rand=1;
			}
		else if (strcmp(*argv,"-noout") == 0)
			noout=1;
		else if (strcmp(*argv,"-non-fips-allow") == 0)
			non_fips_allow = 1;
		else if (sscanf(*argv,"%d",&num) == 1)
			{
			numbits=num;
			need_rand=1;
			}
		else
			{
			BIO_printf(bio_err,"unknown option %s\n",*argv);
			badops=1;
			break;
			}
		argc--;
		argv++;
		}
	if (badops)
		{
bad:
		BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
		BIO_printf(bio_err,"where options are\n");
		BIO_printf(bio_err," -inform arg   input format - DER or PEM\n");
		BIO_printf(bio_err," -outform arg  output format - DER or PEM\n");
		BIO_printf(bio_err," -in arg       input file\n");
		BIO_printf(bio_err," -out arg      output file\n");
		BIO_printf(bio_err," -text         print as text\n");
		BIO_printf(bio_err," -C            Output C code\n");
		BIO_printf(bio_err," -noout        no output\n");
		BIO_printf(bio_err," -genkey       generate a DSA key\n");
		BIO_printf(bio_err," -rand         files to use for random number input\n");
#ifndef OPENSSL_NO_ENGINE
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
#endif
#ifdef GENCB_TEST
		BIO_printf(bio_err," -timebomb n   interrupt keygen after <n> seconds\n");
#endif
		BIO_printf(bio_err," number        number of bits to use for generating private key\n");
		goto end;
		}
	ERR_load_crypto_strings();
	in=BIO_new(BIO_s_file());
	out=BIO_new(BIO_s_file());
	if ((in == NULL) || (out == NULL))
		{
		ERR_print_errors(bio_err);
		goto end;
		}
	if (infile == NULL)
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
	else
		{
		if (BIO_read_filename(in,infile) <= 0)
			{
			perror(infile);
			goto end;
			}
		}
	if (outfile == NULL)
		{
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
		{
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
		out = BIO_push(tmpbio, out);
		}
#endif
		}
	else
		{
		if (BIO_write_filename(out,outfile) <= 0)
			{
			perror(outfile);
			goto end;
			}
		}
#ifndef OPENSSL_NO_ENGINE
        setup_engine(bio_err, engine, 0);
#endif
	if (need_rand)
		{
		app_RAND_load_file(NULL, bio_err, (inrand != NULL));
		if (inrand != NULL)
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
				app_RAND_load_files(inrand));
		}
	if (numbits > 0)
		{
		cb = BN_GENCB_new();
		if(!cb)
			{
			BIO_printf(bio_err,"Error allocating BN_GENCB object\n");
			goto end;
			}
		BN_GENCB_set(cb, dsa_cb, bio_err);
		assert(need_rand);
		dsa = DSA_new();
		if(!dsa)
			{
			BIO_printf(bio_err,"Error allocating DSA object\n");
			goto end;
			}
		if (non_fips_allow)
			dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
		BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
	        BIO_printf(bio_err,"This could take some time\n");
#ifdef GENCB_TEST
		if(timebomb > 0)
	{
		struct sigaction act;
		act.sa_handler = timebomb_sigalarm;
		act.sa_flags = 0;
		BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
				timebomb);
		if(sigaction(SIGALRM, &act, NULL) != 0)
			{
			BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
			goto end;
			}
		alarm(timebomb);
	}
#endif
	        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, cb))
			{
#ifdef GENCB_TEST
			if(stop_keygen_flag)
				{
				BIO_printf(bio_err,"DSA key generation time-stopped\n");
				ret = 0;
				goto end;
				}
#endif
			ERR_print_errors(bio_err);
			BIO_printf(bio_err,"Error, DSA key generation failed\n");
			goto end;
			}
		}
	else if	(informat == FORMAT_ASN1)
		dsa=d2i_DSAparams_bio(in,NULL);
	else if (informat == FORMAT_PEM)
		dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
	else
		{
		BIO_printf(bio_err,"bad input format specified\n");
		goto end;
		}
	if (dsa == NULL)
		{
		BIO_printf(bio_err,"unable to load DSA parameters\n");
		ERR_print_errors(bio_err);
		goto end;
		}
	if (text)
		{
		DSAparams_print(out,dsa);
		}
	if (C)
		{
		unsigned char *data;
		int l,len,bits_p;
		len=BN_num_bytes(dsa->p);
		bits_p=BN_num_bits(dsa->p);
		data=(unsigned char *)OPENSSL_malloc(len+20);
		if (data == NULL)
			{
			perror("OPENSSL_malloc");
			goto end;
			}
		l=BN_bn2bin(dsa->p,data);
		printf("static unsigned char dsa%d_p[]={",bits_p);
		for (i=0; i<l; i++)
			{
			if ((i%12) == 0) printf("\n\t");
			printf("0x%02X,",data[i]);
			}
		printf("\n\t};\n");
		l=BN_bn2bin(dsa->q,data);
		printf("static unsigned char dsa%d_q[]={",bits_p);
		for (i=0; i<l; i++)
			{
			if ((i%12) == 0) printf("\n\t");
			printf("0x%02X,",data[i]);
			}
		printf("\n\t};\n");
		l=BN_bn2bin(dsa->g,data);
		printf("static unsigned char dsa%d_g[]={",bits_p);
		for (i=0; i<l; i++)
			{
			if ((i%12) == 0) printf("\n\t");
			printf("0x%02X,",data[i]);
			}
		printf("\n\t};\n\n");
		printf("DSA *get_dsa%d()\n\t{\n",bits_p);
		printf("\tDSA *dsa;\n\n");
		printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
		printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
			bits_p,bits_p);
		printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
			bits_p,bits_p);
		printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
			bits_p,bits_p);
		printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
		printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
		printf("\treturn(dsa);\n\t}\n");
		}
	if (!noout)
		{
		if 	(outformat == FORMAT_ASN1)
			i=i2d_DSAparams_bio(out,dsa);
		else if (outformat == FORMAT_PEM)
			i=PEM_write_bio_DSAparams(out,dsa);
		else	{
			BIO_printf(bio_err,"bad output format specified for outfile\n");
			goto end;
			}
		if (!i)
			{
			BIO_printf(bio_err,"unable to write DSA parameters\n");
			ERR_print_errors(bio_err);
			goto end;
			}
		}
	if (genkey)
		{
		DSA *dsakey;
		assert(need_rand);
		if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
		if (non_fips_allow)
			dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
		if (!DSA_generate_key(dsakey))
			{
			ERR_print_errors(bio_err);
			DSA_free(dsakey);
			goto end;
			}
		if 	(outformat == FORMAT_ASN1)
			i=i2d_DSAPrivateKey_bio(out,dsakey);
		else if (outformat == FORMAT_PEM)
			i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);
		else	{
			BIO_printf(bio_err,"bad output format specified for outfile\n");
			DSA_free(dsakey);
			goto end;
			}
		DSA_free(dsakey);
		}
	if (need_rand)
		app_RAND_write_file(NULL, bio_err);
	ret=0;
end:
	if (cb != NULL) BN_GENCB_free(cb);
	if (in != NULL) BIO_free(in);
	if (out != NULL) BIO_free_all(out);
	if (dsa != NULL) DSA_free(dsa);
	apps_shutdown();
	OPENSSL_EXIT(ret);
	}
['int MAIN(int argc, char **argv)\n\t{\n\tDSA *dsa=NULL;\n\tint i,badops=0,text=0;\n\tBIO *in=NULL,*out=NULL;\n\tint informat,outformat,noout=0,C=0,ret=1;\n\tchar *infile,*outfile,*prog,*inrand=NULL;\n\tint numbits= -1,num,genkey=0;\n\tint need_rand=0;\n\tint non_fips_allow = 0;\n\tBN_GENCB *cb = NULL;\n#ifndef OPENSSL_NO_ENGINE\n\tchar *engine=NULL;\n#endif\n#ifdef GENCB_TEST\n\tint timebomb=0;\n#endif\n\tapps_startup();\n\tif (bio_err == NULL)\n\t\tif ((bio_err=BIO_new(BIO_s_file())) != NULL)\n\t\t\tBIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);\n\tif (!load_config(bio_err, NULL))\n\t\tgoto end;\n\tinfile=NULL;\n\toutfile=NULL;\n\tinformat=FORMAT_PEM;\n\toutformat=FORMAT_PEM;\n\tprog=argv[0];\n\targc--;\n\targv++;\n\twhile (argc >= 1)\n\t\t{\n\t\tif \t(strcmp(*argv,"-inform") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tinformat=str2fmt(*(++argv));\n\t\t\t}\n\t\telse if (strcmp(*argv,"-outform") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\toutformat=str2fmt(*(++argv));\n\t\t\t}\n\t\telse if (strcmp(*argv,"-in") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tinfile= *(++argv);\n\t\t\t}\n\t\telse if (strcmp(*argv,"-out") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\toutfile= *(++argv);\n\t\t\t}\n#ifndef OPENSSL_NO_ENGINE\n\t\telse if(strcmp(*argv, "-engine") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tengine = *(++argv);\n\t\t\t}\n#endif\n#ifdef GENCB_TEST\n\t\telse if(strcmp(*argv, "-timebomb") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\ttimebomb = atoi(*(++argv));\n\t\t\t}\n#endif\n\t\telse if (strcmp(*argv,"-text") == 0)\n\t\t\ttext=1;\n\t\telse if (strcmp(*argv,"-C") == 0)\n\t\t\tC=1;\n\t\telse if (strcmp(*argv,"-genkey") == 0)\n\t\t\t{\n\t\t\tgenkey=1;\n\t\t\tneed_rand=1;\n\t\t\t}\n\t\telse if (strcmp(*argv,"-rand") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tinrand= *(++argv);\n\t\t\tneed_rand=1;\n\t\t\t}\n\t\telse if (strcmp(*argv,"-noout") == 0)\n\t\t\tnoout=1;\n\t\telse if (strcmp(*argv,"-non-fips-allow") == 0)\n\t\t\tnon_fips_allow = 1;\n\t\telse if (sscanf(*argv,"%d",&num) == 1)\n\t\t\t{\n\t\t\tnumbits=num;\n\t\t\tneed_rand=1;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"unknown option %s\\n",*argv);\n\t\t\tbadops=1;\n\t\t\tbreak;\n\t\t\t}\n\t\targc--;\n\t\targv++;\n\t\t}\n\tif (badops)\n\t\t{\nbad:\n\t\tBIO_printf(bio_err,"%s [options] [bits] <infile >outfile\\n",prog);\n\t\tBIO_printf(bio_err,"where options are\\n");\n\t\tBIO_printf(bio_err," -inform arg   input format - DER or PEM\\n");\n\t\tBIO_printf(bio_err," -outform arg  output format - DER or PEM\\n");\n\t\tBIO_printf(bio_err," -in arg       input file\\n");\n\t\tBIO_printf(bio_err," -out arg      output file\\n");\n\t\tBIO_printf(bio_err," -text         print as text\\n");\n\t\tBIO_printf(bio_err," -C            Output C code\\n");\n\t\tBIO_printf(bio_err," -noout        no output\\n");\n\t\tBIO_printf(bio_err," -genkey       generate a DSA key\\n");\n\t\tBIO_printf(bio_err," -rand         files to use for random number input\\n");\n#ifndef OPENSSL_NO_ENGINE\n\t\tBIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\\n");\n#endif\n#ifdef GENCB_TEST\n\t\tBIO_printf(bio_err," -timebomb n   interrupt keygen after <n> seconds\\n");\n#endif\n\t\tBIO_printf(bio_err," number        number of bits to use for generating private key\\n");\n\t\tgoto end;\n\t\t}\n\tERR_load_crypto_strings();\n\tin=BIO_new(BIO_s_file());\n\tout=BIO_new(BIO_s_file());\n\tif ((in == NULL) || (out == NULL))\n\t\t{\n\t\tERR_print_errors(bio_err);\n\t\tgoto end;\n\t\t}\n\tif (infile == NULL)\n\t\tBIO_set_fp(in,stdin,BIO_NOCLOSE);\n\telse\n\t\t{\n\t\tif (BIO_read_filename(in,infile) <= 0)\n\t\t\t{\n\t\t\tperror(infile);\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n\tif (outfile == NULL)\n\t\t{\n\t\tBIO_set_fp(out,stdout,BIO_NOCLOSE);\n#ifdef OPENSSL_SYS_VMS\n\t\t{\n\t\tBIO *tmpbio = BIO_new(BIO_f_linebuffer());\n\t\tout = BIO_push(tmpbio, out);\n\t\t}\n#endif\n\t\t}\n\telse\n\t\t{\n\t\tif (BIO_write_filename(out,outfile) <= 0)\n\t\t\t{\n\t\t\tperror(outfile);\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n#ifndef OPENSSL_NO_ENGINE\n        setup_engine(bio_err, engine, 0);\n#endif\n\tif (need_rand)\n\t\t{\n\t\tapp_RAND_load_file(NULL, bio_err, (inrand != NULL));\n\t\tif (inrand != NULL)\n\t\t\tBIO_printf(bio_err,"%ld semi-random bytes loaded\\n",\n\t\t\t\tapp_RAND_load_files(inrand));\n\t\t}\n\tif (numbits > 0)\n\t\t{\n\t\tcb = BN_GENCB_new();\n\t\tif(!cb)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"Error allocating BN_GENCB object\\n");\n\t\t\tgoto end;\n\t\t\t}\n\t\tBN_GENCB_set(cb, dsa_cb, bio_err);\n\t\tassert(need_rand);\n\t\tdsa = DSA_new();\n\t\tif(!dsa)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"Error allocating DSA object\\n");\n\t\t\tgoto end;\n\t\t\t}\n\t\tif (non_fips_allow)\n\t\t\tdsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;\n\t\tBIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\\n",num);\n\t        BIO_printf(bio_err,"This could take some time\\n");\n#ifdef GENCB_TEST\n\t\tif(timebomb > 0)\n\t{\n\t\tstruct sigaction act;\n\t\tact.sa_handler = timebomb_sigalarm;\n\t\tact.sa_flags = 0;\n\t\tBIO_printf(bio_err,"(though I\'ll stop it if not done within %d secs)\\n",\n\t\t\t\ttimebomb);\n\t\tif(sigaction(SIGALRM, &act, NULL) != 0)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"Error, couldn\'t set SIGALRM handler\\n");\n\t\t\tgoto end;\n\t\t\t}\n\t\talarm(timebomb);\n\t}\n#endif\n\t        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, cb))\n\t\t\t{\n#ifdef GENCB_TEST\n\t\t\tif(stop_keygen_flag)\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,"DSA key generation time-stopped\\n");\n\t\t\t\tret = 0;\n\t\t\t\tgoto end;\n\t\t\t\t}\n#endif\n\t\t\tERR_print_errors(bio_err);\n\t\t\tBIO_printf(bio_err,"Error, DSA key generation failed\\n");\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n\telse if\t(informat == FORMAT_ASN1)\n\t\tdsa=d2i_DSAparams_bio(in,NULL);\n\telse if (informat == FORMAT_PEM)\n\t\tdsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);\n\telse\n\t\t{\n\t\tBIO_printf(bio_err,"bad input format specified\\n");\n\t\tgoto end;\n\t\t}\n\tif (dsa == NULL)\n\t\t{\n\t\tBIO_printf(bio_err,"unable to load DSA parameters\\n");\n\t\tERR_print_errors(bio_err);\n\t\tgoto end;\n\t\t}\n\tif (text)\n\t\t{\n\t\tDSAparams_print(out,dsa);\n\t\t}\n\tif (C)\n\t\t{\n\t\tunsigned char *data;\n\t\tint l,len,bits_p;\n\t\tlen=BN_num_bytes(dsa->p);\n\t\tbits_p=BN_num_bits(dsa->p);\n\t\tdata=(unsigned char *)OPENSSL_malloc(len+20);\n\t\tif (data == NULL)\n\t\t\t{\n\t\t\tperror("OPENSSL_malloc");\n\t\t\tgoto end;\n\t\t\t}\n\t\tl=BN_bn2bin(dsa->p,data);\n\t\tprintf("static unsigned char dsa%d_p[]={",bits_p);\n\t\tfor (i=0; i<l; i++)\n\t\t\t{\n\t\t\tif ((i%12) == 0) printf("\\n\\t");\n\t\t\tprintf("0x%02X,",data[i]);\n\t\t\t}\n\t\tprintf("\\n\\t};\\n");\n\t\tl=BN_bn2bin(dsa->q,data);\n\t\tprintf("static unsigned char dsa%d_q[]={",bits_p);\n\t\tfor (i=0; i<l; i++)\n\t\t\t{\n\t\t\tif ((i%12) == 0) printf("\\n\\t");\n\t\t\tprintf("0x%02X,",data[i]);\n\t\t\t}\n\t\tprintf("\\n\\t};\\n");\n\t\tl=BN_bn2bin(dsa->g,data);\n\t\tprintf("static unsigned char dsa%d_g[]={",bits_p);\n\t\tfor (i=0; i<l; i++)\n\t\t\t{\n\t\t\tif ((i%12) == 0) printf("\\n\\t");\n\t\t\tprintf("0x%02X,",data[i]);\n\t\t\t}\n\t\tprintf("\\n\\t};\\n\\n");\n\t\tprintf("DSA *get_dsa%d()\\n\\t{\\n",bits_p);\n\t\tprintf("\\tDSA *dsa;\\n\\n");\n\t\tprintf("\\tif ((dsa=DSA_new()) == NULL) return(NULL);\\n");\n\t\tprintf("\\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\\n",\n\t\t\tbits_p,bits_p);\n\t\tprintf("\\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\\n",\n\t\t\tbits_p,bits_p);\n\t\tprintf("\\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\\n",\n\t\t\tbits_p,bits_p);\n\t\tprintf("\\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\\n");\n\t\tprintf("\\t\\t{ DSA_free(dsa); return(NULL); }\\n");\n\t\tprintf("\\treturn(dsa);\\n\\t}\\n");\n\t\t}\n\tif (!noout)\n\t\t{\n\t\tif \t(outformat == FORMAT_ASN1)\n\t\t\ti=i2d_DSAparams_bio(out,dsa);\n\t\telse if (outformat == FORMAT_PEM)\n\t\t\ti=PEM_write_bio_DSAparams(out,dsa);\n\t\telse\t{\n\t\t\tBIO_printf(bio_err,"bad output format specified for outfile\\n");\n\t\t\tgoto end;\n\t\t\t}\n\t\tif (!i)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"unable to write DSA parameters\\n");\n\t\t\tERR_print_errors(bio_err);\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n\tif (genkey)\n\t\t{\n\t\tDSA *dsakey;\n\t\tassert(need_rand);\n\t\tif ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;\n\t\tif (non_fips_allow)\n\t\t\tdsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;\n\t\tif (!DSA_generate_key(dsakey))\n\t\t\t{\n\t\t\tERR_print_errors(bio_err);\n\t\t\tDSA_free(dsakey);\n\t\t\tgoto end;\n\t\t\t}\n\t\tif \t(outformat == FORMAT_ASN1)\n\t\t\ti=i2d_DSAPrivateKey_bio(out,dsakey);\n\t\telse if (outformat == FORMAT_PEM)\n\t\t\ti=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);\n\t\telse\t{\n\t\t\tBIO_printf(bio_err,"bad output format specified for outfile\\n");\n\t\t\tDSA_free(dsakey);\n\t\t\tgoto end;\n\t\t\t}\n\t\tDSA_free(dsakey);\n\t\t}\n\tif (need_rand)\n\t\tapp_RAND_write_file(NULL, bio_err);\n\tret=0;\nend:\n\tif (cb != NULL) BN_GENCB_free(cb);\n\tif (in != NULL) BIO_free(in);\n\tif (out != NULL) BIO_free_all(out);\n\tif (dsa != NULL) DSA_free(dsa);\n\tapps_shutdown();\n\tOPENSSL_EXIT(ret);\n\t}']