12 #define NewX509Store(klass) \ 13 TypedData_Wrap_Struct((klass), &ossl_x509store_type, 0) 14 #define SetX509Store(obj, st) do { \ 16 ossl_raise(rb_eRuntimeError, "STORE wasn't initialized!"); \ 18 RTYPEDDATA_DATA(obj) = (st); \ 20 #define GetX509Store(obj, st) do { \ 21 TypedData_Get_Struct((obj), X509_STORE, &ossl_x509store_type, (st)); \ 23 ossl_raise(rb_eRuntimeError, "STORE wasn't initialized!"); \ 26 #define SafeGetX509Store(obj, st) do { \ 27 OSSL_Check_Kind((obj), cX509Store); \ 28 GetX509Store((obj), (st)); \ 31 #define NewX509StCtx(klass) \ 32 TypedData_Wrap_Struct((klass), &ossl_x509stctx_type, 0) 33 #define SetX509StCtx(obj, ctx) do { \ 35 ossl_raise(rb_eRuntimeError, "STORE_CTX wasn't initialized!"); \ 37 RTYPEDDATA_DATA(obj) = (ctx); \ 39 #define GetX509StCtx(obj, ctx) do { \ 40 TypedData_Get_Struct((obj), X509_STORE_CTX, &ossl_x509stctx_type, (ctx)); \ 42 ossl_raise(rb_eRuntimeError, "STORE_CTX is out of scope!"); \ 45 #define SafeGetX509StCtx(obj, storep) do { \ 46 OSSL_Check_Kind((obj), cX509StoreContext); \ 47 GetX509Store((obj), (ctx)); \ 83 rb_warn(
"StoreContext initialization failure");
92 rb_warn(
"exception in verify_callback is ignored");
97 X509_STORE_CTX_set_error(ctx, X509_V_OK);
101 if (X509_STORE_CTX_get_error(ctx) == X509_V_OK)
102 X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REJECTED);
119 X509_STORE_free(ptr);
123 "OpenSSL/X509/STORE",
190 if((store = X509_STORE_new()) ==
NULL){
227 #if !defined(HAVE_OPAQUE_OPENSSL) 229 store->ex_data.sk =
NULL;
257 X509_STORE_set_flags(store, f);
287 X509_STORE_set_purpose(store, p);
303 X509_STORE_set_trust(store, t);
340 lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
342 if(X509_LOOKUP_load_file(lookup, path, X509_FILETYPE_PEM) != 1){
345 #if OPENSSL_VERSION_NUMBER < 0x10101000 || defined(LIBRESSL_VERSION_NUMBER) 376 lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
378 if(X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) != 1){
402 if (X509_STORE_set_default_paths(store) != 1){
423 if (X509_STORE_add_cert(store, cert) != 1){
444 if (X509_STORE_add_crl(store, crl) != 1){
480 rb_iv_set(ctx,
"@verify_callback", proc);
497 "OpenSSL/X509/STORE_CTX",
510 X509_STORE_CTX *ctx = ptr;
515 X509_STORE_CTX_free(ctx);
525 if((ctx = X509_STORE_CTX_new()) ==
NULL){
556 VALUE store, cert, chain, t;
566 if(!
NIL_P(chain)) x509s = ossl_x509_ary2sk(chain);
567 if(X509_STORE_CTX_init(ctx, x509st, x509, x509s) != 1){
568 sk_X509_pop_free(x509s, X509_free);
590 (
void *)
rb_iv_get(
self,
"@verify_callback"));
592 switch (X509_verify_cert(ctx)) {
620 if((num = sk_X509_num(chain)) < 0){
625 for(i = 0; i < num; i++) {
626 x509 = sk_X509_value(chain, i);
644 return INT2NUM(X509_STORE_CTX_get_error(ctx));
657 X509_STORE_CTX_set_error(ctx,
NUM2INT(err));
675 err = X509_STORE_CTX_get_error(ctx);
677 return rb_str_new2(X509_verify_cert_error_string(err));
691 return INT2NUM(X509_STORE_CTX_get_error_depth(ctx));
735 X509_STORE_CTX *store;
739 X509_STORE_CTX_set_flags(store, f);
753 X509_STORE_CTX *store;
757 X509_STORE_CTX_set_purpose(store, p);
769 X509_STORE_CTX *store;
773 X509_STORE_CTX_set_trust(store, t);
787 X509_STORE_CTX *store;
792 X509_STORE_CTX_set_time(store, 0, t);
VALUE ossl_x509crl_new(X509_CRL *)
#define X509_STORE_CTX_get0_untrusted(x)
#define X509_STORE_get_ex_data(x, idx)
#define RUBY_TYPED_FREE_IMMEDIATELY
static VALUE ossl_x509stctx_set_flags(VALUE, VALUE)
static const rb_data_type_t ossl_x509store_type
static VALUE ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self)
static VALUE ossl_x509stctx_set_purpose(VALUE, VALUE)
static VALUE ossl_x509store_initialize(int argc, VALUE *argv, VALUE self)
#define X509_STORE_set_verify_cb
VALUE rb_ary_push(VALUE ary, VALUE item)
#define GetX509Store(obj, st)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
VALUE rb_iv_set(VALUE, const char *, VALUE)
VALUE rb_protect(VALUE(*proc)(VALUE), VALUE data, int *state)
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)
STACK_OF(X509) *ossl_x509_ary2sk0(VALUE)
static VALUE ossl_x509stctx_get_err(VALUE)
static VALUE ossl_x509stctx_set_time(VALUE, VALUE)
static VALUE ossl_x509store_add_path(VALUE self, VALUE dir)
void rb_undef_method(VALUE klass, const char *name)
#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef)
#define X509_STORE_CTX_get0_chain(ctx)
static VALUE ossl_x509store_set_trust(VALUE self, VALUE trust)
static VALUE call_verify_cb_proc(struct ossl_verify_cb_args *args)
static VALUE ossl_x509store_add_crl(VALUE self, VALUE arg)
X509 * GetX509CertPtr(VALUE)
#define SafeGetX509Store(obj, st)
static const rb_data_type_t ossl_x509stctx_type
void ossl_clear_error(void)
int rb_block_given_p(void)
static VALUE ossl_x509stctx_set_error(VALUE self, VALUE err)
#define GetX509StCtx(obj, ctx)
RUBY_EXTERN VALUE rb_cObject
static VALUE ossl_x509stctx_set_trust(VALUE, VALUE)
void rb_attr(VALUE, ID, int, int, int)
static VALUE ossl_x509store_add_file(VALUE self, VALUE file)
#define SetX509Store(obj, st)
int ossl_verify_cb_call(VALUE proc, int ok, X509_STORE_CTX *ctx)
static void ossl_x509stctx_free(void *)
static VALUE ossl_x509store_verify(int argc, VALUE *argv, VALUE self)
VALUE ossl_x509_new(X509 *)
static VALUE ossl_x509store_set_time(VALUE self, VALUE time)
#define NewX509StCtx(klass)
X509_STORE * DupX509StorePtr(VALUE obj)
static VALUE ossl_x509stctx_get_curr_crl(VALUE self)
#define X509_STORE_set_ex_data(x, idx, data)
static VALUE ossl_x509store_alloc(VALUE klass)
X509_STORE * GetX509StorePtr(VALUE obj)
static VALUE ossl_x509store_set_flags(VALUE self, VALUE flags)
static VALUE ossl_x509stctx_get_err_string(VALUE)
#define X509_STORE_CTX_get0_store(x)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
#define NewX509Store(klass)
void Init_ossl_x509store(void)
static VALUE ossl_x509stctx_new(X509_STORE_CTX *)
VALUE rb_define_module_under(VALUE outer, const char *name)
#define X509_STORE_up_ref(x)
#define StringValueCStr(v)
static VALUE ossl_x509stctx_get_curr_cert(VALUE self)
static int x509store_verify_cb(int ok, X509_STORE_CTX *ctx)
#define SetX509StCtx(obj, ctx)
static int store_ex_verify_cb_idx
VALUE rb_block_proc(void)
void rb_set_errinfo(VALUE err)
static VALUE ossl_x509store_add_cert(VALUE self, VALUE arg)
static VALUE ossl_x509stctx_get_err_depth(VALUE self)
void rb_check_safe_obj(VALUE)
void ossl_raise(VALUE exc, const char *fmt,...)
X509 * DupX509CertPtr(VALUE)
static VALUE ossl_x509stctx_verify(VALUE self)
#define X509_STORE_CTX_get0_current_crl(x)
static int stctx_ex_verify_cb_idx
static VALUE ossl_x509store_set_purpose(VALUE self, VALUE purpose)
static VALUE ossl_x509stctx_get_chain(VALUE)
#define RTYPEDDATA_DATA(v)
static VALUE ossl_x509stctx_alloc(VALUE klass)
VALUE ossl_x509store_new(X509_STORE *store)
VALUE rb_define_module(const char *name)
#define X509_STORE_CTX_get0_cert(x)
X509_CRL * GetX509CRLPtr(VALUE)
static VALUE ossl_x509store_set_vfy_cb(VALUE self, VALUE cb)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
void rb_warn(const char *fmt,...)
static VALUE ossl_x509store_set_default_paths(VALUE self)
static void ossl_x509store_free(void *ptr)