@@ -189,6 +189,57 @@ def test_read_private_key_with_password
189189 assert key . is_a? ( OpenSSL ::PKey ::RSA )
190190 end
191191
192+ def test_RSAPrivateKey
193+ rsa1024 = Fixtures . pkey ( "rsa1024" )
194+ assert_not_equal nil , rsa1024 . dmp1
195+ assert_not_equal nil , rsa1024 . dmq1
196+ assert_not_equal nil , rsa1024 . iqmp
197+
198+ asn1 = OpenSSL ::ASN1 ::Sequence ( [
199+ OpenSSL ::ASN1 ::Integer ( 0 ) ,
200+ OpenSSL ::ASN1 ::Integer ( rsa1024 . n ) ,
201+ OpenSSL ::ASN1 ::Integer ( rsa1024 . e ) ,
202+ OpenSSL ::ASN1 ::Integer ( rsa1024 . d ) ,
203+ OpenSSL ::ASN1 ::Integer ( rsa1024 . p ) ,
204+ OpenSSL ::ASN1 ::Integer ( rsa1024 . q ) ,
205+ OpenSSL ::ASN1 ::Integer ( rsa1024 . dmp1 ) , # nil???
206+ OpenSSL ::ASN1 ::Integer ( rsa1024 . dmq1 ) ,
207+ OpenSSL ::ASN1 ::Integer ( rsa1024 . iqmp )
208+ ] )
209+ key = OpenSSL ::PKey ::RSA . new ( asn1 . to_der )
210+ assert_predicate key , :private?
211+ assert_same_rsa rsa1024 , key
212+
213+ pem = <<~EOF
214+ -----BEGIN RSA PRIVATE KEY-----
215+ MIICXgIBAAKBgQDLwsSw1ECnPtT+PkOgHhcGA71nwC2/nL85VBGnRqDxOqjVh7Cx
216+ aKPERYHsk4BPCkE3brtThPWc9kjHEQQ7uf9Y1rbCz0layNqHyywQEVLFmp1cpIt/
217+ Q3geLv8ZD9pihowKJDyMDiN6ArYUmZczvW4976MU3+l54E6lF/JfFEU5hwIDAQAB
218+ AoGBAKSl/MQarye1yOysqX6P8fDFQt68VvtXkNmlSiKOGuzyho0M+UVSFcs6k1L0
219+ maDE25AMZUiGzuWHyaU55d7RXDgeskDMakD1v6ZejYtxJkSXbETOTLDwUWTn618T
220+ gnb17tU1jktUtU67xK/08i/XodlgnQhs6VoHTuCh3Hu77O6RAkEA7+gxqBuZR572
221+ 74/akiW/SuXm0SXPEviyO1MuSRwtI87B02D0qgV8D1UHRm4AhMnJ8MCs1809kMQE
222+ JiQUCrp9mQJBANlt2ngBO14us6NnhuAseFDTBzCHXwUUu1YKHpMMmxpnGqaldGgX
223+ sOZB3lgJsT9VlGf3YGYdkLTNVbogQKlKpB8CQQDiSwkb4vyQfDe8/NpU5Not0fII
224+ 8jsDUCb+opWUTMmfbxWRR3FBNu8wnym/m19N4fFj8LqYzHX4KY0oVPu6qvJxAkEA
225+ wa5snNekFcqONLIE4G5cosrIrb74sqL8GbGb+KuTAprzj5z1K8Bm0UW9lTjVDjDi
226+ qRYgZfZSL+x1P/54+xTFSwJAY1FxA/N3QPCXCjPh5YqFxAMQs2VVYTfg+t0MEcJD
227+ dPMQD5JX6g5HKnHFg2mZtoXQrWmJSn7p8GJK8yNTopEErA==
228+ -----END RSA PRIVATE KEY-----
229+ EOF
230+ key = OpenSSL ::PKey ::RSA . new ( pem )
231+ assert_same_rsa rsa1024 , key
232+
233+ assert_equal asn1 . to_der , rsa1024 . to_der
234+ assert_equal pem , rsa1024 . export
235+
236+ # Unknown PEM prepended
237+ cert = issue_cert ( OpenSSL ::X509 ::Name . new ( [ [ "CN" , "nobody" ] ] ) , rsa1024 , 1 , [ ] , nil , nil )
238+ str = cert . to_text + cert . to_pem + rsa1024 . to_pem
239+ key = OpenSSL ::PKey ::RSA . new ( str )
240+ assert_same_rsa rsa1024 , key
241+ end
242+
192243 def test_RSAPrivateKey_encrypted
193244 rsa1024 = Fixtures . pkey ( "rsa1024" )
194245 # key = abcdef
0 commit comments