cX509ExtFactory (Class)

In:

Public Class methods

new(...)

Public Instance methods

config=(p1)

Array to X509_EXTENSION Structure:

"ln", "value", bool_critical
or
"sn", "value", bool_critical
or
"ln", "critical,value"
or the same for sn
"ln", "value"
=> not critical

[Source]

/*
 * Array to X509_EXTENSION
 * Structure:
 * ["ln", "value", bool_critical] or
 * ["sn", "value", bool_critical] or
 * ["ln", "critical,value"] or the same for sn
 * ["ln", "value"] => not critical
 */
static VALUE 
ossl_x509extfactory_create_ext(int argc, VALUE *argv, VALUE self)
{
    X509V3_CTX *ctx;
    X509_EXTENSION *ext;
    VALUE oid, value, critical, valstr, obj;
    int nid;

    GetX509ExtFactory(self, ctx);
    rb_scan_args(argc, argv, "21", &oid, &value, &critical);
    StringValue(oid);
    StringValue(value);
    if(NIL_P(critical)) critical = Qfalse;

    nid = OBJ_ln2nid(RSTRING(oid)->ptr);
    if(!nid) nid = OBJ_sn2nid(RSTRING(oid)->ptr);
    if(!nid) ossl_raise(eX509ExtError, "unknown OID `%s'", RSTRING(oid)->ptr);
    valstr = rb_str_new2(RTEST(critical) ? "critical," : "");
    rb_str_append(valstr, value);
    ext = X509V3_EXT_conf_nid(NULL, ctx, nid, RSTRING(valstr)->ptr);
    if (!ext){
	ossl_raise(eX509ExtError, "%s = %s",
		   RSTRING(oid)->ptr, RSTRING(value)->ptr);
    }
    WrapX509Ext(cX509Ext, obj, ext);

    return obj;
}
crl=(p1)
issuer_certificate=(p1)
subject_certificate=(p1)
subject_request=(p1)

[Validate]