提交 7eff6aa0 编写于 作者: V Viktor Dukhovni

Avoid erroneous "assert(private)" failures.

When processing a public key input via "-pubin", "private" was
sometimes erroneously set, or else not set and incorrectly asserted.
Reviewed-by: NRich salz <rsalz@openssl.org>
上级 b9749432
...@@ -194,7 +194,7 @@ int dsa_main(int argc, char **argv) ...@@ -194,7 +194,7 @@ int dsa_main(int argc, char **argv)
argc = opt_num_rest(); argc = opt_num_rest();
argv = opt_rest(); argv = opt_rest();
private = pubin || pubout ? 0 : 1; private = pubin || pubout ? 0 : 1;
if (text) if (text && !pubin)
private = 1; private = 1;
if (!app_passwd(passinarg, passoutarg, &passin, &passout)) { if (!app_passwd(passinarg, passoutarg, &passin, &passout)) {
...@@ -227,7 +227,7 @@ int dsa_main(int argc, char **argv) ...@@ -227,7 +227,7 @@ int dsa_main(int argc, char **argv)
goto end; goto end;
if (text) { if (text) {
assert(private); assert(pubin || private);
if (!DSA_print(out, dsa, 0)) { if (!DSA_print(out, dsa, 0)) {
perror(outfile); perror(outfile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
...@@ -267,6 +267,11 @@ int dsa_main(int argc, char **argv) ...@@ -267,6 +267,11 @@ int dsa_main(int argc, char **argv)
pk = EVP_PKEY_new(); pk = EVP_PKEY_new();
EVP_PKEY_set1_DSA(pk, dsa); EVP_PKEY_set1_DSA(pk, dsa);
if (outformat == FORMAT_PVK) { if (outformat == FORMAT_PVK) {
if (pubin) {
BIO_printf(bio_err, "PVK form impossible with public key input\n");
EVP_PKEY_free(pk);
goto end;
}
assert(private); assert(private);
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout); i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
} }
......
...@@ -194,7 +194,7 @@ int ec_main(int argc, char **argv) ...@@ -194,7 +194,7 @@ int ec_main(int argc, char **argv)
argc = opt_num_rest(); argc = opt_num_rest();
argv = opt_rest(); argv = opt_rest();
private = param_out || pubin || pubout ? 0 : 1; private = param_out || pubin || pubout ? 0 : 1;
if (text) if (text && !pubin)
private = 1; private = 1;
if (!app_passwd(passinarg, passoutarg, &passin, &passout)) { if (!app_passwd(passinarg, passoutarg, &passin, &passout)) {
...@@ -237,7 +237,7 @@ int ec_main(int argc, char **argv) ...@@ -237,7 +237,7 @@ int ec_main(int argc, char **argv)
EC_KEY_set_asn1_flag(eckey, asn1_flag); EC_KEY_set_asn1_flag(eckey, asn1_flag);
if (text) { if (text) {
assert(private); assert(pubin || private);
if (!EC_KEY_print(out, eckey, 0)) { if (!EC_KEY_print(out, eckey, 0)) {
perror(outfile); perror(outfile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
......
...@@ -182,18 +182,20 @@ int pkey_main(int argc, char **argv) ...@@ -182,18 +182,20 @@ int pkey_main(int argc, char **argv)
if (!noout) { if (!noout) {
if (outformat == FORMAT_PEM) { if (outformat == FORMAT_PEM) {
assert(private);
if (pubout) if (pubout)
PEM_write_bio_PUBKEY(out, pkey); PEM_write_bio_PUBKEY(out, pkey);
else else {
assert(private);
PEM_write_bio_PrivateKey(out, pkey, cipher, PEM_write_bio_PrivateKey(out, pkey, cipher,
NULL, 0, NULL, passout); NULL, 0, NULL, passout);
}
} else if (outformat == FORMAT_ASN1) { } else if (outformat == FORMAT_ASN1) {
assert(private);
if (pubout) if (pubout)
i2d_PUBKEY_bio(out, pkey); i2d_PUBKEY_bio(out, pkey);
else else {
assert(private);
i2d_PrivateKey_bio(out, pkey); i2d_PrivateKey_bio(out, pkey);
}
} else { } else {
BIO_printf(bio_err, "Bad format specified for key\n"); BIO_printf(bio_err, "Bad format specified for key\n");
goto end; goto end;
......
...@@ -250,7 +250,7 @@ int rsa_main(int argc, char **argv) ...@@ -250,7 +250,7 @@ int rsa_main(int argc, char **argv)
} }
argc = opt_num_rest(); argc = opt_num_rest();
argv = opt_rest(); argv = opt_rest();
private = text || (!pubout && !noout) ? 1 : 0; private = (text && !pubin) || (!pubout && !noout) ? 1 : 0;
if (!app_passwd(passinarg, passoutarg, &passin, &passout)) { if (!app_passwd(passinarg, passoutarg, &passin, &passout)) {
BIO_printf(bio_err, "Error getting passwords\n"); BIO_printf(bio_err, "Error getting passwords\n");
...@@ -293,7 +293,7 @@ int rsa_main(int argc, char **argv) ...@@ -293,7 +293,7 @@ int rsa_main(int argc, char **argv)
goto end; goto end;
if (text) { if (text) {
assert(private); assert(pubin || private);
if (!RSA_print(out, rsa, 0)) { if (!RSA_print(out, rsa, 0)) {
perror(outfile); perror(outfile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
...@@ -364,11 +364,17 @@ int rsa_main(int argc, char **argv) ...@@ -364,11 +364,17 @@ int rsa_main(int argc, char **argv)
EVP_PKEY *pk; EVP_PKEY *pk;
pk = EVP_PKEY_new(); pk = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pk, rsa); EVP_PKEY_set1_RSA(pk, rsa);
if (outformat == FORMAT_PVK) if (outformat == FORMAT_PVK) {
if (pubin) {
BIO_printf(bio_err, "PVK form impossible with public key input\n");
EVP_PKEY_free(pk);
goto end;
}
assert(private);
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout); i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
else if (pubin || pubout) } else if (pubin || pubout) {
i = i2b_PublicKey_bio(out, pk); i = i2b_PublicKey_bio(out, pk);
else { } else {
assert(private); assert(private);
i = i2b_PrivateKey_bio(out, pk); i = i2b_PrivateKey_bio(out, pk);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册