diff options
author | Kris Kennaway <kris@FreeBSD.org> | 2000-04-13 06:33:22 +0000 |
---|---|---|
committer | Kris Kennaway <kris@FreeBSD.org> | 2000-04-13 06:33:22 +0000 |
commit | f579bf8ec7713035a231884db9958cdc4ff5d7cf (patch) | |
tree | 85b9c007d5ac1d91a3895eef3fd18d6114b62cc4 /crypto/openssl/apps/dsa.c | |
parent | 97b2ed56f81c44973772e4cf3869f4f70e2b5d78 (diff) | |
download | src-test2-f579bf8ec7713035a231884db9958cdc4ff5d7cf.tar.gz src-test2-f579bf8ec7713035a231884db9958cdc4ff5d7cf.zip |
Notes
Diffstat (limited to 'crypto/openssl/apps/dsa.c')
-rw-r--r-- | crypto/openssl/apps/dsa.c | 86 |
1 files changed, 60 insertions, 26 deletions
diff --git a/crypto/openssl/apps/dsa.c b/crypto/openssl/apps/dsa.c index fedecf27397b..4977671b8adc 100644 --- a/crypto/openssl/apps/dsa.c +++ b/crypto/openssl/apps/dsa.c @@ -83,6 +83,8 @@ * -modulus - print the DSA public key */ +int MAIN(int, char **); + int MAIN(int argc, char **argv) { int ret=1; @@ -91,7 +93,10 @@ int MAIN(int argc, char **argv) const EVP_CIPHER *enc=NULL; BIO *in=NULL,*out=NULL; int informat,outformat,text=0,noout=0; + int pubin = 0, pubout = 0; char *infile,*outfile,*prog; + char *passargin = NULL, *passargout = NULL; + char *passin = NULL, *passout = NULL; int modulus=0; apps_startup(); @@ -130,12 +135,26 @@ int MAIN(int argc, char **argv) if (--argc < 1) goto bad; outfile= *(++argv); } + else if (strcmp(*argv,"-passin") == 0) + { + if (--argc < 1) goto bad; + passargin= *(++argv); + } + else if (strcmp(*argv,"-passout") == 0) + { + if (--argc < 1) goto bad; + passargout= *(++argv); + } else if (strcmp(*argv,"-noout") == 0) noout=1; else if (strcmp(*argv,"-text") == 0) text=1; else if (strcmp(*argv,"-modulus") == 0) modulus=1; + else if (strcmp(*argv,"-pubin") == 0) + pubin=1; + else if (strcmp(*argv,"-pubout") == 0) + pubout=1; else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL) { BIO_printf(bio_err,"unknown option %s\n",*argv); @@ -151,23 +170,30 @@ int MAIN(int argc, char **argv) bad: BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog); BIO_printf(bio_err,"where options are\n"); - BIO_printf(bio_err," -inform arg input format - one of DER NET PEM\n"); - BIO_printf(bio_err," -outform arg output format - one of DER NET PEM\n"); - BIO_printf(bio_err," -in arg input file\n"); - BIO_printf(bio_err," -out arg output file\n"); - BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); - BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); + BIO_printf(bio_err," -inform arg input format - DER or PEM\n"); + BIO_printf(bio_err," -outform arg output format - DER or PEM\n"); + BIO_printf(bio_err," -in arg input file\n"); + BIO_printf(bio_err," -passin arg input file pass phrase source\n"); + BIO_printf(bio_err," -out arg output file\n"); + BIO_printf(bio_err," -passout arg output file pass phrase source\n"); + BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); + BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); #ifndef NO_IDEA - BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n"); + BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n"); #endif - BIO_printf(bio_err," -text print the key in text\n"); - BIO_printf(bio_err," -noout don't print key out\n"); - BIO_printf(bio_err," -modulus print the DSA public value\n"); + BIO_printf(bio_err," -text print the key in text\n"); + BIO_printf(bio_err," -noout don't print key out\n"); + BIO_printf(bio_err," -modulus print the DSA public value\n"); goto end; } ERR_load_crypto_strings(); + if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { + BIO_printf(bio_err, "Error getting passwords\n"); + goto end; + } + in=BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file()); if ((in == NULL) || (out == NULL)) @@ -187,19 +213,21 @@ bad: } } - BIO_printf(bio_err,"read DSA private key\n"); - if (informat == FORMAT_ASN1) - dsa=d2i_DSAPrivateKey_bio(in,NULL); - else if (informat == FORMAT_PEM) - dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL,NULL); - else + BIO_printf(bio_err,"read DSA key\n"); + if (informat == FORMAT_ASN1) { + if(pubin) dsa=d2i_DSA_PUBKEY_bio(in,NULL); + else dsa=d2i_DSAPrivateKey_bio(in,NULL); + } else if (informat == FORMAT_PEM) { + if(pubin) dsa=PEM_read_bio_DSA_PUBKEY(in,NULL, NULL, NULL); + else dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL,passin); + } else { BIO_printf(bio_err,"bad input format specified for key\n"); goto end; } if (dsa == NULL) { - BIO_printf(bio_err,"unable to load Private Key\n"); + BIO_printf(bio_err,"unable to load Key\n"); ERR_print_errors(bio_err); goto end; } @@ -231,12 +259,16 @@ bad: } if (noout) goto end; - BIO_printf(bio_err,"writing DSA private key\n"); - if (outformat == FORMAT_ASN1) - i=i2d_DSAPrivateKey_bio(out,dsa); - else if (outformat == FORMAT_PEM) - i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL,NULL); - else { + BIO_printf(bio_err,"writing DSA key\n"); + if (outformat == FORMAT_ASN1) { + if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa); + else i=i2d_DSAPrivateKey_bio(out,dsa); + } else if (outformat == FORMAT_PEM) { + if(pubin || pubout) + i=PEM_write_bio_DSA_PUBKEY(out,dsa); + else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc, + NULL,0,NULL, passout); + } else { BIO_printf(bio_err,"bad output format specified for outfile\n"); goto end; } @@ -248,9 +280,11 @@ bad: else ret=0; end: - if (in != NULL) BIO_free(in); - if (out != NULL) BIO_free(out); - if (dsa != NULL) DSA_free(dsa); + if(in != NULL) BIO_free(in); + if(out != NULL) BIO_free(out); + if(dsa != NULL) DSA_free(dsa); + if(passin) Free(passin); + if(passout) Free(passout); EXIT(ret); } #endif |