rubysl-openssl 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -7
- data/ext/rubysl/openssl/extconf.rb +7 -4
- data/ext/rubysl/openssl/openssl_missing.c +2 -2
- data/ext/rubysl/openssl/ossl.c +91 -25
- data/ext/rubysl/openssl/ossl.h +3 -4
- data/ext/rubysl/openssl/ossl_asn1.c +52 -6
- data/ext/rubysl/openssl/ossl_bio.c +1 -1
- data/ext/rubysl/openssl/ossl_bn.c +37 -2
- data/ext/rubysl/openssl/ossl_cipher.c +1 -1
- data/ext/rubysl/openssl/ossl_config.c +9 -0
- data/ext/rubysl/openssl/ossl_digest.c +2 -0
- data/ext/rubysl/openssl/ossl_engine.c +158 -0
- data/ext/rubysl/openssl/ossl_hmac.c +97 -3
- data/ext/rubysl/openssl/ossl_ocsp.c +3 -3
- data/ext/rubysl/openssl/ossl_pkcs7.c +2 -2
- data/ext/rubysl/openssl/ossl_pkey.c +6 -3
- data/ext/rubysl/openssl/ossl_pkey_dh.c +4 -3
- data/ext/rubysl/openssl/ossl_pkey_dsa.c +2 -0
- data/ext/rubysl/openssl/ossl_pkey_ec.c +4 -2
- data/ext/rubysl/openssl/ossl_pkey_rsa.c +3 -2
- data/ext/rubysl/openssl/ossl_ssl.c +62 -22
- data/ext/rubysl/openssl/ossl_x509attr.c +2 -2
- data/ext/rubysl/openssl/ossl_x509cert.c +3 -3
- data/ext/rubysl/openssl/ossl_x509crl.c +4 -4
- data/ext/rubysl/openssl/ossl_x509name.c +1 -1
- data/ext/rubysl/openssl/ossl_x509req.c +2 -2
- data/ext/rubysl/openssl/ossl_x509revoked.c +2 -2
- data/ext/rubysl/openssl/ossl_x509store.c +4 -4
- data/lib/openssl/bn.rb +4 -1
- data/lib/openssl/buffering.rb +28 -20
- data/lib/openssl/cipher.rb +1 -1
- data/lib/openssl/config.rb +164 -5
- data/lib/openssl/digest.rb +13 -14
- data/lib/openssl/ssl.rb +58 -11
- data/lib/rubysl/openssl/version.rb +1 -1
- metadata +61 -72
@@ -29,6 +29,9 @@ VALUE eSSLError;
|
|
29
29
|
VALUE cSSLContext;
|
30
30
|
VALUE cSSLSocket;
|
31
31
|
|
32
|
+
static VALUE eSSLErrorWaitReadable;
|
33
|
+
static VALUE eSSLErrorWaitWritable;
|
34
|
+
|
32
35
|
#define ossl_sslctx_set_cert(o,v) rb_iv_set((o),"@cert",(v))
|
33
36
|
#define ossl_sslctx_set_key(o,v) rb_iv_set((o),"@key",(v))
|
34
37
|
#define ossl_sslctx_set_client_ca(o,v) rb_iv_set((o),"@client_ca",(v))
|
@@ -100,6 +103,8 @@ static const char *ossl_ssl_attrs[] = {
|
|
100
103
|
|
101
104
|
ID ID_callback_state;
|
102
105
|
|
106
|
+
static VALUE sym_exception;
|
107
|
+
|
103
108
|
/*
|
104
109
|
* SSLContext class
|
105
110
|
*/
|
@@ -418,7 +423,7 @@ ossl_sslctx_session_new_cb(SSL *ssl, SSL_SESSION *sess)
|
|
418
423
|
}
|
419
424
|
|
420
425
|
/*
|
421
|
-
* return 0 which means to OpenSSL that the
|
426
|
+
* return 0 which means to OpenSSL that the session is still
|
422
427
|
* valid (since we created Ruby Session object) and was not freed by us
|
423
428
|
* with SSL_SESSION_free(). Call SSLContext#remove_session(sess) in
|
424
429
|
* session_get_cb block if you don't want OpenSSL to cache the session
|
@@ -472,7 +477,7 @@ ossl_sslctx_session_remove_cb(SSL_CTX *ctx, SSL_SESSION *sess)
|
|
472
477
|
}
|
473
478
|
|
474
479
|
static VALUE
|
475
|
-
ossl_sslctx_add_extra_chain_cert_i(
|
480
|
+
ossl_sslctx_add_extra_chain_cert_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
|
476
481
|
{
|
477
482
|
X509 *x509;
|
478
483
|
SSL_CTX *ctx;
|
@@ -713,7 +718,7 @@ ossl_sslctx_setup(VALUE self)
|
|
713
718
|
if(!NIL_P(val)){
|
714
719
|
if(TYPE(val) == T_ARRAY){
|
715
720
|
for(i = 0; i < RARRAY_LEN(val); i++){
|
716
|
-
client_ca = GetX509CertPtr(
|
721
|
+
client_ca = GetX509CertPtr(RARRAY_PTR(val)[i]);
|
717
722
|
if (!SSL_CTX_add_client_CA(ctx, client_ca)){
|
718
723
|
/* Copies X509_NAME => FREE it. */
|
719
724
|
ossl_raise(eSSLError, "SSL_CTX_add_client_CA");
|
@@ -1092,6 +1097,7 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self)
|
|
1092
1097
|
/*
|
1093
1098
|
* SSLSocket class
|
1094
1099
|
*/
|
1100
|
+
#ifndef OPENSSL_NO_SOCK
|
1095
1101
|
static void
|
1096
1102
|
ossl_ssl_shutdown(SSL *ssl)
|
1097
1103
|
{
|
@@ -1105,7 +1111,7 @@ ossl_ssl_shutdown(SSL *ssl)
|
|
1105
1111
|
* Ignore the case SSL_shutdown returns -1. Empty handshake_func
|
1106
1112
|
* must not happen.
|
1107
1113
|
*/
|
1108
|
-
if (rc = SSL_shutdown(ssl))
|
1114
|
+
if ((rc = SSL_shutdown(ssl)))
|
1109
1115
|
break;
|
1110
1116
|
}
|
1111
1117
|
SSL_clear(ssl);
|
@@ -1131,7 +1137,7 @@ ossl_ssl_s_alloc(VALUE klass)
|
|
1131
1137
|
* SSLSocket.new(io, ctx) => aSSLSocket
|
1132
1138
|
*
|
1133
1139
|
* Creates a new SSL socket from +io+ which must be a real ruby object (not an
|
1134
|
-
* IO-like object that responds to read/write.
|
1140
|
+
* IO-like object that responds to read/write).
|
1135
1141
|
*
|
1136
1142
|
* If +ctx+ is provided the SSL Sockets initial params will be taken from
|
1137
1143
|
* the context.
|
@@ -1229,8 +1235,7 @@ static void
|
|
1229
1235
|
write_would_block(int nonblock)
|
1230
1236
|
{
|
1231
1237
|
if (nonblock) {
|
1232
|
-
VALUE exc = ossl_exc_new(
|
1233
|
-
rb_extend_object(exc, rb_mWaitWritable);
|
1238
|
+
VALUE exc = ossl_exc_new(eSSLErrorWaitWritable, "write would block");
|
1234
1239
|
rb_exc_raise(exc);
|
1235
1240
|
}
|
1236
1241
|
}
|
@@ -1239,8 +1244,7 @@ static void
|
|
1239
1244
|
read_would_block(int nonblock)
|
1240
1245
|
{
|
1241
1246
|
if (nonblock) {
|
1242
|
-
VALUE exc = ossl_exc_new(
|
1243
|
-
rb_extend_object(exc, rb_mWaitReadable);
|
1247
|
+
VALUE exc = ossl_exc_new(eSSLErrorWaitReadable, "read would block");
|
1244
1248
|
rb_exc_raise(exc);
|
1245
1249
|
}
|
1246
1250
|
}
|
@@ -1371,10 +1375,16 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock)
|
|
1371
1375
|
{
|
1372
1376
|
SSL *ssl;
|
1373
1377
|
int ilen, nread = 0;
|
1378
|
+
int no_exception = 0;
|
1374
1379
|
VALUE len, str;
|
1375
1380
|
rb_io_t *fptr;
|
1381
|
+
VALUE opts = Qnil;
|
1382
|
+
|
1383
|
+
rb_scan_args(argc, argv, "11:", &len, &str, &opts);
|
1384
|
+
|
1385
|
+
if (!NIL_P(opts) && Qfalse == rb_hash_aref(opts, sym_exception))
|
1386
|
+
no_exception = 1;
|
1376
1387
|
|
1377
|
-
rb_scan_args(argc, argv, "11", &len, &str);
|
1378
1388
|
ilen = NUM2INT(len);
|
1379
1389
|
if(NIL_P(str)) str = rb_str_new(0, ilen);
|
1380
1390
|
else{
|
@@ -1395,17 +1405,23 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock)
|
|
1395
1405
|
case SSL_ERROR_NONE:
|
1396
1406
|
goto end;
|
1397
1407
|
case SSL_ERROR_ZERO_RETURN:
|
1408
|
+
if (no_exception) { return Qnil; }
|
1398
1409
|
rb_eof_error();
|
1399
1410
|
case SSL_ERROR_WANT_WRITE:
|
1411
|
+
if (no_exception) { return ID2SYM(rb_intern("wait_writable")); }
|
1400
1412
|
write_would_block(nonblock);
|
1401
1413
|
rb_io_wait_writable(FPTR_TO_FD(fptr));
|
1402
1414
|
continue;
|
1403
1415
|
case SSL_ERROR_WANT_READ:
|
1416
|
+
if (no_exception) { return ID2SYM(rb_intern("wait_readable")); }
|
1404
1417
|
read_would_block(nonblock);
|
1405
1418
|
rb_io_wait_readable(FPTR_TO_FD(fptr));
|
1406
1419
|
continue;
|
1407
1420
|
case SSL_ERROR_SYSCALL:
|
1408
|
-
if(ERR_peek_error() == 0 && nread == 0)
|
1421
|
+
if(ERR_peek_error() == 0 && nread == 0) {
|
1422
|
+
if (no_exception) { return Qnil; }
|
1423
|
+
rb_eof_error();
|
1424
|
+
}
|
1409
1425
|
rb_sys_fail(0);
|
1410
1426
|
default:
|
1411
1427
|
ossl_raise(eSSLError, "SSL_read");
|
@@ -1443,9 +1459,11 @@ ossl_ssl_read(int argc, VALUE *argv, VALUE self)
|
|
1443
1459
|
* call-seq:
|
1444
1460
|
* ssl.sysread_nonblock(length) => string
|
1445
1461
|
* ssl.sysread_nonblock(length, buffer) => buffer
|
1462
|
+
* ssl.sysread_nonblock(length[, buffer [, opts]) => buffer
|
1446
1463
|
*
|
1447
1464
|
* A non-blocking version of #sysread. Raises an SSLError if reading would
|
1448
|
-
* block.
|
1465
|
+
* block. If "exception: false" is passed, this method returns a symbol of
|
1466
|
+
* :wait_readable, :wait_writable, or nil, rather than raising an exception.
|
1449
1467
|
*
|
1450
1468
|
* Reads +length+ bytes from the SSL connection. If a pre-allocated +buffer+
|
1451
1469
|
* is provided the data will be written into it.
|
@@ -1457,7 +1475,7 @@ ossl_ssl_read_nonblock(int argc, VALUE *argv, VALUE self)
|
|
1457
1475
|
}
|
1458
1476
|
|
1459
1477
|
static VALUE
|
1460
|
-
ossl_ssl_write_internal(VALUE self, VALUE str, int nonblock)
|
1478
|
+
ossl_ssl_write_internal(VALUE self, VALUE str, int nonblock, int no_exception)
|
1461
1479
|
{
|
1462
1480
|
SSL *ssl;
|
1463
1481
|
int nwrite = 0;
|
@@ -1474,10 +1492,12 @@ ossl_ssl_write_internal(VALUE self, VALUE str, int nonblock)
|
|
1474
1492
|
case SSL_ERROR_NONE:
|
1475
1493
|
goto end;
|
1476
1494
|
case SSL_ERROR_WANT_WRITE:
|
1495
|
+
if (no_exception) { return ID2SYM(rb_intern("wait_writable")); }
|
1477
1496
|
write_would_block(nonblock);
|
1478
1497
|
rb_io_wait_writable(FPTR_TO_FD(fptr));
|
1479
1498
|
continue;
|
1480
1499
|
case SSL_ERROR_WANT_READ:
|
1500
|
+
if (no_exception) { return ID2SYM(rb_intern("wait_readable")); }
|
1481
1501
|
read_would_block(nonblock);
|
1482
1502
|
rb_io_wait_readable(FPTR_TO_FD(fptr));
|
1483
1503
|
continue;
|
@@ -1507,7 +1527,7 @@ ossl_ssl_write_internal(VALUE self, VALUE str, int nonblock)
|
|
1507
1527
|
static VALUE
|
1508
1528
|
ossl_ssl_write(VALUE self, VALUE str)
|
1509
1529
|
{
|
1510
|
-
return ossl_ssl_write_internal(self, str, 0);
|
1530
|
+
return ossl_ssl_write_internal(self, str, 0, 0);
|
1511
1531
|
}
|
1512
1532
|
|
1513
1533
|
/*
|
@@ -1518,9 +1538,18 @@ ossl_ssl_write(VALUE self, VALUE str)
|
|
1518
1538
|
* SSLError if writing would block.
|
1519
1539
|
*/
|
1520
1540
|
static VALUE
|
1521
|
-
ossl_ssl_write_nonblock(VALUE
|
1541
|
+
ossl_ssl_write_nonblock(int argc, VALUE *argv, VALUE self)
|
1522
1542
|
{
|
1523
|
-
|
1543
|
+
VALUE str;
|
1544
|
+
VALUE opts = Qnil;
|
1545
|
+
int no_exception = 0;
|
1546
|
+
|
1547
|
+
rb_scan_args(argc, argv, "1:", &str, &opts);
|
1548
|
+
|
1549
|
+
if (!NIL_P(opts) && Qfalse == rb_hash_aref(opts, sym_exception))
|
1550
|
+
no_exception = 1;
|
1551
|
+
|
1552
|
+
return ossl_ssl_write_internal(self, str, 1, no_exception);
|
1524
1553
|
}
|
1525
1554
|
|
1526
1555
|
/*
|
@@ -1633,7 +1662,7 @@ ossl_ssl_get_peer_cert_chain(VALUE self)
|
|
1633
1662
|
|
1634
1663
|
/*
|
1635
1664
|
* call-seq:
|
1636
|
-
* ssl.
|
1665
|
+
* ssl.ssl_version => String
|
1637
1666
|
*
|
1638
1667
|
* Returns a String representing the SSL/TLS version that was negotiated
|
1639
1668
|
* for the connection, for example "TLSv1.2".
|
@@ -1794,7 +1823,7 @@ ossl_ssl_get_client_ca_list(VALUE self)
|
|
1794
1823
|
return ossl_x509name_sk2ary(ca);
|
1795
1824
|
}
|
1796
1825
|
|
1797
|
-
#ifdef HAVE_OPENSSL_NPN_NEGOTIATED
|
1826
|
+
# ifdef HAVE_OPENSSL_NPN_NEGOTIATED
|
1798
1827
|
/*
|
1799
1828
|
* call-seq:
|
1800
1829
|
* ssl.npn_protocol => String
|
@@ -1817,7 +1846,8 @@ ossl_ssl_npn_protocol(VALUE self)
|
|
1817
1846
|
else
|
1818
1847
|
return rb_str_new((const char *) out, outlen);
|
1819
1848
|
}
|
1820
|
-
#endif
|
1849
|
+
# endif
|
1850
|
+
#endif /* !defined(OPENSSL_NO_SOCK) */
|
1821
1851
|
|
1822
1852
|
void
|
1823
1853
|
Init_ossl_ssl()
|
@@ -1852,6 +1882,10 @@ Init_ossl_ssl()
|
|
1852
1882
|
* Generic error class raised by SSLSocket and SSLContext.
|
1853
1883
|
*/
|
1854
1884
|
eSSLError = rb_define_class_under(mSSL, "SSLError", eOSSLError);
|
1885
|
+
eSSLErrorWaitReadable = rb_define_class_under(mSSL, "SSLErrorWaitReadable", eSSLError);
|
1886
|
+
rb_include_module(eSSLErrorWaitReadable, rb_mWaitReadable);
|
1887
|
+
eSSLErrorWaitWritable = rb_define_class_under(mSSL, "SSLErrorWaitWritable", eSSLError);
|
1888
|
+
rb_include_module(eSSLErrorWaitWritable, rb_mWaitWritable);
|
1855
1889
|
|
1856
1890
|
Init_ossl_ssl_session();
|
1857
1891
|
|
@@ -1970,7 +2004,7 @@ Init_ossl_ssl()
|
|
1970
2004
|
|
1971
2005
|
/*
|
1972
2006
|
* Sets the context in which a session can be reused. This allows
|
1973
|
-
* sessions for multiple applications to be distinguished, for
|
2007
|
+
* sessions for multiple applications to be distinguished, for example, by
|
1974
2008
|
* name.
|
1975
2009
|
*/
|
1976
2010
|
rb_attr(cSSLContext, rb_intern("session_id_context"), 1, 1, Qfalse);
|
@@ -2144,6 +2178,9 @@ Init_ossl_ssl()
|
|
2144
2178
|
*
|
2145
2179
|
*/
|
2146
2180
|
cSSLSocket = rb_define_class_under(mSSL, "SSLSocket", rb_cObject);
|
2181
|
+
#ifdef OPENSSL_NO_SOCK
|
2182
|
+
rb_define_method(cSSLSocket, "initialize", rb_notimplement, -1);
|
2183
|
+
#else
|
2147
2184
|
rb_define_alloc_func(cSSLSocket, ossl_ssl_s_alloc);
|
2148
2185
|
for(i = 0; i < numberof(ossl_ssl_attr_readers); i++)
|
2149
2186
|
rb_attr(cSSLSocket, rb_intern(ossl_ssl_attr_readers[i]), 1, 0, Qfalse);
|
@@ -2158,7 +2195,7 @@ Init_ossl_ssl()
|
|
2158
2195
|
rb_define_method(cSSLSocket, "sysread", ossl_ssl_read, -1);
|
2159
2196
|
rb_define_private_method(cSSLSocket, "sysread_nonblock", ossl_ssl_read_nonblock, -1);
|
2160
2197
|
rb_define_method(cSSLSocket, "syswrite", ossl_ssl_write, 1);
|
2161
|
-
rb_define_private_method(cSSLSocket, "syswrite_nonblock", ossl_ssl_write_nonblock, 1);
|
2198
|
+
rb_define_private_method(cSSLSocket, "syswrite_nonblock", ossl_ssl_write_nonblock, -1);
|
2162
2199
|
rb_define_method(cSSLSocket, "sysclose", ossl_ssl_close, 0);
|
2163
2200
|
rb_define_method(cSSLSocket, "cert", ossl_ssl_get_cert, 0);
|
2164
2201
|
rb_define_method(cSSLSocket, "peer_cert", ossl_ssl_get_peer_cert, 0);
|
@@ -2172,8 +2209,9 @@ Init_ossl_ssl()
|
|
2172
2209
|
rb_define_method(cSSLSocket, "session=", ossl_ssl_set_session, 1);
|
2173
2210
|
rb_define_method(cSSLSocket, "verify_result", ossl_ssl_get_verify_result, 0);
|
2174
2211
|
rb_define_method(cSSLSocket, "client_ca", ossl_ssl_get_client_ca_list, 0);
|
2175
|
-
#ifdef HAVE_OPENSSL_NPN_NEGOTIATED
|
2212
|
+
# ifdef HAVE_OPENSSL_NPN_NEGOTIATED
|
2176
2213
|
rb_define_method(cSSLSocket, "npn_protocol", ossl_ssl_npn_protocol, 0);
|
2214
|
+
# endif
|
2177
2215
|
#endif
|
2178
2216
|
|
2179
2217
|
#define ossl_ssl_def_const(x) rb_define_const(mSSL, #x, INT2NUM(SSL_##x))
|
@@ -2230,4 +2268,6 @@ Init_ossl_ssl()
|
|
2230
2268
|
ossl_ssl_def_const(OP_PKCS1_CHECK_2);
|
2231
2269
|
ossl_ssl_def_const(OP_NETSCAPE_CA_DN_BUG);
|
2232
2270
|
ossl_ssl_def_const(OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
|
2271
|
+
|
2272
|
+
sym_exception = ID2SYM(rb_intern("exception"));
|
2233
2273
|
}
|
@@ -165,8 +165,8 @@ ossl_x509attr_get_oid(VALUE self)
|
|
165
165
|
# define OSSL_X509ATTR_IS_SINGLE(attr) ((attr)->single)
|
166
166
|
# define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->single = 1)
|
167
167
|
#else
|
168
|
-
# define OSSL_X509ATTR_IS_SINGLE(attr) (!(attr)->set)
|
169
|
-
# define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->set = 0)
|
168
|
+
# define OSSL_X509ATTR_IS_SINGLE(attr) (!(attr)->value.set)
|
169
|
+
# define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->value.set = 0)
|
170
170
|
#endif
|
171
171
|
|
172
172
|
/*
|
@@ -66,7 +66,7 @@ ossl_x509_new_from_file(VALUE filename)
|
|
66
66
|
if (!(fp = fopen(RSTRING_PTR(filename), "r"))) {
|
67
67
|
ossl_raise(eX509CertError, "%s", strerror(errno));
|
68
68
|
}
|
69
|
-
|
69
|
+
rb_fd_fix_cloexec(fileno(fp));
|
70
70
|
x509 = PEM_read_X509(fp, NULL, NULL, NULL);
|
71
71
|
/*
|
72
72
|
* prepare for DER...
|
@@ -651,13 +651,13 @@ ossl_x509_set_extensions(VALUE self, VALUE ary)
|
|
651
651
|
Check_Type(ary, T_ARRAY);
|
652
652
|
/* All ary's members should be X509Extension */
|
653
653
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
654
|
-
OSSL_Check_Kind(
|
654
|
+
OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Ext);
|
655
655
|
}
|
656
656
|
GetX509(self, x509);
|
657
657
|
sk_X509_EXTENSION_pop_free(x509->cert_info->extensions, X509_EXTENSION_free);
|
658
658
|
x509->cert_info->extensions = NULL;
|
659
659
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
660
|
-
ext = DupX509ExtPtr(
|
660
|
+
ext = DupX509ExtPtr(RARRAY_PTR(ary)[i]);
|
661
661
|
|
662
662
|
if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */
|
663
663
|
X509_EXTENSION_free(ext);
|
@@ -290,13 +290,13 @@ ossl_x509crl_set_revoked(VALUE self, VALUE ary)
|
|
290
290
|
Check_Type(ary, T_ARRAY);
|
291
291
|
/* All ary members should be X509 Revoked */
|
292
292
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
293
|
-
OSSL_Check_Kind(
|
293
|
+
OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Rev);
|
294
294
|
}
|
295
295
|
GetX509CRL(self, crl);
|
296
296
|
sk_X509_REVOKED_pop_free(crl->crl->revoked, X509_REVOKED_free);
|
297
297
|
crl->crl->revoked = NULL;
|
298
298
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
299
|
-
rev = DupX509RevokedPtr(
|
299
|
+
rev = DupX509RevokedPtr(RARRAY_PTR(ary)[i]);
|
300
300
|
if (!X509_CRL_add0_revoked(crl, rev)) { /* NO DUP - don't free! */
|
301
301
|
ossl_raise(eX509CRLError, NULL);
|
302
302
|
}
|
@@ -464,13 +464,13 @@ ossl_x509crl_set_extensions(VALUE self, VALUE ary)
|
|
464
464
|
Check_Type(ary, T_ARRAY);
|
465
465
|
/* All ary members should be X509 Extensions */
|
466
466
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
467
|
-
OSSL_Check_Kind(
|
467
|
+
OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Ext);
|
468
468
|
}
|
469
469
|
GetX509CRL(self, crl);
|
470
470
|
sk_X509_EXTENSION_pop_free(crl->crl->extensions, X509_EXTENSION_free);
|
471
471
|
crl->crl->extensions = NULL;
|
472
472
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
473
|
-
ext = DupX509ExtPtr(
|
473
|
+
ext = DupX509ExtPtr(RARRAY_PTR(ary)[i]);
|
474
474
|
if(!X509_CRL_add_ext(crl, ext, -1)) { /* DUPs ext - FREE it */
|
475
475
|
X509_EXTENSION_free(ext);
|
476
476
|
ossl_raise(eX509CRLError, NULL);
|
@@ -92,7 +92,7 @@ static VALUE ossl_x509name_add_entry(int, VALUE*, VALUE);
|
|
92
92
|
#define rb_aref(obj, key) rb_funcall((obj), id_aref, 1, (key))
|
93
93
|
|
94
94
|
static VALUE
|
95
|
-
ossl_x509name_init_i(
|
95
|
+
ossl_x509name_init_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
|
96
96
|
{
|
97
97
|
VALUE self = rb_ary_entry(args, 0);
|
98
98
|
VALUE template = rb_ary_entry(args, 1);
|
@@ -406,13 +406,13 @@ ossl_x509req_set_attributes(VALUE self, VALUE ary)
|
|
406
406
|
|
407
407
|
Check_Type(ary, T_ARRAY);
|
408
408
|
for (i=0;i<RARRAY_LEN(ary); i++) {
|
409
|
-
OSSL_Check_Kind(
|
409
|
+
OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Attr);
|
410
410
|
}
|
411
411
|
GetX509Req(self, req);
|
412
412
|
sk_X509_ATTRIBUTE_pop_free(req->req_info->attributes, X509_ATTRIBUTE_free);
|
413
413
|
req->req_info->attributes = NULL;
|
414
414
|
for (i=0;i<RARRAY_LEN(ary); i++) {
|
415
|
-
item =
|
415
|
+
item = RARRAY_PTR(ary)[i];
|
416
416
|
attr = DupX509AttrPtr(item);
|
417
417
|
if (!X509_REQ_add1_attr(req, attr)) {
|
418
418
|
ossl_raise(eX509ReqError, NULL);
|
@@ -176,13 +176,13 @@ ossl_x509revoked_set_extensions(VALUE self, VALUE ary)
|
|
176
176
|
|
177
177
|
Check_Type(ary, T_ARRAY);
|
178
178
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
179
|
-
OSSL_Check_Kind(
|
179
|
+
OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Ext);
|
180
180
|
}
|
181
181
|
GetX509Rev(self, rev);
|
182
182
|
sk_X509_EXTENSION_pop_free(rev->extensions, X509_EXTENSION_free);
|
183
183
|
rev->extensions = NULL;
|
184
184
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
185
|
-
item =
|
185
|
+
item = RARRAY_PTR(ary)[i];
|
186
186
|
ext = DupX509ExtPtr(item);
|
187
187
|
if(!X509_REVOKED_add_ext(rev, ext, -1)) {
|
188
188
|
ossl_raise(eX509RevError, NULL);
|
@@ -135,9 +135,9 @@ ossl_x509store_initialize(int argc, VALUE *argv, VALUE self)
|
|
135
135
|
ossl_x509store_set_vfy_cb(self, Qnil);
|
136
136
|
|
137
137
|
#if (OPENSSL_VERSION_NUMBER < 0x00907000L)
|
138
|
-
rb_iv_set(self, "@flags",
|
139
|
-
rb_iv_set(self, "@purpose",
|
140
|
-
rb_iv_set(self, "@trust",
|
138
|
+
rb_iv_set(self, "@flags", INT2FIX(0));
|
139
|
+
rb_iv_set(self, "@purpose", INT2FIX(0));
|
140
|
+
rb_iv_set(self, "@trust", INT2FIX(0));
|
141
141
|
#endif
|
142
142
|
|
143
143
|
/* last verification status */
|
@@ -257,7 +257,7 @@ ossl_x509store_add_path(VALUE self, VALUE dir)
|
|
257
257
|
|
258
258
|
/*
|
259
259
|
* call-seq:
|
260
|
-
* store.
|
260
|
+
* store.set_default_paths
|
261
261
|
*
|
262
262
|
* Adds the default certificates to the certificate store. These certificates
|
263
263
|
* are loaded from the default configuration directory which can usually be
|
data/lib/openssl/bn.rb
CHANGED
@@ -28,8 +28,11 @@ end # OpenSSL
|
|
28
28
|
# Add double dispatch to Integer
|
29
29
|
#
|
30
30
|
class Integer
|
31
|
+
# Casts an Integer as an OpenSSL::BN
|
32
|
+
#
|
33
|
+
# See `man bn` for more info.
|
31
34
|
def to_bn
|
32
|
-
OpenSSL::BN::new(self
|
35
|
+
OpenSSL::BN::new(self)
|
33
36
|
end
|
34
37
|
end # Integer
|
35
38
|
|
data/lib/openssl/buffering.rb
CHANGED
@@ -1,23 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
1
|
+
# coding: binary
|
2
|
+
#--
|
3
|
+
#= $RCSfile$ -- Buffering mix-in module.
|
4
|
+
#
|
5
|
+
#= Info
|
6
|
+
# 'OpenSSL for Ruby 2' project
|
7
|
+
# Copyright (C) 2001 GOTOU YUUZOU <gotoyuzo@notwork.org>
|
8
|
+
# All rights reserved.
|
9
|
+
#
|
10
|
+
#= Licence
|
11
|
+
# This program is licenced under the same licence as Ruby.
|
12
|
+
# (See the file 'LICENCE'.)
|
13
|
+
#
|
14
|
+
#= Version
|
15
|
+
# $Id$
|
16
|
+
#++
|
16
17
|
|
17
18
|
##
|
18
19
|
# OpenSSL IO buffering mix-in module.
|
19
20
|
#
|
20
21
|
# This module allows an OpenSSL::SSL::SSLSocket to behave like an IO.
|
22
|
+
#
|
23
|
+
# You typically won't use this module directly, you can see it implemented in
|
24
|
+
# OpenSSL::SSL::SSLSocket.
|
21
25
|
|
22
26
|
module OpenSSL::Buffering
|
23
27
|
include Enumerable
|
@@ -34,7 +38,11 @@ module OpenSSL::Buffering
|
|
34
38
|
|
35
39
|
BLOCK_SIZE = 1024*16
|
36
40
|
|
37
|
-
|
41
|
+
##
|
42
|
+
# Creates an instance of OpenSSL's buffering IO module.
|
43
|
+
|
44
|
+
def initialize(*)
|
45
|
+
super
|
38
46
|
@eof = false
|
39
47
|
@rbuffer = ""
|
40
48
|
@sync = @io.sync
|
@@ -161,7 +169,7 @@ module OpenSSL::Buffering
|
|
161
169
|
# when the peer requests a new TLS/SSL handshake. See openssl the FAQ for
|
162
170
|
# more details. http://www.openssl.org/support/faq.html
|
163
171
|
|
164
|
-
def read_nonblock(maxlen, buf=nil)
|
172
|
+
def read_nonblock(maxlen, buf=nil, exception: true)
|
165
173
|
if maxlen == 0
|
166
174
|
if buf
|
167
175
|
buf.clear
|
@@ -171,7 +179,7 @@ module OpenSSL::Buffering
|
|
171
179
|
end
|
172
180
|
end
|
173
181
|
if @rbuffer.empty?
|
174
|
-
return sysread_nonblock(maxlen, buf)
|
182
|
+
return sysread_nonblock(maxlen, buf, exception: exception)
|
175
183
|
end
|
176
184
|
ret = consume_rbuff(maxlen)
|
177
185
|
if buf
|
@@ -370,9 +378,9 @@ module OpenSSL::Buffering
|
|
370
378
|
# is when the peer requests a new TLS/SSL handshake. See the openssl FAQ
|
371
379
|
# for more details. http://www.openssl.org/support/faq.html
|
372
380
|
|
373
|
-
def write_nonblock(s)
|
381
|
+
def write_nonblock(s, exception: true)
|
374
382
|
flush
|
375
|
-
syswrite_nonblock(s)
|
383
|
+
syswrite_nonblock(s, exception: exception)
|
376
384
|
end
|
377
385
|
|
378
386
|
##
|