15 #if defined(HAVE_UNISTD_H) 19 #define numberof(ary) (int)(sizeof(ary)/sizeof((ary)[0])) 22 # define TO_SOCKET(s) _get_osfhandle(s) 24 # define TO_SOCKET(s) (s) 35 #define ossl_sslctx_set_cert(o,v) rb_iv_set((o),"@cert",(v)) 36 #define ossl_sslctx_set_key(o,v) rb_iv_set((o),"@key",(v)) 37 #define ossl_sslctx_set_client_ca(o,v) rb_iv_set((o),"@client_ca",(v)) 38 #define ossl_sslctx_set_ca_file(o,v) rb_iv_set((o),"@ca_file",(v)) 39 #define ossl_sslctx_set_ca_path(o,v) rb_iv_set((o),"@ca_path",(v)) 40 #define ossl_sslctx_set_timeout(o,v) rb_iv_set((o),"@timeout",(v)) 41 #define ossl_sslctx_set_verify_mode(o,v) rb_iv_set((o),"@verify_mode",(v)) 42 #define ossl_sslctx_set_verify_dep(o,v) rb_iv_set((o),"@verify_depth",(v)) 43 #define ossl_sslctx_set_verify_cb(o,v) rb_iv_set((o),"@verify_callback",(v)) 44 #define ossl_sslctx_set_options(o,v) rb_iv_set((o),"@options",(v)) 45 #define ossl_sslctx_set_cert_store(o,v) rb_iv_set((o),"@cert_store",(v)) 46 #define ossl_sslctx_set_extra_cert(o,v) rb_iv_set((o),"@extra_chain_cert",(v)) 47 #define ossl_sslctx_set_client_cert_cb(o,v) rb_iv_set((o),"@client_cert_cb",(v)) 48 #define ossl_sslctx_set_tmp_dh_cb(o,v) rb_iv_set((o),"@tmp_dh_callback",(v)) 49 #define ossl_sslctx_set_sess_id_ctx(o, v) rb_iv_set((o),"@session_id_context",(v)) 51 #define ossl_sslctx_get_cert(o) rb_iv_get((o),"@cert") 52 #define ossl_sslctx_get_key(o) rb_iv_get((o),"@key") 53 #define ossl_sslctx_get_client_ca(o) rb_iv_get((o),"@client_ca") 54 #define ossl_sslctx_get_ca_file(o) rb_iv_get((o),"@ca_file") 55 #define ossl_sslctx_get_ca_path(o) rb_iv_get((o),"@ca_path") 56 #define ossl_sslctx_get_timeout(o) rb_iv_get((o),"@timeout") 57 #define ossl_sslctx_get_verify_mode(o) rb_iv_get((o),"@verify_mode") 58 #define ossl_sslctx_get_verify_dep(o) rb_iv_get((o),"@verify_depth") 59 #define ossl_sslctx_get_verify_cb(o) rb_iv_get((o),"@verify_callback") 60 #define ossl_sslctx_get_options(o) rb_iv_get((o),"@options") 61 #define ossl_sslctx_get_cert_store(o) rb_iv_get((o),"@cert_store") 62 #define ossl_sslctx_get_extra_cert(o) rb_iv_get((o),"@extra_chain_cert") 63 #define ossl_sslctx_get_client_cert_cb(o) rb_iv_get((o),"@client_cert_cb") 64 #define ossl_sslctx_get_tmp_dh_cb(o) rb_iv_get((o),"@tmp_dh_callback") 65 #define ossl_sslctx_get_sess_id_ctx(o) rb_iv_get((o),"@session_id_context") 68 "cert",
"key",
"client_ca",
"ca_file",
"ca_path",
69 "timeout",
"verify_mode",
"verify_depth",
"renegotiation_cb",
70 "verify_callback",
"options",
"cert_store",
"extra_chain_cert",
71 "client_cert_cb",
"tmp_dh_callback",
"session_id_context",
72 "session_get_cb",
"session_new_cb",
"session_remove_cb",
73 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 76 #ifdef HAVE_OPENSSL_NPN_NEGOTIATED 82 #define ossl_ssl_get_io(o) rb_iv_get((o),"@io") 83 #define ossl_ssl_get_ctx(o) rb_iv_get((o),"@context") 84 #define ossl_ssl_get_sync_close(o) rb_iv_get((o),"@sync_close") 85 #define ossl_ssl_get_x509(o) rb_iv_get((o),"@x509") 86 #define ossl_ssl_get_key(o) rb_iv_get((o),"@key") 87 #define ossl_ssl_get_tmp_dh(o) rb_iv_get((o),"@tmp_dh") 89 #define ossl_ssl_set_io(o,v) rb_iv_set((o),"@io",(v)) 90 #define ossl_ssl_set_ctx(o,v) rb_iv_set((o),"@context",(v)) 91 #define ossl_ssl_set_sync_close(o,v) rb_iv_set((o),"@sync_close",(v)) 92 #define ossl_ssl_set_x509(o,v) rb_iv_set((o),"@x509",(v)) 93 #define ossl_ssl_set_key(o,v) rb_iv_set((o),"@key",(v)) 94 #define ossl_ssl_set_tmp_dh(o,v) rb_iv_set((o),"@tmp_dh",(v)) 98 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 113 SSL_METHOD *(*func)(void);
115 #define OSSL_SSL_METHOD_ENTRY(name) { #name, (SSL_METHOD *(*)(void))name##_method } 119 #if defined(HAVE_TLSV1_2_METHOD) && defined(HAVE_TLSV1_2_SERVER_METHOD) && \ 120 defined(HAVE_TLSV1_2_CLIENT_METHOD) 125 #if defined(HAVE_TLSV1_1_METHOD) && defined(HAVE_TLSV1_1_SERVER_METHOD) && \ 126 defined(HAVE_TLSV1_1_CLIENT_METHOD) 131 #if defined(HAVE_SSLV2_METHOD) && defined(HAVE_SSLV2_SERVER_METHOD) && \ 132 defined(HAVE_SSLV2_CLIENT_METHOD) 137 #if defined(HAVE_SSLV3_METHOD) && defined(HAVE_SSLV3_SERVER_METHOD) && \ 138 defined(HAVE_SSLV3_CLIENT_METHOD) 146 #undef OSSL_SSL_METHOD_ENTRY 159 ctx->cert_store =
NULL;
167 long mode = SSL_MODE_ENABLE_PARTIAL_WRITE;
169 #ifdef SSL_MODE_RELEASE_BUFFERS 170 mode |= SSL_MODE_RELEASE_BUFFERS;
173 ctx = SSL_CTX_new(SSLv23_method());
177 SSL_CTX_set_mode(ctx, mode);
191 SSL_METHOD *method =
NULL;
210 if (SSL_CTX_set_ssl_version(ctx, method) != 1) {
271 if (!
RTEST(success))
return 0;
278 #if !defined(OPENSSL_NO_DH) 291 if (EVP_PKEY_type(pkey->type) != EVP_PKEY_DH)
return Qfalse;
300 VALUE args[3], success;
333 ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());
342 VALUE ssl_obj, sslctx_obj, cb;
347 sslctx_obj =
rb_iv_get(ssl_obj,
"@context");
349 cb =
rb_iv_get(sslctx_obj,
"@session_get_cb");
359 VALUE ary, ssl_obj, ret_obj;
364 OSSL_Debug(
"SSL SESSION get callback entered");
367 ssl_obj = (
VALUE)ptr;
389 VALUE ssl_obj, sslctx_obj, cb;
394 sslctx_obj =
rb_iv_get(ssl_obj,
"@context");
396 cb =
rb_iv_get(sslctx_obj,
"@session_new_cb");
406 VALUE ary, ssl_obj, sess_obj;
410 OSSL_Debug(
"SSL SESSION new callback entered");
414 ssl_obj = (
VALUE)ptr;
416 CRYPTO_add(&sess->references, 1, CRYPTO_LOCK_SSL_SESSION);
441 VALUE sslctx_obj, cb;
446 cb =
rb_iv_get(sslctx_obj,
"@session_remove_cb");
455 VALUE ary, sslctx_obj, sess_obj;
459 OSSL_Debug(
"SSL SESSION remove callback entered");
463 sslctx_obj = (
VALUE)ptr;
465 CRYPTO_add(&sess->references, 1, CRYPTO_LOCK_SSL_SESSION);
490 if(!SSL_CTX_add_extra_chain_cert(ctx, x509)){
499 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 501 ossl_call_servername_cb(
VALUE ary)
503 VALUE ssl_obj, sslctx_obj, cb, ret_obj;
508 sslctx_obj =
rb_iv_get(ssl_obj,
"@context");
510 cb =
rb_iv_get(sslctx_obj,
"@servername_cb");
521 SSL_set_SSL_CTX(ssl, ctx2);
522 }
else if (!
NIL_P(ret_obj)) {
530 ssl_servername_cb(SSL *ssl,
int *ad,
void *arg)
535 const char *servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
538 return SSL_TLSEXT_ERR_OK;
541 return SSL_TLSEXT_ERR_ALERT_FATAL;
542 ssl_obj = (
VALUE)ptr;
550 return SSL_TLSEXT_ERR_ALERT_FATAL;
553 return SSL_TLSEXT_ERR_OK;
560 VALUE ssl_obj, sslctx_obj, cb;
565 ssl_obj = (
VALUE)ptr;
567 sslctx_obj =
rb_iv_get(ssl_obj,
"@context");
568 if (
NIL_P(sslctx_obj))
return;
569 cb =
rb_iv_get(sslctx_obj,
"@renegotiation_cb");
570 if (
NIL_P(cb))
return;
575 #if defined(HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB) || defined(HAVE_SSL_CTX_SET_ALPN_SELECT_CB) 577 ssl_npn_encode_protocol_i(
VALUE cur,
VALUE encoded)
581 if (len < 1 || len > 255)
591 ssl_npn_encode_protocols(
VALUE sslctx,
VALUE protocols)
596 rb_iv_set(sslctx,
"@_protocols", encoded);
600 ssl_npn_select_cb_common(
VALUE cb,
const unsigned char **out,
unsigned char *outlen,
const unsigned char *in,
unsigned int inlen)
622 if (len < 1 || len >= 256) {
626 *outlen = (
unsigned char)len;
628 return SSL_TLSEXT_ERR_OK;
631 #ifdef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB 633 ssl_npn_advertise_cb(SSL *ssl,
const unsigned char **out,
unsigned int *outlen,
void *arg)
638 *out = (
const unsigned char *)
RSTRING_PTR(protocols);
641 return SSL_TLSEXT_ERR_OK;
645 ssl_npn_select_cb(SSL *s,
unsigned char **out,
unsigned char *outlen,
const unsigned char *in,
unsigned int inlen,
void *arg)
647 VALUE sslctx_obj, cb;
649 sslctx_obj = (
VALUE) arg;
650 cb =
rb_iv_get(sslctx_obj,
"@npn_select_cb");
652 return ssl_npn_select_cb_common(cb, (
const unsigned char **)out, outlen, in, inlen);
662 int state = SSL_state(ssl);
664 if ((where & SSL_CB_HANDSHAKE_START) &&
665 (state & SSL_ST_ACCEPT)) {
683 X509 *cert =
NULL, *client_ca =
NULL;
686 char *ca_path =
NULL, *ca_file =
NULL;
693 #if !defined(OPENSSL_NO_DH) 712 SSL_CTX_set_cert_store(ctx, store);
727 if (!SSL_CTX_use_certificate(ctx, cert)) {
731 if (!SSL_CTX_use_PrivateKey(ctx,
key)) {
735 if (!SSL_CTX_check_private_key(ctx)) {
745 if (!SSL_CTX_add_client_CA(ctx, client_ca)){
753 if (!SSL_CTX_add_client_CA(ctx, client_ca)){
764 if(ca_file || ca_path){
765 if (!SSL_CTX_load_verify_locations(ctx, ca_file, ca_path))
785 SSL_CTX_set_options(ctx, SSL_OP_ALL);
788 #ifdef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB 791 ssl_npn_encode_protocols(
self,
val);
792 SSL_CTX_set_next_protos_advertised_cb(ctx, ssl_npn_advertise_cb, (
void *)
self);
793 OSSL_Debug(
"SSL NPN advertise callback added");
796 SSL_CTX_set_next_proto_select_cb(ctx, ssl_npn_select_cb, (
void *)
self);
806 if (!SSL_CTX_set_session_id_context(ctx, (
unsigned char *)
RSTRING_PTR(
val),
822 OSSL_Debug(
"SSL SESSION remove callback added");
825 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 828 SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb);
829 OSSL_Debug(
"SSL TLSEXT servername callback added");
845 bits = SSL_CIPHER_get_bits(cipher, &alg_bits);
872 ciphers = ctx->cipher_list;
877 num = sk_SSL_CIPHER_num(ciphers);
879 for(i = 0; i < num; i++){
880 cipher = sk_SSL_CIPHER_value(ciphers, i);
927 if (!SSL_CTX_set_cipher_list(ctx,
RSTRING_PTR(str))) {
949 return SSL_CTX_add_session(ctx, sess) == 1 ?
Qtrue :
Qfalse;
967 return SSL_CTX_remove_session(ctx, sess) == 1 ?
Qtrue :
Qfalse;
983 return LONG2NUM(SSL_CTX_get_session_cache_mode(ctx));
1001 SSL_CTX_set_session_cache_mode(ctx,
NUM2LONG(arg));
1020 return LONG2NUM(SSL_CTX_sess_get_cache_size(ctx));
1037 SSL_CTX_sess_set_cache_size(ctx,
NUM2LONG(arg));
1115 SSL_CTX_flush_sessions(ctx, (
long)tm);
1123 #ifndef OPENSSL_NO_SOCK 1132 for (i = 0; i < 4; ++i) {
1137 if (rc = SSL_shutdown(ssl))
1198 VALUE io, v_ctx, cb;
1205 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 1218 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 1219 if (!
NIL_P(hostname)) {
1220 if (SSL_set_tlsext_host_name(ssl,
StringValuePtr(hostname)) != 1)
1243 #define ssl_get_error(ssl, ret) (errno = rb_w32_map_errno(WSAGetLastError()), SSL_get_error((ssl), (ret))) 1245 #define ssl_get_error(ssl, ret) SSL_get_error((ssl), (ret)) 1248 #define ossl_ssl_data_get_struct(v, ssl) \ 1250 Data_Get_Struct((v), SSL, (ssl)); \ 1252 rb_warning("SSL session is not started yet."); \ 1292 if (!
NIL_P(cb_state))
1299 case SSL_ERROR_WANT_WRITE:
1303 case SSL_ERROR_WANT_READ:
1307 case SSL_ERROR_SYSCALL:
1309 ossl_raise(
eSSLError,
"%s SYSCALL returned=%d errno=%d state=%s", funcname, ret2,
errno, SSL_state_string_long(ssl));
1400 int ilen, nread = 0;
1401 int no_exception = 0;
1418 if(ilen == 0)
return str;
1423 if(!nonblock && SSL_pending(ssl) <= 0)
1428 case SSL_ERROR_NONE:
1430 case SSL_ERROR_ZERO_RETURN:
1431 if (no_exception) {
return Qnil; }
1433 case SSL_ERROR_WANT_WRITE:
1438 case SSL_ERROR_WANT_READ:
1443 case SSL_ERROR_SYSCALL:
1444 if(ERR_peek_error() == 0 && nread == 0) {
1445 if (no_exception) {
return Qnil; }
1456 rb_warning(
"SSL session is not started yet.");
1515 case SSL_ERROR_NONE:
1517 case SSL_ERROR_WANT_WRITE:
1522 case SSL_ERROR_WANT_READ:
1527 case SSL_ERROR_SYSCALL:
1536 rb_warning(
"SSL session is not started yet.");
1568 int no_exception = 0;
1627 cert = SSL_get_certificate(ssl);
1650 cert = SSL_get_peer_certificate(ssl);
1678 chain = SSL_get_peer_cert_chain(ssl);
1679 if(!chain)
return Qnil;
1680 num = sk_X509_num(chain);
1682 for (i = 0; i < num; i++){
1683 cert = sk_X509_value(chain, i);
1721 cipher = (SSL_CIPHER *)SSL_get_current_cipher(ssl);
1761 return INT2NUM(SSL_pending(ssl));
1777 switch(SSL_session_reused(ssl)) {
1778 case 1:
return Qtrue;
1805 if (SSL_set_session(ssl, sess) != 1)
1827 return INT2FIX(SSL_get_verify_result(ssl));
1849 ca = SSL_get_client_CA_list(ssl);
1853 # ifdef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB 1862 ossl_ssl_npn_protocol(
VALUE self)
1865 const unsigned char *out;
1866 unsigned int outlen;
1870 SSL_get0_next_proto_negotiated(ssl, &out, &outlen);
1874 return rb_str_new((
const char *) out, outlen);
1895 SSL_get_ex_new_index(0,(
void *)
"ossl_ssl_ex_client_cert_cb_idx",0,0,0);
1897 SSL_get_ex_new_index(0,(
void *)
"ossl_ssl_ex_tmp_dh_callback_idx",0,0,0);
2063 #ifdef HAVE_SSL_SET_TLSEXT_HOST_NAME 2095 #ifdef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB 2208 #ifdef OPENSSL_NO_SOCK 2239 # ifdef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB 2244 #define ossl_ssl_def_const(x) rb_define_const(mSSL, #x, INT2NUM(SSL_##x)) 2259 #if defined(SSL_OP_MSIE_SSLV2_RSA_PADDING) 2267 #if defined(SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION) 2270 #if defined(SSL_OP_SINGLE_ECDH_USE) 2275 #if defined(SSL_OP_CIPHER_SERVER_PREFERENCE) 2282 #if defined(SSL_OP_NO_TLSv1_1) 2285 #if defined(SSL_OP_NO_TLSv1_2) 2288 #if defined(SSL_OP_NO_TICKET) 2291 #if defined(SSL_OP_NO_COMPRESSION) static VALUE ossl_ssl_get_cipher(VALUE self)
static VALUE ossl_sslctx_session_add(VALUE self, VALUE arg)
static VALUE ossl_sslctx_get_session_cache_stats(VALUE self)
static DH * ossl_tmp_dh_callback(SSL *ssl, int is_export, int keylength)
VALUE rb_ary_entry(VALUE ary, long offset)
#define ssl_get_error(ssl, ret)
void rb_io_check_readable(rb_io_t *)
#define ossl_sslctx_get_key(o)
static VALUE ossl_sslctx_initialize(int argc, VALUE *argv, VALUE self)
#define ossl_ssl_get_tmp_dh(o)
static VALUE ossl_ssl_s_alloc(VALUE klass)
#define Data_Get_Struct(obj, type, sval)
static VALUE ossl_ssl_read(int argc, VALUE *argv, VALUE self)
static VALUE eSSLErrorWaitReadable
static void ossl_sslctx_free(SSL_CTX *ctx)
#define ossl_ssl_set_key(o, v)
void rb_define_private_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
VALUE rb_iterate(VALUE(*)(VALUE), VALUE, VALUE(*)(ANYARGS), VALUE)
int ossl_ssl_ex_tmp_dh_callback_idx
static VALUE ossl_call_tmp_dh_callback(VALUE *args)
VALUE rb_ary_push(VALUE ary, VALUE item)
#define ossl_sslctx_get_client_cert_cb(o)
static VALUE ossl_ssl_get_cert(VALUE self)
SSL_METHOD *(* func)(void)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
VALUE rb_iv_set(VALUE, const char *, VALUE)
void rb_str_set_len(VALUE, long)
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.
VALUE rb_ivar_get(VALUE, ID)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE rb_obj_is_kind_of(VALUE, VALUE)
STACK_OF(X509) *ossl_x509_ary2sk0(VALUE)
void rb_include_module(VALUE klass, VALUE module)
VALUE rb_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE)
#define ossl_ssl_set_tmp_dh(o, v)
#define ossl_sslctx_get_client_ca(o)
static VALUE ossl_ssl_connect_nonblock(VALUE self)
static VALUE ossl_ssl_read_nonblock(int argc, VALUE *argv, VALUE self)
static VALUE ossl_ssl_close(VALUE self)
#define ossl_ssl_get_io(o)
#define GetOpenFile(obj, fp)
static void ossl_ssl_shutdown(SSL *ssl)
static VALUE sym_exception
VALUE rb_str_buf_cat(VALUE, const char *, long)
static VALUE ossl_ssl_write(VALUE self, VALUE str)
static VALUE ossl_call_client_cert_cb(VALUE obj)
VALUE ossl_exc_new(VALUE exc, const char *fmt,...)
#define Data_Wrap_Struct(klass, mark, free, sval)
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
void rb_exc_raise(VALUE mesg)
void Init_ossl_ssl_session(void)
X509 * GetX509CertPtr(VALUE)
RUBY_EXTERN VALUE rb_mWaitReadable
static VALUE ossl_ssl_accept(VALUE self)
static VALUE ossl_sslctx_get_ciphers(VALUE self)
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
RUBY_EXTERN VALUE rb_cObject
#define ossl_sslctx_get_cert(o)
static VALUE ossl_ssl_session_reused(VALUE self)
#define ossl_ssl_get_ctx(o)
void rb_attr(VALUE, ID, int, int, int)
static VALUE ossl_call_session_remove_cb(VALUE ary)
static const char * ossl_ssl_attrs[]
static VALUE ossl_sslctx_add_extra_chain_cert_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
#define ossl_sslctx_get_extra_cert(o)
VALUE rb_str_cat2(VALUE, const char *)
static VALUE ossl_ssl_accept_nonblock(VALUE self)
#define ossl_sslctx_get_sess_id_ctx(o)
static const char * ossl_sslctx_attrs[]
#define ossl_sslctx_get_ca_file(o)
static VALUE ossl_ssl_write_internal(VALUE self, VALUE str, int nonblock, int no_exception)
void rb_define_const(VALUE, const char *, VALUE)
int rb_io_wait_writable(int)
#define ossl_sslctx_get_verify_dep(o)
static VALUE ossl_ssl_pending(VALUE self)
static VALUE ossl_sslctx_setup(VALUE self)
VALUE ossl_x509_new(X509 *)
static VALUE ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock)
VALUE rb_obj_alloc(VALUE)
#define ossl_ssl_set_sync_close(o, v)
static VALUE ossl_ssl_set_session(VALUE self, VALUE arg1)
#define ossl_sslctx_get_verify_cb(o)
static VALUE ossl_ssl_get_verify_result(VALUE self)
static VALUE ossl_ssl_get_state(VALUE self)
static VALUE ossl_sslctx_get_session_cache_mode(VALUE self)
static SSL_SESSION * ossl_sslctx_session_get_cb(SSL *ssl, unsigned char *buf, int len, int *copy)
#define ossl_sslctx_get_verify_mode(o)
VALUE rb_str_resize(VALUE, long)
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
static VALUE ossl_ssl_get_client_ca_list(VALUE self)
static void write_would_block(int nonblock)
static VALUE ossl_ssl_setup(VALUE self)
#define OSSL_SSL_METHOD_ENTRY(name)
static VALUE ossl_ssl_initialize(int argc, VALUE *argv, VALUE self)
#define ossl_sslctx_get_cert_store(o)
RUBY_EXTERN VALUE rb_mWaitWritable
#define ossl_ssl_set_x509(o, v)
#define ossl_sslctx_get_timeout(o)
static VALUE ossl_sslctx_session_remove(VALUE self, VALUE arg)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
VALUE rb_ivar_set(VALUE, ID, VALUE)
unsigned char buf[MIME_BUF_SIZE]
void rb_thread_wait_fd(int)
#define ossl_ssl_data_get_struct(v, ssl)
static VALUE ossl_ssl_write_nonblock(int argc, VALUE *argv, VALUE self)
#define ossl_ssl_get_x509(o)
#define ossl_sslctx_get_options(o)
static VALUE ossl_call_session_new_cb(VALUE ary)
static VALUE ossl_sslctx_set_ciphers(VALUE self, VALUE v)
static int ossl_client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
static VALUE ossl_sslctx_set_session_cache_mode(VALUE self, VALUE arg)
#define ossl_ssl_get_key(o)
VALUE rb_call_super(int, const VALUE *)
VALUE ossl_x509name_sk2ary(STACK_OF(X509_NAME) *names)
static VALUE eSSLErrorWaitWritable
static void ssl_renegotiation_cb(const SSL *ssl)
void rb_sys_fail(const char *mesg)
void rb_jump_tag(int tag)
X509_STORE * GetX509StorePtr(VALUE)
VALUE rb_define_module_under(VALUE outer, const char *name)
#define StringValueCStr(v)
#define ossl_sslctx_get_tmp_dh_cb(o)
#define ossl_sslctx_get_ca_path(o)
VALUE rb_obj_is_instance_of(VALUE, VALUE)
static VALUE ossl_ssl_get_peer_cert(VALUE self)
void rb_str_modify(VALUE)
static VALUE ossl_call_session_get_cb(VALUE ary)
VALUE rb_hash_aref(VALUE hash, VALUE key)
static void ossl_ssl_free(SSL *ssl)
#define OSSL_Check_Kind(obj, klass)
static void ssl_info_cb(const SSL *ssl, int where, int val)
#define ossl_ssl_set_io(o, v)
#define ossl_ssl_def_const(x)
void ossl_raise(VALUE exc, const char *fmt,...)
static int ossl_ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
EVP_PKEY * GetPKeyPtr(VALUE obj)
void rb_notimplement(void)
static VALUE ossl_ssl_get_version(VALUE self)
static unsigned int hash(const char *str, unsigned int len)
static VALUE ossl_sslctx_set_session_cache_size(VALUE self, VALUE arg)
EVP_PKEY * DupPKeyPtr(VALUE obj)
X509 * DupX509CertPtr(VALUE)
void rb_io_check_writable(rb_io_t *)
static VALUE ossl_ssl_get_peer_cert_chain(VALUE self)
const char * rb_id2name(ID id)
static const char * ossl_ssl_attr_readers[]
#define StringValuePtr(v)
static VALUE ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self)
void rb_warning(const char *fmt,...)
#define RSTRING_LENINT(str)
#define SafeGetSSLSession(obj, sess)
#define rb_check_frozen(obj)
VALUE rb_obj_freeze(VALUE)
static void ossl_sslctx_session_remove_cb(SSL_CTX *ctx, SSL_SESSION *sess)
static VALUE ossl_sslctx_set_ssl_version(VALUE self, VALUE ssl_method)
VALUE rb_define_module(const char *name)
static int ossl_sslctx_session_new_cb(SSL *ssl, SSL_SESSION *sess)
static void read_would_block(int nonblock)
static VALUE ossl_ssl_connect(VALUE self)
int rb_io_wait_readable(int)
RUBY_EXTERN VALUE rb_cTime
static VALUE ossl_sslctx_s_alloc(VALUE klass)
DH * OSSL_DEFAULT_DH_1024
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
VALUE rb_str_append(VALUE, VALUE)
static VALUE ossl_ssl_cipher_to_ary(SSL_CIPHER *cipher)
static VALUE ossl_start_ssl(VALUE self, int(*func)(), const char *funcname, int nonblock)
int ossl_verify_cb(int ok, X509_STORE_CTX *ctx)
#define ossl_ssl_set_ctx(o, v)
static DH * ossl_default_tmp_dh_callback(SSL *ssl, int is_export, int keylength)
static VALUE ossl_sslctx_get_session_cache_size(VALUE self)
int ossl_ssl_ex_client_cert_cb_idx
#define ossl_ssl_get_sync_close(o)
VALUE rb_str_new(const char *, long)
struct @43 ossl_ssl_method_tab[]