1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Sat May 14 12:00:54 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>

* test/openssl/test_pkey_dsa.rb: Add basic tests and tests that 
	ensure new public key PEM encoding behavior and ensure backward 
	compatibility.
	[Ruby 1.9 - Bug #4422] [ruby-core:35328]
	* test/openssl/test_pkey_rsa.rb: Remove line with 'puts'.

previous revision: 31561



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
emboss 2011-05-14 03:14:33 +00:00
parent 4bf8c87101
commit 4ccb387f3b
3 changed files with 138 additions and 5 deletions

View file

@ -1,3 +1,11 @@
Sat May 14 12:12:54 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
* test/openssl/test_pkey_dsa.rb: Add basic tests and tests that
ensure new public key PEM encoding behavior and ensure backward
compatibility.
[Ruby 1.9 - Bug #4422] [ruby-core:35328]
* test/openssl/test_pkey_rsa.rb: Remove line with 'puts'.
Sat May 14 12:06:49 2011 Eric Hodel <drbrain@segment7.net> Sat May 14 12:06:49 2011 Eric Hodel <drbrain@segment7.net>
* lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by * lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by
@ -7,7 +15,7 @@ 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 * test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key
encoding behavior and also ensure backward compatibility. encoding behavior and also ensure backward compatibility.
[Ruby 1.9 - Bug #4421, Bug #4422] [ruby-core:35327,35328] [Ruby 1.9 - Bug #4421] [ruby-core:35327]
Sat May 14 09:50:10 2011 Eric Hodel <drbrain@segment7.net> Sat May 14 09:50:10 2011 Eric Hodel <drbrain@segment7.net>

View file

@ -0,0 +1,126 @@
require_relative 'utils'
require 'base64'
if defined?(OpenSSL)
class OpenSSL::TestPKeyDSA < Test::Unit::TestCase
def test_private
key = OpenSSL::PKey::DSA.new(256)
assert(key.private?)
key2 = OpenSSL::PKey::DSA.new(key.to_der)
assert(key2.private?)
key3 = key.public_key
assert(!key3.private?)
key4 = OpenSSL::PKey::DSA.new(key3.to_der)
assert(!key4.private?)
end
def test_new
key = OpenSSL::PKey::DSA.new 256
pem = key.public_key.to_pem
OpenSSL::PKey::DSA.new pem
assert_equal([], OpenSSL.errors)
end
def test_read_DSA_PUBKEY
p = 7188211954100152441468596248707152960171255279130004340103875772401008316444412091945435731597638374542374929457672178957081124632837356913990200866056699
q = 957032439192465935099784319494405376402293318491
g = 122928973717064636255205666162891733518376475981809749897454444301389338825906076467196186192907631719698166056821519884939865041993585844526937010746285
y = 1235756183583465414789073313502727057075641172514181938731172021825149551960029708596057102104063395063907739571546165975727369183495540798749742124846271
algo = OpenSSL::ASN1::ObjectId.new('DSA')
params = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Integer.new(p),
OpenSSL::ASN1::Integer.new(q),
OpenSSL::ASN1::Integer.new(g)])
algo_id = OpenSSL::ASN1::Sequence.new ([algo, params])
pub_key = OpenSSL::ASN1::Integer.new(y)
seq = OpenSSL::ASN1::Sequence.new([algo_id, OpenSSL::ASN1::BitString.new(pub_key.to_der)])
key = OpenSSL::PKey::DSA.new(seq.to_der)
assert(key.public?)
assert(!key.private?)
assert_equal(p, key.p)
assert_equal(q, key.q)
assert_equal(g, key.g)
assert_equal(y, key.pub_key)
assert_equal(nil, key.priv_key)
end
def test_read_DSAPublicKey_pem
p = 12260055936871293565827712385212529106400444521449663325576634579961635627321079536132296996623400607469624537382977152381984332395192110731059176842635699
q = 979494906553787301107832405790107343409973851677
g = 3731695366899846297271147240305742456317979984190506040697507048095553842519347835107669437969086119948785140453492839427038591924536131566350847469993845
y = 10505239074982761504240823422422813362721498896040719759460296306305851824586095328615844661273887569281276387605297130014564808567159023649684010036304695
pem = <<-EOF
-----BEGIN DSA PUBLIC KEY-----
MIHfAkEAyJSJ+g+P/knVcgDwwTzC7Pwg/pWs2EMd/r+lYlXhNfzg0biuXRul8VR4
VUC/phySExY0PdcqItkR/xYAYNMbNwJBAOoV57X0FxKO/PrNa/MkoWzkCKV/hzhE
p0zbFdsicw+hIjJ7S6Sd/FlDlo89HQZ2FuvWJ6wGLM1j00r39+F2qbMCFQCrkhIX
SG+is37hz1IaBeEudjB2HQJAR0AloavBvtsng8obsjLb7EKnB+pSeHr/BdIQ3VH7
fWLOqqkzFeRrYMDzUpl36XktY6Yq8EJYlW9pCMmBVNy/dQ==
-----END DSA PUBLIC KEY-----
EOF
key = OpenSSL::PKey::DSA.new(pem)
assert(key.public?)
assert(!key.private?)
assert_equal(p, key.p)
assert_equal(q, key.q)
assert_equal(g, key.g)
assert_equal(y, key.pub_key)
assert_equal(nil, key.priv_key)
end
def test_read_DSA_PUBKEY_pem
p = 12260055936871293565827712385212529106400444521449663325576634579961635627321079536132296996623400607469624537382977152381984332395192110731059176842635699
q = 979494906553787301107832405790107343409973851677
g = 3731695366899846297271147240305742456317979984190506040697507048095553842519347835107669437969086119948785140453492839427038591924536131566350847469993845
y = 10505239074982761504240823422422813362721498896040719759460296306305851824586095328615844661273887569281276387605297130014564808567159023649684010036304695
pem = <<-EOF
-----BEGIN PUBLIC KEY-----
MIHxMIGoBgcqhkjOOAQBMIGcAkEA6hXntfQXEo78+s1r8yShbOQIpX+HOESnTNsV
2yJzD6EiMntLpJ38WUOWjz0dBnYW69YnrAYszWPTSvf34XapswIVAKuSEhdIb6Kz
fuHPUhoF4S52MHYdAkBHQCWhq8G+2yeDyhuyMtvsQqcH6lJ4ev8F0hDdUft9Ys6q
qTMV5GtgwPNSmXfpeS1jpirwQliVb2kIyYFU3L91A0QAAkEAyJSJ+g+P/knVcgDw
wTzC7Pwg/pWs2EMd/r+lYlXhNfzg0biuXRul8VR4VUC/phySExY0PdcqItkR/xYA
YNMbNw==
-----END PUBLIC KEY-----
EOF
key = OpenSSL::PKey::DSA.new(pem)
assert(key.public?)
assert(!key.private?)
assert_equal(p, key.p)
assert_equal(q, key.q)
assert_equal(g, key.g)
assert_equal(y, key.pub_key)
assert_equal(nil, key.priv_key)
end
def test_export_format_is_DSA_PUBKEY_pem
key = OpenSSL::PKey::DSA.new(256)
pem = key.public_key.to_pem
pem.gsub!(/^-+(\w|\s)+-+$/, "") # eliminate --------BEGIN...-------
asn1 = OpenSSL::ASN1.decode(Base64.decode64(pem))
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('DSA', algo_id[0].value)
assert_equal(OpenSSL::ASN1::SEQUENCE, algo_id[1].tag)
assert_equal(3, algo_id[1].value.size)
params = algo_id[1].value
assert_equal(OpenSSL::ASN1::INTEGER, params[0].tag)
assert_equal(key.p, params[0].value)
assert_equal(OpenSSL::ASN1::INTEGER, params[1].tag)
assert_equal(key.q, params[1].value)
assert_equal(OpenSSL::ASN1::INTEGER, params[2].tag)
assert_equal(key.g, params[2].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::INTEGER, pub_key.tag)
assert_equal(key.pub_key, pub_key.value)
end
end
end

View file

@ -65,9 +65,9 @@ class OpenSSL::TestPKeyRSA < Test::Unit::TestCase
def test_read_RSA_PUBKEY def test_read_RSA_PUBKEY
modulus = 10664264882656732240315063514678024569492171560814833397008094754351396057398262071307709191731289492697968568138092052265293364132872019762410446076526351 modulus = 10664264882656732240315063514678024569492171560814833397008094754351396057398262071307709191731289492697968568138092052265293364132872019762410446076526351
exponent = 65537 exponent = 65537
algo_id = OpenSSL::ASN1::ObjectId.new('rsaEncryption') algo = OpenSSL::ASN1::ObjectId.new('rsaEncryption')
null_params = OpenSSL::ASN1::Null.new(nil) null_params = OpenSSL::ASN1::Null.new(nil)
algo_id = OpenSSL::ASN1::Sequence.new ([algo_id, null_params]) algo_id = OpenSSL::ASN1::Sequence.new ([algo, null_params])
pub_key = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Integer.new(modulus), OpenSSL::ASN1::Integer.new(exponent)]) 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)]) seq = OpenSSL::ASN1::Sequence.new([algo_id, OpenSSL::ASN1::BitString.new(pub_key.to_der)])
key = OpenSSL::PKey::RSA.new(seq.to_der) key = OpenSSL::PKey::RSA.new(seq.to_der)
@ -128,8 +128,7 @@ AwEAAQ==
def test_export_format_is_RSA_PUBKEY_pem def test_export_format_is_RSA_PUBKEY_pem
key = OpenSSL::PKey::RSA.new(512) key = OpenSSL::PKey::RSA.new(512)
pem = key.public_key.to_pem pem = key.public_key.to_pem
pem.gsub!(/^-*(\w|\s)+-*$/, "") # eliminate --------BEGIN...------- pem.gsub!(/^-+(\w|\s)+-+$/, "") # eliminate --------BEGIN...-------
puts pem
asn1 = OpenSSL::ASN1.decode(Base64.decode64(pem)) asn1 = OpenSSL::ASN1.decode(Base64.decode64(pem))
check_PUBKEY(asn1, key) check_PUBKEY(asn1, key)
end end