Project

General

Profile

Bug #10257 ยป ec_x509.patch

jtdowney (John Downey), 09/18/2014 03:10 PM

View differences:

ext/openssl/ossl_pkey_ec.c (working copy)
rb_define_method(cEC, "public_key", ossl_ec_key_get_public_key, 0);
rb_define_method(cEC, "public_key=", ossl_ec_key_set_public_key, 1);
rb_define_method(cEC, "private_key?", ossl_ec_key_is_private_key, 0);
rb_define_alias(cEC, "private?", "private_key?");
rb_define_method(cEC, "public_key?", ossl_ec_key_is_public_key, 0);
rb_define_alias(cEC, "public?", "public_key?");
/* rb_define_method(cEC, "", ossl_ec_key_get_, 0);
rb_define_method(cEC, "=", ossl_ec_key_set_ 1);
set/get enc_flags
test/openssl/test_pkey_ec.rb (working copy)
assert_equal(key.check_key, true)
assert_equal(key.private_key?, true)
assert_equal(key.public_key?, true)
assert_equal(key.private?, true)
assert_equal(key.public?, true)
end
end
test/openssl/test_x509cert.rb (working copy)
@rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048
@dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256
@dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512
if defined?(OpenSSL::PKey::EC)
@ec256 = OpenSSL::TestUtils::TEST_KEY_EC_P256V1
end
@ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA")
@ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1")
@ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2")
......
sha1 = OpenSSL::Digest::SHA1.new
dsa_digest = OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST.new
[
[@rsa1024, sha1], [@rsa2048, sha1], [@dsa256, dsa_digest], [@dsa512, dsa_digest]
].each{|pk, digest|
cert = issue_cert(@ca, pk, 1, Time.now, Time.now+3600, exts,
combinations = [
[@rsa1024, @rsa1024.public_key, sha1],
[@rsa2048, @rsa2048.public_key, sha1],
[@dsa256, @dsa256.public_key, dsa_digest],
[@dsa512, @dsa512.public_key, dsa_digest]
]
if defined?(OpenSSL::PKey::EC)
public_key = OpenSSL::PKey::EC.new(@ec256)
public_key.private_key = nil
combinations << [@ec256, public_key, sha1]
end
combinations.each{|private_key, public_key, digest|
cert = issue_cert(@ca, private_key, 1, Time.now, Time.now+3600, exts,
nil, nil, digest)
assert_equal(cert.extensions.sort_by(&:to_s)[2].value,
OpenSSL::TestUtils.get_subject_key_id(cert))
cert = OpenSSL::X509::Certificate.new(cert.to_der)
assert_equal(cert.extensions.sort_by(&:to_s)[2].value,
OpenSSL::TestUtils.get_subject_key_id(cert))
assert_equal(cert.public_key.to_pem, public_key.to_pem)
}
end
......
}
end
if defined?(OpenSSL::PKey::EC)
def test_sign_and_verify_ec_sha1
cert = issue_cert(@ca, @ec256, 1, Time.now, Time.now+3600, [],
nil, nil, OpenSSL::Digest::SHA1.new)
assert_equal(true, cert.verify(@ec256))
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) })
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) })
cert.serial = 2
assert_equal(false, cert.verify(@ec256))
end
def test_sign_and_verify_ec_sha2
cert = issue_cert(@ca, @ec256, 1, Time.now, Time.now+3600, [],
nil, nil, OpenSSL::Digest::SHA256.new)
assert_equal(true, cert.verify(@ec256))
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) })
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) })
cert.serial = 2
assert_equal(false, cert.verify(@ec256))
end
end
def test_dsig_algorithm_mismatch
assert_raise(OpenSSL::X509::CertificateError) do
issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [],
test/openssl/test_x509crl.rb (working copy)
@rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048
@dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256
@dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512
if defined?(OpenSSL::PKey::EC)
@ec256 = OpenSSL::TestUtils::TEST_KEY_EC_P256V1
end
@ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA")
@ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1")
@ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2")
......
assert_equal(true, crl.verify(@dsa512))
crl.version = 0
assert_equal(false, crl.verify(@dsa512))
if defined?(OpenSSL::PKey::EC)
cert = issue_cert(@ca, @ec256, 1, Time.now, Time.now+3600, [],
nil, nil, OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST.new)
crl = issue_crl([], 1, Time.now, Time.now+1600, [],
cert, @ec256, OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST.new)
assert_equal(false, crl_error_returns_false { crl.verify(@rsa1024) })
assert_equal(false, crl_error_returns_false { crl.verify(@rsa2048) })
assert_equal(true, crl.verify(@ec256))
crl.version = 0
assert_equal(false, crl.verify(@ec256))
end
end
private
test/openssl/test_x509req.rb (working copy)
@rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048
@dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256
@dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512
if defined?(OpenSSL::PKey::EC)
@ec256 = OpenSSL::TestUtils::TEST_KEY_EC_P256V1
end
@dn = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou")
end
......
req = OpenSSL::X509::Request.new
req.version = ver
req.subject = dn
req.public_key = key.public_key
if key.is_a?(OpenSSL::PKey::EC)
req.public_key = key
else
req.public_key = key.public_key
end
req.sign(key, digest)
req
end
......
issue_csr(0, @dn, @dsa512, OpenSSL::Digest::MD5.new) }
end
if defined?(OpenSSL::PKey::EC)
def test_sign_and_verify_ec
req = issue_csr(0, @dn, @ec256, OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST.new)
assert_equal(false, request_error_returns_false { req.verify(@rsa1024) })
assert_equal(false, request_error_returns_false { req.verify(@rsa2048) })
assert_equal(true, req.verify(@ec256))
req.public_key = @rsa1024.public_key
assert_equal(false, req.verify(@ec256))
end
def test_sign_and_verify_ec_sha2
req = issue_csr(0, @dn, @ec256, OpenSSL::Digest::SHA256.new)
assert_equal(false, request_error_returns_false { req.verify(@rsa1024) })
assert_equal(false, request_error_returns_false { req.verify(@rsa2048) })
assert_equal(true, req.verify(@ec256))
req.public_key = @rsa1024.public_key
assert_equal(false, req.verify(@ec256))
end
end
private
def request_error_returns_false
test/openssl/utils.rb (working copy)
cert.serial = serial
cert.subject = dn
cert.issuer = issuer.subject
cert.public_key = key.public_key
if key.is_a?(OpenSSL::PKey::EC)
cert.public_key = key
else
cert.public_key = key.public_key
end
cert.not_before = not_before
cert.not_after = not_after
ef = OpenSSL::X509::ExtensionFactory.new
    (1-1/1)