@@ -189,6 +189,57 @@ def test_read_private_key_with_password
189
189
assert key . is_a? ( OpenSSL ::PKey ::RSA )
190
190
end
191
191
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
+
192
243
def test_RSAPrivateKey_encrypted
193
244
rsa1024 = Fixtures . pkey ( "rsa1024" )
194
245
# key = abcdef
0 commit comments