-
Notifications
You must be signed in to change notification settings - Fork 177
Closed
Description
I am trying to fix the test failures in test/openssl/test_pkey_ec.rb
now in OpenSSL FIPS on the ruby/openssl latest master branch f4b8dacc75d61142b7b4e0142898b2fecbb131b9
, and openssl/openssl latest master branch cf712830b7b5a20a768a1fc5f78dc48841b7617f
.
Test failures
$ OPENSSL_CONF=/home/jaruga/.local/openssl-3.2.0-dev-fips-debug-cf712830b7/ssl/openssl_fips.cnf \
bundle exec rake debug
...
ruby 3.3.0dev (2023-05-30T12:39:26Z master 30b960ba34) [x86_64-linux]
OpenSSL::OPENSSL_VERSION: OpenSSL 3.2.0-dev
OpenSSL::OPENSSL_LIBRARY_VERSION: OpenSSL 3.2.0-dev
OpenSSL::OPENSSL_VERSION_NUMBER: 30200000
OpenSSL::LIBRESSL_VERSION_NUMBER: undefined
FIPS enabled: true
$ OPENSSL_CONF=/home/jaruga/.local/openssl-3.2.0-dev-fips-debug-cf712830b7/ssl/openssl_fips.cnf \
ruby -I./lib -ropenssl test/openssl/test_pkey_ec.rb
Loaded suite test/openssl/test_pkey_ec
Started
E
===================================================================================================================================================================================================================
Error: test_ECPrivateKey_encrypted(OpenSSL::TestEC): OpenSSL::PKey::ECError: invalid curve name
test/openssl/test_pkey_ec.rb:247:in `initialize'
test/openssl/test_pkey_ec.rb:247:in `new'
test/openssl/test_pkey_ec.rb:247:in `test_ECPrivateKey_encrypted'
244: 0/dGSU5SzFG+iT9iFXCwCvv+bxyegkBOyALFje1NAsM=
245: -----END EC PRIVATE KEY-----
246: EOF
=> 247: key = OpenSSL::PKey::EC.new(pem, "abcdef")
248: assert_same_ec p256, key
249: key = OpenSSL::PKey::EC.new(pem) { "abcdef" }
250: assert_same_ec p256, key
===================================================================================================================================================================================================================
E
===================================================================================================================================================================================================================
Error: test_ec_key(OpenSSL::TestEC): NoMethodError: undefined method `filter_backtrace' for module Test
/home/jaruga/var/git/ruby/openssl/test/lib/core_assertions.rb:188:in `block in assert_nothing_raised'
/home/jaruga/var/git/ruby/openssl/test/lib/core_assertions.rb:26:in `block in message'
/home/jaruga/var/git/ruby/openssl/test/lib/core_assertions.rb:190:in `rescue in assert_nothing_raised'
/home/jaruga/var/git/ruby/openssl/test/lib/core_assertions.rb:181:in `assert_nothing_raised'
test/openssl/test_pkey_ec.rb:19:in `block in test_ec_key'
16: key = OpenSSL::PKey::EC.generate(curve_name)
17: assert_predicate key, :private?
18: assert_predicate key, :public?
=> 19: assert_nothing_raised { key.check_key }
20: end
21:
22: key1 = OpenSSL::PKey::EC.generate("prime256v1")
test/openssl/test_pkey_ec.rb:11:in `each'
test/openssl/test_pkey_ec.rb:11:in `test_ec_key'
===================================================================================================================================================================================================================
Finished in 0.044746681 seconds.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
16 tests, 124 assertions, 0 failures, 2 errors, 0 pendings, 0 omissions, 0 notifications
87.5% passed
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
357.57 tests/s, 2771.16 assertions/s
A minimal reproducer
For the test/openssl/test_pkey_ec.rb:19
, below is a minimal reproducer.
$ OPENSSL_CONF=/home/jaruga/.local/openssl-3.2.0-dev-fips-debug-cf712830b7/ssl/openssl_fips.cnf \
ruby -I./lib -ropenssl -e 'OpenSSL::PKey::EC.generate("secp112r1").check_key'
-e:1:in `check_key': EVP_PKEY_check: initialization error (OpenSSL::PKey::ECError)
from -e:1:in `<main>'
Debug with GDB
$ OPENSSL_CONF=/home/jaruga/.local/openssl-3.2.0-dev-fips-debug-cf712830b7/ssl/openssl_fips.cnf \
gdb --args ruby -I./lib -ropenssl -e 'OpenSSL::PKey::EC.generate("secp112r1").check_key'
...
(gdb) set environment LD_LIBRARY_PATH /home/jaruga/.local/openssl-3.2.0-dev-fips-debug-cf712830b7/lib
(gdb) b ossl_ec_key_check_key
(gdb) r
...
(gdb) n
551 if (EVP_PKEY_check(pctx) != 1) {
(gdb) p EVP_PKEY_check(pctx)
$1 = 0
(gdb) f
#0 ossl_ec_key_check_key (self=140737044094120)
at ../../../../ext/openssl/ossl_pkey_ec.c:551
551 if (EVP_PKEY_check(pctx) != 1) {
(gdb) n
552 EVP_PKEY_CTX_free(pctx)
(gdb) p pctx
$2 = (EVP_PKEY_CTX *) 0x7e17d0
(gdb) p *pctx
$3 = {operation = 0, libctx = 0x0, propquery = 0x0,
keytype = 0x7fffe54c830a "id-ecPublicKey", keymgmt = 0x7c5410, op = {keymgmt = {
genctx = 0x0}, kex = {exchange = 0x0, algctx = 0x0}, sig = {signature = 0x0,
algctx = 0x0}, ciph = {cipher = 0x0, algctx = 0x0}, encap = {kem = 0x0,
algctx = 0x0}}, cached_parameters = {dist_id_name = 0x0, dist_id = 0x0,
dist_id_len = 0, dist_id_set = 0}, app_data = 0x0, pkey_gencb = 0x0,
keygen_info = 0x0, keygen_info_count = 0, legacy_keytype = 408, pmeth = 0x0,
engine = 0x0, pkey = 0x7e0570, peerkey = 0x0, data = 0x0, flag_call_digest_custom = 0,
rsa_pubexp = 0x0}
(gdb) n
553 ossl_raise(eECError, "EVP_PKEY_check");
The EVP_PKEY_check(pctx)
returns 0
in the line below. And it seems that causes the EVP_PKEY_check: initialization error (OpenSSL::PKey::ECError)
. Do you know why this happens?
openssl/ext/openssl/ossl_pkey_ec.c
Lines 551 to 554 in f4b8dac
if (EVP_PKEY_check(pctx) != 1) { | |
EVP_PKEY_CTX_free(pctx); | |
ossl_raise(eECError, "EVP_PKEY_check"); | |
} |
Metadata
Metadata
Assignees
Labels
No labels