Bug #4421 » fix_rsa_pub_encoding.diff
| ruby/ext/openssl/ossl_pkey_rsa.c (working copy) | ||
|---|---|---|
|
rsa = PEM_read_bio_RSAPrivateKey(in, NULL, ossl_pem_passwd_cb, passwd);
|
||
|
if (!rsa) {
|
||
|
(void)BIO_reset(in);
|
||
|
rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL);
|
||
|
rsa = PEM_read_bio_RSA_PUBKEY(in, NULL, NULL, NULL);
|
||
|
}
|
||
|
if (!rsa) {
|
||
|
(void)BIO_reset(in);
|
||
|
rsa = PEM_read_bio_RSA_PUBKEY(in, NULL, NULL, NULL);
|
||
|
rsa = d2i_RSAPrivateKey_bio(in, NULL);
|
||
|
}
|
||
|
if (!rsa) {
|
||
|
(void)BIO_reset(in);
|
||
|
rsa = d2i_RSAPrivateKey_bio(in, NULL);
|
||
|
rsa = d2i_RSA_PUBKEY_bio(in, NULL);
|
||
|
}
|
||
|
if (!rsa) {
|
||
|
(void)BIO_reset(in);
|
||
|
rsa = d2i_RSAPublicKey_bio(in, NULL);
|
||
|
rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL);
|
||
|
}
|
||
|
if (!rsa) {
|
||
|
(void)BIO_reset(in);
|
||
|
rsa = d2i_RSA_PUBKEY_bio(in, NULL);
|
||
|
rsa = d2i_RSAPublicKey_bio(in, NULL);
|
||
|
}
|
||
|
BIO_free(in);
|
||
|
if (!rsa) ossl_raise(eRSAError, "Neither PUB key nor PRIV key:");
|
||
| ... | ... | |
|
ossl_raise(eRSAError, NULL);
|
||
|
}
|
||
|
} else {
|
||
|
if (!PEM_write_bio_RSAPublicKey(out, pkey->pkey.rsa)) {
|
||
|
if (!PEM_write_bio_RSA_PUBKEY(out, pkey->pkey.rsa)) {
|
||
|
BIO_free(out);
|
||
|
ossl_raise(eRSAError, NULL);
|
||
|
}
|
||
| ... | ... | |
|
if(RSA_HAS_PRIVATE(pkey->pkey.rsa))
|
||
|
i2d_func = i2d_RSAPrivateKey;
|
||
|
else
|
||
|
i2d_func = i2d_RSAPublicKey;
|
||
|
i2d_func = (int (*)(const RSA*, unsigned char**))i2d_RSA_PUBKEY;
|
||
|
if((len = i2d_func(pkey->pkey.rsa, NULL)) <= 0)
|
||
|
ossl_raise(eRSAError, NULL);
|
||
|
str = rb_str_new(0, len);
|
||