diff options
Diffstat (limited to 'trunk/test/openssl')
-rw-r--r-- | trunk/test/openssl/ssl_server.rb | 81 | ||||
-rw-r--r-- | trunk/test/openssl/test_asn1.rb | 197 | ||||
-rw-r--r-- | trunk/test/openssl/test_cipher.rb | 95 | ||||
-rw-r--r-- | trunk/test/openssl/test_digest.rb | 88 | ||||
-rw-r--r-- | trunk/test/openssl/test_ec.rb | 113 | ||||
-rw-r--r-- | trunk/test/openssl/test_hmac.rb | 34 | ||||
-rw-r--r-- | trunk/test/openssl/test_ns_spki.rb | 59 | ||||
-rw-r--r-- | trunk/test/openssl/test_pair.rb | 149 | ||||
-rw-r--r-- | trunk/test/openssl/test_pkcs7.rb | 154 | ||||
-rw-r--r-- | trunk/test/openssl/test_pkey_rsa.rb | 49 | ||||
-rw-r--r-- | trunk/test/openssl/test_ssl.rb | 557 | ||||
-rw-r--r-- | trunk/test/openssl/test_x509cert.rb | 175 | ||||
-rw-r--r-- | trunk/test/openssl/test_x509crl.rb | 218 | ||||
-rw-r--r-- | trunk/test/openssl/test_x509ext.rb | 74 | ||||
-rw-r--r-- | trunk/test/openssl/test_x509name.rb | 266 | ||||
-rw-r--r-- | trunk/test/openssl/test_x509req.rb | 140 | ||||
-rw-r--r-- | trunk/test/openssl/test_x509store.rb | 218 | ||||
-rw-r--r-- | trunk/test/openssl/utils.rb | 135 |
18 files changed, 0 insertions, 2802 deletions
diff --git a/trunk/test/openssl/ssl_server.rb b/trunk/test/openssl/ssl_server.rb deleted file mode 100644 index 6e620629c5..0000000000 --- a/trunk/test/openssl/ssl_server.rb +++ /dev/null @@ -1,81 +0,0 @@ -require "socket" -require "thread" -require "openssl" -require File.join(File.dirname(__FILE__), "utils.rb") - -def get_pem(io=$stdin) - buf = "" - while line = io.gets - if /^-----BEGIN / =~ line - buf << line - break - end - end - while line = io.gets - buf << line - if /^-----END / =~ line - break - end - end - return buf -end - -def make_key(pem) - begin - return OpenSSL::PKey::RSA.new(pem) - rescue - return OpenSSL::PKey::DSA.new(pem) - end -end - -ca_cert = OpenSSL::X509::Certificate.new(get_pem) -ssl_cert = OpenSSL::X509::Certificate.new(get_pem) -ssl_key = make_key(get_pem) -port = Integer(ARGV.shift) -verify_mode = Integer(ARGV.shift) -start_immediately = (/yes/ =~ ARGV.shift) - -store = OpenSSL::X509::Store.new -store.add_cert(ca_cert) -store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT -ctx = OpenSSL::SSL::SSLContext.new -ctx.cert_store = store -#ctx.extra_chain_cert = [ ca_cert ] -ctx.cert = ssl_cert -ctx.key = ssl_key -ctx.verify_mode = verify_mode - -Socket.do_not_reverse_lookup = true -tcps = nil -100.times{|i| - begin - tcps = TCPServer.new("0.0.0.0", port+i) - port = port + i - break - rescue Errno::EADDRINUSE - next - end -} -ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx) -ssls.start_immediately = start_immediately - -$stdout.sync = true -$stdout.puts Process.pid -$stdout.puts port - -loop do - ssl = ssls.accept rescue next - Thread.start{ - q = Queue.new - th = Thread.start{ ssl.write(q.shift) while true } - while line = ssl.gets - if line =~ /^STARTTLS$/ - ssl.accept - next - end - q.push(line) - end - th.kill if q.empty? - ssl.close - } -end diff --git a/trunk/test/openssl/test_asn1.rb b/trunk/test/openssl/test_asn1.rb deleted file mode 100644 index 86811a464c..0000000000 --- a/trunk/test/openssl/test_asn1.rb +++ /dev/null @@ -1,197 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require 'test/unit' - -class OpenSSL::TestASN1 < Test::Unit::TestCase - def test_decode - subj = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=TestCA") - key = OpenSSL::TestUtils::TEST_KEY_RSA1024 - now = Time.at(Time.now.to_i) # suppress usec - s = 0xdeadbeafdeadbeafdeadbeafdeadbeaf - exts = [ - ["basicConstraints","CA:TRUE,pathlen:1",true], - ["keyUsage","keyCertSign, cRLSign",true], - ["subjectKeyIdentifier","hash",false], - ] - dgst = OpenSSL::Digest::SHA1.new - cert = OpenSSL::TestUtils.issue_cert( - subj, key, s, now, now+3600, exts, nil, nil, dgst) - - - asn1 = OpenSSL::ASN1.decode(cert) - assert_equal(OpenSSL::ASN1::Sequence, asn1.class) - assert_equal(3, asn1.value.size) - tbs_cert, sig_alg, sig_val = *asn1.value - - assert_equal(OpenSSL::ASN1::Sequence, tbs_cert.class) - assert_equal(8, tbs_cert.value.size) - - version = tbs_cert.value[0] - assert_equal(:CONTEXT_SPECIFIC, version.tag_class) - assert_equal(0, version.tag) - assert_equal(1, version.value.size) - assert_equal(OpenSSL::ASN1::Integer, version.value[0].class) - assert_equal(2, version.value[0].value) - - serial = tbs_cert.value[1] - assert_equal(OpenSSL::ASN1::Integer, serial.class) - assert_equal(0xdeadbeafdeadbeafdeadbeafdeadbeaf, serial.value) - - sig = tbs_cert.value[2] - assert_equal(OpenSSL::ASN1::Sequence, sig.class) - assert_equal(2, sig.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, sig.value[0].class) - assert_equal("1.2.840.113549.1.1.5", sig.value[0].oid) - assert_equal(OpenSSL::ASN1::Null, sig.value[1].class) - - dn = tbs_cert.value[3] # issuer - assert_equal(subj.hash, OpenSSL::X509::Name.new(dn).hash) - assert_equal(OpenSSL::ASN1::Sequence, dn.class) - assert_equal(3, dn.value.size) - assert_equal(OpenSSL::ASN1::Set, dn.value[0].class) - assert_equal(OpenSSL::ASN1::Set, dn.value[1].class) - assert_equal(OpenSSL::ASN1::Set, dn.value[2].class) - assert_equal(1, dn.value[0].value.size) - assert_equal(1, dn.value[1].value.size) - assert_equal(1, dn.value[2].value.size) - assert_equal(OpenSSL::ASN1::Sequence, dn.value[0].value[0].class) - assert_equal(OpenSSL::ASN1::Sequence, dn.value[1].value[0].class) - assert_equal(OpenSSL::ASN1::Sequence, dn.value[2].value[0].class) - assert_equal(2, dn.value[0].value[0].value.size) - assert_equal(2, dn.value[1].value[0].value.size) - assert_equal(2, dn.value[2].value[0].value.size) - oid, value = *dn.value[0].value[0].value - assert_equal(OpenSSL::ASN1::ObjectId, oid.class) - assert_equal("0.9.2342.19200300.100.1.25", oid.oid) - assert_equal(OpenSSL::ASN1::IA5String, value.class) - assert_equal("org", value.value) - oid, value = *dn.value[1].value[0].value - assert_equal(OpenSSL::ASN1::ObjectId, oid.class) - assert_equal("0.9.2342.19200300.100.1.25", oid.oid) - assert_equal(OpenSSL::ASN1::IA5String, value.class) - assert_equal("ruby-lang", value.value) - oid, value = *dn.value[2].value[0].value - assert_equal(OpenSSL::ASN1::ObjectId, oid.class) - assert_equal("2.5.4.3", oid.oid) - assert_equal(OpenSSL::ASN1::UTF8String, value.class) - assert_equal("TestCA", value.value) - - validity = tbs_cert.value[4] - assert_equal(OpenSSL::ASN1::Sequence, validity.class) - assert_equal(2, validity.value.size) - assert_equal(OpenSSL::ASN1::UTCTime, validity.value[0].class) - assert_equal(now, validity.value[0].value) - assert_equal(OpenSSL::ASN1::UTCTime, validity.value[1].class) - assert_equal(now+3600, validity.value[1].value) - - dn = tbs_cert.value[5] # subject - assert_equal(subj.hash, OpenSSL::X509::Name.new(dn).hash) - assert_equal(OpenSSL::ASN1::Sequence, dn.class) - assert_equal(3, dn.value.size) - assert_equal(OpenSSL::ASN1::Set, dn.value[0].class) - assert_equal(OpenSSL::ASN1::Set, dn.value[1].class) - assert_equal(OpenSSL::ASN1::Set, dn.value[2].class) - assert_equal(1, dn.value[0].value.size) - assert_equal(1, dn.value[1].value.size) - assert_equal(1, dn.value[2].value.size) - assert_equal(OpenSSL::ASN1::Sequence, dn.value[0].value[0].class) - assert_equal(OpenSSL::ASN1::Sequence, dn.value[1].value[0].class) - assert_equal(OpenSSL::ASN1::Sequence, dn.value[2].value[0].class) - assert_equal(2, dn.value[0].value[0].value.size) - assert_equal(2, dn.value[1].value[0].value.size) - assert_equal(2, dn.value[2].value[0].value.size) - oid, value = *dn.value[0].value[0].value - assert_equal(OpenSSL::ASN1::ObjectId, oid.class) - assert_equal("0.9.2342.19200300.100.1.25", oid.oid) - assert_equal(OpenSSL::ASN1::IA5String, value.class) - assert_equal("org", value.value) - oid, value = *dn.value[1].value[0].value - assert_equal(OpenSSL::ASN1::ObjectId, oid.class) - assert_equal("0.9.2342.19200300.100.1.25", oid.oid) - assert_equal(OpenSSL::ASN1::IA5String, value.class) - assert_equal("ruby-lang", value.value) - oid, value = *dn.value[2].value[0].value - assert_equal(OpenSSL::ASN1::ObjectId, oid.class) - assert_equal("2.5.4.3", oid.oid) - assert_equal(OpenSSL::ASN1::UTF8String, value.class) - assert_equal("TestCA", value.value) - - pkey = tbs_cert.value[6] - assert_equal(OpenSSL::ASN1::Sequence, pkey.class) - assert_equal(2, pkey.value.size) - assert_equal(OpenSSL::ASN1::Sequence, pkey.value[0].class) - assert_equal(2, pkey.value[0].value.size) - assert_equal(OpenSSL::ASN1::ObjectId, pkey.value[0].value[0].class) - assert_equal("1.2.840.113549.1.1.1", pkey.value[0].value[0].oid) - assert_equal(OpenSSL::ASN1::BitString, pkey.value[1].class) - assert_equal(0, pkey.value[1].unused_bits) - spkey = OpenSSL::ASN1.decode(pkey.value[1].value) - assert_equal(OpenSSL::ASN1::Sequence, spkey.class) - assert_equal(2, spkey.value.size) - assert_equal(OpenSSL::ASN1::Integer, spkey.value[0].class) - assert_equal(143085709396403084580358323862163416700436550432664688288860593156058579474547937626086626045206357324274536445865308750491138538454154232826011964045825759324933943290377903384882276841880081931690695505836279972214003660451338124170055999155993192881685495391496854691199517389593073052473319331505702779271, spkey.value[0].value) - assert_equal(OpenSSL::ASN1::Integer, spkey.value[1].class) - assert_equal(65537, spkey.value[1].value) - - extensions = tbs_cert.value[7] - assert_equal(:CONTEXT_SPECIFIC, extensions.tag_class) - assert_equal(3, extensions.tag) - assert_equal(1, extensions.value.size) - assert_equal(OpenSSL::ASN1::Sequence, extensions.value[0].class) - assert_equal(3, extensions.value[0].value.size) - - ext = extensions.value[0].value[0] # basicConstraints - assert_equal(OpenSSL::ASN1::Sequence, ext.class) - assert_equal(3, ext.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class) - assert_equal("2.5.29.19", ext.value[0].oid) - assert_equal(OpenSSL::ASN1::Boolean, ext.value[1].class) - assert_equal(true, ext.value[1].value) - assert_equal(OpenSSL::ASN1::OctetString, ext.value[2].class) - extv = OpenSSL::ASN1.decode(ext.value[2].value) - assert_equal(OpenSSL::ASN1::Sequence, extv.class) - assert_equal(2, extv.value.size) - assert_equal(OpenSSL::ASN1::Boolean, extv.value[0].class) - assert_equal(true, extv.value[0].value) - assert_equal(OpenSSL::ASN1::Integer, extv.value[1].class) - assert_equal(1, extv.value[1].value) - - ext = extensions.value[0].value[1] # keyUsage - assert_equal(OpenSSL::ASN1::Sequence, ext.class) - assert_equal(3, ext.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class) - assert_equal("2.5.29.15", ext.value[0].oid) - assert_equal(OpenSSL::ASN1::Boolean, ext.value[1].class) - assert_equal(true, ext.value[1].value) - assert_equal(OpenSSL::ASN1::OctetString, ext.value[2].class) - extv = OpenSSL::ASN1.decode(ext.value[2].value) - assert_equal(OpenSSL::ASN1::BitString, extv.class) - str = "\000"; str[0] = 0b00000110.chr - assert_equal(str, extv.value) - - ext = extensions.value[0].value[2] # subjetKeyIdentifier - assert_equal(OpenSSL::ASN1::Sequence, ext.class) - assert_equal(2, ext.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class) - assert_equal("2.5.29.14", ext.value[0].oid) - assert_equal(OpenSSL::ASN1::OctetString, ext.value[1].class) - extv = OpenSSL::ASN1.decode(ext.value[1].value) - assert_equal(OpenSSL::ASN1::OctetString, extv.class) - sha1 = OpenSSL::Digest::SHA1.new - sha1.update(pkey.value[1].value) - assert_equal(sha1.digest, extv.value) - - assert_equal(OpenSSL::ASN1::Sequence, sig_alg.class) - assert_equal(2, sig_alg.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, pkey.value[0].value[0].class) - assert_equal("1.2.840.113549.1.1.1", pkey.value[0].value[0].oid) - assert_equal(OpenSSL::ASN1::Null, pkey.value[0].value[1].class) - - assert_equal(OpenSSL::ASN1::BitString, sig_val.class) - cululated_sig = key.sign(OpenSSL::Digest::SHA1.new, tbs_cert.to_der) - assert_equal(cululated_sig, sig_val.value) - end -end if defined?(OpenSSL) diff --git a/trunk/test/openssl/test_cipher.rb b/trunk/test/openssl/test_cipher.rb deleted file mode 100644 index d671908165..0000000000 --- a/trunk/test/openssl/test_cipher.rb +++ /dev/null @@ -1,95 +0,0 @@ -begin - require "openssl" -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestCipher < Test::Unit::TestCase - def setup - @c1 = OpenSSL::Cipher::Cipher.new("DES-EDE3-CBC") - @c2 = OpenSSL::Cipher::DES.new(:EDE3, "CBC") - @key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - @iv = "\0\0\0\0\0\0\0\0" - @hexkey = "0000000000000000000000000000000000000000000000" - @hexiv = "0000000000000000" - @data = "DATA" - end - - def teardown - @c1 = @c2 = nil - end - - def test_crypt - @c1.encrypt.pkcs5_keyivgen(@key, @iv) - @c2.encrypt.pkcs5_keyivgen(@key, @iv) - s1 = @c1.update(@data) + @c1.final - s2 = @c2.update(@data) + @c2.final - assert_equal(s1, s2, "encrypt") - - @c1.decrypt.pkcs5_keyivgen(@key, @iv) - @c2.decrypt.pkcs5_keyivgen(@key, @iv) - assert_equal(@data, @c1.update(s1)+@c1.final, "decrypt") - assert_equal(@data, @c2.update(s2)+@c2.final, "decrypt") - end - - def test_info - assert_equal("DES-EDE3-CBC", @c1.name, "name") - assert_equal("DES-EDE3-CBC", @c2.name, "name") - assert_kind_of(Fixnum, @c1.key_len, "key_len") - assert_kind_of(Fixnum, @c1.iv_len, "iv_len") - end - - def test_dup - assert_equal(@c1.name, @c1.dup.name, "dup") - assert_equal(@c1.name, @c1.clone.name, "clone") - @c1.encrypt - @c1.key = @key - @c1.iv = @iv - tmpc = @c1.dup - s1 = @c1.update(@data) + @c1.final - s2 = tmpc.update(@data) + tmpc.final - assert_equal(s1, s2, "encrypt dup") - end - - def test_reset - @c1.encrypt - @c1.key = @key - @c1.iv = @iv - s1 = @c1.update(@data) + @c1.final - @c1.reset - s2 = @c1.update(@data) + @c1.final - assert_equal(s1, s2, "encrypt reset") - end - - def test_empty_data - @c1.encrypt - assert_raises(ArgumentError){ @c1.update("") } - end - - if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00907000 - def test_ciphers - OpenSSL::Cipher.ciphers.each{|name| - assert(OpenSSL::Cipher::Cipher.new(name).is_a?(OpenSSL::Cipher::Cipher)) - } - end - - def test_AES - pt = File.read(__FILE__) - %w(ECB CBC CFB OFB).each{|mode| - c1 = OpenSSL::Cipher::AES256.new(mode) - c1.encrypt - c1.pkcs5_keyivgen("passwd") - ct = c1.update(pt) + c1.final - - c2 = OpenSSL::Cipher::AES256.new(mode) - c2.decrypt - c2.pkcs5_keyivgen("passwd") - assert_equal(pt, c2.update(ct) + c2.final) - } - end - end -end - -end diff --git a/trunk/test/openssl/test_digest.rb b/trunk/test/openssl/test_digest.rb deleted file mode 100644 index 8941588b97..0000000000 --- a/trunk/test/openssl/test_digest.rb +++ /dev/null @@ -1,88 +0,0 @@ -begin - require "openssl" -rescue LoadError -end -require "digest/md5" -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestDigest < Test::Unit::TestCase - def setup - @d1 = OpenSSL::Digest::Digest::new("MD5") - @d2 = OpenSSL::Digest::MD5.new - @md = Digest::MD5.new - @data = "DATA" - end - - def teardown - @d1 = @d2 = @md = nil - end - - def test_digest - assert_equal(@md.digest, @d1.digest) - assert_equal(@md.hexdigest, @d1.hexdigest) - @d1 << @data - @d2 << @data - @md << @data - assert_equal(@md.digest, @d1.digest) - assert_equal(@md.hexdigest, @d1.hexdigest) - assert_equal(@d1.digest, @d2.digest) - assert_equal(@d1.hexdigest, @d2.hexdigest) - assert_equal(@md.digest, OpenSSL::Digest::MD5.digest(@data)) - assert_equal(@md.hexdigest, OpenSSL::Digest::MD5.hexdigest(@data)) - end - - def test_eql - assert(@d1 == @d2, "==") - d = @d1.clone - assert(d == @d1, "clone") - end - - def test_info - assert_equal("MD5", @d1.name, "name") - assert_equal("MD5", @d2.name, "name") - assert_equal(16, @d1.size, "size") - end - - def test_dup - @d1.update(@data) - assert_equal(@d1.name, @d1.dup.name, "dup") - assert_equal(@d1.name, @d1.clone.name, "clone") - assert_equal(@d1.digest, @d1.clone.digest, "clone .digest") - end - - def test_reset - @d1.update(@data) - dig1 = @d1.digest - @d1.reset - @d1.update(@data) - dig2 = @d1.digest - assert_equal(dig1, dig2, "reset") - end - - if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000 - def encode16(str) - str.unpack("H*").first - end - - def test_098_features - sha224_a = "abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5" - sha256_a = "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb" - sha384_a = "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31" - sha512_a = "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75" - - assert_equal(sha224_a, OpenSSL::Digest::SHA224.hexdigest("a")) - assert_equal(sha256_a, OpenSSL::Digest::SHA256.hexdigest("a")) - assert_equal(sha384_a, OpenSSL::Digest::SHA384.hexdigest("a")) - assert_equal(sha512_a, OpenSSL::Digest::SHA512.hexdigest("a")) - - assert_equal(sha224_a, encode16(OpenSSL::Digest::SHA224.digest("a"))) - assert_equal(sha256_a, encode16(OpenSSL::Digest::SHA256.digest("a"))) - assert_equal(sha384_a, encode16(OpenSSL::Digest::SHA384.digest("a"))) - assert_equal(sha512_a, encode16(OpenSSL::Digest::SHA512.digest("a"))) - end - end -end - -end diff --git a/trunk/test/openssl/test_ec.rb b/trunk/test/openssl/test_ec.rb deleted file mode 100644 index 671901ca36..0000000000 --- a/trunk/test/openssl/test_ec.rb +++ /dev/null @@ -1,113 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL::PKey::EC) - -class OpenSSL::TestEC < Test::Unit::TestCase - def setup - @data1 = 'foo' - @data2 = 'bar' * 1000 # data too long for DSA sig - - @group1 = OpenSSL::PKey::EC::Group.new('secp112r1') - @group2 = OpenSSL::PKey::EC::Group.new('sect163k1') - - @key1 = OpenSSL::PKey::EC.new - @key1.group = @group1 - @key1.generate_key - - @key2 = OpenSSL::PKey::EC.new(@group2.curve_name) - @key2.generate_key - - @groups = [@group1, @group2] - @keys = [@key1, @key2] - end - - def compare_keys(k1, k2) - assert_equal(k1.to_pem, k2.to_pem) - end - - def test_curve_names - @groups.each_with_index do |group, idx| - key = @keys[idx] - assert_equal(group.curve_name, key.group.curve_name) - end - end - - def test_check_key - for key in @keys - assert_equal(key.check_key, true) - assert_equal(key.private_key?, true) - assert_equal(key.public_key?, true) - end - end - - def test_encoding - for group in @groups - for meth in [:to_der, :to_pem] - txt = group.send(meth) - gr = OpenSSL::PKey::EC::Group.new(txt) - assert_equal(txt, gr.send(meth)) - - assert_equal(group.generator.to_bn, gr.generator.to_bn) - assert_equal(group.cofactor, gr.cofactor) - assert_equal(group.order, gr.order) - assert_equal(group.seed, gr.seed) - assert_equal(group.degree, gr.degree) - end - end - - for key in @keys - group = key.group - - for meth in [:to_der, :to_pem] - txt = key.send(meth) - assert_equal(txt, OpenSSL::PKey::EC.new(txt).send(meth)) - end - - bn = key.public_key.to_bn - assert_equal(bn, OpenSSL::PKey::EC::Point.new(group, bn).to_bn) - end - end - - def test_set_keys - for key in @keys - k = OpenSSL::PKey::EC.new - k.group = key.group - k.private_key = key.private_key - k.public_key = key.public_key - - compare_keys(key, k) - end - end - - def test_dsa_sign_verify - for key in @keys - sig = key.dsa_sign_asn1(@data1) - assert_equal(key.dsa_verify_asn1(@data1, sig), true) - - assert_raises(OpenSSL::PKey::ECError) { key.dsa_sign_asn1(@data2) } - end - end - - def test_dh_compute_key - for key in @keys - k = OpenSSL::PKey::EC.new(key.group) - k.generate_key - - puba = key.public_key - pubb = k.public_key - a = key.dh_compute_key(pubb) - b = k.dh_compute_key(puba) - assert_equal(a, b) - end - end - -# test Group: asn1_flag, point_conversion - -end - -end diff --git a/trunk/test/openssl/test_hmac.rb b/trunk/test/openssl/test_hmac.rb deleted file mode 100644 index 2f8d6bba20..0000000000 --- a/trunk/test/openssl/test_hmac.rb +++ /dev/null @@ -1,34 +0,0 @@ -begin - require "openssl" -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestHMAC < Test::Unit::TestCase - def setup - @digest = OpenSSL::Digest::MD5.new - @key = "KEY" - @data = "DATA" - @h1 = OpenSSL::HMAC.new(@key, @digest) - @h2 = OpenSSL::HMAC.new(@key, @digest) - end - - def teardown - end - - def test_hmac - @h1.update(@data) - assert_equal(OpenSSL::HMAC.digest(@digest, @key, @data), @h1.digest, "digest") - assert_equal(OpenSSL::HMAC.hexdigest(@digest, @key, @data), @h1.hexdigest, "hexdigest") - end - - def test_dup - @h1.update(@data) - h = @h1.dup - assert_equal(@h1.digest, h.digest, "dup digest") - end -end - -end diff --git a/trunk/test/openssl/test_ns_spki.rb b/trunk/test/openssl/test_ns_spki.rb deleted file mode 100644 index 3937132aa0..0000000000 --- a/trunk/test/openssl/test_ns_spki.rb +++ /dev/null @@ -1,59 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - - -class OpenSSL::TestNSSPI < Test::Unit::TestCase - def setup - # This request data is adopt from the specification of - # "Netscape Extensions for User Key Generation". - # -- http://wp.netscape.com/eng/security/comm4-keygen.html - @b64 = "MIHFMHEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAnX0TILJrOMUue+PtwBRE6XfV" - @b64 << "WtKQbsshxk5ZhcUwcwyvcnIq9b82QhJdoACdD34rqfCAIND46fXKQUnb0mvKzQID" - @b64 << "AQABFhFNb3ppbGxhSXNNeUZyaWVuZDANBgkqhkiG9w0BAQQFAANBAAKv2Eex2n/S" - @b64 << "r/7iJNroWlSzSMtTiQTEB+ADWHGj9u1xrUrOilq/o2cuQxIfZcNZkYAkWP4DubqW" - @b64 << "i0//rgBvmco=" - end - - def teardown - end - - def test_build_data - key1 = OpenSSL::TestUtils::TEST_KEY_RSA1024 - key2 = OpenSSL::TestUtils::TEST_KEY_RSA2048 - spki = OpenSSL::Netscape::SPKI.new - spki.challenge = "RandomString" - spki.public_key = key1.public_key - spki.sign(key1, OpenSSL::Digest::SHA1.new) - assert(spki.verify(spki.public_key)) - assert(spki.verify(key1.public_key)) - assert(!spki.verify(key2.public_key)) - - der = spki.to_der - spki = OpenSSL::Netscape::SPKI.new(der) - assert_equal("RandomString", spki.challenge) - assert_equal(key1.public_key.to_der, spki.public_key.to_der) - assert(spki.verify(spki.public_key)) - end - - def test_decode_data - spki = OpenSSL::Netscape::SPKI.new(@b64) - assert_equal(@b64, spki.to_pem) - assert_equal(@b64.unpack("m").first, spki.to_der) - assert_equal("MozillaIsMyFriend", spki.challenge) - assert_equal(OpenSSL::PKey::RSA, spki.public_key.class) - - spki = OpenSSL::Netscape::SPKI.new(@b64.unpack("m").first) - assert_equal(@b64, spki.to_pem) - assert_equal(@b64.unpack("m").first, spki.to_der) - assert_equal("MozillaIsMyFriend", spki.challenge) - assert_equal(OpenSSL::PKey::RSA, spki.public_key.class) - end -end - -end diff --git a/trunk/test/openssl/test_pair.rb b/trunk/test/openssl/test_pair.rb deleted file mode 100644 index 17713c9988..0000000000 --- a/trunk/test/openssl/test_pair.rb +++ /dev/null @@ -1,149 +0,0 @@ -begin - require "openssl" -rescue LoadError -end -require 'test/unit' - -if defined?(OpenSSL) - -require 'socket' -dir = File.expand_path(__FILE__) -2.times {dir = File.dirname(dir)} -$:.replace([File.join(dir, "ruby")] | $:) -require 'ut_eof' - -module SSLPair - def server - host = "127.0.0.1" - port = 0 - ctx = OpenSSL::SSL::SSLContext.new() - ctx.ciphers = "ADH" - tcps = TCPServer.new(host, port) - ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx) - return ssls - end - - def client(port) - host = "127.0.0.1" - ctx = OpenSSL::SSL::SSLContext.new() - ctx.ciphers = "ADH" - s = TCPSocket.new(host, port) - ssl = OpenSSL::SSL::SSLSocket.new(s, ctx) - ssl.connect - ssl.sync_close = true - ssl - end - - def ssl_pair - ssls = server - th = Thread.new { - ns = ssls.accept - ssls.close - ns - } - port = ssls.to_io.addr[1] - c = client(port) - s = th.value - if block_given? - begin - yield c, s - ensure - c.close unless c.closed? - s.close unless s.closed? - end - else - return c, s - end - ensure - if th && th.alive? - th.kill - th.join - end - end -end - -class OpenSSL::TestEOF1 < Test::Unit::TestCase - include TestEOF - include SSLPair - - def open_file(content) - s1, s2 = ssl_pair - Thread.new { s2 << content; s2.close } - yield s1 - end -end - -class OpenSSL::TestEOF2 < Test::Unit::TestCase - include TestEOF - include SSLPair - - def open_file(content) - s1, s2 = ssl_pair - Thread.new { s1 << content; s1.close } - yield s2 - end -end - -class OpenSSL::TestPair < Test::Unit::TestCase - include SSLPair - - def test_getc - ssl_pair {|s1, s2| - s1 << "a" - assert_equal(?a, s2.getc) - } - end - - def test_readpartial - ssl_pair {|s1, s2| - s2.write "a\nbcd" - assert_equal("a\n", s1.gets) - assert_equal("bcd", s1.readpartial(10)) - s2.write "efg" - assert_equal("efg", s1.readpartial(10)) - s2.close - assert_raise(EOFError) { s1.readpartial(10) } - assert_raise(EOFError) { s1.readpartial(10) } - assert_equal("", s1.readpartial(0)) - } - end - - def test_readall - ssl_pair {|s1, s2| - s2.close - assert_equal("", s1.read) - } - end - - def test_readline - ssl_pair {|s1, s2| - s2.close - assert_raise(EOFError) { s1.readline } - } - end - - def test_puts_meta - ssl_pair {|s1, s2| - begin - old = $/ - $/ = '*' - s1.puts 'a' - ensure - $/ = old - end - s1.close - assert_equal("a\n", s2.read) - } - end - - def test_puts_empty - ssl_pair {|s1, s2| - s1.puts - s1.close - assert_equal("\n", s2.read) - } - end - -end - -end diff --git a/trunk/test/openssl/test_pkcs7.rb b/trunk/test/openssl/test_pkcs7.rb deleted file mode 100644 index 2cdd9343ff..0000000000 --- a/trunk/test/openssl/test_pkcs7.rb +++ /dev/null @@ -1,154 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestPKCS7 < Test::Unit::TestCase - def setup - @rsa1024 = OpenSSL::TestUtils::TEST_KEY_RSA1024 - @rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048 - ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") - ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1") - ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2") - - now = Time.now - ca_exts = [ - ["basicConstraints","CA:TRUE",true], - ["keyUsage","keyCertSign, cRLSign",true], - ["subjectKeyIdentifier","hash",false], - ["authorityKeyIdentifier","keyid:always",false], - ] - @ca_cert = issue_cert(ca, @rsa2048, 1, Time.now, Time.now+3600, ca_exts, - nil, nil, OpenSSL::Digest::SHA1.new) - ee_exts = [ - ["keyUsage","Non Repudiation, Digital Signature, Key Encipherment",true], - ["authorityKeyIdentifier","keyid:always",false], - ["extendedKeyUsage","clientAuth, emailProtection, codeSigning",false], - ] - @ee1_cert = issue_cert(ee1, @rsa1024, 2, Time.now, Time.now+1800, ee_exts, - @ca_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - @ee2_cert = issue_cert(ee2, @rsa1024, 3, Time.now, Time.now+1800, ee_exts, - @ca_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - end - - def issue_cert(*args) - OpenSSL::TestUtils.issue_cert(*args) - end - - def test_signed - store = OpenSSL::X509::Store.new - store.add_cert(@ca_cert) - ca_certs = [@ca_cert] - - data = "aaaaa\r\nbbbbb\r\nccccc\r\n" - tmp = OpenSSL::PKCS7.sign(@ee1_cert, @rsa1024, data, ca_certs) - p7 = OpenSSL::PKCS7.new(tmp.to_der) - certs = p7.certificates - signers = p7.signers - assert(p7.verify([], store)) - assert_equal(data, p7.data) - assert_equal(2, certs.size) - assert_equal(@ee1_cert.subject.to_s, certs[0].subject.to_s) - assert_equal(@ca_cert.subject.to_s, certs[1].subject.to_s) - assert_equal(1, signers.size) - assert_equal(@ee1_cert.serial, signers[0].serial) - assert_equal(@ee1_cert.issuer.to_s, signers[0].issuer.to_s) - - # Normaly OpenSSL tries to translate the supplied content into canonical - # MIME format (e.g. a newline character is converted into CR+LF). - # If the content is a binary, PKCS7::BINARY flag should be used. - - data = "aaaaa\nbbbbb\nccccc\n" - flag = OpenSSL::PKCS7::BINARY - tmp = OpenSSL::PKCS7.sign(@ee1_cert, @rsa1024, data, ca_certs, flag) - p7 = OpenSSL::PKCS7.new(tmp.to_der) - certs = p7.certificates - signers = p7.signers - assert(p7.verify([], store)) - assert_equal(data, p7.data) - assert_equal(2, certs.size) - assert_equal(@ee1_cert.subject.to_s, certs[0].subject.to_s) - assert_equal(@ca_cert.subject.to_s, certs[1].subject.to_s) - assert_equal(1, signers.size) - assert_equal(@ee1_cert.serial, signers[0].serial) - assert_equal(@ee1_cert.issuer.to_s, signers[0].issuer.to_s) - - # A signed-data which have multiple signatures can be created - # through the following steps. - # 1. create two signed-data - # 2. copy signerInfo and certificate from one to another - - tmp1 = OpenSSL::PKCS7.sign(@ee1_cert, @rsa1024, data, [], flag) - tmp2 = OpenSSL::PKCS7.sign(@ee2_cert, @rsa1024, data, [], flag) - tmp1.add_signer(tmp2.signers[0]) - tmp1.add_certificate(@ee2_cert) - - p7 = OpenSSL::PKCS7.new(tmp1.to_der) - certs = p7.certificates - signers = p7.signers - assert(p7.verify([], store)) - assert_equal(data, p7.data) - assert_equal(2, certs.size) - assert_equal(2, signers.size) - assert_equal(@ee1_cert.serial, signers[0].serial) - assert_equal(@ee1_cert.issuer.to_s, signers[0].issuer.to_s) - assert_equal(@ee2_cert.serial, signers[1].serial) - assert_equal(@ee2_cert.issuer.to_s, signers[1].issuer.to_s) - end - - def test_detached_sign - store = OpenSSL::X509::Store.new - store.add_cert(@ca_cert) - ca_certs = [@ca_cert] - - data = "aaaaa\nbbbbb\nccccc\n" - flag = OpenSSL::PKCS7::BINARY|OpenSSL::PKCS7::DETACHED - tmp = OpenSSL::PKCS7.sign(@ee1_cert, @rsa1024, data, ca_certs, flag) - p7 = OpenSSL::PKCS7.new(tmp.to_der) - a1 = OpenSSL::ASN1.decode(p7) - - certs = p7.certificates - signers = p7.signers - assert(!p7.verify([], store)) - assert(p7.verify([], store, data)) - assert_equal(data, p7.data) - assert_equal(2, certs.size) - assert_equal(@ee1_cert.subject.to_s, certs[0].subject.to_s) - assert_equal(@ca_cert.subject.to_s, certs[1].subject.to_s) - assert_equal(1, signers.size) - assert_equal(@ee1_cert.serial, signers[0].serial) - assert_equal(@ee1_cert.issuer.to_s, signers[0].issuer.to_s) - end - - def test_enveloped - if OpenSSL::OPENSSL_VERSION_NUMBER <= 0x0090704f - # PKCS7_encrypt() of OpenSSL-0.9.7d goes to SEGV. - # http://www.mail-archive.com/openssl-dev@openssl.org/msg17376.html - return - end - - certs = [@ee1_cert, @ee2_cert] - cipher = OpenSSL::Cipher::AES.new("128-CBC") - data = "aaaaa\nbbbbb\nccccc\n" - - tmp = OpenSSL::PKCS7.encrypt(certs, data, cipher, OpenSSL::PKCS7::BINARY) - p7 = OpenSSL::PKCS7.new(tmp.to_der) - recip = p7.recipients - assert_equal(:enveloped, p7.type) - assert_equal(2, recip.size) - - assert_equal(@ca_cert.subject.to_s, recip[0].issuer.to_s) - assert_equal(2, recip[0].serial) - assert_equal(data, p7.decrypt(@rsa1024, @ee1_cert)) - - assert_equal(@ca_cert.subject.to_s, recip[1].issuer.to_s) - assert_equal(3, recip[1].serial) - assert_equal(data, p7.decrypt(@rsa1024, @ee2_cert)) - end -end - -end diff --git a/trunk/test/openssl/test_pkey_rsa.rb b/trunk/test/openssl/test_pkey_rsa.rb deleted file mode 100644 index 401cb6c3e0..0000000000 --- a/trunk/test/openssl/test_pkey_rsa.rb +++ /dev/null @@ -1,49 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require 'test/unit' - -if defined?(OpenSSL) - -class OpenSSL::TestPKeyRSA < Test::Unit::TestCase - def test_padding - key = OpenSSL::PKey::RSA.new(512, 3) - - # Need right size for raw mode - plain0 = "x" * (512/8) - cipher = key.private_encrypt(plain0, OpenSSL::PKey::RSA::NO_PADDING) - plain1 = key.public_decrypt(cipher, OpenSSL::PKey::RSA::NO_PADDING) - assert_equal(plain0, plain1) - - # Need smaller size for pkcs1 mode - plain0 = "x" * (512/8 - 11) - cipher1 = key.private_encrypt(plain0, OpenSSL::PKey::RSA::PKCS1_PADDING) - plain1 = key.public_decrypt(cipher1, OpenSSL::PKey::RSA::PKCS1_PADDING) - assert_equal(plain0, plain1) - - cipherdef = key.private_encrypt(plain0) # PKCS1_PADDING is default - plain1 = key.public_decrypt(cipherdef) - assert_equal(plain0, plain1) - assert_equal(cipher1, cipherdef) - - # Failure cases - assert_raise(ArgumentError){ key.private_encrypt() } - assert_raise(ArgumentError){ key.private_encrypt("hi", 1, nil) } - assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt(plain0, 666) } - end - - def test_private - key = OpenSSL::PKey::RSA.new(512, 3) - assert(key.private?) - key2 = OpenSSL::PKey::RSA.new(key.to_der) - assert(key2.private?) - key3 = key.public_key - assert(!key3.private?) - key4 = OpenSSL::PKey::RSA.new(key3.to_der) - assert(!key4.private?) - end -end - -end diff --git a/trunk/test/openssl/test_ssl.rb b/trunk/test/openssl/test_ssl.rb deleted file mode 100644 index ea959892f3..0000000000 --- a/trunk/test/openssl/test_ssl.rb +++ /dev/null @@ -1,557 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "rbconfig" -require "socket" -require "test/unit" -begin - loadpath = $:.dup - $:.replace($: | [File.expand_path("../ruby", File.dirname(__FILE__))]) - require 'envutil' -ensure - $:.replace(loadpath) -end - -if defined?(OpenSSL) - -class OpenSSL::TestSSL < Test::Unit::TestCase - RUBY = EnvUtil.rubybin - SSL_SERVER = File.join(File.dirname(__FILE__), "ssl_server.rb") - PORT = 20443 - ITERATIONS = ($0 == __FILE__) ? 100 : 10 - - def setup - @ca_key = OpenSSL::TestUtils::TEST_KEY_RSA2048 - @svr_key = OpenSSL::TestUtils::TEST_KEY_RSA1024 - @cli_key = OpenSSL::TestUtils::TEST_KEY_DSA256 - @ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") - @svr = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=localhost") - @cli = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=localhost") - - now = Time.at(Time.now.to_i) - ca_exts = [ - ["basicConstraints","CA:TRUE",true], - ["keyUsage","cRLSign,keyCertSign",true], - ] - ee_exts = [ - ["keyUsage","keyEncipherment,digitalSignature",true], - ] - @ca_cert = issue_cert(@ca, @ca_key, 1, now, now+3600, ca_exts, - nil, nil, OpenSSL::Digest::SHA1.new) - @svr_cert = issue_cert(@svr, @svr_key, 2, now, now+1800, ee_exts, - @ca_cert, @ca_key, OpenSSL::Digest::SHA1.new) - @cli_cert = issue_cert(@cli, @cli_key, 3, now, now+1800, ee_exts, - @ca_cert, @ca_key, OpenSSL::Digest::SHA1.new) - @server = nil - end - - def teardown - end - - def issue_cert(*arg) - OpenSSL::TestUtils.issue_cert(*arg) - end - - def issue_crl(*arg) - OpenSSL::TestUtils.issue_crl(*arg) - end - - def readwrite_loop(ctx, ssl) - while line = ssl.gets - if line =~ /^STARTTLS$/ - ssl.accept - next - end - ssl.write(line) - end - rescue OpenSSL::SSL::SSLError - rescue IOError - ensure - ssl.close rescue nil - end - - def server_loop(ctx, ssls, server_proc) - loop do - ssl = nil - begin - ssl = ssls.accept - rescue OpenSSL::SSL::SSLError - retry - end - - Thread.start do - Thread.current.abort_on_exception = true - server_proc.call(ctx, ssl) - end - end - rescue Errno::EBADF, IOError, Errno::EINVAL, Errno::ECONNABORTED - end - - def start_server(port0, verify_mode, start_immediately, args = {}, &block) - ctx_proc = args[:ctx_proc] - server_proc = args[:server_proc] - server_proc ||= method(:readwrite_loop) - - store = OpenSSL::X509::Store.new - store.add_cert(@ca_cert) - store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT - ctx = OpenSSL::SSL::SSLContext.new - ctx.cert_store = store - #ctx.extra_chain_cert = [ ca_cert ] - ctx.cert = @svr_cert - ctx.key = @svr_key - ctx.verify_mode = verify_mode - ctx_proc.call(ctx) if ctx_proc - - Socket.do_not_reverse_lookup = true - tcps = nil - port = port0 - begin - tcps = TCPServer.new("127.0.0.1", port) - rescue Errno::EADDRINUSE - port += 1 - retry - end - - ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx) - ssls.start_immediately = start_immediately - - begin - server = Thread.new do - Thread.current.abort_on_exception = true - server_loop(ctx, ssls, server_proc) - end - - $stderr.printf("%s started: pid=%d port=%d\n", SSL_SERVER, pid, port) if $DEBUG - - block.call(server, port.to_i) - ensure - begin - begin - tcps.shutdown - rescue Errno::ENOTCONN - # when `Errno::ENOTCONN: Socket is not connected' on some platforms, - # call #close instead of #shutdown. - tcps.close - tcps = nil - end if (tcps) - if (server) - server.join(5) - if server.alive? - server.kill - server.join - flunk("TCPServer was closed and SSLServer is still alive") unless $! - end - end - ensure - tcps.close if (tcps) - end - end - end - - def starttls(ssl) - ssl.puts("STARTTLS") - - sleep 1 # When this line is eliminated, process on Cygwin blocks - # forever at ssl.connect. But I don't know why it does. - - ssl.connect - end - - def test_ctx_setup - ctx = OpenSSL::SSL::SSLContext.new - assert_equal(ctx.setup, true) - assert_equal(ctx.setup, nil) - end - - def test_connect_and_close - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - assert(ssl.connect) - ssl.close - assert(!sock.closed?) - sock.close - - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.sync_close = true # !! - assert(ssl.connect) - ssl.close - assert(sock.closed?) - } - end - - def test_read_and_write - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.sync_close = true - ssl.connect - - # syswrite and sysread - ITERATIONS.times{|i| - str = "x" * 100 + "\n" - ssl.syswrite(str) - assert_equal(str, ssl.sysread(str.size)) - - str = "x" * i * 100 + "\n" - buf = "" - ssl.syswrite(str) - assert_equal(buf.object_id, ssl.sysread(str.size, buf).object_id) - assert_equal(str, buf) - } - - # puts and gets - ITERATIONS.times{ - str = "x" * 100 + "\n" - ssl.puts(str) - assert_equal(str, ssl.gets) - - str = "x" * 100 - ssl.puts(str) - assert_equal(str, ssl.gets("\n", 100)) - assert_equal("\n", ssl.gets) - } - - # read and write - ITERATIONS.times{|i| - str = "x" * 100 + "\n" - ssl.write(str) - assert_equal(str, ssl.read(str.size)) - - str = "x" * i * 100 + "\n" - buf = "" - ssl.write(str) - assert_equal(buf.object_id, ssl.read(str.size, buf).object_id) - assert_equal(str, buf) - } - - ssl.close - } - end - - def test_client_auth - vflag = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT - start_server(PORT, vflag, true){|server, port| - assert_raises(OpenSSL::SSL::SSLError){ - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.connect - } - - ctx = OpenSSL::SSL::SSLContext.new - ctx.key = @cli_key - ctx.cert = @cli_cert - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - ssl.sync_close = true - ssl.connect - ssl.puts("foo") - assert_equal("foo\n", ssl.gets) - ssl.close - - called = nil - ctx = OpenSSL::SSL::SSLContext.new - ctx.client_cert_cb = Proc.new{ |sslconn| - called = true - [@cli_cert, @cli_key] - } - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - ssl.sync_close = true - ssl.connect - assert(called) - ssl.puts("foo") - assert_equal("foo\n", ssl.gets) - ssl.close - } - end - - def test_starttls - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, false){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.sync_close = true - str = "x" * 1000 + "\n" - - ITERATIONS.times{ - ssl.puts(str) - assert_equal(str, ssl.gets) - } - - starttls(ssl) - - ITERATIONS.times{ - ssl.puts(str) - assert_equal(str, ssl.gets) - } - - ssl.close - } - end - - def test_parallel - GC.start - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - ssls = [] - 10.times{ - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.connect - ssl.sync_close = true - ssls << ssl - } - str = "x" * 1000 + "\n" - ITERATIONS.times{ - ssls.each{|ssl| - ssl.puts(str) - assert_equal(str, ssl.gets) - } - } - ssls.each{|ssl| ssl.close } - } - end - - def test_verify_result - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ctx = OpenSSL::SSL::SSLContext.new - ctx.set_params - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - assert_raise(OpenSSL::SSL::SSLError){ ssl.connect } - assert_equal(OpenSSL::X509::V_ERR_SELF_SIGNED_CERT_IN_CHAIN, ssl.verify_result) - - sock = TCPSocket.new("127.0.0.1", port) - ctx = OpenSSL::SSL::SSLContext.new - ctx.set_params( - :verify_callback => Proc.new do |preverify_ok, store_ctx| - store_ctx.error = OpenSSL::X509::V_OK - true - end - ) - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - ssl.connect - assert_equal(OpenSSL::X509::V_OK, ssl.verify_result) - - sock = TCPSocket.new("127.0.0.1", port) - ctx = OpenSSL::SSL::SSLContext.new - ctx.set_params( - :verify_callback => Proc.new do |preverify_ok, store_ctx| - store_ctx.error = OpenSSL::X509::V_ERR_APPLICATION_VERIFICATION - false - end - ) - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - assert_raise(OpenSSL::SSL::SSLError){ ssl.connect } - assert_equal(OpenSSL::X509::V_ERR_APPLICATION_VERIFICATION, ssl.verify_result) - } - end - - def test_sslctx_set_params - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ctx = OpenSSL::SSL::SSLContext.new - ctx.set_params - assert_equal(OpenSSL::SSL::VERIFY_PEER, ctx.verify_mode) - assert_equal(OpenSSL::SSL::OP_ALL, ctx.options) - ciphers = ctx.ciphers - ciphers_versions = ciphers.collect{|_, v, _, _| v } - ciphers_names = ciphers.collect{|v, _, _, _| v } - assert(ciphers_names.all?{|v| /ADH/ !~ v }) - assert(ciphers_versions.all?{|v| /SSLv2/ !~ v }) - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - assert_raise(OpenSSL::SSL::SSLError){ ssl.connect } - assert_equal(OpenSSL::X509::V_ERR_SELF_SIGNED_CERT_IN_CHAIN, ssl.verify_result) - } - end - - def test_post_connection_check - sslerr = OpenSSL::SSL::SSLError - - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.connect - assert_raises(sslerr){ssl.post_connection_check("localhost.localdomain")} - assert_raises(sslerr){ssl.post_connection_check("127.0.0.1")} - assert(ssl.post_connection_check("localhost")) - assert_raises(sslerr){ssl.post_connection_check("foo.example.com")} - - cert = ssl.peer_cert - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "localhost.localdomain")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "127.0.0.1")) - assert(OpenSSL::SSL.verify_certificate_identity(cert, "localhost")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "foo.example.com")) - } - - now = Time.now - exts = [ - ["keyUsage","keyEncipherment,digitalSignature",true], - ["subjectAltName","DNS:localhost.localdomain",false], - ["subjectAltName","IP:127.0.0.1",false], - ] - @svr_cert = issue_cert(@svr, @svr_key, 4, now, now+1800, exts, - @ca_cert, @ca_key, OpenSSL::Digest::SHA1.new) - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.connect - assert(ssl.post_connection_check("localhost.localdomain")) - assert(ssl.post_connection_check("127.0.0.1")) - assert_raises(sslerr){ssl.post_connection_check("localhost")} - assert_raises(sslerr){ssl.post_connection_check("foo.example.com")} - - cert = ssl.peer_cert - assert(OpenSSL::SSL.verify_certificate_identity(cert, "localhost.localdomain")) - assert(OpenSSL::SSL.verify_certificate_identity(cert, "127.0.0.1")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "localhost")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "foo.example.com")) - } - - now = Time.now - exts = [ - ["keyUsage","keyEncipherment,digitalSignature",true], - ["subjectAltName","DNS:*.localdomain",false], - ] - @svr_cert = issue_cert(@svr, @svr_key, 5, now, now+1800, exts, - @ca_cert, @ca_key, OpenSSL::Digest::SHA1.new) - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true){|server, port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.connect - assert(ssl.post_connection_check("localhost.localdomain")) - assert_raises(sslerr){ssl.post_connection_check("127.0.0.1")} - assert_raises(sslerr){ssl.post_connection_check("localhost")} - assert_raises(sslerr){ssl.post_connection_check("foo.example.com")} - cert = ssl.peer_cert - assert(OpenSSL::SSL.verify_certificate_identity(cert, "localhost.localdomain")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "127.0.0.1")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "localhost")) - assert(!OpenSSL::SSL.verify_certificate_identity(cert, "foo.example.com")) - } - end - - def test_client_session - last_session = nil - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true) do |server, port| - 2.times do - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.sync_close = true - ssl.session = last_session if last_session - ssl.connect - - session = ssl.session - if last_session - assert(ssl.session_reused?) - - if session.respond_to?(:id) - assert_equal(session.id, last_session.id) - end - assert_equal(session.to_pem, last_session.to_pem) - assert_equal(session.to_der, last_session.to_der) - # Older version of OpenSSL may not be consistent. Look up which versions later. - assert_equal(session.to_text, last_session.to_text) - else - assert(!ssl.session_reused?) - end - last_session = session - - str = "x" * 100 + "\n" - ssl.puts(str) - assert_equal(str, ssl.gets) - - ssl.close - end - end - end - - def test_server_session - connections = 0 - saved_session = nil - - ctx_proc = Proc.new do |ctx, ssl| -# add test for session callbacks here - end - - server_proc = Proc.new do |ctx, ssl| - session = ssl.session - stats = ctx.session_cache_stats - - case connections - when 0 - assert_equal(stats[:cache_num], 1) - assert_equal(stats[:cache_hits], 0) - assert_equal(stats[:cache_misses], 0) - assert(!ssl.session_reused?) - when 1 - assert_equal(stats[:cache_num], 1) - assert_equal(stats[:cache_hits], 1) - assert_equal(stats[:cache_misses], 0) - assert(ssl.session_reused?) - ctx.session_remove(session) - saved_session = session - when 2 - assert_equal(stats[:cache_num], 1) - assert_equal(stats[:cache_hits], 1) - assert_equal(stats[:cache_misses], 1) - assert(!ssl.session_reused?) - ctx.session_add(saved_session) - when 3 - assert_equal(stats[:cache_num], 2) - assert_equal(stats[:cache_hits], 2) - assert_equal(stats[:cache_misses], 1) - assert(ssl.session_reused?) - ctx.flush_sessions(Time.now + 5000) - when 4 - assert_equal(stats[:cache_num], 1) - assert_equal(stats[:cache_hits], 2) - assert_equal(stats[:cache_misses], 2) - assert(!ssl.session_reused?) - ctx.session_add(saved_session) - end - connections += 1 - - readwrite_loop(ctx, ssl) - end - - first_session = nil - start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true, :ctx_proc => ctx_proc, :server_proc => server_proc) do |server, port| - 10.times do |i| - sock = TCPSocket.new("127.0.0.1", port) - ctx = OpenSSL::SSL::SSLContext.new - if defined?(OpenSSL::SSL::OP_NO_TICKET) - # disable RFC4507 support - ctx.options = OpenSSL::SSL::OP_NO_TICKET - end - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - ssl.sync_close = true - ssl.session = first_session if first_session - ssl.connect - - session = ssl.session - if first_session - case i - when 1; assert(ssl.session_reused?) - when 2; assert(!ssl.session_reused?) - when 3; assert(ssl.session_reused?) - when 4; assert(!ssl.session_reused?) - when 5..10; assert(ssl.session_reused?) - end - end - first_session ||= session - - str = "x" * 100 + "\n" - ssl.puts(str) - assert_equal(str, ssl.gets) - - ssl.close - end - end - end -end - -end diff --git a/trunk/test/openssl/test_x509cert.rb b/trunk/test/openssl/test_x509cert.rb deleted file mode 100644 index a5a75ff1b6..0000000000 --- a/trunk/test/openssl/test_x509cert.rb +++ /dev/null @@ -1,175 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestX509Certificate < Test::Unit::TestCase - def setup - @rsa1024 = OpenSSL::TestUtils::TEST_KEY_RSA1024 - @rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048 - @dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256 - @dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512 - @ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") - @ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1") - @ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2") - end - - def teardown - end - - def issue_cert(*args) - OpenSSL::TestUtils.issue_cert(*args) - end - - def test_serial - [1, 2**32, 2**100].each{|s| - cert = issue_cert(@ca, @rsa2048, s, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - assert_equal(s, cert.serial) - cert = OpenSSL::X509::Certificate.new(cert.to_der) - assert_equal(s, cert.serial) - } - end - - def test_public_key - exts = [ - ["basicConstraints","CA:TRUE",true], - ["subjectKeyIdentifier","hash",false], - ["authorityKeyIdentifier","keyid:always",false], - ] - - sha1 = OpenSSL::Digest::SHA1.new - dss1 = OpenSSL::Digest::DSS1.new - [ - [@rsa1024, sha1], [@rsa2048, sha1], [@dsa256, dss1], [@dsa512, dss1], - ].each{|pk, digest| - cert = issue_cert(@ca, pk, 1, Time.now, Time.now+3600, exts, - nil, nil, digest) - assert_equal(cert.extensions[1].value, - OpenSSL::TestUtils.get_subject_key_id(cert)) - cert = OpenSSL::X509::Certificate.new(cert.to_der) - assert_equal(cert.extensions[1].value, - OpenSSL::TestUtils.get_subject_key_id(cert)) - } - end - - def test_validity - now = Time.now until now && now.usec != 0 - cert = issue_cert(@ca, @rsa2048, 1, now, now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - assert_not_equal(now, cert.not_before) - assert_not_equal(now+3600, cert.not_after) - - now = Time.at(now.to_i) - cert = issue_cert(@ca, @rsa2048, 1, now, now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - assert_equal(now.getutc, cert.not_before) - assert_equal((now+3600).getutc, cert.not_after) - - now = Time.at(0) - cert = issue_cert(@ca, @rsa2048, 1, now, now, [], - nil, nil, OpenSSL::Digest::SHA1.new) - assert_equal(now.getutc, cert.not_before) - assert_equal(now.getutc, cert.not_after) - - now = Time.at(0x7fffffff) - cert = issue_cert(@ca, @rsa2048, 1, now, now, [], - nil, nil, OpenSSL::Digest::SHA1.new) - assert_equal(now.getutc, cert.not_before) - assert_equal(now.getutc, cert.not_after) - end - - def test_extension - ca_exts = [ - ["basicConstraints","CA:TRUE",true], - ["keyUsage","keyCertSign, cRLSign",true], - ["subjectKeyIdentifier","hash",false], - ["authorityKeyIdentifier","keyid:always",false], - ] - ca_cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, ca_exts, - nil, nil, OpenSSL::Digest::SHA1.new) - ca_cert.extensions.each_with_index{|ext, i| - assert_equal(ca_exts[i].first, ext.oid) - assert_equal(ca_exts[i].last, ext.critical?) - } - - ee1_exts = [ - ["keyUsage","Non Repudiation, Digital Signature, Key Encipherment",true], - ["subjectKeyIdentifier","hash",false], - ["authorityKeyIdentifier","keyid:always",false], - ["extendedKeyUsage","clientAuth, emailProtection, codeSigning",false], - ["subjectAltName","email:ee1@ruby-lang.org",false], - ] - ee1_cert = issue_cert(@ee1, @rsa1024, 2, Time.now, Time.now+1800, ee1_exts, - ca_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - assert_equal(ca_cert.subject.to_der, ee1_cert.issuer.to_der) - ee1_cert.extensions.each_with_index{|ext, i| - assert_equal(ee1_exts[i].first, ext.oid) - assert_equal(ee1_exts[i].last, ext.critical?) - } - - ee2_exts = [ - ["keyUsage","Non Repudiation, Digital Signature, Key Encipherment",true], - ["subjectKeyIdentifier","hash",false], - ["authorityKeyIdentifier","issuer:always",false], - ["extendedKeyUsage","clientAuth, emailProtection, codeSigning",false], - ["subjectAltName","email:ee2@ruby-lang.org",false], - ] - ee2_cert = issue_cert(@ee2, @rsa1024, 3, Time.now, Time.now+1800, ee2_exts, - ca_cert, @rsa2048, OpenSSL::Digest::MD5.new) - assert_equal(ca_cert.subject.to_der, ee2_cert.issuer.to_der) - ee2_cert.extensions.each_with_index{|ext, i| - assert_equal(ee2_exts[i].first, ext.oid) - assert_equal(ee2_exts[i].last, ext.critical?) - } - - end - - def test_sign_and_verify - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - assert_equal(false, cert.verify(@rsa1024)) - assert_equal(true, cert.verify(@rsa2048)) - assert_equal(false, cert.verify(@dsa256)) - assert_equal(false, cert.verify(@dsa512)) - cert.serial = 2 - assert_equal(false, cert.verify(@rsa2048)) - - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::MD5.new) - assert_equal(false, cert.verify(@rsa1024)) - assert_equal(true, cert.verify(@rsa2048)) - assert_equal(false, cert.verify(@dsa256)) - assert_equal(false, cert.verify(@dsa512)) - cert.subject = @ee1 - assert_equal(false, cert.verify(@rsa2048)) - - cert = issue_cert(@ca, @dsa512, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::DSS1.new) - assert_equal(false, cert.verify(@rsa1024)) - assert_equal(false, cert.verify(@rsa2048)) - assert_equal(false, cert.verify(@dsa256)) - assert_equal(true, cert.verify(@dsa512)) - cert.not_after = Time.now - assert_equal(false, cert.verify(@dsa512)) - - assert_raises(OpenSSL::X509::CertificateError){ - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::DSS1.new) - } - assert_raises(OpenSSL::X509::CertificateError){ - cert = issue_cert(@ca, @dsa512, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::MD5.new) - } - assert_raises(OpenSSL::X509::CertificateError){ - cert = issue_cert(@ca, @dsa512, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - } - end -end - -end diff --git a/trunk/test/openssl/test_x509crl.rb b/trunk/test/openssl/test_x509crl.rb deleted file mode 100644 index 444a00a586..0000000000 --- a/trunk/test/openssl/test_x509crl.rb +++ /dev/null @@ -1,218 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestX509CRL < Test::Unit::TestCase - def setup - @rsa1024 = OpenSSL::TestUtils::TEST_KEY_RSA1024 - @rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048 - @dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256 - @dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512 - @ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") - @ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1") - @ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2") - end - - def teardown - end - - def issue_crl(*args) - OpenSSL::TestUtils.issue_crl(*args) - end - - def issue_cert(*args) - OpenSSL::TestUtils.issue_cert(*args) - end - - def test_basic - now = Time.at(Time.now.to_i) - - cert = issue_cert(@ca, @rsa2048, 1, now, now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - crl = issue_crl([], 1, now, now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - assert_equal(1, crl.version) - assert_equal(cert.issuer.to_der, crl.issuer.to_der) - assert_equal(now, crl.last_update) - assert_equal(now+1600, crl.next_update) - - crl = OpenSSL::X509::CRL.new(crl.to_der) - assert_equal(1, crl.version) - assert_equal(cert.issuer.to_der, crl.issuer.to_der) - assert_equal(now, crl.last_update) - assert_equal(now+1600, crl.next_update) - end - - def test_revoked - - # CRLReason ::= ENUMERATED { - # unspecified (0), - # keyCompromise (1), - # cACompromise (2), - # affiliationChanged (3), - # superseded (4), - # cessationOfOperation (5), - # certificateHold (6), - # removeFromCRL (8), - # privilegeWithdrawn (9), - # aACompromise (10) } - - now = Time.at(Time.now.to_i) - revoke_info = [ - [1, Time.at(0), 1], - [2, Time.at(0x7fffffff), 2], - [3, now, 3], - [4, now, 4], - [5, now, 5], - ] - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - revoked = crl.revoked - assert_equal(5, revoked.size) - assert_equal(1, revoked[0].serial) - assert_equal(2, revoked[1].serial) - assert_equal(3, revoked[2].serial) - assert_equal(4, revoked[3].serial) - assert_equal(5, revoked[4].serial) - - assert_equal(Time.at(0), revoked[0].time) - assert_equal(Time.at(0x7fffffff), revoked[1].time) - assert_equal(now, revoked[2].time) - assert_equal(now, revoked[3].time) - assert_equal(now, revoked[4].time) - - assert_equal("CRLReason", revoked[0].extensions[0].oid) - assert_equal("CRLReason", revoked[1].extensions[0].oid) - assert_equal("CRLReason", revoked[2].extensions[0].oid) - assert_equal("CRLReason", revoked[3].extensions[0].oid) - assert_equal("CRLReason", revoked[4].extensions[0].oid) - - assert_equal("Key Compromise", revoked[0].extensions[0].value) - assert_equal("CA Compromise", revoked[1].extensions[0].value) - assert_equal("Affiliation Changed", revoked[2].extensions[0].value) - assert_equal("Superseded", revoked[3].extensions[0].value) - assert_equal("Cessation Of Operation", revoked[4].extensions[0].value) - - assert_equal(false, revoked[0].extensions[0].critical?) - assert_equal(false, revoked[1].extensions[0].critical?) - assert_equal(false, revoked[2].extensions[0].critical?) - assert_equal(false, revoked[3].extensions[0].critical?) - assert_equal(false, revoked[4].extensions[0].critical?) - - crl = OpenSSL::X509::CRL.new(crl.to_der) - assert_equal("Key Compromise", revoked[0].extensions[0].value) - assert_equal("CA Compromise", revoked[1].extensions[0].value) - assert_equal("Affiliation Changed", revoked[2].extensions[0].value) - assert_equal("Superseded", revoked[3].extensions[0].value) - assert_equal("Cessation Of Operation", revoked[4].extensions[0].value) - - revoke_info = (1..1000).collect{|i| [i, now, 0] } - crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - revoked = crl.revoked - assert_equal(1000, revoked.size) - assert_equal(1, revoked[0].serial) - assert_equal(1000, revoked[999].serial) - end - - def test_extension - cert_exts = [ - ["basicConstraints", "CA:TRUE", true], - ["subjectKeyIdentifier", "hash", false], - ["authorityKeyIdentifier", "keyid:always", false], - ["subjectAltName", "email:xyzzy@ruby-lang.org", false], - ["keyUsage", "cRLSign, keyCertSign", true], - ] - crl_exts = [ - ["authorityKeyIdentifier", "keyid:always", false], - ["issuerAltName", "issuer:copy", false], - ] - - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, cert_exts, - nil, nil, OpenSSL::Digest::SHA1.new) - crl = issue_crl([], 1, Time.now, Time.now+1600, crl_exts, - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - exts = crl.extensions - assert_equal(3, exts.size) - assert_equal("1", exts[0].value) - assert_equal("crlNumber", exts[0].oid) - assert_equal(false, exts[0].critical?) - - assert_equal("authorityKeyIdentifier", exts[1].oid) - keyid = OpenSSL::TestUtils.get_subject_key_id(cert) - assert_match(/^keyid:#{keyid}/, exts[1].value) - assert_equal(false, exts[1].critical?) - - assert_equal("issuerAltName", exts[2].oid) - assert_equal("email:xyzzy@ruby-lang.org", exts[2].value) - assert_equal(false, exts[2].critical?) - - crl = OpenSSL::X509::CRL.new(crl.to_der) - exts = crl.extensions - assert_equal(3, exts.size) - assert_equal("1", exts[0].value) - assert_equal("crlNumber", exts[0].oid) - assert_equal(false, exts[0].critical?) - - assert_equal("authorityKeyIdentifier", exts[1].oid) - keyid = OpenSSL::TestUtils.get_subject_key_id(cert) - assert_match(/^keyid:#{keyid}/, exts[1].value) - assert_equal(false, exts[1].critical?) - - assert_equal("issuerAltName", exts[2].oid) - assert_equal("email:xyzzy@ruby-lang.org", exts[2].value) - assert_equal(false, exts[2].critical?) - end - - def test_crlnumber - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - assert_match(1.to_s, crl.extensions[0].value) - assert_match(/X509v3 CRL Number:\s+#{1}/m, crl.to_text) - - crl = issue_crl([], 2**32, Time.now, Time.now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - assert_match((2**32).to_s, crl.extensions[0].value) - assert_match(/X509v3 CRL Number:\s+#{2**32}/m, crl.to_text) - - crl = issue_crl([], 2**100, Time.now, Time.now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - assert_match(/X509v3 CRL Number:\s+#{2**100}/m, crl.to_text) - assert_match((2**100).to_s, crl.extensions[0].value) - end - - def test_sign_and_verify - cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], - cert, @rsa2048, OpenSSL::Digest::SHA1.new) - assert_equal(false, crl.verify(@rsa1024)) - assert_equal(true, crl.verify(@rsa2048)) - assert_equal(false, crl.verify(@dsa256)) - assert_equal(false, crl.verify(@dsa512)) - crl.version = 0 - assert_equal(false, crl.verify(@rsa2048)) - - cert = issue_cert(@ca, @dsa512, 1, Time.now, Time.now+3600, [], - nil, nil, OpenSSL::Digest::DSS1.new) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], - cert, @dsa512, OpenSSL::Digest::DSS1.new) - assert_equal(false, crl.verify(@rsa1024)) - assert_equal(false, crl.verify(@rsa2048)) - assert_equal(false, crl.verify(@dsa256)) - assert_equal(true, crl.verify(@dsa512)) - crl.version = 0 - assert_equal(false, crl.verify(@dsa512)) - end -end - -end diff --git a/trunk/test/openssl/test_x509ext.rb b/trunk/test/openssl/test_x509ext.rb deleted file mode 100644 index d43bbd6bd3..0000000000 --- a/trunk/test/openssl/test_x509ext.rb +++ /dev/null @@ -1,74 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestX509Extension < Test::Unit::TestCase - def setup - @basic_constraints_value = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Boolean(true), # CA - OpenSSL::ASN1::Integer(2) # pathlen - ]) - @basic_constraints = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::ObjectId("basicConstraints"), - OpenSSL::ASN1::Boolean(true), - OpenSSL::ASN1::OctetString(@basic_constraints_value.to_der), - ]) - end - - def teardown - end - - def test_new - ext = OpenSSL::X509::Extension.new(@basic_constraints.to_der) - assert_equal("basicConstraints", ext.oid) - assert_equal(true, ext.critical?) - assert_equal("CA:TRUE, pathlen:2", ext.value) - - ext = OpenSSL::X509::Extension.new("2.5.29.19", - @basic_constraints_value.to_der, true) - assert_equal(@basic_constraints.to_der, ext.to_der) - end - - def test_create_by_factory - ef = OpenSSL::X509::ExtensionFactory.new - - bc = ef.create_extension("basicConstraints", "critical, CA:TRUE, pathlen:2") - assert_equal(@basic_constraints.to_der, bc.to_der) - - bc = ef.create_extension("basicConstraints", "CA:TRUE, pathlen:2", true) - assert_equal(@basic_constraints.to_der, bc.to_der) - - begin - ef.config = OpenSSL::Config.parse(<<-_end_of_cnf_) - [crlDistPts] - URI.1 = http://www.example.com/crl - URI.2 = ldap://ldap.example.com/cn=ca?certificateRevocationList;binary - _end_of_cnf_ - rescue NotImplementedError - return - end - - cdp = ef.create_extension("crlDistributionPoints", "@crlDistPts") - assert_equal(false, cdp.critical?) - assert_equal("crlDistributionPoints", cdp.oid) - assert_match(%{URI:http://www\.example\.com/crl}, cdp.value) - assert_match( - %r{URI:ldap://ldap\.example\.com/cn=ca\?certificateRevocationList;binary}, - cdp.value) - - cdp = ef.create_extension("crlDistributionPoints", "critical, @crlDistPts") - assert_equal(true, cdp.critical?) - assert_equal("crlDistributionPoints", cdp.oid) - assert_match(%{URI:http://www.example.com/crl}, cdp.value) - assert_match( - %r{URI:ldap://ldap.example.com/cn=ca\?certificateRevocationList;binary}, - cdp.value) - end -end - -end diff --git a/trunk/test/openssl/test_x509name.rb b/trunk/test/openssl/test_x509name.rb deleted file mode 100644 index fb5a1ae4ff..0000000000 --- a/trunk/test/openssl/test_x509name.rb +++ /dev/null @@ -1,266 +0,0 @@ -begin - require "openssl" -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestX509Name < Test::Unit::TestCase - OpenSSL::ASN1::ObjectId.register( - "1.2.840.113549.1.9.1", "emailAddress", "emailAddress") - OpenSSL::ASN1::ObjectId.register( - "2.5.4.5", "serialNumber", "serialNumber") - - def setup - @obj_type_tmpl = Hash.new(OpenSSL::ASN1::PRINTABLESTRING) - @obj_type_tmpl.update(OpenSSL::X509::Name::OBJECT_TYPE_TEMPLATE) - end - - def teardown - end - - def test_s_new - dn = [ ["C", "JP"], ["O", "example"], ["CN", "www.example.jp"] ] - name = OpenSSL::X509::Name.new(dn) - ary = name.to_a - assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s) - assert_equal("C", ary[0][0]) - assert_equal("O", ary[1][0]) - assert_equal("CN", ary[2][0]) - assert_equal("JP", ary[0][1]) - assert_equal("example", ary[1][1]) - assert_equal("www.example.jp", ary[2][1]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2]) - - dn = [ - ["countryName", "JP"], - ["organizationName", "example"], - ["commonName", "www.example.jp"] - ] - name = OpenSSL::X509::Name.new(dn) - ary = name.to_a - assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s) - assert_equal("C", ary[0][0]) - assert_equal("O", ary[1][0]) - assert_equal("CN", ary[2][0]) - assert_equal("JP", ary[0][1]) - assert_equal("example", ary[1][1]) - assert_equal("www.example.jp", ary[2][1]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2]) - - name = OpenSSL::X509::Name.new(dn, @obj_type_tmpl) - ary = name.to_a - assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[2][2]) - - dn = [ - ["countryName", "JP", OpenSSL::ASN1::PRINTABLESTRING], - ["organizationName", "example", OpenSSL::ASN1::PRINTABLESTRING], - ["commonName", "www.example.jp", OpenSSL::ASN1::PRINTABLESTRING] - ] - name = OpenSSL::X509::Name.new(dn) - ary = name.to_a - assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[2][2]) - - dn = [ - ["DC", "org"], - ["DC", "ruby-lang"], - ["CN", "GOTOU Yuuzou"], - ["emailAddress", "gotoyuzo@ruby-lang.org"], - ["serialNumber", "123"], - ] - name = OpenSSL::X509::Name.new(dn) - ary = name.to_a - assert_equal("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou/emailAddress=gotoyuzo@ruby-lang.org/serialNumber=123", name.to_s) - assert_equal("DC", ary[0][0]) - assert_equal("DC", ary[1][0]) - assert_equal("CN", ary[2][0]) - assert_equal("emailAddress", ary[3][0]) - assert_equal("serialNumber", ary[4][0]) - assert_equal("org", ary[0][1]) - assert_equal("ruby-lang", ary[1][1]) - assert_equal("GOTOU Yuuzou", ary[2][1]) - assert_equal("gotoyuzo@ruby-lang.org", ary[3][1]) - assert_equal("123", ary[4][1]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[3][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[4][2]) - - name_from_der = OpenSSL::X509::Name.new(name.to_der) - assert_equal(name_from_der.to_s, name.to_s) - assert_equal(name_from_der.to_a, name.to_a) - assert_equal(name_from_der.to_der, name.to_der) - end - - def test_s_parse - dn = "/DC=org/DC=ruby-lang/CN=www.ruby-lang.org" - name = OpenSSL::X509::Name.parse(dn) - assert_equal(dn, name.to_s) - ary = name.to_a - assert_equal("DC", ary[0][0]) - assert_equal("DC", ary[1][0]) - assert_equal("CN", ary[2][0]) - assert_equal("org", ary[0][1]) - assert_equal("ruby-lang", ary[1][1]) - assert_equal("www.ruby-lang.org", ary[2][1]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2]) - - dn2 = "DC=org, DC=ruby-lang, CN=www.ruby-lang.org" - name = OpenSSL::X509::Name.parse(dn) - ary = name.to_a - assert_equal(dn, name.to_s) - assert_equal("org", ary[0][1]) - assert_equal("ruby-lang", ary[1][1]) - assert_equal("www.ruby-lang.org", ary[2][1]) - - name = OpenSSL::X509::Name.parse(dn, @obj_type_tmpl) - ary = name.to_a - assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[2][2]) - end - - def test_s_parse_rfc2253 - scanner = OpenSSL::X509::Name::RFC2253DN.method(:scan) - - assert_equal([["C", "JP"]], scanner.call("C=JP")) - assert_equal([ - ["DC", "org"], - ["DC", "ruby-lang"], - ["CN", "GOTOU Yuuzou"], - ["emailAddress", "gotoyuzo@ruby-lang.org"], - ], - scanner.call( - "emailAddress=gotoyuzo@ruby-lang.org,CN=GOTOU Yuuzou,"+ - "DC=ruby-lang,DC=org") - ) - - u8 = OpenSSL::ASN1::UTF8STRING - assert_equal([ - ["DC", "org"], - ["DC", "ruby-lang"], - ["O", ",=+<>#;"], - ["O", ",=+<>#;"], - ["OU", ""], - ["OU", ""], - ["L", "aaa=\"bbb, ccc\""], - ["L", "aaa=\"bbb, ccc\""], - ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265"], - ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265"], - ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265"], - ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265", u8], - ["2.5.4.3", "GOTOU, Yuuzou"], - ["2.5.4.3", "GOTOU, Yuuzou"], - ["2.5.4.3", "GOTOU, Yuuzou"], - ["2.5.4.3", "GOTOU, Yuuzou"], - ["CN", "GOTOU \"gotoyuzo\" Yuuzou"], - ["CN", "GOTOU \"gotoyuzo\" Yuuzou"], - ["1.2.840.113549.1.9.1", "gotoyuzo@ruby-lang.org"], - ["emailAddress", "gotoyuzo@ruby-lang.org"], - ], - scanner.call( - "emailAddress=gotoyuzo@ruby-lang.org," + - "1.2.840.113549.1.9.1=gotoyuzo@ruby-lang.org," + - 'CN=GOTOU \"gotoyuzo\" Yuuzou,' + - 'CN="GOTOU \"gotoyuzo\" Yuuzou",' + - '2.5.4.3=GOTOU\,\20Yuuzou,' + - '2.5.4.3=GOTOU\, Yuuzou,' + - '2.5.4.3="GOTOU, Yuuzou",' + - '2.5.4.3="GOTOU\, Yuuzou",' + - "CN=#0C0CE5BE8CE897A4E8A395E894B5," + - 'CN=\E5\BE\8C\E8\97\A4\E8\A3\95\E8\94\B5,' + - "CN=\"\xE5\xBE\x8C\xE8\x97\xA4\xE8\xA3\x95\xE8\x94\xB5\"," + - "CN=\xE5\xBE\x8C\xE8\x97\xA4\xE8\xA3\x95\xE8\x94\xB5," + - 'L=aaa\=\"bbb\, ccc\",' + - 'L="aaa=\"bbb, ccc\"",' + - 'OU=,' + - 'OU="",' + - 'O=\,\=\+\<\>\#\;,' + - 'O=",=+<>#;",' + - "DC=ruby-lang," + - "DC=org") - ) - - [ - "DC=org+DC=jp", - "DC=org,DC=ruby-lang+DC=rubyist,DC=www" - ].each{|dn| - ex = scanner.call(dn) rescue $! - dn_r = Regexp.escape(dn) - assert_match(/^multi-valued RDN is not supported: #{dn_r}/, ex.message) - } - - [ - ["DC=org,DC=exapmle,CN", "CN"], - ["DC=org,DC=example,", ""], - ["DC=org,DC=exapmle,CN=www.example.org;", "CN=www.example.org;"], - ["DC=org,DC=exapmle,CN=#www.example.org", "CN=#www.example.org"], - ["DC=org,DC=exapmle,CN=#777777.example.org", "CN=#777777.example.org"], - ["DC=org,DC=exapmle,CN=\"www.example\".org", "CN=\"www.example\".org"], - ["DC=org,DC=exapmle,CN=www.\"example.org\"", "CN=www.\"example.org\""], - ["DC=org,DC=exapmle,CN=www.\"example\".org", "CN=www.\"example\".org"], - ].each{|dn, msg| - ex = scanner.call(dn) rescue $! - assert_match(/^malformed RDN: .*=>#{Regexp.escape(msg)}/, ex.message) - } - - dn = "CN=www.ruby-lang.org,DC=ruby-lang,DC=org" - name = OpenSSL::X509::Name.parse_rfc2253(dn) - assert_equal(dn, name.to_s(OpenSSL::X509::Name::RFC2253)) - ary = name.to_a - assert_equal("DC", ary[0][0]) - assert_equal("DC", ary[1][0]) - assert_equal("CN", ary[2][0]) - assert_equal("org", ary[0][1]) - assert_equal("ruby-lang", ary[1][1]) - assert_equal("www.ruby-lang.org", ary[2][1]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2]) - end - - def test_add_entry - dn = [ - ["DC", "org"], - ["DC", "ruby-lang"], - ["CN", "GOTOU Yuuzou"], - ["emailAddress", "gotoyuzo@ruby-lang.org"], - ["serialNumber", "123"], - ] - name = OpenSSL::X509::Name.new - dn.each{|attr| name.add_entry(*attr) } - ary = name.to_a - assert_equal("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou/emailAddress=gotoyuzo@ruby-lang.org/serialNumber=123", name.to_s) - assert_equal("DC", ary[0][0]) - assert_equal("DC", ary[1][0]) - assert_equal("CN", ary[2][0]) - assert_equal("emailAddress", ary[3][0]) - assert_equal("serialNumber", ary[4][0]) - assert_equal("org", ary[0][1]) - assert_equal("ruby-lang", ary[1][1]) - assert_equal("GOTOU Yuuzou", ary[2][1]) - assert_equal("gotoyuzo@ruby-lang.org", ary[3][1]) - assert_equal("123", ary[4][1]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2]) - assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2]) - assert_equal(OpenSSL::ASN1::IA5STRING, ary[3][2]) - assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[4][2]) - end -end - -end diff --git a/trunk/test/openssl/test_x509req.rb b/trunk/test/openssl/test_x509req.rb deleted file mode 100644 index a37ed5c5ef..0000000000 --- a/trunk/test/openssl/test_x509req.rb +++ /dev/null @@ -1,140 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestX509Request < Test::Unit::TestCase - def setup - @rsa1024 = OpenSSL::TestUtils::TEST_KEY_RSA1024 - @rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048 - @dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256 - @dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512 - @dn = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou") - end - - def issue_csr(ver, dn, key, digest) - req = OpenSSL::X509::Request.new - req.version = ver - req.subject = dn - req.public_key = key.public_key - req.sign(key, digest) - req - end - - def test_public_key - req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der) - - req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest::DSS1.new) - assert_equal(@dsa512.public_key.to_der, req.public_key.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@dsa512.public_key.to_der, req.public_key.to_der) - end - - def test_version - req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - assert_equal(0, req.version) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(0, req.version) - - req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - assert_equal(1, req.version) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(1, req.version) - end - - def test_subject - req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - assert_equal(@dn.to_der, req.subject.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@dn.to_der, req.subject.to_der) - end - - def create_ext_req(exts) - ef = OpenSSL::X509::ExtensionFactory.new - exts = exts.collect{|e| ef.create_extension(*e) } - return OpenSSL::ASN1::Set([OpenSSL::ASN1::Sequence(exts)]) - end - - def get_ext_req(ext_req_value) - set = OpenSSL::ASN1.decode(ext_req_value) - seq = set.value[0] - seq.value.collect{|asn1ext| - OpenSSL::X509::Extension.new(asn1ext).to_a - } - end - - def test_attr - exts = [ - ["keyUsage", "Digital Signature, Key Encipherment", true], - ["subjectAltName", "email:gotoyuzo@ruby-lang.org", false], - ] - attrval = create_ext_req(exts) - attrs = [ - OpenSSL::X509::Attribute.new("extReq", attrval), - OpenSSL::X509::Attribute.new("msExtReq", attrval), - ] - - req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - attrs.each{|attr| req0.add_attribute(attr) } - req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - req1.attributes = attrs - assert_equal(req0.to_der, req1.to_der) - - attrs = req0.attributes - assert_equal(2, attrs.size) - assert_equal("extReq", attrs[0].oid) - assert_equal("msExtReq", attrs[1].oid) - assert_equal(exts, get_ext_req(attrs[0].value)) - assert_equal(exts, get_ext_req(attrs[1].value)) - - req = OpenSSL::X509::Request.new(req0.to_der) - attrs = req.attributes - assert_equal(2, attrs.size) - assert_equal("extReq", attrs[0].oid) - assert_equal("msExtReq", attrs[1].oid) - assert_equal(exts, get_ext_req(attrs[0].value)) - assert_equal(exts, get_ext_req(attrs[1].value)) - end - - def test_sign_and_verify - req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::SHA1.new) - assert_equal(true, req.verify(@rsa1024)) - assert_equal(false, req.verify(@rsa2048)) - assert_equal(false, req.verify(@dsa256)) - assert_equal(false, req.verify(@dsa512)) - req.version = 1 - assert_equal(false, req.verify(@rsa1024)) - - req = issue_csr(0, @dn, @rsa2048, OpenSSL::Digest::MD5.new) - assert_equal(false, req.verify(@rsa1024)) - assert_equal(true, req.verify(@rsa2048)) - assert_equal(false, req.verify(@dsa256)) - assert_equal(false, req.verify(@dsa512)) - req.subject = OpenSSL::X509::Name.parse("/C=JP/CN=FooBar") - assert_equal(false, req.verify(@rsa2048)) - - req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest::DSS1.new) - assert_equal(false, req.verify(@rsa1024)) - assert_equal(false, req.verify(@rsa2048)) - assert_equal(false, req.verify(@dsa256)) - assert_equal(true, req.verify(@dsa512)) - req.public_key = @rsa1024.public_key - assert_equal(false, req.verify(@dsa512)) - - assert_raise(OpenSSL::X509::RequestError){ - issue_csr(0, @dn, @rsa1024, OpenSSL::Digest::DSS1.new) } - assert_raise(OpenSSL::X509::RequestError){ - issue_csr(0, @dn, @dsa512, OpenSSL::Digest::SHA1.new) } - assert_raise(OpenSSL::X509::RequestError){ - issue_csr(0, @dn, @dsa512, OpenSSL::Digest::MD5.new) } - end -end - -end diff --git a/trunk/test/openssl/test_x509store.rb b/trunk/test/openssl/test_x509store.rb deleted file mode 100644 index b0fe597262..0000000000 --- a/trunk/test/openssl/test_x509store.rb +++ /dev/null @@ -1,218 +0,0 @@ -begin - require "openssl" - require File.join(File.dirname(__FILE__), "utils.rb") -rescue LoadError -end -require "test/unit" - -if defined?(OpenSSL) - -class OpenSSL::TestX509Store < Test::Unit::TestCase - def setup - @rsa1024 = OpenSSL::TestUtils::TEST_KEY_RSA1024 - @rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048 - @dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256 - @dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512 - @ca1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA1") - @ca2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA2") - @ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1") - @ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2") - end - - def teardown - end - - def issue_cert(*args) - OpenSSL::TestUtils.issue_cert(*args) - end - - def issue_crl(*args) - OpenSSL::TestUtils.issue_crl(*args) - end - - def test_verify - now = Time.at(Time.now.to_i) - ca_exts = [ - ["basicConstraints","CA:TRUE",true], - ["keyUsage","cRLSign,keyCertSign",true], - ] - ee_exts = [ - ["keyUsage","keyEncipherment,digitalSignature",true], - ] - ca1_cert = issue_cert(@ca1, @rsa2048, 1, now, now+3600, ca_exts, - nil, nil, OpenSSL::Digest::SHA1.new) - ca2_cert = issue_cert(@ca2, @rsa1024, 2, now, now+1800, ca_exts, - ca1_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - ee1_cert = issue_cert(@ee1, @dsa256, 10, now, now+1800, ee_exts, - ca2_cert, @rsa1024, OpenSSL::Digest::SHA1.new) - ee2_cert = issue_cert(@ee2, @dsa512, 20, now, now+1800, ee_exts, - ca2_cert, @rsa1024, OpenSSL::Digest::SHA1.new) - ee3_cert = issue_cert(@ee2, @dsa512, 30, now-100, now-1, ee_exts, - ca2_cert, @rsa1024, OpenSSL::Digest::SHA1.new) - ee4_cert = issue_cert(@ee2, @dsa512, 40, now+1000, now+2000, ee_exts, - ca2_cert, @rsa1024, OpenSSL::Digest::SHA1.new) - - revoke_info = [] - crl1 = issue_crl(revoke_info, 1, now, now+1800, [], - ca1_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - revoke_info = [ [2, now, 1], ] - crl1_2 = issue_crl(revoke_info, 2, now, now+1800, [], - ca1_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - revoke_info = [ [20, now, 1], ] - crl2 = issue_crl(revoke_info, 1, now, now+1800, [], - ca2_cert, @rsa1024, OpenSSL::Digest::SHA1.new) - revoke_info = [] - crl2_2 = issue_crl(revoke_info, 2, now-100, now-1, [], - ca2_cert, @rsa1024, OpenSSL::Digest::SHA1.new) - - assert(true, ca1_cert.verify(ca1_cert.public_key)) # self signed - assert(true, ca2_cert.verify(ca1_cert.public_key)) # issued by ca1 - assert(true, ee1_cert.verify(ca2_cert.public_key)) # issued by ca2 - assert(true, ee2_cert.verify(ca2_cert.public_key)) # issued by ca2 - assert(true, ee3_cert.verify(ca2_cert.public_key)) # issued by ca2 - assert(true, crl1.verify(ca1_cert.public_key)) # issued by ca1 - assert(true, crl1_2.verify(ca1_cert.public_key)) # issued by ca1 - assert(true, crl2.verify(ca2_cert.public_key)) # issued by ca2 - assert(true, crl2_2.verify(ca2_cert.public_key)) # issued by ca2 - - store = OpenSSL::X509::Store.new - assert_equal(false, store.verify(ca1_cert)) - assert_not_equal(OpenSSL::X509::V_OK, store.error) - - assert_equal(false, store.verify(ca2_cert)) - assert_not_equal(OpenSSL::X509::V_OK, store.error) - - store.add_cert(ca1_cert) - assert_equal(true, store.verify(ca2_cert)) - assert_equal(OpenSSL::X509::V_OK, store.error) - assert_equal("ok", store.error_string) - chain = store.chain - assert_equal(2, chain.size) - assert_equal(@ca2.to_der, chain[0].subject.to_der) - assert_equal(@ca1.to_der, chain[1].subject.to_der) - - store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT - assert_equal(false, store.verify(ca2_cert)) - assert_not_equal(OpenSSL::X509::V_OK, store.error) - - store.purpose = OpenSSL::X509::PURPOSE_CRL_SIGN - assert_equal(true, store.verify(ca2_cert)) - assert_equal(OpenSSL::X509::V_OK, store.error) - - store.add_cert(ca2_cert) - store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT - assert_equal(true, store.verify(ee1_cert)) - assert_equal(true, store.verify(ee2_cert)) - assert_equal(OpenSSL::X509::V_OK, store.error) - assert_equal("ok", store.error_string) - chain = store.chain - assert_equal(3, chain.size) - assert_equal(@ee2.to_der, chain[0].subject.to_der) - assert_equal(@ca2.to_der, chain[1].subject.to_der) - assert_equal(@ca1.to_der, chain[2].subject.to_der) - assert_equal(false, store.verify(ee3_cert)) - assert_equal(OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED, store.error) - assert_match(/expire/i, store.error_string) - assert_equal(false, store.verify(ee4_cert)) - assert_equal(OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID, store.error) - assert_match(/not yet valid/i, store.error_string) - - store = OpenSSL::X509::Store.new - store.add_cert(ca1_cert) - store.add_cert(ca2_cert) - store.time = now + 1500 - assert_equal(true, store.verify(ca1_cert)) - assert_equal(true, store.verify(ca2_cert)) - assert_equal(true, store.verify(ee4_cert)) - store.time = now + 1900 - assert_equal(true, store.verify(ca1_cert)) - assert_equal(false, store.verify(ca2_cert)) - assert_equal(OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED, store.error) - assert_equal(false, store.verify(ee4_cert)) - assert_equal(OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED, store.error) - store.time = now + 4000 - assert_equal(false, store.verify(ee1_cert)) - assert_equal(OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED, store.error) - assert_equal(false, store.verify(ee4_cert)) - assert_equal(OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED, store.error) - - # the underlying X509 struct caches the result of the last - # verification for signature and not-before. so the following code - # rebuilds new objects to avoid site effect. - store.time = Time.now - 4000 - assert_equal(false, store.verify(OpenSSL::X509::Certificate.new(ca2_cert))) - assert_equal(OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID, store.error) - assert_equal(false, store.verify(OpenSSL::X509::Certificate.new(ee1_cert))) - assert_equal(OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID, store.error) - - return unless defined?(OpenSSL::X509::V_FLAG_CRL_CHECK) - - store = OpenSSL::X509::Store.new - store.purpose = OpenSSL::X509::PURPOSE_ANY - store.flags = OpenSSL::X509::V_FLAG_CRL_CHECK - store.add_cert(ca1_cert) - store.add_crl(crl1) # revoke no cert - store.add_crl(crl2) # revoke ee2_cert - assert_equal(true, store.verify(ca1_cert)) - assert_equal(true, store.verify(ca2_cert)) - assert_equal(true, store.verify(ee1_cert, [ca2_cert])) - assert_equal(false, store.verify(ee2_cert, [ca2_cert])) - - store = OpenSSL::X509::Store.new - store.purpose = OpenSSL::X509::PURPOSE_ANY - store.flags = OpenSSL::X509::V_FLAG_CRL_CHECK - store.add_cert(ca1_cert) - store.add_crl(crl1_2) # revoke ca2_cert - store.add_crl(crl2) # revoke ee2_cert - assert_equal(true, store.verify(ca1_cert)) - assert_equal(false, store.verify(ca2_cert)) - assert_equal(true, store.verify(ee1_cert, [ca2_cert]), - "This test is expected to be success with OpenSSL 0.9.7c or later.") - assert_equal(false, store.verify(ee2_cert, [ca2_cert])) - - store.flags = - OpenSSL::X509::V_FLAG_CRL_CHECK|OpenSSL::X509::V_FLAG_CRL_CHECK_ALL - assert_equal(true, store.verify(ca1_cert)) - assert_equal(false, store.verify(ca2_cert)) - assert_equal(false, store.verify(ee1_cert, [ca2_cert])) - assert_equal(false, store.verify(ee2_cert, [ca2_cert])) - - store = OpenSSL::X509::Store.new - store.purpose = OpenSSL::X509::PURPOSE_ANY - store.flags = - OpenSSL::X509::V_FLAG_CRL_CHECK|OpenSSL::X509::V_FLAG_CRL_CHECK_ALL - store.add_cert(ca1_cert) - store.add_cert(ca2_cert) - store.add_crl(crl1) - store.add_crl(crl2_2) # issued by ca2 but expired. - assert_equal(true, store.verify(ca1_cert)) - assert_equal(true, store.verify(ca2_cert)) - assert_equal(false, store.verify(ee1_cert)) - assert_equal(OpenSSL::X509::V_ERR_CRL_HAS_EXPIRED, store.error) - assert_equal(false, store.verify(ee2_cert)) - end - - def test_set_errors - now = Time.now - ca1_cert = issue_cert(@ca1, @rsa2048, 1, now, now+3600, [], - nil, nil, OpenSSL::Digest::SHA1.new) - store = OpenSSL::X509::Store.new - store.add_cert(ca1_cert) - assert_raises(OpenSSL::X509::StoreError){ - store.add_cert(ca1_cert) # add same certificate twice - } - - revoke_info = [] - crl1 = issue_crl(revoke_info, 1, now, now+1800, [], - ca1_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - revoke_info = [ [2, now, 1], ] - crl2 = issue_crl(revoke_info, 2, now+1800, now+3600, [], - ca1_cert, @rsa2048, OpenSSL::Digest::SHA1.new) - store.add_crl(crl1) - assert_raises(OpenSSL::X509::StoreError){ - store.add_crl(crl2) # add CRL issued by same CA twice. - } - end -end - -end diff --git a/trunk/test/openssl/utils.rb b/trunk/test/openssl/utils.rb deleted file mode 100644 index 07a1835f9d..0000000000 --- a/trunk/test/openssl/utils.rb +++ /dev/null @@ -1,135 +0,0 @@ -require "openssl" -require "test/unit" - -module OpenSSL::TestUtils - TEST_KEY_RSA1024 = OpenSSL::PKey::RSA.new <<-_end_of_pem_ ------BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQDLwsSw1ECnPtT+PkOgHhcGA71nwC2/nL85VBGnRqDxOqjVh7Cx -aKPERYHsk4BPCkE3brtThPWc9kjHEQQ7uf9Y1rbCz0layNqHyywQEVLFmp1cpIt/ -Q3geLv8ZD9pihowKJDyMDiN6ArYUmZczvW4976MU3+l54E6lF/JfFEU5hwIDAQAB -AoGBAKSl/MQarye1yOysqX6P8fDFQt68VvtXkNmlSiKOGuzyho0M+UVSFcs6k1L0 -maDE25AMZUiGzuWHyaU55d7RXDgeskDMakD1v6ZejYtxJkSXbETOTLDwUWTn618T -gnb17tU1jktUtU67xK/08i/XodlgnQhs6VoHTuCh3Hu77O6RAkEA7+gxqBuZR572 -74/akiW/SuXm0SXPEviyO1MuSRwtI87B02D0qgV8D1UHRm4AhMnJ8MCs1809kMQE -JiQUCrp9mQJBANlt2ngBO14us6NnhuAseFDTBzCHXwUUu1YKHpMMmxpnGqaldGgX -sOZB3lgJsT9VlGf3YGYdkLTNVbogQKlKpB8CQQDiSwkb4vyQfDe8/NpU5Not0fII -8jsDUCb+opWUTMmfbxWRR3FBNu8wnym/m19N4fFj8LqYzHX4KY0oVPu6qvJxAkEA -wa5snNekFcqONLIE4G5cosrIrb74sqL8GbGb+KuTAprzj5z1K8Bm0UW9lTjVDjDi -qRYgZfZSL+x1P/54+xTFSwJAY1FxA/N3QPCXCjPh5YqFxAMQs2VVYTfg+t0MEcJD -dPMQD5JX6g5HKnHFg2mZtoXQrWmJSn7p8GJK8yNTopEErA== ------END RSA PRIVATE KEY----- - _end_of_pem_ - - TEST_KEY_RSA2048 = OpenSSL::PKey::RSA.new <<-_end_of_pem_ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAuV9ht9J7k4NBs38jOXvvTKY9gW8nLICSno5EETR1cuF7i4pN -s9I1QJGAFAX0BEO4KbzXmuOvfCpD3CU+Slp1enenfzq/t/e/1IRW0wkJUJUFQign -4CtrkJL+P07yx18UjyPlBXb81ApEmAB5mrJVSrWmqbjs07JbuS4QQGGXLc+Su96D -kYKmSNVjBiLxVVSpyZfAY3hD37d60uG+X8xdW5v68JkRFIhdGlb6JL8fllf/A/bl -NwdJOhVr9mESHhwGjwfSeTDPfd8ZLE027E5lyAVX9KZYcU00mOX+fdxOSnGqS/8J -DRh0EPHDL15RcJjV2J6vZjPb0rOYGDoMcH+94wIDAQABAoIBAAzsamqfYQAqwXTb -I0CJtGg6msUgU7HVkOM+9d3hM2L791oGHV6xBAdpXW2H8LgvZHJ8eOeSghR8+dgq -PIqAffo4x1Oma+FOg3A0fb0evyiACyrOk+EcBdbBeLo/LcvahBtqnDfiUMQTpy6V -seSoFCwuN91TSCeGIsDpRjbG1vxZgtx+uI+oH5+ytqJOmfCksRDCkMglGkzyfcl0 -Xc5CUhIJ0my53xijEUQl19rtWdMnNnnkdbG8PT3LZlOta5Do86BElzUYka0C6dUc -VsBDQ0Nup0P6rEQgy7tephHoRlUGTYamsajGJaAo1F3IQVIrRSuagi7+YpSpCqsW -wORqorkCgYEA7RdX6MDVrbw7LePnhyuaqTiMK+055/R1TqhB1JvvxJ1CXk2rDL6G -0TLHQ7oGofd5LYiemg4ZVtWdJe43BPZlVgT6lvL/iGo8JnrncB9Da6L7nrq/+Rvj -XGjf1qODCK+LmreZWEsaLPURIoR/Ewwxb9J2zd0CaMjeTwafJo1CZvcCgYEAyCgb -aqoWvUecX8VvARfuA593Lsi50t4MEArnOXXcd1RnXoZWhbx5rgO8/ATKfXr0BK/n -h2GF9PfKzHFm/4V6e82OL7gu/kLy2u9bXN74vOvWFL5NOrOKPM7Kg+9I131kNYOw -Ivnr/VtHE5s0dY7JChYWE1F3vArrOw3T00a4CXUCgYEA0SqY+dS2LvIzW4cHCe9k -IQqsT0yYm5TFsUEr4sA3xcPfe4cV8sZb9k/QEGYb1+SWWZ+AHPV3UW5fl8kTbSNb -v4ng8i8rVVQ0ANbJO9e5CUrepein2MPL0AkOATR8M7t7dGGpvYV0cFk8ZrFx0oId -U0PgYDotF/iueBWlbsOM430CgYEAqYI95dFyPI5/AiSkY5queeb8+mQH62sdcCCr -vd/w/CZA/K5sbAo4SoTj8dLk4evU6HtIa0DOP63y071eaxvRpTNqLUOgmLh+D6gS -Cc7TfLuFrD+WDBatBd5jZ+SoHccVrLR/4L8jeodo5FPW05A+9gnKXEXsTxY4LOUC -9bS4e1kCgYAqVXZh63JsMwoaxCYmQ66eJojKa47VNrOeIZDZvd2BPVf30glBOT41 -gBoDG3WMPZoQj9pb7uMcrnvs4APj2FIhMU8U15LcPAj59cD6S6rWnAxO8NFK7HQG -4Jxg3JNNf8ErQoCHb1B3oVdXJkmbJkARoDpBKmTCgKtP8ADYLmVPQw== ------END RSA PRIVATE KEY----- - _end_of_pem_ - - TEST_KEY_DSA256 = OpenSSL::PKey::DSA.new <<-_end_of_pem_ ------BEGIN DSA PRIVATE KEY----- -MIH3AgEAAkEAhk2libbY2a8y2Pt21+YPYGZeW6wzaW2yfj5oiClXro9XMR7XWLkE -9B7XxLNFCS2gmCCdMsMW1HulaHtLFQmB2wIVAM43JZrcgpu6ajZ01VkLc93gu/Ed -AkAOhujZrrKV5CzBKutKLb0GVyVWmdC7InoNSMZEeGU72rT96IjM59YzoqmD0pGM -3I1o4cGqg1D1DfM1rQlnN1eSAkBq6xXfEDwJ1mLNxF6q8Zm/ugFYWR5xcX/3wFiT -b4+EjHP/DbNh9Vm5wcfnDBJ1zKvrMEf2xqngYdrV/3CiGJeKAhRvL57QvJZcQGvn -ISNX5cMzFHRW3Q== ------END DSA PRIVATE KEY----- - _end_of_pem_ - - TEST_KEY_DSA512 = OpenSSL::PKey::DSA.new <<-_end_of_pem_ ------BEGIN DSA PRIVATE KEY----- -MIH4AgEAAkEA5lB4GvEwjrsMlGDqGsxrbqeFRh6o9OWt6FgTYiEEHaOYhkIxv0Ok -RZPDNwOG997mDjBnvDJ1i56OmS3MbTnovwIVAJgub/aDrSDB4DZGH7UyarcaGy6D -AkB9HdFw/3td8K4l1FZHv7TCZeJ3ZLb7dF3TWoGUP003RCqoji3/lHdKoVdTQNuR -S/m6DlCwhjRjiQ/lBRgCLCcaAkEAjN891JBjzpMj4bWgsACmMggFf57DS0Ti+5++ -Q1VB8qkJN7rA7/2HrCR3gTsWNb1YhAsnFsoeRscC+LxXoXi9OAIUBG98h4tilg6S -55jreJD3Se3slps= ------END DSA PRIVATE KEY----- - _end_of_pem_ - - module_function - - def issue_cert(dn, key, serial, not_before, not_after, extensions, - issuer, issuer_key, digest) - cert = OpenSSL::X509::Certificate.new - issuer = cert unless issuer - issuer_key = key unless issuer_key - cert.version = 2 - cert.serial = serial - cert.subject = dn - cert.issuer = issuer.subject - cert.public_key = key.public_key - cert.not_before = not_before - cert.not_after = not_after - ef = OpenSSL::X509::ExtensionFactory.new - ef.subject_certificate = cert - ef.issuer_certificate = issuer - extensions.each{|oid, value, critical| - cert.add_extension(ef.create_extension(oid, value, critical)) - } - cert.sign(issuer_key, digest) - cert - end - - def issue_crl(revoke_info, serial, lastup, nextup, extensions, - issuer, issuer_key, digest) - crl = OpenSSL::X509::CRL.new - crl.issuer = issuer.subject - crl.version = 1 - crl.last_update = lastup - crl.next_update = nextup - revoke_info.each{|rserial, time, reason_code| - revoked = OpenSSL::X509::Revoked.new - revoked.serial = rserial - revoked.time = time - enum = OpenSSL::ASN1::Enumerated(reason_code) - ext = OpenSSL::X509::Extension.new("CRLReason", enum) - revoked.add_extension(ext) - crl.add_revoked(revoked) - } - ef = OpenSSL::X509::ExtensionFactory.new - ef.issuer_certificate = issuer - ef.crl = crl - crlnum = OpenSSL::ASN1::Integer(serial) - crl.add_extension(OpenSSL::X509::Extension.new("crlNumber", crlnum)) - extensions.each{|oid, value, critical| - crl.add_extension(ef.create_extension(oid, value, critical)) - } - crl.sign(issuer_key, digest) - crl - end - - def get_subject_key_id(cert) - asn1_cert = OpenSSL::ASN1.decode(cert) - tbscert = asn1_cert.value[0] - pkinfo = tbscert.value[6] - publickey = pkinfo.value[1] - pkvalue = publickey.value - OpenSSL::Digest::SHA1.hexdigest(pkvalue).scan(/../).join(":").upcase - end -end |