mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/openssl/ossl_pkey.c (ossl_pkey_to_der): removed; it returns
public key only. * ext/openssl/ossl_pkey_dh.c (ossl_dh_to_der): new function for OpenSSL::PKey::DH#to_der. * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_to_der): new function for OpenSSL::PKey::DSA#to_der. * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_to_der): new function for OpenSSL::PKey::RSA#to_der. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@5418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1dc3b10764
commit
cc8ee0ad14
5 changed files with 89 additions and 22 deletions
|
@ -222,6 +222,31 @@ ossl_rsa_export(int argc, VALUE *argv, VALUE self)
|
|||
return str;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
ossl_rsa_to_der(VALUE self)
|
||||
{
|
||||
EVP_PKEY *pkey;
|
||||
int (*i2d_func)_((const RSA*, unsigned char**));
|
||||
unsigned char *p;
|
||||
long len;
|
||||
VALUE str;
|
||||
|
||||
GetPKeyRSA(self, pkey);
|
||||
if(RSA_HAS_PRIVATE(pkey->pkey.rsa))
|
||||
i2d_func = i2d_RSAPrivateKey;
|
||||
else
|
||||
i2d_func = i2d_RSAPublicKey;
|
||||
if((len = i2d_func(pkey->pkey.rsa, NULL)) <= 0)
|
||||
ossl_raise(eRSAError, NULL);
|
||||
str = rb_str_new(0, len);
|
||||
p = RSTRING(str)->ptr;
|
||||
if(i2d_func(pkey->pkey.rsa, &p) < 0)
|
||||
ossl_raise(eRSAError, NULL);
|
||||
ossl_str_adjust(str, p);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
#define ossl_rsa_buf_size(pkey) (RSA_size((pkey)->pkey.rsa)+16)
|
||||
|
||||
static VALUE
|
||||
|
@ -440,6 +465,7 @@ Init_ossl_rsa()
|
|||
rb_define_method(cRSA, "export", ossl_rsa_export, -1);
|
||||
rb_define_alias(cRSA, "to_pem", "export");
|
||||
rb_define_alias(cRSA, "to_s", "export");
|
||||
rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0);
|
||||
rb_define_method(cRSA, "public_key", ossl_rsa_to_public_key, 0);
|
||||
rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, 1);
|
||||
rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue