mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
This commit is contained in:
parent
61ebfd3a34
commit
ad10cfeb52
2 changed files with 118 additions and 0 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue