summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2001-04-11 14:11:55 +0000
committerRichard Levitte <levitte@openssl.org>2001-04-11 14:11:55 +0000
commit95874603b08b4a28c7c01b590af7bb6278cca119 (patch)
treec92c2ba52564bf6c4c80e5e7f8df2ed0f25affad /apps
parented2e24d564de40fb23d8f4b363a50e91bd12dcf9 (diff)
Add -keyform.
Diffstat (limited to 'apps')
-rw-r--r--apps/smime.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/apps/smime.c b/apps/smime.c
index ff5bad2e04..0eee74077b 100644
--- a/apps/smime.c
+++ b/apps/smime.c
@@ -104,6 +104,7 @@ int MAIN(int argc, char **argv)
char *inrand = NULL;
int need_rand = 0;
int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
+ int keyform = FORMAT_PEM;
char *engine=NULL;
args = argv + 1;
@@ -195,6 +196,11 @@ int MAIN(int argc, char **argv)
args++;
keyfile = *args;
} else badarg = 1;
+ } else if (!strcmp (*args, "-keyform")) {
+ if (args[1]) {
+ args++;
+ keyform = str2fmt(*args);
+ } else badarg = 1;
} else if (!strcmp (*args, "-certfile")) {
if (args[1]) {
args++;
@@ -288,6 +294,7 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-in file input file\n");
BIO_printf (bio_err, "-inform arg input format SMIME (default), PEM or DER\n");
BIO_printf (bio_err, "-inkey file input private key (if not signer or recipient)\n");
+ BIO_printf (bio_err, "-keyform arg input private key format (PEM or ENGINE)\n");
BIO_printf (bio_err, "-out file output file\n");
BIO_printf (bio_err, "-outform arg output format SMIME (default), PEM or DER\n");
BIO_printf (bio_err, "-content file supply or override content for detached signature\n");
@@ -399,11 +406,19 @@ int MAIN(int argc, char **argv)
} else keyfile = NULL;
if(keyfile) {
- if(!(key = load_key(bio_err,keyfile, FORMAT_PEM, passin, NULL))) {
- BIO_printf(bio_err, "Can't read recipient certificate file %s\n", keyfile);
- ERR_print_errors(bio_err);
- goto end;
- }
+ if (keyform == FORMAT_ENGINE) {
+ if (!e) {
+ BIO_printf(bio_err,"no engine specified\n");
+ goto err;
+ }
+ key = ENGINE_load_private_key(e, keyfile, passin);
+ } else {
+ if(!(key = load_key(bio_err,keyfile, FORMAT_PEM, passin, NULL))) {
+ BIO_printf(bio_err, "Can't read recipient certificate file %s\n", keyfile);
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
}
if (infile) {