# include <openssl/x509.h>
# include <openssl/pem.h>
+static int verbose = 0;
+
static int dsa_cb(int p, int n, BN_GENCB *cb);
typedef enum OPTION_choice {
OPT_ERR = -1, OPT_EOF = 0, OPT_HELP,
OPT_INFORM, OPT_OUTFORM, OPT_IN, OPT_OUT, OPT_TEXT, OPT_C,
- OPT_NOOUT, OPT_GENKEY, OPT_ENGINE, OPT_R_ENUM
+ OPT_NOOUT, OPT_GENKEY, OPT_ENGINE, OPT_VERBOSE,
+ OPT_R_ENUM
} OPTION_CHOICE;
const OPTIONS dsaparam_options[] = {
# ifndef OPENSSL_NO_ENGINE
{"engine", OPT_ENGINE, 's', "Use engine e, possibly a hardware device"},
# endif
+ {"verbose", OPT_VERBOSE, '-', "Verbose output"},
{NULL}
};
case OPT_NOOUT:
noout = 1;
break;
+ case OPT_VERBOSE:
+ verbose = 1;
+ break;
}
}
argc = opt_num_rest();
BIO_printf(bio_err, "Error allocating DSA object\n");
goto end;
}
- BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n",
- num);
- BIO_printf(bio_err, "This could take some time\n");
+ if (verbose) {
+ 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_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) {
ERR_print_errors(bio_err);
BIO_printf(bio_err, "Error, DSA key generation failed\n");
static const char symbols[] = ".+*\n";
char c = (p >= 0 && (size_t)p < sizeof(symbols) - 1) ? symbols[p] : '?';
+ if (!verbose)
+ return 1;
+
BIO_write(BN_GENCB_get_arg(cb), &c, 1);
(void)BIO_flush(BN_GENCB_get_arg(cb));
return 1;
typedef enum OPTION_choice {
OPT_ERR = -1, OPT_EOF = 0, OPT_HELP,
- OPT_OUT, OPT_PASSOUT, OPT_ENGINE, OPT_CIPHER,
+ OPT_OUT, OPT_PASSOUT, OPT_ENGINE, OPT_CIPHER, OPT_VERBOSE,
OPT_R_ENUM
} OPTION_CHOICE;
# ifndef OPENSSL_NO_ENGINE
{"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
# endif
+ {"verbose", OPT_VERBOSE, '-', "Verbose output"},
{NULL}
};
char *dsaparams = NULL;
char *outfile = NULL, *passoutarg = NULL, *passout = NULL, *prog;
OPTION_CHOICE o;
- int ret = 1, private = 0;
+ int ret = 1, private = 0, verbose = 0;
const BIGNUM *p = NULL;
prog = opt_init(argc, argv, gendsa_options);
if (!opt_cipher(opt_unknown(), &enc))
goto end;
break;
+ case OPT_VERBOSE:
+ verbose = 1;
+ break;
}
}
argc = opt_num_rest();
" Your key size is %d! Larger key size may behave not as expected.\n",
OPENSSL_DSA_MAX_MODULUS_BITS, BN_num_bits(p));
- BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(p));
+ if (verbose)
+ BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(p));
if (!DSA_generate_key(dsa))
goto end;
[B<-writerand file>]
[B<-genkey>]
[B<-engine id>]
+[B<-verbose>]
[B<numbits>]
=head1 DESCRIPTION
Writes random data to the specified I<file> upon exit.
This can be used with a subsequent B<-rand> flag.
-=item B<numbits>
-
-This option specifies that a parameter set should be generated of size
-B<numbits>. It must be the last option. If this option is included then
-the input file (if any) is ignored.
-
=item B<-engine id>
Specifying an engine (by its unique B<id> string) will cause B<dsaparam>
thus initialising it if needed. The engine will then be set as the default
for all available algorithms.
+=item B<-verbose>
+
+Print extra details about the operations being performed.
+
+=item B<numbits>
+
+This option specifies that a parameter set should be generated of size
+B<numbits>. It must be the last option. If this option is included then
+the input file (if any) is ignored.
+
=back
=head1 NOTES
[B<-rand file...>]
[B<-writerand file>]
[B<-engine id>]
+[B<-verbose>]
[B<paramfile>]
=head1 DESCRIPTION
thus initialising it if needed. The engine will then be set as the default
for all available algorithms.
+=item B<-verbose>
+
+Print extra details about the operations being performed.
+
=item B<paramfile>
This option specifies the DSA parameter file to use. The parameters in this