提交 eea374fd 编写于 作者: D Dr. Stephen Henson

Command line support for RSAPublicKey format.

上级 2e8879fa
...@@ -4,9 +4,13 @@ ...@@ -4,9 +4,13 @@
Changes between 0.9.8 and 0.9.9 [xx XXX xxxx] Changes between 0.9.8 and 0.9.9 [xx XXX xxxx]
*) Support for PKCS#1 RSAPublicKey format on rsa utility command line.
[Steve Henson]
*) Remove the ancient ASN1_METHOD code. This was only ever used in one *) Remove the ancient ASN1_METHOD code. This was only ever used in one
place for the (very old) "NETSCAPE" format certificates which are now place for the (very old) "NETSCAPE" format certificates which are now
handled using new ASN1 code equivalents. handled using new ASN1 code equivalents.
[Steve Henson]
*) Let the TLSv1_method() etc. functions return a 'const' SSL_METHOD *) Let the TLSv1_method() etc. functions return a 'const' SSL_METHOD
pointer and make the SSL_METHOD parameter in SSL_CTX_new, pointer and make the SSL_METHOD parameter in SSL_CTX_new,
......
...@@ -940,6 +940,36 @@ EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, ...@@ -940,6 +940,36 @@ EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
{ {
pkey=d2i_PUBKEY_bio(key, NULL); pkey=d2i_PUBKEY_bio(key, NULL);
} }
else if (format == FORMAT_ASN1RSA)
{
RSA *rsa;
rsa = d2i_RSAPublicKey_bio(key, NULL);
if (rsa)
{
pkey = EVP_PKEY_new();
if (pkey)
EVP_PKEY_set1_RSA(pkey, rsa);
RSA_free(rsa);
}
else
pkey = NULL;
}
else if (format == FORMAT_PEMRSA)
{
RSA *rsa;
rsa = PEM_read_bio_RSAPublicKey(key, NULL,
(pem_password_cb *)password_callback, &cb_data);
if (rsa)
{
pkey = EVP_PKEY_new();
if (pkey)
EVP_PKEY_set1_RSA(pkey, rsa);
RSA_free(rsa);
}
else
pkey = NULL;
}
else if (format == FORMAT_PEM) else if (format == FORMAT_PEM)
{ {
pkey=PEM_read_bio_PUBKEY(key,NULL, pkey=PEM_read_bio_PUBKEY(key,NULL,
......
...@@ -331,6 +331,8 @@ void policies_print(BIO *out, X509_STORE_CTX *ctx); ...@@ -331,6 +331,8 @@ void policies_print(BIO *out, X509_STORE_CTX *ctx);
#define FORMAT_ENGINE 7 #define FORMAT_ENGINE 7
#define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid #define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid
* adding yet another param to load_*key() */ * adding yet another param to load_*key() */
#define FORMAT_PEMRSA 9 /* PEM RSAPubicKey format */
#define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */
#define EXT_COPY_NONE 0 #define EXT_COPY_NONE 0
#define EXT_COPY_ADD 1 #define EXT_COPY_ADD 1
......
...@@ -173,6 +173,10 @@ int MAIN(int argc, char **argv) ...@@ -173,6 +173,10 @@ int MAIN(int argc, char **argv)
pubin=1; pubin=1;
else if (strcmp(*argv,"-pubout") == 0) else if (strcmp(*argv,"-pubout") == 0)
pubout=1; pubout=1;
else if (strcmp(*argv,"-RSAPublicKey_in") == 0)
pubin = 2;
else if (strcmp(*argv,"-RSAPublicKey_out") == 0)
pubout = 2;
else if (strcmp(*argv,"-noout") == 0) else if (strcmp(*argv,"-noout") == 0)
noout=1; noout=1;
else if (strcmp(*argv,"-text") == 0) else if (strcmp(*argv,"-text") == 0)
...@@ -246,10 +250,23 @@ bad: ...@@ -246,10 +250,23 @@ bad:
EVP_PKEY *pkey; EVP_PKEY *pkey;
if (pubin) if (pubin)
pkey = load_pubkey(bio_err, infile, {
(informat == FORMAT_NETSCAPE && sgckey ? int tmpformat;
FORMAT_IISSGC : informat), 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"); passin, e, "Public Key");
}
else else
pkey = load_key(bio_err, infile, pkey = load_key(bio_err, infile,
(informat == FORMAT_NETSCAPE && sgckey ? (informat == FORMAT_NETSCAPE && sgckey ?
...@@ -335,7 +352,13 @@ bad: ...@@ -335,7 +352,13 @@ bad:
} }
BIO_printf(bio_err,"writing RSA key\n"); BIO_printf(bio_err,"writing RSA key\n");
if (outformat == FORMAT_ASN1) { 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); else i=i2d_RSAPrivateKey_bio(out,rsa);
} }
#ifndef OPENSSL_NO_RC4 #ifndef OPENSSL_NO_RC4
...@@ -359,7 +382,12 @@ bad: ...@@ -359,7 +382,12 @@ bad:
#endif #endif
else if (outformat == FORMAT_PEM) { else if (outformat == FORMAT_PEM) {
if(pubout || pubin) 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, else i=PEM_write_bio_RSAPrivateKey(out,rsa,
enc,NULL,0,NULL,passout); enc,NULL,0,NULL,passout);
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册