12 #define NewX509Ext(klass) \ 13 TypedData_Wrap_Struct((klass), &ossl_x509ext_type, 0) 14 #define SetX509Ext(obj, ext) do { \ 16 ossl_raise(rb_eRuntimeError, "EXT wasn't initialized!"); \ 18 RTYPEDDATA_DATA(obj) = (ext); \ 20 #define GetX509Ext(obj, ext) do { \ 21 TypedData_Get_Struct((obj), X509_EXTENSION, &ossl_x509ext_type, (ext)); \ 23 ossl_raise(rb_eRuntimeError, "EXT wasn't initialized!"); \ 26 #define SafeGetX509Ext(obj, ext) do { \ 27 OSSL_Check_Kind((obj), cX509Ext); \ 28 GetX509Ext((obj), (ext)); \ 30 #define MakeX509ExtFactory(klass, obj, ctx) do { \ 31 (obj) = TypedData_Wrap_Struct((klass), &ossl_x509extfactory_type, 0); \ 32 if (!((ctx) = OPENSSL_malloc(sizeof(X509V3_CTX)))) \ 33 ossl_raise(rb_eRuntimeError, "CTX wasn't allocated!"); \ 34 X509V3_set_ctx((ctx), NULL, NULL, NULL, NULL, 0); \ 35 RTYPEDDATA_DATA(obj) = (ctx); \ 37 #define GetX509ExtFactory(obj, ctx) do { \ 38 TypedData_Get_Struct((obj), X509V3_CTX, &ossl_x509extfactory_type, (ctx)); \ 40 ossl_raise(rb_eRuntimeError, "CTX wasn't initialized!"); \ 54 X509_EXTENSION_free(ptr);
58 "OpenSSL/X509/EXTENSION",
76 new = X509_EXTENSION_new();
78 new = X509_EXTENSION_dup(ext);
111 "OpenSSL/X509/EXTENSION/Factory",
136 rb_iv_set(
self,
"@issuer_certificate", cert);
148 rb_iv_set(
self,
"@subject_certificate", cert);
160 rb_iv_set(
self,
"@subject_request", req);
182 VALUE issuer_cert, subject_cert, subject_req, crl;
187 &issuer_cert, &subject_cert, &subject_req, &crl);
188 if (!
NIL_P(issuer_cert))
190 if (!
NIL_P(subject_cert))
192 if (!
NIL_P(subject_req))
212 VALUE oid, value, critical, valstr, obj;
217 rb_scan_args(argc, argv,
"21", &oid, &value, &critical);
234 X509V3_set_nconf(ctx, conf);
235 ext = X509V3_EXT_nconf_nid(conf, ctx, nid,
RSTRING_PTR(valstr));
236 X509V3_set_ctx_nodb(ctx);
256 if(!(ext = X509_EXTENSION_new())){
279 VALUE oid, value, critical;
280 const unsigned char *p;
281 X509_EXTENSION *ext, *x;
284 if(
rb_scan_args(argc, argv,
"12", &oid, &value, &critical) == 1){
288 x = d2i_X509_EXTENSION(&ext, &p,
RSTRING_LEN(oid));
304 X509_EXTENSION *ext, *ext_other, *ext_new;
310 ext_new = X509_EXTENSION_dup(ext_other);
315 X509_EXTENSION_free(ext);
330 if (!X509_EXTENSION_set_object(ext, obj)) {
331 ASN1_OBJECT_free(obj);
334 ASN1_OBJECT_free(obj);
343 ASN1_OCTET_STRING *asn1s;
348 asn1s = X509_EXTENSION_get_data(ext);
350 if (!ASN1_OCTET_STRING_set(asn1s, (
unsigned char *)
RSTRING_PTR(data),
364 X509_EXTENSION_set_critical(ext,
RTEST(flag) ? 1 : 0);
379 extobj = X509_EXTENSION_get_object(ext);
380 if ((nid = OBJ_obj2nid(extobj)) != NID_undef)
383 if (!(out = BIO_new(BIO_s_mem())))
385 i2a_ASN1_OBJECT(out, extobj);
400 if (!(out = BIO_new(BIO_s_mem())))
402 if (!X509V3_EXT_print(out, ext, 0, 0))
403 ASN1_STRING_print(out, (ASN1_STRING *)X509_EXTENSION_get_data(ext));
415 return X509_EXTENSION_get_critical(ext) ?
Qtrue :
Qfalse;
427 if((len = i2d_X509_EXTENSION(ext,
NULL)) <= 0)
431 if(i2d_X509_EXTENSION(ext, &p) < 0)
static VALUE ossl_x509ext_get_value(VALUE obj)
#define RUBY_TYPED_FREE_IMMEDIATELY
static VALUE ossl_x509extfactory_set_subject_req(VALUE self, VALUE req)
static const rb_data_type_t ossl_x509ext_type
#define SafeGetX509Ext(obj, ext)
#define ossl_str_adjust(str, p)
static VALUE ossl_x509extfactory_alloc(VALUE klass)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
VALUE rb_iv_set(VALUE, const char *, VALUE)
VALUE rb_iv_get(VALUE, const char *)
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE ossl_membio2str(BIO *bio)
#define NewX509Ext(klass)
#define GetX509ExtFactory(obj, ctx)
static VALUE ossl_x509ext_get_critical(VALUE obj)
static VALUE ossl_x509ext_initialize_copy(VALUE self, VALUE other)
static VALUE ossl_x509extfactory_create_ext(int argc, VALUE *argv, VALUE self)
static void ossl_x509extfactory_free(void *ctx)
#define rb_define_copy_func(klass, func)
X509 * GetX509CertPtr(VALUE)
void Init_ossl_x509ext(void)
VALUE ossl_to_der_if_possible(VALUE obj)
X509_EXTENSION * GetX509ExtPtr(VALUE obj)
RUBY_EXTERN VALUE rb_cObject
void rb_attr(VALUE, ID, int, int, int)
static VALUE ossl_x509ext_to_der(VALUE obj)
VALUE ossl_x509ext_new(X509_EXTENSION *ext)
#define SetX509Ext(obj, ext)
static VALUE ossl_x509ext_initialize(int argc, VALUE *argv, VALUE self)
static VALUE ossl_x509extfactory_set_issuer_cert(VALUE self, VALUE cert)
CONF * DupConfigPtr(VALUE obj)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
static VALUE ossl_x509extfactory_set_subject_cert(VALUE self, VALUE cert)
static VALUE ossl_x509ext_get_oid(VALUE obj)
register unsigned int len
VALUE rb_define_module_under(VALUE outer, const char *name)
#define StringValueCStr(v)
#define MakeX509ExtFactory(klass, obj, ctx)
static VALUE ossl_x509extfactory_initialize(int argc, VALUE *argv, VALUE self)
static VALUE ossl_x509ext_alloc(VALUE klass)
static VALUE ossl_x509ext_set_value(VALUE self, VALUE data)
static void ossl_x509ext_free(void *ptr)
void ossl_raise(VALUE exc, const char *fmt,...)
static VALUE ossl_x509extfactory_set_crl(VALUE self, VALUE crl)
#define RSTRING_LENINT(str)
#define rb_check_frozen(obj)
VALUE rb_define_module(const char *name)
X509_CRL * GetX509CRLPtr(VALUE)
static VALUE ossl_x509ext_set_oid(VALUE self, VALUE oid)
X509_REQ * GetX509ReqPtr(VALUE)
static VALUE ossl_x509ext_set_critical(VALUE self, VALUE flag)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
VALUE rb_str_append(VALUE, VALUE)
static const rb_data_type_t ossl_x509extfactory_type
#define GetX509Ext(obj, ext)
VALUE rb_str_new(const char *, long)