|
3 | 3 |
|
4 | 4 | class TestEC < TestCase
|
5 | 5 |
|
| 6 | + def test_ec_key |
| 7 | + builtin_curves = OpenSSL::PKey::EC.builtin_curves |
| 8 | + assert_not_empty builtin_curves |
| 9 | + |
| 10 | + builtin_curves.each do |curve_name, comment| |
| 11 | + # Oakley curves and X25519 are not suitable for signing and causes |
| 12 | + # FIPS-selftest failure on some environment, so skip for now. |
| 13 | + next if ["Oakley", "X25519"].any? { |n| curve_name.start_with?(n) } |
| 14 | + |
| 15 | + key = OpenSSL::PKey::EC.generate(curve_name) |
| 16 | + assert_predicate key, :private? |
| 17 | + assert_predicate key, :public? |
| 18 | + assert_nothing_raised { key.check_key } |
| 19 | + end |
| 20 | + |
| 21 | + key1 = OpenSSL::PKey::EC.generate("prime256v1") |
| 22 | + |
| 23 | + # PKey is immutable in OpenSSL >= 3.0; constructing an empty EC object is deprecated |
| 24 | + #if !openssl?(3, 0, 0) |
| 25 | + # key2 = OpenSSL::PKey::EC.new |
| 26 | + # key2.group = key1.group |
| 27 | + # key2.private_key = key1.private_key |
| 28 | + # key2.public_key = key1.public_key |
| 29 | + # assert_equal key1.to_der, key2.to_der |
| 30 | + #end |
| 31 | + |
| 32 | + key3 = OpenSSL::PKey::EC.new(key1) |
| 33 | + assert_equal key1.to_der, key3.to_der |
| 34 | + |
| 35 | + key4 = OpenSSL::PKey::EC.new(key1.to_der) |
| 36 | + assert_equal key1.to_der, key4.to_der |
| 37 | + |
| 38 | + key5 = key1.dup |
| 39 | + assert_equal key1.to_der, key5.to_der |
| 40 | + |
| 41 | + # PKey is immutable in OpenSSL >= 3.0; EC object should not be modified |
| 42 | + #if !openssl?(3, 0, 0) |
| 43 | + key_tmp = OpenSSL::PKey::EC.generate("prime256v1") |
| 44 | + key5.private_key = key_tmp.private_key |
| 45 | + key5.public_key = key_tmp.public_key |
| 46 | + assert_not_equal key1.to_der, key5.to_der |
| 47 | + #end |
| 48 | + end |
| 49 | + |
6 | 50 | def test_generate
|
7 | 51 | assert_raise(OpenSSL::PKey::ECError) { OpenSSL::PKey::EC.generate("non-existent") }
|
8 | 52 | g = OpenSSL::PKey::EC::Group.new("prime256v1")
|
|
0 commit comments