openssl 3.2.0 → 3.2.1
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 +4 -4
- data/History.md +38 -1
- data/ext/openssl/ossl_asn1.c +19 -24
- data/ext/openssl/ossl_cipher.c +19 -4
- data/ext/openssl/ossl_digest.c +1 -0
- data/ext/openssl/ossl_pkcs7.c +11 -1
- data/lib/openssl/buffering.rb +11 -6
- data/lib/openssl/version.rb +1 -1
- data/lib/openssl/x509.rb +5 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d768799eb4f3fb6e1ec8937cdf77c3ab5c5a3c453a8ea38e8886b0c96eb85778
|
4
|
+
data.tar.gz: 7e36f7e488cce83fbeae8cea19bb5cc817a10759243c5ce9345a65e0837ba7ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69dcd674d157588140b6ef64f3996a4a7a0847ddd713550752ac509310430fe5b9463c532c69538cbdc136bcbe934d6e2670a6bd4e2f91283cff18ddd5bf2eb3
|
7
|
+
data.tar.gz: 5583751022390d99a99b2179113acd5589366ecc407b50c3a0833ba2873ba3d3037a05644e02ffffb507ea4c3852e90c9f9507a8f65188c96034ed36533e2213
|
data/History.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
Version 3.2.1
|
2
|
+
=============
|
3
|
+
|
4
|
+
Merged changes in 3.0.3.
|
5
|
+
|
6
|
+
|
1
7
|
Version 3.2.0
|
2
8
|
=============
|
3
9
|
|
@@ -38,6 +44,12 @@ Notable changes
|
|
38
44
|
[[GitHub #141]](https://github.com/ruby/openssl/pull/141)
|
39
45
|
|
40
46
|
|
47
|
+
Version 3.1.1
|
48
|
+
=============
|
49
|
+
|
50
|
+
Merged changes in 3.0.3.
|
51
|
+
|
52
|
+
|
41
53
|
Version 3.1.0
|
42
54
|
=============
|
43
55
|
|
@@ -74,6 +86,31 @@ Notable changes
|
|
74
86
|
LibreSSL 3.6 and Ed25519 support in LibreSSL 3.7.
|
75
87
|
|
76
88
|
|
89
|
+
Version 3.0.3
|
90
|
+
=============
|
91
|
+
|
92
|
+
Bug fixes
|
93
|
+
---------
|
94
|
+
|
95
|
+
* Fix a performance regression introduced in v2.1.3 on a buffered write to
|
96
|
+
`SSLSocket`.
|
97
|
+
[[GitHub #706]](https://github.com/ruby/openssl/pull/706)
|
98
|
+
* Fix `OpenSSL::PKCS7` to handle PKCS#7 structures without content.
|
99
|
+
[[GitHub #690]](https://github.com/ruby/openssl/pull/690)
|
100
|
+
[[GitHub #752]](https://github.com/ruby/openssl/pull/752)
|
101
|
+
* Fix `OpenSSL::ASN1::ObjectId#==` with OIDs without a known name.
|
102
|
+
[[GitHub #791]](https://github.com/ruby/openssl/issues/791)
|
103
|
+
[[GitHub #792]](https://github.com/ruby/openssl/pull/792)
|
104
|
+
* Fix `OpenSSL::X509::Certificate#crl_uris` to handle CDP with multiple CRL
|
105
|
+
URIs.
|
106
|
+
[[GitHub #775]](https://github.com/ruby/openssl/issues/775)
|
107
|
+
[[GitHub #776]](https://github.com/ruby/openssl/pull/776)
|
108
|
+
* Fix `OpenSSL::Cipher#update` to always make the output buffer `String`
|
109
|
+
independent.
|
110
|
+
[[Bug #20937]](https://bugs.ruby-lang.org/issues/20937)
|
111
|
+
[[GitHub #824]](https://github.com/ruby/openssl/pull/824)
|
112
|
+
|
113
|
+
|
77
114
|
Version 3.0.2
|
78
115
|
=============
|
79
116
|
|
@@ -457,7 +494,7 @@ Security fixes
|
|
457
494
|
Bug fixes
|
458
495
|
---------
|
459
496
|
|
460
|
-
* Fixed OpenSSL::PKey
|
497
|
+
* Fixed OpenSSL::PKey::\*.{new,generate} immediately aborting if the thread is
|
461
498
|
interrupted.
|
462
499
|
[[Bug #14882]](https://bugs.ruby-lang.org/issues/14882)
|
463
500
|
[[GitHub #205]](https://github.com/ruby/openssl/pull/205)
|
data/ext/openssl/ossl_asn1.c
CHANGED
@@ -1298,30 +1298,6 @@ ossl_asn1obj_get_ln(VALUE self)
|
|
1298
1298
|
return ret;
|
1299
1299
|
}
|
1300
1300
|
|
1301
|
-
/*
|
1302
|
-
* call-seq:
|
1303
|
-
* oid == other_oid => true or false
|
1304
|
-
*
|
1305
|
-
* Returns +true+ if _other_oid_ is the same as _oid_
|
1306
|
-
*/
|
1307
|
-
static VALUE
|
1308
|
-
ossl_asn1obj_eq(VALUE self, VALUE other)
|
1309
|
-
{
|
1310
|
-
VALUE valSelf, valOther;
|
1311
|
-
int nidSelf, nidOther;
|
1312
|
-
|
1313
|
-
valSelf = ossl_asn1_get_value(self);
|
1314
|
-
valOther = ossl_asn1_get_value(other);
|
1315
|
-
|
1316
|
-
if ((nidSelf = OBJ_txt2nid(StringValueCStr(valSelf))) == NID_undef)
|
1317
|
-
ossl_raise(eASN1Error, "OBJ_txt2nid");
|
1318
|
-
|
1319
|
-
if ((nidOther = OBJ_txt2nid(StringValueCStr(valOther))) == NID_undef)
|
1320
|
-
ossl_raise(eASN1Error, "OBJ_txt2nid");
|
1321
|
-
|
1322
|
-
return nidSelf == nidOther ? Qtrue : Qfalse;
|
1323
|
-
}
|
1324
|
-
|
1325
1301
|
static VALUE
|
1326
1302
|
asn1obj_get_oid_i(VALUE vobj)
|
1327
1303
|
{
|
@@ -1366,6 +1342,25 @@ ossl_asn1obj_get_oid(VALUE self)
|
|
1366
1342
|
return str;
|
1367
1343
|
}
|
1368
1344
|
|
1345
|
+
/*
|
1346
|
+
* call-seq:
|
1347
|
+
* oid == other_oid => true or false
|
1348
|
+
*
|
1349
|
+
* Returns +true+ if _other_oid_ is the same as _oid_.
|
1350
|
+
*/
|
1351
|
+
static VALUE
|
1352
|
+
ossl_asn1obj_eq(VALUE self, VALUE other)
|
1353
|
+
{
|
1354
|
+
VALUE oid1, oid2;
|
1355
|
+
|
1356
|
+
if (!rb_obj_is_kind_of(other, cASN1ObjectId))
|
1357
|
+
return Qfalse;
|
1358
|
+
|
1359
|
+
oid1 = ossl_asn1obj_get_oid(self);
|
1360
|
+
oid2 = ossl_asn1obj_get_oid(other);
|
1361
|
+
return rb_str_equal(oid1, oid2);
|
1362
|
+
}
|
1363
|
+
|
1369
1364
|
#define OSSL_ASN1_IMPL_FACTORY_METHOD(klass) \
|
1370
1365
|
static VALUE ossl_asn1_##klass(int argc, VALUE *argv, VALUE self)\
|
1371
1366
|
{ return rb_funcall3(cASN1##klass, rb_intern("new"), argc, argv); }
|
data/ext/openssl/ossl_cipher.c
CHANGED
@@ -386,22 +386,37 @@ ossl_cipher_update(int argc, VALUE *argv, VALUE self)
|
|
386
386
|
in = (unsigned char *)RSTRING_PTR(data);
|
387
387
|
in_len = RSTRING_LEN(data);
|
388
388
|
GetCipher(self, ctx);
|
389
|
-
|
390
|
-
|
389
|
+
|
390
|
+
/*
|
391
|
+
* As of OpenSSL 3.2, there is no reliable way to determine the required
|
392
|
+
* output buffer size for arbitrary cipher modes.
|
393
|
+
* https://github.com/openssl/openssl/issues/22628
|
394
|
+
*
|
395
|
+
* in_len+block_size is usually sufficient, but AES key wrap with padding
|
396
|
+
* ciphers require in_len+15 even though they have a block size of 8 bytes.
|
397
|
+
*
|
398
|
+
* Using EVP_MAX_BLOCK_LENGTH (32) as a safe upper bound for ciphers
|
399
|
+
* currently implemented in OpenSSL, but this can change in the future.
|
400
|
+
*/
|
401
|
+
if (in_len > LONG_MAX - EVP_MAX_BLOCK_LENGTH) {
|
391
402
|
ossl_raise(rb_eRangeError,
|
392
403
|
"data too big to make output buffer: %ld bytes", in_len);
|
393
404
|
}
|
405
|
+
out_len = in_len + EVP_MAX_BLOCK_LENGTH;
|
394
406
|
|
395
407
|
if (NIL_P(str)) {
|
396
408
|
str = rb_str_new(0, out_len);
|
397
409
|
} else {
|
398
410
|
StringValue(str);
|
399
|
-
|
411
|
+
if ((long)rb_str_capacity(str) >= out_len)
|
412
|
+
rb_str_modify(str);
|
413
|
+
else
|
414
|
+
rb_str_modify_expand(str, out_len - RSTRING_LEN(str));
|
400
415
|
}
|
401
416
|
|
402
417
|
if (!ossl_cipher_update_long(ctx, (unsigned char *)RSTRING_PTR(str), &out_len, in, in_len))
|
403
418
|
ossl_raise(eCipherError, NULL);
|
404
|
-
assert(out_len
|
419
|
+
assert(out_len <= RSTRING_LEN(str));
|
405
420
|
rb_str_set_len(str, out_len);
|
406
421
|
|
407
422
|
return str;
|
data/ext/openssl/ossl_digest.c
CHANGED
data/ext/openssl/ossl_pkcs7.c
CHANGED
@@ -165,7 +165,13 @@ ossl_pkcs7_s_read_smime(VALUE klass, VALUE arg)
|
|
165
165
|
out = NULL;
|
166
166
|
pkcs7 = SMIME_read_PKCS7(in, &out);
|
167
167
|
BIO_free(in);
|
168
|
-
if(!pkcs7)
|
168
|
+
if (!pkcs7)
|
169
|
+
ossl_raise(ePKCS7Error, "Could not parse the PKCS7");
|
170
|
+
if (!pkcs7->d.ptr) {
|
171
|
+
PKCS7_free(pkcs7);
|
172
|
+
ossl_raise(ePKCS7Error, "No content in PKCS7");
|
173
|
+
}
|
174
|
+
|
169
175
|
data = out ? ossl_membio2str(out) : Qnil;
|
170
176
|
SetPKCS7(ret, pkcs7);
|
171
177
|
ossl_pkcs7_set_data(ret, data);
|
@@ -346,6 +352,10 @@ ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self)
|
|
346
352
|
BIO_free(in);
|
347
353
|
if (!p7)
|
348
354
|
ossl_raise(rb_eArgError, "Could not parse the PKCS7");
|
355
|
+
if (!p7->d.ptr) {
|
356
|
+
PKCS7_free(p7);
|
357
|
+
ossl_raise(rb_eArgError, "No content in PKCS7");
|
358
|
+
}
|
349
359
|
|
350
360
|
RTYPEDDATA_DATA(self) = p7;
|
351
361
|
PKCS7_free(p7_orig);
|
data/lib/openssl/buffering.rb
CHANGED
@@ -345,13 +345,18 @@ module OpenSSL::Buffering
|
|
345
345
|
@wbuffer << s
|
346
346
|
@wbuffer.force_encoding(Encoding::BINARY)
|
347
347
|
@sync ||= false
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
348
|
+
buffer_size = @wbuffer.size
|
349
|
+
if @sync or buffer_size > BLOCK_SIZE
|
350
|
+
nwrote = 0
|
351
|
+
begin
|
352
|
+
while nwrote < buffer_size do
|
353
|
+
begin
|
354
|
+
nwrote += syswrite(@wbuffer[nwrote, buffer_size - nwrote])
|
355
|
+
rescue Errno::EAGAIN
|
356
|
+
retry
|
357
|
+
end
|
354
358
|
end
|
359
|
+
ensure
|
355
360
|
@wbuffer[0, nwrote] = ""
|
356
361
|
end
|
357
362
|
end
|
data/lib/openssl/version.rb
CHANGED
data/lib/openssl/x509.rb
CHANGED
@@ -122,8 +122,8 @@ module OpenSSL
|
|
122
122
|
include Helpers
|
123
123
|
|
124
124
|
# Get the distributionPoint fullName URI from the certificate's CRL
|
125
|
-
# distribution points extension, as described in
|
126
|
-
# 4.2.1.13
|
125
|
+
# distribution points extension, as described in RFC 5280 Section
|
126
|
+
# 4.2.1.13.
|
127
127
|
#
|
128
128
|
# Returns an array of strings or nil or raises ASN1::ASN1Error.
|
129
129
|
def crl_uris
|
@@ -135,19 +135,19 @@ module OpenSSL
|
|
135
135
|
raise ASN1::ASN1Error, "invalid extension"
|
136
136
|
end
|
137
137
|
|
138
|
-
crl_uris = cdp_asn1.
|
138
|
+
crl_uris = cdp_asn1.flat_map do |crl_distribution_point|
|
139
139
|
distribution_point = crl_distribution_point.value.find do |v|
|
140
140
|
v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0
|
141
141
|
end
|
142
142
|
full_name = distribution_point&.value&.find do |v|
|
143
143
|
v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0
|
144
144
|
end
|
145
|
-
full_name&.value&.
|
145
|
+
full_name&.value&.select do |v|
|
146
146
|
v.tag_class == :CONTEXT_SPECIFIC && v.tag == 6 # uniformResourceIdentifier
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
-
crl_uris
|
150
|
+
crl_uris.empty? ? nil : crl_uris.map(&:value)
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openssl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Bosslet
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2024-12-18 00:00:00.000000000 Z
|
15
15
|
dependencies: []
|
16
16
|
description: OpenSSL for Ruby provides access to SSL/TLS and general-purpose cryptography
|
17
17
|
based on the OpenSSL library.
|
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
|
-
rubygems_version: 3.
|
123
|
+
rubygems_version: 3.5.22
|
124
124
|
signing_key:
|
125
125
|
specification_version: 4
|
126
126
|
summary: SSL/TLS and general-purpose cryptography for Ruby
|