| Index: openssl/apps/rsa.c
|
| ===================================================================
|
| --- openssl/apps/rsa.c (revision 105093)
|
| +++ openssl/apps/rsa.c (working copy)
|
| @@ -115,6 +115,8 @@
|
| #endif
|
| int modulus=0;
|
|
|
| + int pvk_encr = 2;
|
| +
|
| apps_startup();
|
|
|
| if (bio_err == NULL)
|
| @@ -177,6 +179,16 @@
|
| pubin=1;
|
| else if (strcmp(*argv,"-pubout") == 0)
|
| pubout=1;
|
| + else if (strcmp(*argv,"-RSAPublicKey_in") == 0)
|
| + pubin = 2;
|
| + else if (strcmp(*argv,"-RSAPublicKey_out") == 0)
|
| + pubout = 2;
|
| + else if (strcmp(*argv,"-pvk-strong") == 0)
|
| + pvk_encr=2;
|
| + else if (strcmp(*argv,"-pvk-weak") == 0)
|
| + pvk_encr=1;
|
| + else if (strcmp(*argv,"-pvk-none") == 0)
|
| + pvk_encr=0;
|
| else if (strcmp(*argv,"-noout") == 0)
|
| noout=1;
|
| else if (strcmp(*argv,"-text") == 0)
|
| @@ -257,10 +269,23 @@
|
| EVP_PKEY *pkey;
|
|
|
| if (pubin)
|
| - pkey = load_pubkey(bio_err, infile,
|
| - (informat == FORMAT_NETSCAPE && sgckey ?
|
| - FORMAT_IISSGC : informat), 1,
|
| + {
|
| + int tmpformat=-1;
|
| + if (pubin == 2)
|
| + {
|
| + if (informat == FORMAT_PEM)
|
| + tmpformat = FORMAT_PEMRSA;
|
| + else if (informat == FORMAT_ASN1)
|
| + tmpformat = FORMAT_ASN1RSA;
|
| + }
|
| + else if (informat == FORMAT_NETSCAPE && sgckey)
|
| + tmpformat = FORMAT_IISSGC;
|
| + else
|
| + tmpformat = informat;
|
| +
|
| + pkey = load_pubkey(bio_err, infile, tmpformat, 1,
|
| passin, e, "Public Key");
|
| + }
|
| else
|
| pkey = load_key(bio_err, infile,
|
| (informat == FORMAT_NETSCAPE && sgckey ?
|
| @@ -268,7 +293,7 @@
|
| passin, e, "Private Key");
|
|
|
| if (pkey != NULL)
|
| - rsa = pkey == NULL ? NULL : EVP_PKEY_get1_RSA(pkey);
|
| + rsa = EVP_PKEY_get1_RSA(pkey);
|
| EVP_PKEY_free(pkey);
|
| }
|
|
|
| @@ -346,7 +371,13 @@
|
| }
|
| BIO_printf(bio_err,"writing RSA key\n");
|
| if (outformat == FORMAT_ASN1) {
|
| - if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
|
| + if(pubout || pubin)
|
| + {
|
| + if (pubout == 2)
|
| + i=i2d_RSAPublicKey_bio(out,rsa);
|
| + else
|
| + i=i2d_RSA_PUBKEY_bio(out,rsa);
|
| + }
|
| else i=i2d_RSAPrivateKey_bio(out,rsa);
|
| }
|
| #ifndef OPENSSL_NO_RC4
|
| @@ -370,14 +401,32 @@
|
| #endif
|
| else if (outformat == FORMAT_PEM) {
|
| if(pubout || pubin)
|
| - i=PEM_write_bio_RSA_PUBKEY(out,rsa);
|
| + {
|
| + if (pubout == 2)
|
| + i=PEM_write_bio_RSAPublicKey(out,rsa);
|
| + else
|
| + i=PEM_write_bio_RSA_PUBKEY(out,rsa);
|
| + }
|
| else i=PEM_write_bio_RSAPrivateKey(out,rsa,
|
| enc,NULL,0,NULL,passout);
|
| +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
|
| + } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
|
| + EVP_PKEY *pk;
|
| + pk = EVP_PKEY_new();
|
| + EVP_PKEY_set1_RSA(pk, rsa);
|
| + if (outformat == FORMAT_PVK)
|
| + i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
|
| + else if (pubin || pubout)
|
| + i = i2b_PublicKey_bio(out, pk);
|
| + else
|
| + i = i2b_PrivateKey_bio(out, pk);
|
| + EVP_PKEY_free(pk);
|
| +#endif
|
| } else {
|
| BIO_printf(bio_err,"bad output format specified for outfile\n");
|
| goto end;
|
| }
|
| - if (!i)
|
| + if (i <= 0)
|
| {
|
| BIO_printf(bio_err,"unable to write key\n");
|
| ERR_print_errors(bio_err);
|
|
|