1require_relative 'utils' 2 3if defined?(OpenSSL) 4 5class OpenSSL::TestPKeyDH < Test::Unit::TestCase 6 7 NEW_KEYLEN = 256 8 9 def test_new 10 dh = OpenSSL::PKey::DH.new(NEW_KEYLEN) 11 assert_key(dh) 12 end 13 14 def test_new_break 15 assert_nil(OpenSSL::PKey::DH.new(NEW_KEYLEN) { break }) 16 assert_raises(RuntimeError) do 17 OpenSSL::PKey::DH.new(NEW_KEYLEN) { raise } 18 end 19 end 20 21 def test_to_der 22 dh = OpenSSL::TestUtils::TEST_KEY_DH1024 23 der = dh.to_der 24 dh2 = OpenSSL::PKey::DH.new(der) 25 assert_equal_params(dh, dh2) 26 assert_no_key(dh2) 27 end 28 29 def test_to_pem 30 dh = OpenSSL::TestUtils::TEST_KEY_DH1024 31 pem = dh.to_pem 32 dh2 = OpenSSL::PKey::DH.new(pem) 33 assert_equal_params(dh, dh2) 34 assert_no_key(dh2) 35 end 36 37 def test_public_key 38 dh = OpenSSL::TestUtils::TEST_KEY_DH1024 39 public_key = dh.public_key 40 assert_no_key(public_key) #implies public_key.public? is false! 41 assert_equal(dh.to_der, public_key.to_der) 42 assert_equal(dh.to_pem, public_key.to_pem) 43 end 44 45 def test_generate_key 46 dh = OpenSSL::TestUtils::TEST_KEY_DH512_PUB.public_key # creates a copy 47 assert_no_key(dh) 48 dh.generate_key! 49 assert_key(dh) 50 end 51 52 def test_key_exchange 53 dh = OpenSSL::TestUtils::TEST_KEY_DH512_PUB 54 dh2 = dh.public_key 55 dh.generate_key! 56 dh2.generate_key! 57 assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) 58 end 59 60 private 61 62 def assert_equal_params(dh1, dh2) 63 assert_equal(dh1.g, dh2.g) 64 assert_equal(dh1.p, dh2.p) 65 end 66 67 def assert_no_key(dh) 68 assert_equal(false, dh.public?) 69 assert_equal(false, dh.private?) 70 assert_equal(nil, dh.pub_key) 71 assert_equal(nil, dh.priv_key) 72 end 73 74 def assert_key(dh) 75 assert(dh.public?) 76 assert(dh.private?) 77 assert(dh.pub_key) 78 assert(dh.priv_key) 79 end 80end 81 82end 83