Command line support for RSAPublicKey format.
This commit is contained in:
parent
2e8879fa6e
commit
eea374fd19
4
CHANGES
4
CHANGES
@ -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,
|
||||||
|
30
apps/apps.c
30
apps/apps.c
@ -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);
|
|||||||
#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
|
||||||
|
38
apps/rsa.c
38
apps/rsa.c
@ -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:
|
|||||||
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:
|
|||||||
}
|
}
|
||||||
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:
|
|||||||
#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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user