{"help", OPT_HELP, '-', "Display this summary"},
{"inform", OPT_INFORM, 'F', "Input format, DER PEM PVK"},
{"outform", OPT_OUTFORM, 'F', "Output format, DER PEM PVK"},
- {"in", OPT_IN, '<', "Input file"},
+ {"in", OPT_IN, 's', "Input key"},
{"out", OPT_OUT, '>', "Output file"},
{"noout", OPT_NOOUT, '-', "Don't print key out"},
{"text", OPT_TEXT, '-', "Print the key in text"},
ret = 0;
goto end;
case OPT_INFORM:
- if (!opt_format
- (opt_arg(), OPT_FMT_PEMDER | OPT_FMT_PVK, &informat))
+ if (!opt_format(opt_arg(), OPT_FMT_ANY, &informat))
goto opthelp;
break;
case OPT_IN:
argc = opt_num_rest();
argv = opt_rest();
private = pubin || pubout ? 0 : 1;
- if (text)
+ if (text && !pubin)
private = 1;
if (!app_passwd(passinarg, passoutarg, &passin, &passout)) {
goto end;
}
- if (!app_load_modules(NULL))
- goto end;
-
BIO_printf(bio_err, "read DSA key\n");
{
EVP_PKEY *pkey;
goto end;
}
- out = bio_open_owner(outfile, "w", private);
+ out = bio_open_owner(outfile, outformat, private);
if (out == NULL)
goto end;
if (text) {
- assert(private);
+ assert(pubin || private);
if (!DSA_print(out, dsa, 0)) {
perror(outfile);
ERR_print_errors(bio_err);
pk = EVP_PKEY_new();
EVP_PKEY_set1_DSA(pk, dsa);
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);
}