~ubuntu-branches/ubuntu/quantal/ruby1.9.1/quantal

« back to all changes in this revision

Viewing changes to test/openssl/test_ec.rb

  • Committer: Bazaar Package Importer
  • Author(s): Lucas Nussbaum
  • Date: 2011-09-24 19:16:17 UTC
  • mfrom: (1.1.8 upstream) (13.1.7 experimental)
  • Revision ID: james.westby@ubuntu.com-20110924191617-o1qz4rcmqjot8zuy
Tags: 1.9.3~rc1-1
* New upstream release: 1.9.3 RC1.
  + Includes load.c fixes. Closes: #639959.
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
begin
2
 
  require "openssl"
3
 
  require File.join(File.dirname(__FILE__), "utils.rb")
4
 
rescue LoadError
5
 
end
6
 
require "test/unit"
7
 
 
8
 
if defined?(OpenSSL::PKey::EC)
9
 
 
10
 
class OpenSSL::TestEC < Test::Unit::TestCase
11
 
  def setup
12
 
    @data1 = 'foo'
13
 
    @data2 = 'bar' * 1000 # data too long for DSA sig
14
 
 
15
 
    @group1 = OpenSSL::PKey::EC::Group.new('secp112r1')
16
 
    @group2 = OpenSSL::PKey::EC::Group.new('sect163k1')
17
 
 
18
 
    @key1 = OpenSSL::PKey::EC.new
19
 
    @key1.group = @group1
20
 
    @key1.generate_key
21
 
 
22
 
    @key2 = OpenSSL::PKey::EC.new(@group2.curve_name)
23
 
    @key2.generate_key
24
 
 
25
 
    @groups = [@group1, @group2]
26
 
    @keys = [@key1, @key2]
27
 
  end
28
 
 
29
 
  def compare_keys(k1, k2)
30
 
    assert_equal(k1.to_pem, k2.to_pem)
31
 
  end
32
 
 
33
 
  def test_curve_names
34
 
    @groups.each_with_index do |group, idx|
35
 
      key = @keys[idx]
36
 
      assert_equal(group.curve_name, key.group.curve_name)
37
 
    end
38
 
  end
39
 
 
40
 
  def test_check_key
41
 
    for key in @keys
42
 
      assert_equal(key.check_key, true)
43
 
      assert_equal(key.private_key?, true)
44
 
      assert_equal(key.public_key?, true)
45
 
    end
46
 
  end
47
 
 
48
 
  def test_encoding
49
 
    for group in @groups
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))
54
 
 
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)
60
 
      end
61
 
    end
62
 
 
63
 
    for key in @keys
64
 
      group = key.group
65
 
 
66
 
      for meth in [:to_der, :to_pem]
67
 
        txt = key.send(meth)
68
 
        assert_equal(txt, OpenSSL::PKey::EC.new(txt).send(meth))
69
 
      end
70
 
 
71
 
      bn = key.public_key.to_bn
72
 
      assert_equal(bn, OpenSSL::PKey::EC::Point.new(group, bn).to_bn)
73
 
    end
74
 
  end
75
 
 
76
 
  def test_set_keys
77
 
    for key in @keys
78
 
      k = OpenSSL::PKey::EC.new
79
 
      k.group = key.group
80
 
      k.private_key = key.private_key
81
 
      k.public_key = key.public_key
82
 
 
83
 
      compare_keys(key, k)
84
 
    end
85
 
  end
86
 
 
87
 
  def test_dsa_sign_verify
88
 
    for key in @keys
89
 
      sig = key.dsa_sign_asn1(@data1)
90
 
      assert(key.dsa_verify_asn1(@data1, sig))
91
 
    end
92
 
  end
93
 
 
94
 
  def test_dsa_sign_asn1_FIPS186_3
95
 
    for key in @keys
96
 
      size = key.group.order.num_bits / 8 + 1
97
 
      dgst = (1..size).to_a.pack('C*')
98
 
      begin
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
106
 
        return
107
 
      end
108
 
    end
109
 
  end
110
 
 
111
 
  def test_dh_compute_key
112
 
    for key in @keys
113
 
      k = OpenSSL::PKey::EC.new(key.group)
114
 
      k.generate_key
115
 
 
116
 
      puba = key.public_key
117
 
      pubb = k.public_key
118
 
      a = key.dh_compute_key(pubb)
119
 
      b = k.dh_compute_key(puba)
120
 
      assert_equal(a, b)
121
 
    end
122
 
  end
123
 
 
124
 
# test Group: asn1_flag, point_conversion
125
 
 
126
 
end
127
 
 
128
 
end