Skip to content

Commit

Permalink
openssl: check existence of RAND_pseudo_bytes()
Browse files Browse the repository at this point in the history
* ext/openssl/extconf.rb: Check if RAND_pseudo_bytes() is usable. It is
  marked as deprecated in OpenSSL 1.1.0.
  [ruby-core:75225] [Feature #12324]

* ext/openssl/ossl_rand.c: Disable Random.pseudo_bytes if
  RAND_pseudo_bytes() is unavailable.

* test/openssl/test_random.rb: Don't test Random.pseudo_bytes if not
  defined.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
rhenium committed Jun 9, 2016
1 parent 3c582bb commit 77b4850
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 1 deletion.
1 change: 1 addition & 0 deletions ext/openssl/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@
OpenSSL.check_func_or_macro("SSL_get_server_tmp_key", "openssl/ssl.h")

# added in 1.1.0
OpenSSL.check_func("RAND_pseudo_bytes", "openssl/rand.h") # deprecated
have_func("X509_STORE_get_ex_data")
have_func("X509_STORE_set_ex_data")
OpenSSL.check_func_or_macro("SSL_CTX_set_tmp_ecdh_callback", "openssl/ssl.h") # removed
Expand Down
4 changes: 4 additions & 0 deletions ext/openssl/ossl_rand.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ ossl_rand_bytes(VALUE self, VALUE len)
return str;
}

#if defined(HAVE_RAND_PSEUDO_BYTES)
/*
* call-seq:
* pseudo_bytes(length) -> string
Expand Down Expand Up @@ -151,6 +152,7 @@ ossl_rand_pseudo_bytes(VALUE self, VALUE len)

return str;
}
#endif

#ifdef HAVE_RAND_EGD
/*
Expand Down Expand Up @@ -224,7 +226,9 @@ Init_ossl_rand(void)
rb_define_module_function(mRandom, "load_random_file", ossl_rand_load_file, 1);
rb_define_module_function(mRandom, "write_random_file", ossl_rand_write_file, 1);
rb_define_module_function(mRandom, "random_bytes", ossl_rand_bytes, 1);
#if defined(HAVE_RAND_PSEUDO_BYTES)
rb_define_module_function(mRandom, "pseudo_bytes", ossl_rand_pseudo_bytes, 1);
#endif
#ifdef HAVE_RAND_EGD
rb_define_module_function(mRandom, "egd", ossl_rand_egd, 1);
rb_define_module_function(mRandom, "egd_bytes", ossl_rand_egd_bytes, 2);
Expand Down
3 changes: 2 additions & 1 deletion test/test_random.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ def test_random_bytes
end

def test_pseudo_bytes
# deprecated as of OpenSSL 1.1.0
assert_equal("", OpenSSL::Random.pseudo_bytes(0))
assert_equal(12, OpenSSL::Random.pseudo_bytes(12).bytesize)
end
end if OpenSSL::Random.methods.include?(:pseudo_bytes)
end if defined?(OpenSSL::TestCase)

0 comments on commit 77b4850

Please sign in to comment.