11 #if !defined(OPENSSL_NO_RSA)
15 #define GetPKeyRSA(obj, pkey) do { \
16 GetPKey((obj), (pkey)); \
17 if (EVP_PKEY_type((pkey)->type) != EVP_PKEY_RSA) { \
18 ossl_raise(rb_eRuntimeError, "THIS IS NOT A RSA!") ; \
22 #define RSA_HAS_PRIVATE(rsa) ((rsa)->p && (rsa)->q)
23 #define RSA_PRIVATE(obj,rsa) (RSA_HAS_PRIVATE(rsa)||OSSL_PKEY_IS_PRIVATE(obj))
43 if (!(pkey = EVP_PKEY_new())) {
46 if (!EVP_PKEY_assign_RSA(pkey, rsa)) {
64 if (EVP_PKEY_type(pkey->type) != EVP_PKEY_RSA) {
79 #if defined(HAVE_RSA_GENERATE_KEY_EX) && HAVE_BN_GENCB
80 struct rsa_blocking_gen_arg {
89 rsa_blocking_gen(
void *
arg)
91 struct rsa_blocking_gen_arg *gen = (
struct rsa_blocking_gen_arg *)arg;
92 gen->result = RSA_generate_key_ex(gen->rsa, gen->size, gen->e, gen->cb);
100 #if defined(HAVE_RSA_GENERATE_KEY_EX) && HAVE_BN_GENCB
103 struct ossl_generate_cb_arg cb_arg;
104 struct rsa_blocking_gen_arg gen_arg;
105 RSA *rsa = RSA_new();
106 BIGNUM *e = BN_new();
110 if (rsa) RSA_free(rsa);
113 for (i = 0; i < (int)
sizeof(exp) * 8; ++i) {
114 if (exp & (1UL << i)) {
115 if (BN_set_bit(e, i) == 0) {
123 memset(&cb_arg, 0,
sizeof(
struct ossl_generate_cb_arg));
126 BN_GENCB_set(&cb, ossl_generate_cb_2, &cb_arg);
131 if (cb_arg.yield == 1) {
133 rsa_blocking_gen(&gen_arg);
138 if (!gen_arg.result) {
230 rsa = d2i_RSAPrivateKey_bio(in,
NULL);
234 rsa = d2i_RSA_PUBKEY_bio(in,
NULL);
242 rsa = d2i_RSAPublicKey_bio(in,
NULL);
249 if (!EVP_PKEY_assign_RSA(pkey, rsa)) {
307 const EVP_CIPHER *ciph =
NULL;
309 VALUE cipher, pass, str;
315 if (!
NIL_P(cipher)) {
324 if (!(out = BIO_new(BIO_s_mem()))) {
328 if (!PEM_write_bio_RSAPrivateKey(out, pkey->pkey.rsa, ciph,
334 if (!PEM_write_bio_RSA_PUBKEY(out, pkey->pkey.rsa)) {
354 int (*i2d_func)
_((
const RSA*,
unsigned char**));
361 i2d_func = i2d_RSAPrivateKey;
363 i2d_func = (int (*)(
const RSA*,
unsigned char**))i2d_RSA_PUBKEY;
364 if((len = i2d_func(pkey->pkey.rsa,
NULL)) <= 0)
368 if(i2d_func(pkey->pkey.rsa, &p) < 0)
375 #define ossl_rsa_buf_size(pkey) (RSA_size((pkey)->pkey.rsa)+16)
390 VALUE str, buffer, padding;
394 pad = (argc == 1) ? RSA_PKCS1_PADDING :
NUM2INT(padding);
419 VALUE str, buffer, padding;
423 pad = (argc == 1) ? RSA_PKCS1_PADDING :
NUM2INT(padding);
448 VALUE str, buffer, padding;
455 pad = (argc == 1) ? RSA_PKCS1_PADDING :
NUM2INT(padding);
480 VALUE str, buffer, padding;
487 pad = (argc == 1) ? RSA_PKCS1_PADDING :
NUM2INT(padding);
550 if (!(out = BIO_new(BIO_s_mem()))) {
553 if (!RSA_print(out, pkey->pkey.rsa, 0)) {
577 rsa = RSAPublicKey_dup(pkey->pkey.rsa);
626 #define DefRSAConst(x) rb_define_const(cRSA, #x,INT2FIX(RSA_##x))