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
|