Skip to content

Commit

Permalink
gendsa: dsaparam: introduce -verbose option to enable output
Browse files Browse the repository at this point in the history
Other commands like 'req' support -verbose, so why not gendsa and dsaparam?

Part of a larger and more ambitious effort to add -verbose to all apps
that might be used in scripts and need to otherwise run silently (well,
without belching out anything that isn't a warning or error... which ties
into a later scrub of using STDOUT were appropriate for informative
messages instead of STDERR)... so that scripts also have the option of
doing >/dev/null without losing anything critical.

Signed-off-by: Philip Prindeville <[email protected]>

Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Paul Dale <[email protected]>
(Merged from openssl#6908)
  • Loading branch information
pprindeville authored and paulidale committed May 1, 2019
1 parent c43fa56 commit b6a07f6
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 13 deletions.
20 changes: 16 additions & 4 deletions apps/dsaparam.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,15 @@ NON_EMPTY_TRANSLATION_UNIT
# 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[] = {
Expand All @@ -47,6 +50,7 @@ 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}
};

Expand Down Expand Up @@ -107,6 +111,9 @@ int dsaparam_main(int argc, char **argv)
case OPT_NOOUT:
noout = 1;
break;
case OPT_VERBOSE:
verbose = 1;
break;
}
}
argc = opt_num_rest();
Expand Down Expand Up @@ -145,9 +152,11 @@ int dsaparam_main(int argc, char **argv)
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");
Expand Down Expand Up @@ -251,6 +260,9 @@ static int dsa_cb(int p, int n, BN_GENCB *cb)
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;
Expand Down
11 changes: 8 additions & 3 deletions apps/gendsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ NON_EMPTY_TRANSLATION_UNIT

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;

Expand All @@ -42,6 +42,7 @@ const OPTIONS gendsa_options[] = {
# ifndef OPENSSL_NO_ENGINE
{"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
# endif
{"verbose", OPT_VERBOSE, '-', "Verbose output"},
{NULL}
};

Expand All @@ -54,7 +55,7 @@ int gendsa_main(int argc, char **argv)
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);
Expand Down Expand Up @@ -86,6 +87,9 @@ int gendsa_main(int argc, char **argv)
if (!opt_cipher(opt_unknown(), &enc))
goto end;
break;
case OPT_VERBOSE:
verbose = 1;
break;
}
}
argc = opt_num_rest();
Expand Down Expand Up @@ -124,7 +128,8 @@ int gendsa_main(int argc, char **argv)
" 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;

Expand Down
17 changes: 11 additions & 6 deletions doc/man1/dsaparam.pod
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ B<openssl dsaparam>
[B<-writerand file>]
[B<-genkey>]
[B<-engine id>]
[B<-verbose>]
[B<numbits>]

=head1 DESCRIPTION
Expand Down Expand Up @@ -89,19 +90,23 @@ all others.
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>
to attempt to obtain a functional reference to the specified engine,
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
Expand Down
5 changes: 5 additions & 0 deletions doc/man1/gendsa.pod
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ B<openssl> B<gendsa>
[B<-rand file...>]
[B<-writerand file>]
[B<-engine id>]
[B<-verbose>]
[B<paramfile>]

=head1 DESCRIPTION
Expand Down Expand Up @@ -71,6 +72,10 @@ to attempt to obtain a functional reference to the specified engine,
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
Expand Down

0 comments on commit b6a07f6

Please sign in to comment.