projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix no-psk
[openssl.git]
/
apps
/
dhparam.c
diff --git
a/apps/dhparam.c
b/apps/dhparam.c
index 302be2dd5737b5963acc89afb04557cab96e49bd..fc3a51ead46c031f3033126c10ce8e20b4fd4dd4 100644
(file)
--- a/
apps/dhparam.c
+++ b/
apps/dhparam.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright 1995-201
6
The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-201
7
The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@
-70,6
+70,7
@@
int dhparam_main(int argc, char **argv)
BIO *in = NULL, *out = NULL;
DH *dh = NULL;
char *infile = NULL, *outfile = NULL, *prog, *inrand = NULL;
BIO *in = NULL, *out = NULL;
DH *dh = NULL;
char *infile = NULL, *outfile = NULL, *prog, *inrand = NULL;
+ ENGINE *e = NULL;
#ifndef OPENSSL_NO_DSA
int dsaparam = 0;
#endif
#ifndef OPENSSL_NO_DSA
int dsaparam = 0;
#endif
@@
-104,7
+105,7
@@
int dhparam_main(int argc, char **argv)
outfile = opt_arg();
break;
case OPT_ENGINE:
outfile = opt_arg();
break;
case OPT_ENGINE:
-
(void)
setup_engine(opt_arg(), 0);
+
e =
setup_engine(opt_arg(), 0);
break;
case OPT_CHECK:
check = 1;
break;
case OPT_CHECK:
check = 1;
@@
-137,7
+138,7
@@
int dhparam_main(int argc, char **argv)
argc = opt_num_rest();
argv = opt_rest();
argc = opt_num_rest();
argv = opt_rest();
- if (argv[0] && (!opt_int(argv[0], &num) || num <= 0))
+ if (argv[0]
!= NULL
&& (!opt_int(argv[0], &num) || num <= 0))
goto end;
if (g && !num)
goto end;
if (g && !num)
@@
-241,10
+242,19
@@
int dhparam_main(int argc, char **argv)
} else
# endif
{
} else
# endif
{
- if (informat == FORMAT_ASN1)
+ if (informat == FORMAT_ASN1) {
+ /*
+ * We have no PEM header to determine what type of DH params it
+ * is. We'll just try both.
+ */
dh = d2i_DHparams_bio(in, NULL);
dh = d2i_DHparams_bio(in, NULL);
- else /* informat == FORMAT_PEM */
+ /* BIO_reset() returns 0 for success for file BIOs only!!! */
+ if (dh == NULL && BIO_reset(in) == 0)
+ dh = d2i_DHxparams_bio(in, NULL);
+ } else {
+ /* informat == FORMAT_PEM */
dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
+ }
if (dh == NULL) {
BIO_printf(bio_err, "unable to load DH parameters\n");
if (dh == NULL) {
BIO_printf(bio_err, "unable to load DH parameters\n");
@@
-339,12
+349,16
@@
int dhparam_main(int argc, char **argv)
if (!noout) {
const BIGNUM *q;
DH_get0_pqg(dh, NULL, &q, NULL);
if (!noout) {
const BIGNUM *q;
DH_get0_pqg(dh, NULL, &q, NULL);
- if (outformat == FORMAT_ASN1)
- i = i2d_DHparams_bio(out, dh);
- else if (q != NULL)
+ if (outformat == FORMAT_ASN1) {
+ if (q != NULL)
+ i = i2d_DHxparams_bio(out, dh);
+ else
+ i = i2d_DHparams_bio(out, dh);
+ } else if (q != NULL) {
i = PEM_write_bio_DHxparams(out, dh);
i = PEM_write_bio_DHxparams(out, dh);
- else
+ } else {
i = PEM_write_bio_DHparams(out, dh);
i = PEM_write_bio_DHparams(out, dh);
+ }
if (!i) {
BIO_printf(bio_err, "unable to write DH parameters\n");
ERR_print_errors(bio_err);
if (!i) {
BIO_printf(bio_err, "unable to write DH parameters\n");
ERR_print_errors(bio_err);
@@
-356,6
+370,7
@@
int dhparam_main(int argc, char **argv)
BIO_free(in);
BIO_free_all(out);
DH_free(dh);
BIO_free(in);
BIO_free_all(out);
DH_free(dh);
+ release_engine(e);
return (ret);
}
return (ret);
}