Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • openssl/lib/openssl/x509-internal.rb
  • openssl/ossl_ssl_session.c

Class/Module Index [+]

Quicksearch

OpenSSL::X509::Name

Public Class Methods

X509::Name.new => name click to toggle source
X509::Name.new(string) => name
X509::Name.new(dn) => name
X509::Name.new(dn, template) => name
 
               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;
}
            
parse(str, template=OBJECT_TYPE_TEMPLATE) click to toggle source
Alias for: parse_openssl
parse_openssl(str, template=OBJECT_TYPE_TEMPLATE) click to toggle source
 
               # 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
            
Also aliased as: parse
parse_rfc2253(str, template=OBJECT_TYPE_TEMPLATE) click to toggle source
 
               # File openssl/lib/openssl/x509-internal.rb, line 138
def parse_rfc2253(str, template=OBJECT_TYPE_TEMPLATE)
  ary = OpenSSL::X509::Name::RFC2253DN.scan(str)
  self.new(ary, template)
end
            

Public Instance Methods

<=>(p1) click to toggle source
Alias for: cmp
add_entry(oid, value [, type]) => self click to toggle source
 
               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;
}
            
cmp other => integer click to toggle source
<=> other => integer

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);
}
            
Also aliased as: <=>
eql?(p1) click to toggle source
 
               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;
}
            
hash => integer click to toggle source

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);
}
            
hash_old => integer click to toggle source

#hash_old returns MD5 based hash used in OpenSSL 0.9.X.

 
               static VALUE
ossl_x509name_hash_old(VALUE self)
{
    X509_NAME *name;
    unsigned long hash;

    GetX509Name(self, name);

    hash = X509_NAME_hash_old(name);

    return ULONG2NUM(hash);
}
            
to_a => [[name, data, type], ...] click to toggle source
 
               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;
}
            
to_der => string click to toggle source
 
               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;
}
            
to_s => string click to toggle source
to_s(integer) => string
 
               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.