diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2000-01-01 16:42:49 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2000-01-01 16:42:49 +0000 |
commit | 20432eae41e35ea28a4d43c0dfc7acfdd9672812 (patch) | |
tree | ab6b92cdf2f38923e3e106968aa0dca236e0b4f9 /apps | |
parent | 47134b7864fd5e31dbdbc789d9e073742ad4c3ee (diff) | |
download | openssl-20432eae41e35ea28a4d43c0dfc7acfdd9672812.tar.gz |
Fix some of the command line password stuff. New function
that can automatically determine the type of a DER encoded
"traditional" format private key and change some of the
d2i functions to use it instead of requiring the application
to work out the key type.
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dsa.c | 5 | ||||
-rw-r--r-- | apps/openssl.cnf | 4 | ||||
-rw-r--r-- | apps/pkcs8.c | 112 | ||||
-rw-r--r-- | apps/req.c | 10 | ||||
-rw-r--r-- | apps/rsa.c | 1 |
5 files changed, 94 insertions, 38 deletions
diff --git a/apps/dsa.c b/apps/dsa.c index 94f71b5be8..c9b9d71c71 100644 --- a/apps/dsa.c +++ b/apps/dsa.c @@ -140,7 +140,7 @@ int MAIN(int argc, char **argv) else if (strcmp(*argv,"-envpassin") == 0) { if (--argc < 1) goto bad; - if(!(passin= getenv(*(++argv)))) + if(!(passin= getenv(*(++argv)))) { BIO_printf(bio_err, "Can't read environment variable %s\n", @@ -151,14 +151,13 @@ int MAIN(int argc, char **argv) else if (strcmp(*argv,"-envpassout") == 0) { if (--argc < 1) goto bad; - if(!(passout= getenv(*(++argv)))) + if(!(passout= getenv(*(++argv)))) { BIO_printf(bio_err, "Can't read environment variable %s\n", *argv); badops = 1; } - argv++; } else if (strcmp(*argv,"-passout") == 0) { diff --git a/apps/openssl.cnf b/apps/openssl.cnf index 907032900e..13aeb9b0ba 100644 --- a/apps/openssl.cnf +++ b/apps/openssl.cnf @@ -7,7 +7,9 @@ # defined. HOME = . RANDFILE = $ENV::HOME/.rnd -oid_file = $ENV::HOME/.oid + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid oid_section = new_oids # To use this configuration file with the "-extfile" option of the diff --git a/apps/pkcs8.c b/apps/pkcs8.c index 8ac9e1238d..a958333517 100644 --- a/apps/pkcs8.c +++ b/apps/pkcs8.c @@ -57,6 +57,7 @@ */ #include <stdio.h> #include <string.h> +#include "apps.h" #include <openssl/pem.h> #include <openssl/err.h> #include <openssl/evp.h> @@ -80,7 +81,7 @@ int MAIN(int argc, char **argv) X509_SIG *p8; PKCS8_PRIV_KEY_INFO *p8inf; EVP_PKEY *pkey; - char pass[50]; + char pass[50], *passin = NULL, *passout = NULL; int badarg = 0; if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); informat=FORMAT_PEM; @@ -123,6 +124,38 @@ int MAIN(int argc, char **argv) else if (!strcmp (*args, "-noiter")) iter = 1; else if (!strcmp (*args, "-nocrypt")) nocrypt = 1; else if (!strcmp (*args, "-nooct")) p8_broken = PKCS8_NO_OCTET; + else if (!strcmp(*args,"-passin")) + { + if (!args[1]) goto bad; + passin= *(++args); + } + else if (!strcmp(*args,"-envpassin")) + { + if (!args[1]) goto bad; + if(!(passin= getenv(*(++args)))) + { + BIO_printf(bio_err, + "Can't read environment variable %s\n", + *args); + badarg = 1; + } + } + else if (strcmp(*args,"-envpassout") == 0) + { + if (!args[1]) goto bad; + if(!(passout= getenv(*(++args)))) + { + BIO_printf(bio_err, + "Can't read environment variable %s\n", + *args); + badarg = 1; + } + } + else if (!strcmp(*args,"-passout")) + { + if (!args[1]) goto bad; + passout= *(++args); + } else if (!strcmp (*args, "-in")) { if (args[1]) { args++; @@ -138,26 +171,31 @@ int MAIN(int argc, char **argv) } if (badarg) { - BIO_printf (bio_err, "Usage pkcs8 [options]\n"); - BIO_printf (bio_err, "where options are\n"); - BIO_printf (bio_err, "-in file input file\n"); - BIO_printf (bio_err, "-inform X input format (DER or PEM)\n"); - BIO_printf (bio_err, "-outform X output format (DER or PEM)\n"); - BIO_printf (bio_err, "-out file output file\n"); - BIO_printf (bio_err, "-topk8 output PKCS8 file\n"); - BIO_printf (bio_err, "-nooct use (broken) no octet form\n"); - BIO_printf (bio_err, "-noiter use 1 as iteration count\n"); - BIO_printf (bio_err, "-nocrypt use or expect unencrypted private key\n"); - BIO_printf (bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n"); - BIO_printf (bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n"); + bad: + BIO_printf(bio_err, "Usage pkcs8 [options]\n"); + BIO_printf(bio_err, "where options are\n"); + BIO_printf(bio_err, "-in file input file\n"); + BIO_printf(bio_err, "-inform X input format (DER or PEM)\n"); + BIO_printf(bio_err, "-passin arg input file pass phrase\n"); + BIO_printf(bio_err, "-envpassin arg environment variable containing input file pass phrase\n"); + BIO_printf(bio_err, "-outform X output format (DER or PEM)\n"); + BIO_printf(bio_err, "-out file output file\n"); + BIO_printf(bio_err, "-passout arg input file pass phrase\n"); + BIO_printf(bio_err, "-envpassout arg environment variable containing input file pass phrase\n"); + BIO_printf(bio_err, "-topk8 output PKCS8 file\n"); + BIO_printf(bio_err, "-nooct use (broken) no octet form\n"); + BIO_printf(bio_err, "-noiter use 1 as iteration count\n"); + BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n"); + BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n"); + BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n"); return (1); } if ((pbe_nid == -1) && !cipher) pbe_nid = NID_pbeWithMD5AndDES_CBC; if (infile) { - if (!(in = BIO_new_file (infile, "rb"))) { - BIO_printf (bio_err, + if (!(in = BIO_new_file(infile, "rb"))) { + BIO_printf(bio_err, "Can't open input file %s\n", infile); return (1); } @@ -165,21 +203,29 @@ int MAIN(int argc, char **argv) if (outfile) { if (!(out = BIO_new_file (outfile, "wb"))) { - BIO_printf (bio_err, + BIO_printf(bio_err, "Can't open output file %s\n", outfile); return (1); } } else out = BIO_new_fp (stdout, BIO_NOCLOSE); if (topk8) { - if (!(pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, NULL))) { - BIO_printf (bio_err, "Error reading key\n", outfile); + if(informat == FORMAT_PEM) + pkey = PEM_read_bio_PrivateKey(in, NULL, PEM_cb, passin); + else if(informat == FORMAT_ASN1) + pkey = d2i_PrivateKey_bio(in, NULL); + else { + BIO_printf(bio_err, "Bad format specified for key\n"); + return (1); + } + if (!pkey) { + BIO_printf(bio_err, "Error reading key\n", outfile); ERR_print_errors(bio_err); return (1); } BIO_free(in); if (!(p8inf = EVP_PKEY2PKCS8(pkey))) { - BIO_printf (bio_err, "Error converting key\n", outfile); + BIO_printf(bio_err, "Error converting key\n", outfile); ERR_print_errors(bio_err); return (1); } @@ -194,17 +240,20 @@ int MAIN(int argc, char **argv) return (1); } } else { - EVP_read_pw_string(pass, 50, "Enter Encryption Password:", 1); + if(!passout) { + passout = pass; + EVP_read_pw_string(pass, 50, "Enter Encryption Password:", 1); + } if (!(p8 = PKCS8_encrypt(pbe_nid, cipher, - pass, strlen(pass), + passout, strlen(passout), NULL, 0, iter, p8inf))) { - BIO_printf (bio_err, "Error encrypting key\n", + BIO_printf(bio_err, "Error encrypting key\n", outfile); ERR_print_errors(bio_err); return (1); } if(outformat == FORMAT_PEM) - PEM_write_bio_PKCS8 (out, p8); + PEM_write_bio_PKCS8(out, p8); else if(outformat == FORMAT_ASN1) i2d_PKCS8_bio(out, p8); else { @@ -243,8 +292,11 @@ int MAIN(int argc, char **argv) ERR_print_errors(bio_err); return (1); } - EVP_read_pw_string(pass, 50, "Enter Password:", 0); - p8inf = M_PKCS8_decrypt(p8, pass, strlen(pass)); + if(!passin) { + passin = pass; + EVP_read_pw_string(pass, 50, "Enter Password:", 0); + } + p8inf = M_PKCS8_decrypt(p8, passin, strlen(passin)); X509_SIG_free(p8); } @@ -274,8 +326,14 @@ int MAIN(int argc, char **argv) } PKCS8_PRIV_KEY_INFO_free(p8inf); - - PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, NULL); + if(outformat == FORMAT_PEM) + PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, PEM_cb, passout); + else if(outformat == FORMAT_ASN1) + i2d_PrivateKey_bio(out, pkey); + else { + BIO_printf(bio_err, "Bad format specified for key\n"); + return (1); + } EVP_PKEY_free(pkey); BIO_free(out); diff --git a/apps/req.c b/apps/req.c index 24e666f0dc..5c14c71e57 100644 --- a/apps/req.c +++ b/apps/req.c @@ -237,14 +237,13 @@ int MAIN(int argc, char **argv) else if (strcmp(*argv,"-envpassout") == 0) { if (--argc < 1) goto bad; - if(!(passout= getenv(*(++argv)))) + if(!(passout= getenv(*(++argv)))) { BIO_printf(bio_err, "Can't read environment variable %s\n", *argv); badops = 1; } - argv++; } else if (strcmp(*argv,"-passout") == 0) { @@ -527,10 +526,9 @@ bad: goto end; } -/* if (keyform == FORMAT_ASN1) - rsa=d2i_RSAPrivateKey_bio(in,NULL); - else */ - if (keyform == FORMAT_PEM) + if (keyform == FORMAT_ASN1) + pkey=d2i_PrivateKey_bio(in,NULL); + else if (keyform == FORMAT_PEM) { pkey=PEM_read_bio_PrivateKey(in,NULL,PEM_cb,passin); } diff --git a/apps/rsa.c b/apps/rsa.c index 684252cc1d..7d58b1715b 100644 --- a/apps/rsa.c +++ b/apps/rsa.c @@ -161,7 +161,6 @@ int MAIN(int argc, char **argv) *argv); badops = 1; } - argv++; } else if (strcmp(*argv,"-passout") == 0) { |