3
require File.join(File.dirname(__FILE__), "utils.rb")
8
if defined?(OpenSSL::PKey::EC)
10
class OpenSSL::TestEC < Test::Unit::TestCase
13
@data2 = 'bar' * 1000 # data too long for DSA sig
15
@group1 = OpenSSL::PKey::EC::Group.new('secp112r1')
16
@group2 = OpenSSL::PKey::EC::Group.new('sect163k1')
18
@key1 = OpenSSL::PKey::EC.new
22
@key2 = OpenSSL::PKey::EC.new(@group2.curve_name)
25
@groups = [@group1, @group2]
26
@keys = [@key1, @key2]
29
def compare_keys(k1, k2)
30
assert_equal(k1.to_pem, k2.to_pem)
34
@groups.each_with_index do |group, idx|
36
assert_equal(group.curve_name, key.group.curve_name)
42
assert_equal(key.check_key, true)
43
assert_equal(key.private_key?, true)
44
assert_equal(key.public_key?, true)
50
for meth in [:to_der, :to_pem]
51
txt = group.send(meth)
52
gr = OpenSSL::PKey::EC::Group.new(txt)
53
assert_equal(txt, gr.send(meth))
55
assert_equal(group.generator.to_bn, gr.generator.to_bn)
56
assert_equal(group.cofactor, gr.cofactor)
57
assert_equal(group.order, gr.order)
58
assert_equal(group.seed, gr.seed)
59
assert_equal(group.degree, gr.degree)
66
for meth in [:to_der, :to_pem]
68
assert_equal(txt, OpenSSL::PKey::EC.new(txt).send(meth))
71
bn = key.public_key.to_bn
72
assert_equal(bn, OpenSSL::PKey::EC::Point.new(group, bn).to_bn)
78
k = OpenSSL::PKey::EC.new
80
k.private_key = key.private_key
81
k.public_key = key.public_key
87
def test_dsa_sign_verify
89
sig = key.dsa_sign_asn1(@data1)
90
assert(key.dsa_verify_asn1(@data1, sig))
94
def test_dsa_sign_asn1_FIPS186_3
96
size = key.group.order.num_bits / 8 + 1
97
dgst = (1..size).to_a.pack('C*')
99
sig = key.dsa_sign_asn1(dgst)
100
# dgst is auto-truncated according to FIPS186-3 after openssl-0.9.8m
101
assert(key.dsa_verify_asn1(dgst + "garbage", sig))
102
rescue OpenSSL::PKey::ECError => e
103
# just an exception for longer dgst before openssl-0.9.8m
104
assert_equal('ECDSA_sign: data too large for key size', e.message)
105
# no need to do following tests
111
def test_dh_compute_key
113
k = OpenSSL::PKey::EC.new(key.group)
116
puba = key.public_key
118
a = key.dh_compute_key(pubb)
119
b = k.dh_compute_key(puba)
124
# test Group: asn1_flag, point_conversion