| 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)