aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_builtin_types.rb
blob: 89cdf0b6f448c19d03fe55e9d9687477a88555dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# coding: ASCII-8BIT
require_relative "helper"

class BuiltinTypesTest < ASN1KitTestCase
  def test_boolean
    v1 = ASN1Kit::Boolean.new(true)
    assert_equal true, v1.value
    assert_equal B(%w{ 01 01 FF }), v1.to_der

    v2 = ASN1Kit::Boolean.new(false)
    assert_equal false, v2.value
    assert_equal B(%w{ 01 01 00 }), v2.to_der
  end

  def test_integer
    assert_equal B(%w{ 02 01 00 }), ASN1Kit::Integer.new(0).to_der
    assert_equal B(%w{ 02 01 01 }), ASN1Kit::Integer.new(1).to_der
    assert_equal B(%w{ 02 02 00 80 }), ASN1Kit::Integer.new(128).to_der
    assert_equal B(%w{ 02 02 01 00 }), ASN1Kit::Integer.new(256).to_der
    assert_equal B(%w{ 02 03 0F 42 40 }), ASN1Kit::Integer.new(1_000_000).to_der
    assert_equal B(%w{ 02 01 FF }), ASN1Kit::Integer.new(-1).to_der
    assert_equal B(%w{ 02 01 80 }), ASN1Kit::Integer.new(-128).to_der
    assert_equal B(%w{ 02 02 FF 00 }), ASN1Kit::Integer.new(-256).to_der
    assert_equal B(%w{ 02 03 F0 BD C0 }), ASN1Kit::Integer.new(-1_000_000).to_der

    v1 = ASN1Kit::Integer.new(123)
    assert_equal 123, v1.value
    assert_equal nil, v1.name

    t1 = ASN1Kit::Integer[["a", 123], ["b", 234]]
    assert_compare t1, :<, ASN1Kit::Integer
    assert_equal ["a", "b"], t1.named_numbers.sort
    assert_equal 123, t1.named_number("a")
    assert_equal 234, t1.named_number("b")

    v2 = t1.new("a")
    assert_equal 123, v2.value
    assert_equal "a", v2.name

    v3 = t1.new(234)
    assert_equal 234, v3.value
    assert_equal "b", v3.name
  end

  def test_enumerated
    t1 = ASN1Kit::Enumerated["a" => 0, "b" => 1_000_000]
    assert_equal ["a", "b"], t1.enumerations.sort
    assert_equal 0, t1.value_for("a")
    assert_equal 1_000_000, t1.value_for("b")

    v1 = t1.new("a")
    assert_equal "a", v1.name
    assert_equal 0, v1.value
    assert_equal B(%w{ 0A 01 00 }), v1.to_der

    v2 = t1.new("b")
    assert_equal B(%w{ 0A 03 0F 42 40 }), v2.to_der
  end

  def test_real
  end

  def test_bitstring
    v1 = ASN1Kit::BitString.new("\xC0", 2)
    assert_equal "\xC0", v1.string
    assert_equal 2, v1.bit_length
    assert_equal B(%w{ 03 02 06 C0 }), v1.to_der

    v2 = ASN1Kit::BitString.new("\xF0\xFF", 16)
    assert_equal "\xF0\xFF", v2.string
    assert_equal 16, v2.bit_length
    assert_equal B(%w{ 03 03 00 F0 FF }), v2.to_der

    t1 = ASN1Kit::BitString[["a", 0], ["b", 3]]
    assert_compare t1, :<, ASN1Kit::BitString

    v3 = t1.new("\xC0", 8)
    assert_equal true, v3.set?("a")
    assert_equal true, v3.set?(0)
    assert_equal true, v3.set?(1)
    assert_equal false, v3.set?(2)
    assert_equal false, v3.set?("b")
    assert_equal false, v3.set?(3)
    assert_equal B(%w{ 03 02 00 C0 }), v3.to_der

    v4 = t1.new_with_names("b")
    assert_equal 4, v4.bit_length
    assert_equal B(%w{ 03 02 04 10 }), v4.to_der
  end

  def test_octetstring
    v1 = ASN1Kit::OctetString.new("abc")
    assert_equal "abc", v1.value
    assert_equal B(%w{ 04 03 61 62 63 }), v1.to_der
  end

  def test_null
    v1 = ASN1Kit::Null.new
    assert_equal B(%w{ 05 00 }), v1.to_der
  end

  def test_sequence
    seq = ASN1Kit::Sequence[
      ASN1Kit::Sequence::ComponentType.new("a", ASN1Kit::Integer),
      ASN1Kit::Sequence::ComponentType.new("b", ASN1Kit::Boolean),
    ]
    obj = seq.new("a" => ASN1Kit::Integer.new(1),
                  "b" => ASN1Kit::Boolean.new(true))
    assert_equal B(%w{ 30 06 02 01 01 01 01 FF }), obj.to_der
  end

  def test_object_identifier
    v1 = ASN1Kit::ObjectIdentifier.new([2, 999, 3])
    assert_equal "2.999.3", v1.dot_notation
    assert_equal B(%w{ 06 03 88 37 03 }), v1.to_der

    v2 = ASN1Kit::ObjectIdentifier.from_dot_notation("2.999.3")
    assert_equal "2.999.3", v2.dot_notation
    assert_equal B(%w{ 06 03 88 37 03 }), v2.to_der
  end

  def test_relative_object_identifier
    v1 = ASN1Kit::RelativeOID.new([8571, 3, 2])
    assert_equal "8571.3.2", v1.dot_notation
    assert_equal B(%w{ 0D 04 C2 7B 03 02 }), v1.to_der

    v2 = ASN1Kit::RelativeOID.from_dot_notation("8571.3.2")
    assert_equal "8571.3.2", v1.dot_notation
    assert_equal B(%w{ 0D 04 C2 7B 03 02 }), v2.to_der
  end

end