aboutsummaryrefslogtreecommitdiffstats
path: root/test/tc_x509cert.rb
blob: dfd9b1915cbf5cca8e80013d53eed9ece64ea6df (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env ruby
=begin
= $RCSfile$ -- TestCases for OpenSSL::X509::Certificate

= Info
  'OpenSSL for Ruby 2' project
  Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
  All rights reserved.

= Licence
  This program is licenced under the same licence as Ruby.
  (See the file 'LICENCE'.)

= Version
  $Id$
=end

require 'test/unit'
require 'openssl'

include OpenSSL
include X509

##
# OpenSSL::debug = true
#

puts "Creating blank certificate"
$x509 = Certificate::new()

puts "Generating 1024-bit RSA key"
$rsa = PKey::RSA::generate(1024) {|p, n| #the same as in OpenSSL
  if (p == 0) then putc "." #BN_generate_prime
  elsif (p == 1) then putc "+" #BN_generate_prime
  elsif (p == 2) then putc "*" #searching good prime, n = #of try, but also data from BN_generate_prime
  elsif (p == 3) then putc "\n" #found good prime, n==0 - p, n==1 - q, but also data from BN_generate_prime
  else putc "*" #BN_generate_prime
  end
}

##
# NOTE
# tests are numbered, because we depend on their exec. order
#
class TC_Certificate < Test::Unit::TestCase
  def set_up
    ##
    # NONE
    #
  end
  def test_01version
    version = 2
    
    assert_equal(0, $x509.version, "version")
    $x509.version = version
    assert_equal(version, $x509.version, "version =")
  end
  def test_02serial
    serial = 1234567890

    assert_equal(0, $x509.serial, "serial")
    $x509.serial = serial
    assert_equal(serial, $x509.serial, "serial =")
  end
  def test_03subject
    a = [["C", "CZ"], ["O", "OpenSSL for Ruby"], ["OU", "Development"], ["CN", "Tester"]]
    
    assert_instance_of(Name, $x509.subject, "subject")
    assert_equal("", $x509.subject.to_s, "subject")
    $x509.subject = Name::new(a)
    assert_equal(a, $x509.subject.to_a, "subject =")
  end
  def test_04issuer
    a = [["C", "CZ"], ["O", "OpenSSL for Ruby"], ["OU", "Development"], ["CN", "CA"]]
    
    assert_instance_of(Name, $x509.issuer, "issuer")
    assert_equal("", $x509.issuer.to_s, "issuer")
    $x509.issuer = Name::new(a)
    assert_equal(a, $x509.issuer.to_a, "issuer =")
  end
  def test_05not_before
    t = Time.now
    
    ##
    # NOTE:
    # empty not_before throws "unknown time format"
    # 
    $x509.not_before = t
    assert_equal(t.to_s, $x509.not_before.to_s, "not_before")
  end
  def test_06not_after
    t = Time.now + 365 * 24 * 60 * 60
    
    ##
    # NOTE:
    # empty not_after throws "unknown time format"
    # 
    $x509.not_after = t
    assert_equal(t.to_s, $x509.not_after.to_s, "not_after")
  end
  def test_07pubkey
    pubk = $rsa.public_key
    
    ##
    # NOTE
    # empty public_key throws "unknown public key type"
    # 
    $x509.public_key = pubk
    ##
    # TODO
    # FIXME
    # add == method to PKeys
    # assert_equal(pubk, $x509.public_key, "public_key")
    # 
    assert($x509.check_private_key($rsa), "check_private_key")
  end
  def test_08extensions
    ##
    # TODO
    # extensions
    # extensions =
    # extensions
    # add_extension
    # extensions
    # 
  end
  def test_09sign_verify
    $x509.sign($rsa, Digest::MD5::new)
    assert($x509.verify($rsa), "verify")
  end
  def test_10export
    assert_instance_of(String, $x509.to_der, "to_der")
    assert_instance_of(String, $x509.to_pem, "to_pem")
    assert_instance_of(String, $x509.to_text, "to_text")
  end
  def test_11load
    txt = $x509.to_text

    x509 = Certificate::new($x509.to_pem)
    assert_equal(txt, x509.to_text, "new instance from PEM")
  end
  def tear_down
    ##
    # NONE
    # 
  end
end