summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremboss <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-14 01:33:58 +0000
committeremboss <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-14 01:33:58 +0000
commitad10cfeb526151300f0ab141d0b4b5c85576033d (patch)
treee34d4ee6047cca19741d50fd6b8351214f0e73af
parent61ebfd3a3496d619b18895b4c1f29c8c5d7c291d (diff)
Sat May 14 10:32:36 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
* test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key encoding behavior and also ensure backward compatibility. [Ruby 1.9 - Bug #4421, Bug #4422] [ruby-core:35327,35328] previous revision: 31559 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--test/openssl/test_pkey_rsa.rb112
2 files changed, 118 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f2859729f..1791e90c6d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat May 14 10:32:36 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key
+ encoding behavior and also ensure backward compatibility.
+ [Ruby 1.9 - Bug #4421, Bug #4422] [ruby-core:35327,35328]
+
Sat May 14 09:50:10 2011 Eric Hodel <drbrain@segment7.net>
* lib/yaml/dbm.rb: Add documentation. Patch by Justin Collins.
diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb
index f42748ed22..9c9b1dd1a6 100644
--- a/test/openssl/test_pkey_rsa.rb
+++ b/test/openssl/test_pkey_rsa.rb
@@ -1,4 +1,5 @@
require_relative 'utils'
+require 'base64'
if defined?(OpenSSL)
@@ -46,6 +47,117 @@ class OpenSSL::TestPKeyRSA < Test::Unit::TestCase
OpenSSL::PKey::RSA.new pem
assert_equal([], OpenSSL.errors)
end
+
+ def test_read_RSAPublicKey
+ modulus = 10664264882656732240315063514678024569492171560814833397008094754351396057398262071307709191731289492697968568138092052265293364132872019762410446076526351
+ exponent = 65537
+ seq = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Integer.new(modulus), OpenSSL::ASN1::Integer.new(exponent)])
+ key = OpenSSL::PKey::RSA.new(seq.to_der)
+ assert(key.public?)
+ assert(!key.private?)
+ assert_equal(modulus, key.n)
+ assert_equal(exponent, key.e)
+ assert_equal(nil, key.d)
+ assert_equal(nil, key.p)
+ assert_equal(nil, key.q)
+ end
+
+ def test_read_RSA_PUBKEY
+ modulus = 10664264882656732240315063514678024569492171560814833397008094754351396057398262071307709191731289492697968568138092052265293364132872019762410446076526351
+ exponent = 65537
+ algo_id = OpenSSL::ASN1::ObjectId.new('rsaEncryption')
+ null_params = OpenSSL::ASN1::Null.new(nil)
+ algo_id = OpenSSL::ASN1::Sequence.new ([algo_id, null_params])
+ pub_key = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Integer.new(modulus), OpenSSL::ASN1::Integer.new(exponent)])
+ seq = OpenSSL::ASN1::Sequence.new([algo_id, OpenSSL::ASN1::BitString.new(pub_key.to_der)])
+ key = OpenSSL::PKey::RSA.new(seq.to_der)
+ assert(key.public?)
+ assert(!key.private?)
+ assert_equal(modulus, key.n)
+ assert_equal(exponent, key.e)
+ assert_equal(nil, key.d)
+ assert_equal(nil, key.p)
+ assert_equal(nil, key.q)
+ end
+
+ def test_read_RSAPublicKey_pem
+ modulus = 9416340886363418692990906464787534854462163316648195510702927337693641649864839352187127240942127674615733815606532506566068276485089353644309497938966061
+ exponent = 65537
+ pem = <<-EOF
+-----BEGIN RSA PUBLIC KEY-----
+MEgCQQCzyh2RIZK62E2PbTWqUljD+K23XR9AGBKNtXjal6WD2yRGcLqzPJLNCa60
+AudJR1JobbIbDJrQu6AXnWh5k/YtAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ EOF
+ key = OpenSSL::PKey::RSA.new(pem)
+ assert(key.public?)
+ assert(!key.private?)
+ assert_equal(modulus, key.n)
+ assert_equal(exponent, key.e)
+ assert_equal(nil, key.d)
+ assert_equal(nil, key.p)
+ assert_equal(nil, key.q)
+ end
+
+ def test_read_RSA_PUBKEY_pem
+ modulus = 9416340886363418692990906464787534854462163316648195510702927337693641649864839352187127240942127674615733815606532506566068276485089353644309497938966061
+ exponent = 65537
+ pem = <<-EOF
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALPKHZEhkrrYTY9tNapSWMP4rbdd
+H0AYEo21eNqXpYPbJEZwurM8ks0JrrQC50lHUmhtshsMmtC7oBedaHmT9i0C
+AwEAAQ==
+-----END PUBLIC KEY-----
+ EOF
+ key = OpenSSL::PKey::RSA.new(pem)
+ assert(key.public?)
+ assert(!key.private?)
+ assert_equal(modulus, key.n)
+ assert_equal(exponent, key.e)
+ assert_equal(nil, key.d)
+ assert_equal(nil, key.p)
+ assert_equal(nil, key.q)
+ end
+
+ def test_export_format_is_RSA_PUBKEY
+ key = OpenSSL::PKey::RSA.new(512)
+ asn1 = OpenSSL::ASN1.decode(key.public_key.to_der)
+ check_PUBKEY(asn1, key)
+ end
+
+ def test_export_format_is_RSA_PUBKEY_pem
+ key = OpenSSL::PKey::RSA.new(512)
+ pem = key.public_key.to_pem
+ pem.gsub!(/^-*(\w|\s)+-*$/, "") # eliminate --------BEGIN...-------
+ puts pem
+ asn1 = OpenSSL::ASN1.decode(Base64.decode64(pem))
+ check_PUBKEY(asn1, key)
+ end
+
+ private
+
+ def check_PUBKEY(asn1, key)
+ assert_equal(OpenSSL::ASN1::SEQUENCE, asn1.tag)
+ assert_equal(2, asn1.value.size)
+ seq = asn1.value
+ assert_equal(OpenSSL::ASN1::SEQUENCE, seq[0].tag)
+ assert_equal(2, seq[0].value.size)
+ algo_id = seq[0].value
+ assert_equal(OpenSSL::ASN1::OBJECT, algo_id[0].tag)
+ assert_equal('rsaEncryption', algo_id[0].value)
+ assert_equal(OpenSSL::ASN1::NULL, algo_id[1].tag)
+ assert_equal(nil, algo_id[1].value)
+ assert_equal(OpenSSL::ASN1::BIT_STRING, seq[1].tag)
+ assert_equal(0, seq[1].unused_bits)
+ pub_key = OpenSSL::ASN1.decode(seq[1].value)
+ assert_equal(OpenSSL::ASN1::SEQUENCE, pub_key.tag)
+ assert_equal(2, pub_key.value.size)
+ assert_equal(OpenSSL::ASN1::INTEGER, pub_key.value[0].tag)
+ assert_equal(key.n, pub_key.value[0].value)
+ assert_equal(OpenSSL::ASN1::INTEGER, pub_key.value[1].tag)
+ assert_equal(key.e, pub_key.value[1].value)
+ end
+
end
end