[前][次][番号順一覧][スレッド一覧]

ruby-changes:19520

From: emboss <ko1@a...>
Date: Sat, 14 May 2011 10:34:05 +0900 (JST)
Subject: [ruby-changes:19520] emboss:r31560 (trunk): * test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key

emboss	2011-05-14 10:33:58 +0900 (Sat, 14 May 2011)

  New Revision: 31560

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31560

  Log:
    * 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

  Modified files:
    trunk/ChangeLog
    trunk/test/openssl/test_pkey_rsa.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31559)
+++ ChangeLog	(revision 31560)
@@ -1,3 +1,9 @@
+Sat May 14 10:32:36 2011  Martin Bosslet  <Martin.Bosslet@g...>
+
+	* 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@s...>
 
 	* lib/yaml/dbm.rb:  Add documentation.  Patch by Justin Collins.
Index: test/openssl/test_pkey_rsa.rb
===================================================================
--- test/openssl/test_pkey_rsa.rb	(revision 31559)
+++ test/openssl/test_pkey_rsa.rb	(revision 31560)
@@ -1,4 +1,5 @@
 require_relative 'utils'
+require 'base64'
 
 if defined?(OpenSSL)
 
@@ -46,6 +47,117 @@
     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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]