Ruby 2.4
OpenSSL

OpenSSL::X509::Extension

class OpenSSL::X509::Extension

父类:Object

公共类方法

OpenSSL :: X509 :: Extension.new asn1显示源文件

OpenSSL::X509::Extension.new name, value

OpenSSL::X509::Extension.new name, value, critical

创建一个X509扩展。

延伸部可从被创建asn1的数据或来自分机namevalue。的name可以是一个OID或扩展名。如果这critical是真的,则扩展名被标记为关键。

static VALUE ossl_x509ext_initialize(int argc, VALUE *argv, VALUE self) { VALUE oid, value, critical; const unsigned char *p; X509_EXTENSION *ext, *x; GetX509Ext(self, ext if(rb_scan_args(argc, argv, "12", &oid, &value, &critical) == 1){ oid = ossl_to_der_if_possible(oid StringValue(oid p = (unsigned char *)RSTRING_PTR(oid x = d2i_X509_EXTENSION(&ext, &p, RSTRING_LEN(oid) DATA_PTR(self) = ext; if(!x) ossl_raise(eX509ExtError, NULL return self; } rb_funcall(self, rb_intern("oid="), 1, oid rb_funcall(self, rb_intern("value="), 1, value if(argc > 2) rb_funcall(self, rb_intern("critical="), 1, critical return self; }

公共实例方法

critical =(p1)显示源文件

static VALUE ossl_x509ext_set_critical(VALUE self, VALUE flag) { X509_EXTENSION *ext; GetX509Ext(self, ext X509_EXTENSION_set_critical(ext, RTEST(flag) ? 1 : 0 return flag; }

关键?()显示源文件

static VALUE ossl_x509ext_get_critical(VALUE obj) { X509_EXTENSION *ext; GetX509Ext(obj, ext return X509_EXTENSION_get_critical(ext) ? Qtrue : Qfalse; }

oid()显示源文件

static VALUE ossl_x509ext_get_oid(VALUE obj) { X509_EXTENSION *ext; ASN1_OBJECT *extobj; BIO *out; VALUE ret; int nid; GetX509Ext(obj, ext extobj = X509_EXTENSION_get_object(ext if ((nid = OBJ_obj2nid(extobj)) != NID_undef) ret = rb_str_new2(OBJ_nid2sn(nid) else{ if (!(out = BIO_new(BIO_s_mem()))) ossl_raise(eX509ExtError, NULL i2a_ASN1_OBJECT(out, extobj ret = ossl_membio2str(out } return ret; }

oid =(p1)显示源文件

static VALUE ossl_x509ext_set_oid(VALUE self, VALUE oid) { X509_EXTENSION *ext; ASN1_OBJECT *obj; GetX509Ext(self, ext obj = OBJ_txt2obj(StringValueCStr(oid), 0 if (!obj) ossl_raise(eX509ExtError, "OBJ_txt2obj" if (!X509_EXTENSION_set_object(ext, obj)) { ASN1_OBJECT_free(obj ossl_raise(eX509ExtError, "X509_EXTENSION_set_object" } ASN1_OBJECT_free(obj return oid; }

to_a()显示源文件

# File ext/openssl/lib/openssl/x509.rb, line 54 def to_a [ self.oid, self.value, self.critical? ] end

to_der()显示源文件

static VALUE ossl_x509ext_to_der(VALUE obj) { X509_EXTENSION *ext; unsigned char *p; long len; VALUE str; GetX509Ext(obj, ext if((len = i2d_X509_EXTENSION(ext, NULL)) <= 0) ossl_raise(eX509ExtError, NULL str = rb_str_new(0, len p = (unsigned char *)RSTRING_PTR(str if(i2d_X509_EXTENSION(ext, &p) < 0) ossl_raise(eX509ExtError, NULL ossl_str_adjust(str, p return str; }

to_h()显示源文件

# File ext/openssl/lib/openssl/x509.rb, line 50 def to_h # {"oid"=>sn|ln, "value"=>value, "critical"=>true|false} {"oid"=>self.oid,"value"=>self.value,"critical"=>self.critical?} end

to_s()显示源文件

# File ext/openssl/lib/openssl/x509.rb, line 43 def to_s # "oid = critical, value" str = self.oid str << " = " str << "critical, " if self.critical? str << self.value.gsub(/\n/, ", ") end

值()显示源

static VALUE ossl_x509ext_get_value(VALUE obj) { X509_EXTENSION *ext; BIO *out; VALUE ret; GetX509Ext(obj, ext if (!(out = BIO_new(BIO_s_mem()))) ossl_raise(eX509ExtError, NULL if (!X509V3_EXT_print(out, ext, 0, 0)) ASN1_STRING_print(out, (ASN1_STRING *)X509_EXTENSION_get_data(ext) ret = ossl_membio2str(out return ret; }

值=(p1)显示源

static VALUE ossl_x509ext_set_value(VALUE self, VALUE data) { X509_EXTENSION *ext; ASN1_OCTET_STRING *asn1s; GetX509Ext(self, ext data = ossl_to_der_if_possible(data StringValue(data asn1s = X509_EXTENSION_get_data(ext if (!ASN1_OCTET_STRING_set(asn1s, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data))) { ossl_raise(eX509ExtError, "ASN1_OCTET_STRING_set" } return data; }