OpenSSL::X509::Request can't sign() an OpenSSL::PKey::EC
Unlike the PKey::DSA and PKey::RSA classes, PKey::EC provides a private_key?() rather than private?() method and is thus incompatible with the other OpenSSL classes that rely on them, i.e. it makes impossible to generate a certificate signing request:
key = OpenSSL::PKey::EC.new('secp521r1')
req = OpenSSL::X509::Request.new
req.public_key = key
req.subject = OpenSSL::X509::Name.parse('CN=whatever')
which produces the error:
sign': undefined methodprivate?' for #OpenSSL::PKey::EC:0x000000021b4980 (NoMethodError)
ossl_pkey_ec.c should either:
- rb_define_method() the missing private? and public? methods
- rename public_key? to public? and private_key? to private?
Judging by the source code, this should be present in branch 1.8 as well.
openssl: add OpenSSL::PKey::EC#private? and #public?
ext/openssl/ossl_pkey_ec.c: rename PKey::EC#private_key? and
#public_key? to #private? and #public? for consistency with other
PKey types. Old names remain as alias. [Bug #6567]
test/openssl/test_pkey_ec.rb (test_check_key): check private? and
public? works correctly.
#2 [ruby-core:45540] Updated by Martin Bosslet over 4 years ago
Unfortunately it's not done by simply renaming the methods appropriately. It still would fail because OpenSSL::PKey::EC#public_key returns an OpenSSL::PKey::EC::Point instead of another OpenSSL::PKey::EC, and as a consequence, there's no reference to an EVP_PKEY that is needed internally. The whole EC interface needs an overhaul. I'll set up a parent task referencing all the issues that piled up since the release of 1.9.3. The goal would be to make EC follow the general PKey interface, allowing to use them interchangeably wherever a PKey instance is expected.
#3 [ruby-core:52444] Updated by Yusuke Endoh over 3 years ago
- Target version changed from 2.0.0 to next minor
- Subject changed from OpenSSL::X509::Request can't sign() an OpenSSL::PKey::EC to OpenSSL::X509::Request can't sign() an OpenSSL::PKey::EC
It is too late for "an overhaul". Postponing to next minor.
Yusuke Endoh email@example.com