10 #if !defined(_OSSL_PKEY_H_) 18 #define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue) 19 #define OSSL_PKEY_SET_PUBLIC(obj) rb_iv_set((obj), "private", Qfalse) 20 #define OSSL_PKEY_IS_PRIVATE(obj) (rb_iv_get((obj), "private") == Qtrue) 22 #define NewPKey(klass) \ 23 TypedData_Wrap_Struct((klass), &ossl_evp_pkey_type, 0) 24 #define SetPKey(obj, pkey) do { \ 26 rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \ 28 RTYPEDDATA_DATA(obj) = (pkey); \ 29 OSSL_PKEY_SET_PUBLIC(obj); \ 31 #define GetPKey(obj, pkey) do {\ 32 TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)); \ 34 rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!");\ 37 #define SafeGetPKey(obj, pkey) do { \ 38 OSSL_Check_Kind((obj), cPKey); \ 39 GetPKey((obj), (pkey)); \ 95 #define OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, _name, _get) \ 100 static VALUE ossl_##_keytype##_get_##_name(VALUE self) \ 105 Get##_type(self, obj); \ 109 return ossl_bn_new(bn); \ 112 #define OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \ 113 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a1, \ 114 _type##_get0_##_group(obj, &bn, NULL, NULL)) \ 115 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \ 116 _type##_get0_##_group(obj, NULL, &bn, NULL)) \ 117 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a3, \ 118 _type##_get0_##_group(obj, NULL, NULL, &bn)) 120 #define OSSL_PKEY_BN_DEF_GETTER2(_keytype, _type, _group, a1, a2) \ 121 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a1, \ 122 _type##_get0_##_group(obj, &bn, NULL)) \ 123 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \ 124 _type##_get0_##_group(obj, NULL, &bn)) 126 #define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ 131 static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALUE v3) \ 134 BIGNUM *bn1 = NULL, *orig_bn1 = NIL_P(v1) ? NULL : GetBNPtr(v1);\ 135 BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\ 136 BIGNUM *bn3 = NULL, *orig_bn3 = NIL_P(v3) ? NULL : GetBNPtr(v3);\ 138 Get##_type(self, obj); \ 139 if (orig_bn1 && !(bn1 = BN_dup(orig_bn1)) || \ 140 orig_bn2 && !(bn2 = BN_dup(orig_bn2)) || \ 141 orig_bn3 && !(bn3 = BN_dup(orig_bn3))) { \ 142 BN_clear_free(bn1); \ 143 BN_clear_free(bn2); \ 144 BN_clear_free(bn3); \ 145 ossl_raise(eBNError, NULL); \ 148 if (!_type##_set0_##_group(obj, bn1, bn2, bn3)) { \ 149 BN_clear_free(bn1); \ 150 BN_clear_free(bn2); \ 151 BN_clear_free(bn3); \ 152 ossl_raise(ePKeyError, #_type"_set0_"#_group); \ 157 #define OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \ 162 static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ 165 BIGNUM *bn1 = NULL, *orig_bn1 = NIL_P(v1) ? NULL : GetBNPtr(v1);\ 166 BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\ 168 Get##_type(self, obj); \ 169 if (orig_bn1 && !(bn1 = BN_dup(orig_bn1)) || \ 170 orig_bn2 && !(bn2 = BN_dup(orig_bn2))) { \ 171 BN_clear_free(bn1); \ 172 BN_clear_free(bn2); \ 173 ossl_raise(eBNError, NULL); \ 176 if (!_type##_set0_##_group(obj, bn1, bn2)) { \ 177 BN_clear_free(bn1); \ 178 BN_clear_free(bn2); \ 179 ossl_raise(ePKeyError, #_type"_set0_"#_group); \ 184 #define OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, _name) \ 189 static VALUE ossl_##_keytype##_set_##_name(VALUE self, VALUE bignum) \ 194 rb_warning("#"#_name"= is deprecated; use #set_"#_group); \ 195 Get##_type(self, obj); \ 196 if (NIL_P(bignum)) { \ 197 BN_clear_free(obj->_name); \ 202 bn = GetBNPtr(bignum); \ 203 if (obj->_name == NULL) \ 204 obj->_name = BN_new(); \ 205 if (obj->_name == NULL) \ 206 ossl_raise(eBNError, NULL); \ 207 if (BN_copy(obj->_name, bn) == NULL) \ 208 ossl_raise(eBNError, NULL); \ 212 #if defined(HAVE_OPAQUE_OPENSSL) 213 #define OSSL_PKEY_BN_DEF3(_keytype, _type, _group, a1, a2, a3) \ 214 OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \ 215 OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) 217 #define OSSL_PKEY_BN_DEF2(_keytype, _type, _group, a1, a2) \ 218 OSSL_PKEY_BN_DEF_GETTER2(_keytype, _type, _group, a1, a2) \ 219 OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) 221 #define DEF_OSSL_PKEY_BN(class, keytype, name) \ 222 rb_define_method((class), #name, ossl_##keytype##_get_##name, 0) 225 #define OSSL_PKEY_BN_DEF3(_keytype, _type, _group, a1, a2, a3) \ 226 OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \ 227 OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ 228 OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a1) \ 229 OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a2) \ 230 OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a3) 232 #define OSSL_PKEY_BN_DEF2(_keytype, _type, _group, a1, a2) \ 233 OSSL_PKEY_BN_DEF_GETTER2(_keytype, _type, _group, a1, a2) \ 234 OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \ 235 OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a1) \ 236 OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a2) 238 #define DEF_OSSL_PKEY_BN(class, keytype, name) do { \ 239 rb_define_method((class), #name, ossl_##keytype##_get_##name, 0);\ 240 rb_define_method((class), #name "=", ossl_##keytype##_set_##name, 1);\
void Init_ossl_pkey(void)
VALUE ossl_dsa_new(EVP_PKEY *)
VALUE ossl_rsa_new(EVP_PKEY *)
VALUE ossl_dh_new(EVP_PKEY *)
const rb_data_type_t ossl_evp_pkey_type
int ossl_generate_cb_2(int p, int n, BN_GENCB *cb)
EVP_PKEY * GetPKeyPtr(VALUE)
EVP_PKEY * GetPrivPKeyPtr(VALUE)
EVP_PKEY * DupPKeyPtr(VALUE)
VALUE ossl_ec_new(EVP_PKEY *)
VALUE ossl_pkey_new(EVP_PKEY *)
void ossl_generate_cb_stop(void *ptr)