mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 55175: [Backport #12428]
* ext/openssl/ossl_pkey_dh.c (ossl_dh_compute_key): Check that the DH has 'p' (the prime) before calling DH_size(). We can create a DH with no parameter but DH_size() does not check and dereferences NULL. [ruby-core:75720] [Bug #12428] * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_sign): Ditto. DSA_size() does not check dsa->q. * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_public_encrypt, ossl_rsa_public_decrypt, ossl_rsa_private_encrypt, ossl_rsa_private_decrypt): Ditto. RSA_size() does not check rsa->n. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@55904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
83dc591546
commit
243d224f28
5 changed files with 33 additions and 10 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
Tue Aug 16 03:41:21 2016 Kazuki Yamaguchi <k@rhe.jp>
|
||||
|
||||
* ext/openssl/ossl_pkey_dh.c (ossl_dh_compute_key): Check that the DH
|
||||
has 'p' (the prime) before calling DH_size(). We can create a DH with
|
||||
no parameter but DH_size() does not check and dereferences NULL.
|
||||
[ruby-core:75720] [Bug #12428]
|
||||
|
||||
* ext/openssl/ossl_pkey_dsa.c (ossl_dsa_sign): Ditto. DSA_size() does
|
||||
not check dsa->q.
|
||||
|
||||
* ext/openssl/ossl_pkey_rsa.c (ossl_rsa_public_encrypt,
|
||||
ossl_rsa_public_decrypt, ossl_rsa_private_encrypt,
|
||||
ossl_rsa_private_decrypt): Ditto. RSA_size() does not check rsa->n.
|
||||
|
||||
Tue Aug 16 03:10:42 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* transcode.c (enc_arg, str_transcode_enc_args, econv_args):
|
||||
|
|
|
@ -506,6 +506,8 @@ ossl_dh_compute_key(VALUE self, VALUE pub)
|
|||
|
||||
GetPKeyDH(self, pkey);
|
||||
dh = pkey->pkey.dh;
|
||||
if (!dh->p)
|
||||
ossl_raise(eDHError, "incomplete DH");
|
||||
pub_key = GetBNPtr(pub);
|
||||
len = DH_size(dh);
|
||||
str = rb_str_new(0, len);
|
||||
|
|
|
@ -498,10 +498,11 @@ ossl_dsa_sign(VALUE self, VALUE data)
|
|||
VALUE str;
|
||||
|
||||
GetPKeyDSA(self, pkey);
|
||||
StringValue(data);
|
||||
if (!DSA_PRIVATE(self, pkey->pkey.dsa)) {
|
||||
if (!pkey->pkey.dsa->q)
|
||||
ossl_raise(eDSAError, "incomplete DSA");
|
||||
if (!DSA_PRIVATE(self, pkey->pkey.dsa))
|
||||
ossl_raise(eDSAError, "Private DSA key needed!");
|
||||
}
|
||||
StringValue(data);
|
||||
str = rb_str_new(0, ossl_dsa_buf_size(pkey));
|
||||
if (!DSA_sign(0, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data),
|
||||
(unsigned char *)RSTRING_PTR(str),
|
||||
|
|
|
@ -391,6 +391,8 @@ ossl_rsa_public_encrypt(int argc, VALUE *argv, VALUE self)
|
|||
VALUE str, buffer, padding;
|
||||
|
||||
GetPKeyRSA(self, pkey);
|
||||
if (!pkey->pkey.rsa->n)
|
||||
ossl_raise(eRSAError, "incomplete RSA");
|
||||
rb_scan_args(argc, argv, "11", &buffer, &padding);
|
||||
pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);
|
||||
StringValue(buffer);
|
||||
|
@ -420,6 +422,8 @@ ossl_rsa_public_decrypt(int argc, VALUE *argv, VALUE self)
|
|||
VALUE str, buffer, padding;
|
||||
|
||||
GetPKeyRSA(self, pkey);
|
||||
if (!pkey->pkey.rsa->n)
|
||||
ossl_raise(eRSAError, "incomplete RSA");
|
||||
rb_scan_args(argc, argv, "11", &buffer, &padding);
|
||||
pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);
|
||||
StringValue(buffer);
|
||||
|
@ -449,9 +453,10 @@ ossl_rsa_private_encrypt(int argc, VALUE *argv, VALUE self)
|
|||
VALUE str, buffer, padding;
|
||||
|
||||
GetPKeyRSA(self, pkey);
|
||||
if (!RSA_PRIVATE(self, pkey->pkey.rsa)) {
|
||||
ossl_raise(eRSAError, "private key needed.");
|
||||
}
|
||||
if (!pkey->pkey.rsa->n)
|
||||
ossl_raise(eRSAError, "incomplete RSA");
|
||||
if (!RSA_PRIVATE(self, pkey->pkey.rsa))
|
||||
ossl_raise(eRSAError, "private key needed");
|
||||
rb_scan_args(argc, argv, "11", &buffer, &padding);
|
||||
pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);
|
||||
StringValue(buffer);
|
||||
|
@ -481,9 +486,10 @@ ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self)
|
|||
VALUE str, buffer, padding;
|
||||
|
||||
GetPKeyRSA(self, pkey);
|
||||
if (!RSA_PRIVATE(self, pkey->pkey.rsa)) {
|
||||
ossl_raise(eRSAError, "private key needed.");
|
||||
}
|
||||
if (!pkey->pkey.rsa->n)
|
||||
ossl_raise(eRSAError, "incomplete RSA");
|
||||
if (!RSA_PRIVATE(self, pkey->pkey.rsa))
|
||||
ossl_raise(eRSAError, "private key needed");
|
||||
rb_scan_args(argc, argv, "11", &buffer, &padding);
|
||||
pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);
|
||||
StringValue(buffer);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#define RUBY_VERSION "2.3.2"
|
||||
#define RUBY_RELEASE_DATE "2016-08-16"
|
||||
#define RUBY_PATCHLEVEL 154
|
||||
#define RUBY_PATCHLEVEL 155
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2016
|
||||
#define RUBY_RELEASE_MONTH 8
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue