13 #define WrapX509Attr(klass, obj, attr) do { \
15 ossl_raise(rb_eRuntimeError, "ATTR wasn't initialized!"); \
17 (obj) = Data_Wrap_Struct((klass), 0, X509_ATTRIBUTE_free, (attr)); \
19 #define GetX509Attr(obj, attr) do { \
20 Data_Get_Struct((obj), X509_ATTRIBUTE, (attr)); \
22 ossl_raise(rb_eRuntimeError, "ATTR wasn't initialized!"); \
25 #define SafeGetX509Attr(obj, attr) do { \
26 OSSL_Check_Kind((obj), cX509Attr); \
27 GetX509Attr((obj), (attr)); \
46 new = X509_ATTRIBUTE_new();
48 new = X509_ATTRIBUTE_dup(attr);
61 X509_ATTRIBUTE *attr, *
new;
64 if (!(
new = X509_ATTRIBUTE_dup(attr))) {
80 if (!(attr = X509_ATTRIBUTE_new()))
95 X509_ATTRIBUTE *attr, *x;
96 const unsigned char *
p;
103 x = d2i_X509_ATTRIBUTE(&attr, &p,
RSTRING_LEN(oid));
123 X509_ATTRIBUTE *attr;
128 obj = OBJ_txt2obj(s, 0);
129 if(!obj) obj = OBJ_txt2obj(s, 1);
132 X509_ATTRIBUTE_set1_object(attr, obj);
144 X509_ATTRIBUTE *attr;
151 oid = X509_ATTRIBUTE_get0_object(attr);
152 if ((nid = OBJ_obj2nid(oid)) != NID_undef)
155 if (!(out = BIO_new(BIO_s_mem())))
157 i2a_ASN1_OBJECT(out, oid);
164 #if defined(HAVE_ST_X509_ATTRIBUTE_SINGLE) || defined(HAVE_ST_SINGLE)
165 # define OSSL_X509ATTR_IS_SINGLE(attr) ((attr)->single)
166 # define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->single = 1)
168 # define OSSL_X509ATTR_IS_SINGLE(attr) (!(attr)->set)
169 # define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->set = 0)
179 X509_ATTRIBUTE *attr;
184 if(ASN1_TYPE_get(a1type) == V_ASN1_SEQUENCE){
185 ASN1_TYPE_free(a1type);
191 else sk_ASN1_TYPE_free(attr->value.set);
194 attr->value.single = a1type;
206 X509_ATTRIBUTE *attr;
212 if(attr->value.ptr ==
NULL)
return Qnil;
214 length = i2d_ASN1_TYPE(attr->value.single,
NULL);
217 i2d_ASN1_TYPE(attr->value.single, &p);
221 length = i2d_ASN1_SET_OF_ASN1_TYPE(attr->value.set,
222 (
unsigned char **)
NULL, i2d_ASN1_TYPE,
223 V_ASN1_SET, V_ASN1_UNIVERSAL, 0);
226 i2d_ASN1_SET_OF_ASN1_TYPE(attr->value.set, &p,
227 i2d_ASN1_TYPE, V_ASN1_SET, V_ASN1_UNIVERSAL, 0);
242 X509_ATTRIBUTE *attr;
248 if((len = i2d_X509_ATTRIBUTE(attr,
NULL)) <= 0)
252 if(i2d_X509_ATTRIBUTE(attr, &p) <= 0)
static VALUE ossl_x509attr_to_der(VALUE self)
static VALUE ossl_x509attr_set_oid(VALUE self, VALUE oid)
static VALUE ossl_x509attr_get_oid(VALUE self)
#define OSSL_X509ATTR_SET_SINGLE(attr)
static VALUE ossl_x509attr_alloc(VALUE klass)
#define ossl_str_adjust(str, p)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
void rb_str_set_len(VALUE, long)
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE ossl_membio2str(BIO *bio)
#define OSSL_X509ATTR_IS_SINGLE(attr)
VALUE ossl_to_der_if_possible(VALUE obj)
VALUE ossl_x509attr_new(X509_ATTRIBUTE *attr)
RUBY_EXTERN VALUE rb_cObject
static VALUE ossl_x509attr_set_value(VALUE self, VALUE value)
ASN1_TYPE * ossl_asn1_get_asn1type(VALUE obj)
X509_ATTRIBUTE * DupX509AttrPtr(VALUE obj)
void Init_ossl_x509attr()
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
void ossl_raise(VALUE exc, const char *fmt,...)
#define WrapX509Attr(klass, obj, attr)
static VALUE ossl_x509attr_get_value(VALUE self)
#define StringValuePtr(v)
static VALUE ossl_x509attr_initialize(int argc, VALUE *argv, VALUE self)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
VALUE rb_str_new2(const char *)
#define SafeGetX509Attr(obj, attr)
VALUE rb_str_new(const char *, long)
#define GetX509Attr(obj, attr)