Ruby
3.1.0dev(2021-09-10revisionb76ad15ed0da636161de0243c547ee1e6fc95681)
|
Go to the documentation of this file.
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!");\
96 #define OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, _name, _get) \
101 static VALUE ossl_##_keytype##_get_##_name(VALUE self) \
106 Get##_type(self, obj); \
110 return ossl_bn_new(bn); \
113 #define OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \
114 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a1, \
115 _type##_get0_##_group(obj, &bn, NULL, NULL)) \
116 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \
117 _type##_get0_##_group(obj, NULL, &bn, NULL)) \
118 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a3, \
119 _type##_get0_##_group(obj, NULL, NULL, &bn))
121 #define OSSL_PKEY_BN_DEF_GETTER2(_keytype, _type, _group, a1, a2) \
122 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a1, \
123 _type##_get0_##_group(obj, &bn, NULL)) \
124 OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \
125 _type##_get0_##_group(obj, NULL, &bn))
127 #define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \
132 static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALUE v3) \
135 BIGNUM *bn1 = NULL, *orig_bn1 = NIL_P(v1) ? NULL : GetBNPtr(v1);\
136 BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\
137 BIGNUM *bn3 = NULL, *orig_bn3 = NIL_P(v3) ? NULL : GetBNPtr(v3);\
139 Get##_type(self, obj); \
140 if ((orig_bn1 && !(bn1 = BN_dup(orig_bn1))) || \
141 (orig_bn2 && !(bn2 = BN_dup(orig_bn2))) || \
142 (orig_bn3 && !(bn3 = BN_dup(orig_bn3)))) { \
143 BN_clear_free(bn1); \
144 BN_clear_free(bn2); \
145 BN_clear_free(bn3); \
146 ossl_raise(eBNError, NULL); \
149 if (!_type##_set0_##_group(obj, bn1, bn2, bn3)) { \
150 BN_clear_free(bn1); \
151 BN_clear_free(bn2); \
152 BN_clear_free(bn3); \
153 ossl_raise(ePKeyError, #_type"_set0_"#_group); \
158 #define OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \
163 static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \
166 BIGNUM *bn1 = NULL, *orig_bn1 = NIL_P(v1) ? NULL : GetBNPtr(v1);\
167 BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\
169 Get##_type(self, obj); \
170 if ((orig_bn1 && !(bn1 = BN_dup(orig_bn1))) || \
171 (orig_bn2 && !(bn2 = BN_dup(orig_bn2)))) { \
172 BN_clear_free(bn1); \
173 BN_clear_free(bn2); \
174 ossl_raise(eBNError, NULL); \
177 if (!_type##_set0_##_group(obj, bn1, bn2)) { \
178 BN_clear_free(bn1); \
179 BN_clear_free(bn2); \
180 ossl_raise(ePKeyError, #_type"_set0_"#_group); \
185 #define OSSL_PKEY_BN_DEF3(_keytype, _type, _group, a1, a2, a3) \
186 OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \
187 OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3)
189 #define OSSL_PKEY_BN_DEF2(_keytype, _type, _group, a1, a2) \
190 OSSL_PKEY_BN_DEF_GETTER2(_keytype, _type, _group, a1, a2) \
191 OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2)
193 #define DEF_OSSL_PKEY_BN(class, keytype, name) \
194 rb_define_method((class), #name, ossl_##keytype##_get_##name, 0)
VALUE ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der)
EVP_PKEY * GetPKeyPtr(VALUE)
VALUE ossl_pkey_new(EVP_PKEY *)
EVP_PKEY * ossl_pkey_read_generic(BIO *, VALUE)
VALUE ossl_ec_new(EVP_PKEY *)
EVP_PKEY * GetPrivPKeyPtr(VALUE)
const rb_data_type_t ossl_evp_pkey_type
void ossl_pkey_check_public_key(const EVP_PKEY *)
void Init_ossl_pkey(void)
VALUE ossl_pkey_export_spki(VALUE self, int to_der)
EVP_PKEY * DupPKeyPtr(VALUE)