12 #define NewX509Attr(klass) \ 13 TypedData_Wrap_Struct((klass), &ossl_x509attr_type, 0) 14 #define SetX509Attr(obj, attr) do { \ 16 ossl_raise(rb_eRuntimeError, "ATTR wasn't initialized!"); \ 18 RTYPEDDATA_DATA(obj) = (attr); \ 20 #define GetX509Attr(obj, attr) do { \ 21 TypedData_Get_Struct((obj), X509_ATTRIBUTE, &ossl_x509attr_type, (attr)); \ 23 ossl_raise(rb_eRuntimeError, "ATTR wasn't initialized!"); \ 26 #define SafeGetX509Attr(obj, attr) do { \ 27 OSSL_Check_Kind((obj), cX509Attr); \ 28 GetX509Attr((obj), (attr)); \ 40 X509_ATTRIBUTE_free(ptr);
44 "OpenSSL/X509/ATTRIBUTE",
62 new = X509_ATTRIBUTE_new();
64 new = X509_ATTRIBUTE_dup(attr);
94 if (!(attr = X509_ATTRIBUTE_new()))
109 X509_ATTRIBUTE *attr, *x;
110 const unsigned char *p;
117 x = d2i_X509_ATTRIBUTE(&attr, &p,
RSTRING_LEN(oid));
133 X509_ATTRIBUTE *attr, *attr_other, *attr_new;
139 attr_new = X509_ATTRIBUTE_dup(attr_other);
144 X509_ATTRIBUTE_free(attr);
156 X509_ATTRIBUTE *attr;
162 obj = OBJ_txt2obj(s, 0);
164 if (!X509_ATTRIBUTE_set1_object(attr, obj)) {
165 ASN1_OBJECT_free(obj);
168 ASN1_OBJECT_free(obj);
180 X509_ATTRIBUTE *attr;
187 oid = X509_ATTRIBUTE_get0_object(attr);
188 if ((nid = OBJ_obj2nid(oid)) != NID_undef)
191 if (!(out = BIO_new(BIO_s_mem())))
193 i2a_ASN1_OBJECT(out, oid);
207 X509_ATTRIBUTE *attr;
214 if (asn1_tag != V_ASN1_SET)
220 if (X509_ATTRIBUTE_count(attr)) {
221 ASN1_OBJECT *obj = X509_ATTRIBUTE_get0_object(attr);
222 X509_ATTRIBUTE *new_attr = X509_ATTRIBUTE_create_by_OBJ(
NULL, obj, 0,
NULL, -1);
226 X509_ATTRIBUTE_free(attr);
230 for (i = 0; i <
RARRAY_LEN(asn1_value); i++) {
232 if (!X509_ATTRIBUTE_set1_data(attr, ASN1_TYPE_get(a1type),
233 a1type->value.ptr, -1)) {
234 ASN1_TYPE_free(a1type);
237 ASN1_TYPE_free(a1type);
250 X509_ATTRIBUTE *attr;
258 if (!(sk = sk_ASN1_TYPE_new_null()))
261 count = X509_ATTRIBUTE_count(attr);
262 for (i = 0; i <
count; i++)
263 sk_ASN1_TYPE_push(sk, X509_ATTRIBUTE_get0_type(attr, i));
266 sk_ASN1_TYPE_free(sk);
272 sk_ASN1_TYPE_free(sk);
276 sk_ASN1_TYPE_free(sk);
288 X509_ATTRIBUTE *attr;
294 if((len = i2d_X509_ATTRIBUTE(attr,
NULL)) <= 0)
298 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)
#define RUBY_TYPED_FREE_IMMEDIATELY
static VALUE ossl_x509attr_initialize_copy(VALUE self, VALUE other)
static VALUE ossl_x509attr_get_oid(VALUE self)
void Init_ossl_x509attr(void)
#define NewX509Attr(klass)
static VALUE ossl_x509attr_alloc(VALUE klass)
#define ossl_str_adjust(str, p)
static void ossl_x509attr_free(void *ptr)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
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)
STACK_OF(X509) *ossl_x509_ary2sk0(VALUE)
VALUE ossl_membio2str(BIO *bio)
static const rb_data_type_t ossl_x509attr_type
#define RB_TYPE_P(obj, type)
#define rb_define_copy_func(klass, func)
VALUE ossl_to_der_if_possible(VALUE obj)
VALUE ossl_x509attr_new(X509_ATTRIBUTE *attr)
RUBY_EXTERN VALUE rb_cObject
#define SetX509Attr(obj, attr)
X509_ATTRIBUTE * GetX509AttrPtr(VALUE obj)
static VALUE ossl_x509attr_set_value(VALUE self, VALUE value)
ASN1_TYPE * ossl_asn1_get_asn1type(VALUE obj)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
register unsigned int len
VALUE rb_define_module_under(VALUE outer, const char *name)
#define StringValueCStr(v)
#define RARRAY_AREF(a, i)
#define OSSL_Check_Kind(obj, klass)
void ossl_raise(VALUE exc, const char *fmt,...)
static VALUE ossl_x509attr_get_value(VALUE self)
#define rb_check_frozen(obj)
static VALUE ossl_x509attr_initialize(int argc, VALUE *argv, VALUE self)
VALUE rb_define_module(const char *name)
#define i2d_ASN1_SET_ANY(sk, x)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
#define SafeGetX509Attr(obj, attr)
VALUE rb_attr_get(VALUE, ID)
VALUE rb_str_new(const char *, long)
#define GetX509Attr(obj, attr)