instance method
OpenSSL::X509::ExtensionFactory#create_ext
(::String oid, ::String value, ?::boolish critical) -> ::OpenSSL::X509::Extension
ef.create_ext(ln_or_sn, "value", critical = false) → X509::Extension
ef.create_ext(ln_or_sn, "critical,value") → X509::Extension
ext/openssl/ossl_x509ext.c
View on GitHub ↗
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;
VALUE rconf;
CONF *conf;
const char *oid_cstr = NULL;
rb_scan_args(argc, argv, "21", &oid, &value, &critical);
StringValue(value);
if(NIL_P(critical)) critical = Qfalse;
oid_cstr = StringValueCStr(oid);
nid = OBJ_ln2nid(oid_cstr);
if (nid != NID_undef)
oid_cstr = OBJ_nid2sn(nid);
valstr = rb_str_new2(RTEST(critical) ? "critical," : "");
rb_str_append(valstr, value);
StringValueCStr(valstr);
GetX509ExtFactory(self, ctx);
obj = NewX509Ext(cX509Ext);
rconf = rb_iv_get(self, "@config");
conf = NIL_P(rconf) ? NULL : GetConfig(rconf);
X509V3_set_nconf(ctx, conf);
ext = X509V3_EXT_nconf(conf, ctx, oid_cstr, RSTRING_PTR(valstr));
X509V3_set_ctx_nodb(ctx);
if (!ext){
ossl_raise(eX509ExtError, "%"PRIsVALUE" = %"PRIsVALUE, oid, valstr);
}
SetX509Ext(obj, ext);
return obj;
}
Creates a new X509::Extension with passed values. See also x509v3_config(5).