Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Object
static VALUE ossl_x509name_initialize(int argc, VALUE *argv, VALUE self) { X509_NAME *name; VALUE arg, template; GetX509Name(self, name); if (rb_scan_args(argc, argv, "02", &arg, &template) == 0) { return self; } else { VALUE tmp = rb_check_array_type(arg); if (!NIL_P(tmp)) { VALUE args; if(NIL_P(template)) template = OBJECT_TYPE_TEMPLATE; args = rb_ary_new3(2, self, template); rb_block_call(tmp, rb_intern("each"), 0, 0, ossl_x509name_init_i, args); } else{ const unsigned char *p; VALUE str = ossl_to_der_if_possible(arg); X509_NAME *x; StringValue(str); p = (unsigned char *)RSTRING_PTR(str); x = d2i_X509_NAME(&name, &p, RSTRING_LEN(str)); DATA_PTR(self) = name; if(!x){ ossl_raise(eX509NameError, NULL); } } } return self; }
# File openssl/lib/openssl/x509-internal.rb, line 143 def parse_openssl(str, template=OBJECT_TYPE_TEMPLATE) ary = str.scan(/\s*([^\/,]+)\s*/).collect{|i| i[0].split("=", 2) } self.new(ary, template) end
static VALUE ossl_x509name_add_entry(int argc, VALUE *argv, VALUE self) { X509_NAME *name; VALUE oid, value, type; rb_scan_args(argc, argv, "21", &oid, &value, &type); StringValue(oid); StringValue(value); if(NIL_P(type)) type = rb_aref(OBJECT_TYPE_TEMPLATE, oid); GetX509Name(self, name); if (!X509_NAME_add_entry_by_txt(name, RSTRING_PTR(oid), NUM2INT(type), (const unsigned char *)RSTRING_PTR(value), RSTRING_LENINT(value), -1, 0)) { ossl_raise(eX509NameError, NULL); } return self; }
Compares this Name with other
and
returns 0 if they are the same and -1 or +1 if they are greater or less
than each other respectively.
static VALUE ossl_x509name_cmp(VALUE self, VALUE other) { int result; result = ossl_x509name_cmp0(self, other); if (result < 0) return INT2FIX(-1); if (result > 1) return INT2FIX(1); return INT2FIX(0); }
static VALUE ossl_x509name_eql(VALUE self, VALUE other) { int result; if(CLASS_OF(other) != cX509Name) return Qfalse; result = ossl_x509name_cmp0(self, other); return (result == 0) ? Qtrue : Qfalse; }
The hash value returned is suitable for use as a certificate’s filename in a CA path.
static VALUE ossl_x509name_hash(VALUE self) { X509_NAME *name; unsigned long hash; GetX509Name(self, name); hash = X509_NAME_hash(name); return ULONG2NUM(hash); }
static VALUE ossl_x509name_to_a(VALUE self) { X509_NAME *name; X509_NAME_ENTRY *entry; int i,entries,nid; char long_name[512]; const char *short_name; VALUE ary, vname, ret; GetX509Name(self, name); entries = X509_NAME_entry_count(name); if (entries < 0) { OSSL_Debug("name entries < 0!"); return rb_ary_new(); } ret = rb_ary_new2(entries); for (i=0; i<entries; i++) { if (!(entry = X509_NAME_get_entry(name, i))) { ossl_raise(eX509NameError, NULL); } if (!i2t_ASN1_OBJECT(long_name, sizeof(long_name), entry->object)) { ossl_raise(eX509NameError, NULL); } nid = OBJ_ln2nid(long_name); if (nid == NID_undef) { vname = rb_str_new2((const char *) &long_name); } else { short_name = OBJ_nid2sn(nid); vname = rb_str_new2(short_name); /*do not free*/ } ary = rb_ary_new3(3, vname, rb_str_new((const char *)entry->value->data, entry->value->length), INT2FIX(entry->value->type)); rb_ary_push(ret, ary); } return ret; }
static VALUE ossl_x509name_to_der(VALUE self) { X509_NAME *name; VALUE str; long len; unsigned char *p; GetX509Name(self, name); if((len = i2d_X509_NAME(name, NULL)) <= 0) ossl_raise(eX509NameError, NULL); str = rb_str_new(0, len); p = (unsigned char *)RSTRING_PTR(str); if(i2d_X509_NAME(name, &p) <= 0) ossl_raise(eX509NameError, NULL); ossl_str_adjust(str, p); return str; }
static VALUE ossl_x509name_to_s(int argc, VALUE *argv, VALUE self) { X509_NAME *name; VALUE flag, str; BIO *out; unsigned long iflag; rb_scan_args(argc, argv, "01", &flag); if (NIL_P(flag)) return ossl_x509name_to_s_old(self); else iflag = NUM2ULONG(flag); if (!(out = BIO_new(BIO_s_mem()))) ossl_raise(eX509NameError, NULL); GetX509Name(self, name); if (!X509_NAME_print_ex(out, name, 0, iflag)){ BIO_free(out); ossl_raise(eX509NameError, NULL); } str = ossl_membio2str(out); return str; }
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.