diff options
author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-22 18:34:45 +0000 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2015-07-22 14:30:41 -0700 |
commit | dedd99217989dff96a4b9c71ba7bc3820f30b0ce (patch) | |
tree | b122b8be7c7f9bd23c6a1154a6e59ba23e24338a /test | |
parent | c7ffe8e5ee9fa26053020742b50054eb72e390ca (diff) | |
download | ruby-openssl-dedd99217989dff96a4b9c71ba7bc3820f30b0ce.tar.gz |
* ext/openssl/ossl_ssl.c: add ECDH callback support. [Feature #11356]
* test/openssl/test_pair.rb: test for ECDH callback support
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/test_pair.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/test_pair.rb b/test/test_pair.rb index 7cf95f08..d2fbf729 100644 --- a/test/test_pair.rb +++ b/test/test_pair.rb @@ -283,6 +283,45 @@ module OpenSSL::TestPairM serv.close if serv && !serv.closed? end + def test_ecdh_callback + called = false + ctx2 = OpenSSL::SSL::SSLContext.new + ctx2.ciphers = "ECDH" + ctx2.tmp_ecdh_callback = ->(*args) { + called = true + OpenSSL::PKey::EC.new "prime256v1" + } + + sock1, sock2 = tcp_pair + + s2 = OpenSSL::SSL::SSLSocket.new(sock2, ctx2) + ctx1 = OpenSSL::SSL::SSLContext.new + ctx1.ciphers = "ECDH" + + s1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx1) + th = Thread.new do + begin + rv = s1.connect_nonblock(exception: false) + case rv + when :wait_writable + IO.select(nil, [s1], nil, 5) + when :wait_readable + IO.select([s1], nil, nil, 5) + end + end until rv == s1 + end + + accepted = s2.accept + + assert called, 'ecdh callback should be called' + ensure + s1.close if s1 + s2.close if s2 + sock1.close if sock1 + sock2.close if sock2 + accepted.close if accepted.respond_to?(:close) + end + def test_connect_accept_nonblock_no_exception ctx2 = OpenSSL::SSL::SSLContext.new ctx2.ciphers = "ADH" |