jruby-openssl 0.7.5.dev → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. data/History.txt +44 -14
  2. data/Manifest.txt +135 -80
  3. data/Rakefile +14 -6
  4. data/lib/{openssl.rb → 1.8/openssl.rb} +2 -11
  5. data/lib/{openssl → 1.8/openssl}/bn.rb +2 -2
  6. data/lib/{openssl → 1.8/openssl}/buffering.rb +3 -1
  7. data/lib/{openssl → 1.8/openssl}/cipher.rb +0 -0
  8. data/lib/{openssl → 1.8/openssl}/config.rb +1 -1
  9. data/lib/{openssl → 1.8/openssl}/digest.rb +2 -2
  10. data/lib/{openssl → 1.8/openssl}/pkcs7.rb +0 -0
  11. data/lib/{openssl/ssl.rb → 1.8/openssl/ssl-internal.rb} +2 -2
  12. data/lib/1.8/openssl/ssl.rb +1 -0
  13. data/lib/{openssl/x509.rb → 1.8/openssl/x509-internal.rb} +8 -9
  14. data/lib/1.8/openssl/x509.rb +1 -0
  15. data/lib/1.9/openssl.rb +22 -0
  16. data/lib/1.9/openssl/bn.rb +35 -0
  17. data/lib/1.9/openssl/buffering.rb +448 -0
  18. data/lib/1.9/openssl/cipher.rb +65 -0
  19. data/lib/1.9/openssl/config.rb +313 -0
  20. data/lib/1.9/openssl/digest.rb +72 -0
  21. data/lib/1.9/openssl/ssl-internal.rb +177 -0
  22. data/lib/1.9/openssl/ssl.rb +2 -0
  23. data/lib/1.9/openssl/x509-internal.rb +158 -0
  24. data/lib/1.9/openssl/x509.rb +2 -0
  25. data/lib/{jopenssl.jar → shared/jopenssl.jar} +0 -0
  26. data/lib/{jopenssl → shared/jopenssl}/version.rb +1 -1
  27. data/lib/shared/openssl.rb +18 -0
  28. data/lib/{openssl → shared/openssl}/dummy.rb +0 -0
  29. data/lib/{openssl → shared/openssl}/dummyssl.rb +0 -0
  30. data/lib/shared/openssl/ssl.rb +1 -0
  31. data/lib/shared/openssl/x509.rb +1 -0
  32. data/test/{openssl → 1.8}/ssl_server.rb +0 -0
  33. data/test/{openssl → 1.8}/test_asn1.rb +15 -0
  34. data/test/{openssl → 1.8}/test_cipher.rb +0 -0
  35. data/test/{openssl → 1.8}/test_config.rb +0 -0
  36. data/test/{openssl → 1.8}/test_digest.rb +0 -0
  37. data/test/{openssl → 1.8}/test_ec.rb +0 -0
  38. data/test/{openssl → 1.8}/test_hmac.rb +0 -0
  39. data/test/{openssl → 1.8}/test_ns_spki.rb +0 -0
  40. data/test/{openssl → 1.8}/test_pair.rb +10 -2
  41. data/test/{openssl → 1.8}/test_pkcs7.rb +0 -0
  42. data/test/{openssl → 1.8}/test_pkey_rsa.rb +0 -0
  43. data/test/{openssl → 1.8}/test_ssl.rb +17 -20
  44. data/test/{openssl → 1.8}/test_x509cert.rb +0 -0
  45. data/test/{openssl → 1.8}/test_x509crl.rb +0 -0
  46. data/test/{openssl → 1.8}/test_x509ext.rb +0 -0
  47. data/test/{openssl → 1.8}/test_x509name.rb +0 -0
  48. data/test/{openssl → 1.8}/test_x509req.rb +0 -0
  49. data/test/{openssl → 1.8}/test_x509store.rb +0 -0
  50. data/test/{openssl → 1.8}/utils.rb +0 -0
  51. data/test/1.9/ssl_server.rb +81 -0
  52. data/test/1.9/test_asn1.rb +589 -0
  53. data/test/1.9/test_bn.rb +23 -0
  54. data/test/1.9/test_buffering.rb +88 -0
  55. data/test/1.9/test_cipher.rb +107 -0
  56. data/test/1.9/test_config.rb +288 -0
  57. data/test/1.9/test_digest.rb +118 -0
  58. data/test/1.9/test_engine.rb +15 -0
  59. data/test/1.9/test_hmac.rb +32 -0
  60. data/test/1.9/test_ns_spki.rb +50 -0
  61. data/test/1.9/test_ocsp.rb +47 -0
  62. data/test/1.9/test_pair.rb +257 -0
  63. data/test/1.9/test_pkcs12.rb +209 -0
  64. data/test/1.9/test_pkcs7.rb +151 -0
  65. data/test/1.9/test_pkey_dh.rb +72 -0
  66. data/test/1.9/test_pkey_dsa.rb +224 -0
  67. data/test/1.9/test_pkey_ec.rb +182 -0
  68. data/test/1.9/test_pkey_rsa.rb +244 -0
  69. data/test/1.9/test_ssl.rb +455 -0
  70. data/test/1.9/test_ssl_session.rb +327 -0
  71. data/test/1.9/test_x509cert.rb +217 -0
  72. data/test/1.9/test_x509crl.rb +221 -0
  73. data/test/1.9/test_x509ext.rb +69 -0
  74. data/test/1.9/test_x509name.rb +296 -0
  75. data/test/1.9/test_x509req.rb +150 -0
  76. data/test/1.9/test_x509store.rb +229 -0
  77. data/test/1.9/utils.rb +304 -0
  78. data/test/fixture/purpose/ca/ca_config.rb +1 -1
  79. data/test/fixture/purpose/ca/gen_cert.rb +128 -0
  80. data/test/fixture/purpose/ca/newcerts/4_cert.pem +19 -0
  81. data/test/fixture/purpose/ca/serial +1 -1
  82. data/test/fixture/purpose/sslserver_no_dsig_in_keyUsage.pem +19 -0
  83. data/test/ruby/envutil.rb +208 -0
  84. data/test/ruby/ut_eof.rb +128 -0
  85. data/test/test_java.rb +1 -1
  86. data/test/test_openssl.rb +1 -1
  87. data/test/test_pkcs7.rb +16 -0
  88. data/test/test_pkey_dsa.rb +180 -0
  89. data/test/test_pkey_rsa.rb +298 -0
  90. data/test/test_ssl.rb +1 -1
  91. data/test/test_x509store.rb +8 -0
  92. metadata +121 -75
  93. data/test/test_pkey.rb +0 -204
@@ -6,7 +6,7 @@ require 'mocha'
6
6
  if defined?(JRUBY_VERSION)
7
7
  require "java"
8
8
  $CLASSPATH << 'pkg/classes'
9
- $CLASSPATH << 'build_lib/bcprov-jdk15-144.jar'
9
+ $CLASSPATH << Dir["build_lib/bcprov-*"].first
10
10
 
11
11
  module PKCS7Test
12
12
  module ASN1
@@ -1,4 +1,4 @@
1
- files = File.join(File.dirname(__FILE__), 'openssl', 'test_*.rb')
1
+ files = File.join(File.dirname(__FILE__), (RUBY_VERSION >= '1.9.0' ? '1.9' : '1.8'), 'test_*.rb')
2
2
  Dir.glob(files).sort.each do |tc|
3
3
  require tc
4
4
  end
@@ -37,4 +37,20 @@ END
37
37
  p7 = OpenSSL::PKCS7.encrypt(certs, msg, cipher, OpenSSL::PKCS7::BINARY)
38
38
  assert_equal(msg, p7.data)
39
39
  end
40
+
41
+ EMPTY_PEM = <<END
42
+ -----BEGIN PKCS7-----
43
+ MAMGAQA=
44
+ -----END PKCS7-----
45
+ END
46
+
47
+ def test_empty_pkcs7
48
+ p7 = OpenSSL::PKCS7.new
49
+ assert_equal(EMPTY_PEM, p7.to_pem)
50
+ end
51
+
52
+ def test_load_empty_pkcs7
53
+ p7 = OpenSSL::PKCS7.new(EMPTY_PEM)
54
+ assert_equal(EMPTY_PEM, p7.to_pem)
55
+ end
40
56
  end
@@ -0,0 +1,180 @@
1
+ require "openssl"
2
+ require "test/unit"
3
+
4
+ class TestPKeyDSA < Test::Unit::TestCase
5
+ def test_can_generate_dsa_key
6
+ OpenSSL::PKey::DSA.generate(512)
7
+ end
8
+
9
+ # jruby-openssl/0.6 causes NPE
10
+ def test_generate_pkey_dsa_empty
11
+ assert_nothing_raised do
12
+ OpenSSL::PKey::DSA.new.to_pem
13
+ end
14
+ end
15
+
16
+ # jruby-openssl/0.6 ignores fixnum arg => to_pem returned 65 bytes with 'MAA='
17
+ def test_generate_pkey_dsa_length
18
+ assert(OpenSSL::PKey::DSA.new(512).to_pem.size > 100)
19
+ end
20
+
21
+ # jruby-openssl/0.6 returns nil for DSA#to_text
22
+ def test_generate_pkey_dsa_to_text
23
+ assert_match(
24
+ /Private-Key: \(512 bit\)/,
25
+ OpenSSL::PKey::DSA.new(512).to_text
26
+ )
27
+ end
28
+
29
+ def test_load_pkey_dsa
30
+ pkey = OpenSSL::PKey::DSA.new(512)
31
+ assert_equal(pkey.to_pem, OpenSSL::PKey::DSA.new(pkey.to_pem).to_pem)
32
+ end
33
+
34
+ def test_load_pkey_dsa_public
35
+ pkey = OpenSSL::PKey::DSA.new(512).public_key
36
+ assert_equal(pkey.to_pem, OpenSSL::PKey::DSA.new(pkey.to_pem).to_pem)
37
+ end
38
+
39
+ def test_load_pkey_dsa_der
40
+ pkey = OpenSSL::PKey::DSA.new(512)
41
+ assert_equal(pkey.to_der, OpenSSL::PKey::DSA.new(pkey.to_der).to_der)
42
+ end
43
+
44
+ def test_load_pkey_dsa_public_der
45
+ pkey = OpenSSL::PKey::DSA.new(512).public_key
46
+ assert_equal(pkey.to_der, OpenSSL::PKey::DSA.new(pkey.to_der).to_der)
47
+ end
48
+
49
+ def test_load_pkey_dsa_net_ssh
50
+ blob = "0\201\367\002\001\000\002A\000\203\316/\037u\272&J\265\003l3\315d\324h\372{\t8\252#\331_\026\006\035\270\266\255\343\353Z\302\276\335\336\306\220\375\202L\244\244J\206>\346\b\315\211\302L\246x\247u\a\376\366\345\302\016#\002\025\000\244\274\302\221Og\275/\302+\356\346\360\024\373wI\2573\361\002@\027\215\270r*\f\213\350C\245\021:\350 \006\\\376\345\022`\210b\262\3643\023XLKS\320\370\002\276\347A\nU\204\276\324\256`=\026\240\330\306J\316V\213\024\e\030\215\355\006\037q\337\356ln\002@\017\257\034\f\260\333'S\271#\237\230E\321\312\027\021\226\331\251Vj\220\305\316\036\v\266+\000\230\270\177B\003?t\a\305]e\344\261\334\023\253\323\251\223M\2175)a(\004\"lI8\312\303\307\a\002\024_\aznW\345\343\203V\326\246ua\203\376\201o\350\302\002"
51
+ pkey = OpenSSL::PKey::DSA.new(blob)
52
+ assert_equal(blob, pkey.to_der)
53
+ end
54
+
55
+ def test_load_dsa_des_encrypted
56
+ password = 'pass'
57
+ pkey = OpenSSL::PKey::DSA.generate(512)
58
+ cipher = OpenSSL::Cipher::Cipher.new('des-cbc')
59
+ pem = pkey.to_pem(cipher, password)
60
+ assert_equal(pkey.g, OpenSSL::PKey::DSA.new(pem, password).g)
61
+ end
62
+
63
+ def test_load_dsa_3des_encrypted
64
+ password = 'pass'
65
+ pkey = OpenSSL::PKey::DSA.generate(512)
66
+ cipher = OpenSSL::Cipher::Cipher.new('des-ede3-cbc')
67
+ pem = pkey.to_pem(cipher, password)
68
+ assert_equal(pkey.g, OpenSSL::PKey::DSA.new(pem, password).g)
69
+ end
70
+
71
+ def test_load_dsa_aes_encrypted
72
+ password = 'pass'
73
+ pkey = OpenSSL::PKey::DSA.generate(512)
74
+ cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
75
+ pem = pkey.to_pem(cipher, password)
76
+ assert_equal(pkey.g, OpenSSL::PKey::DSA.new(pem, password).g)
77
+ end
78
+
79
+ CRUBY_DES_DSA_PEM = <<END
80
+ -----BEGIN DSA PRIVATE KEY-----
81
+ Proc-Type: 4,ENCRYPTED
82
+ DEK-Info: DES-CBC,55669A6757B8752A
83
+
84
+ 0DI84kfjNWOmckdBhvraem9LZqx++JRAD0fUB7J2ymLLMKS2wFq32AA3XD6K9kNP
85
+ Ud1idm0UMtJjxFFtT02ue7USlaSHIb+INbf4m5N/I54cOoMXXdOEFeecWlmDhfMP
86
+ zSA/6zM1L0iUKXaR30yRtslwZpGi3ZlriLkL6HbZFjBRUk93AL01oVHHIW3OPqLq
87
+ Mql0jpr9VDLi1OjkIbrRilZKHTx/C7DCeBfwhPS3KUhkyGTqQzTwa6TpA5fiL0vy
88
+ OXwDr9GqZCUq5sk3Psu+2yrI+dbzUFh+va+0p2EzVnOb7p6oyIhXTyyeqZVy+KRz
89
+ qK2rRxrZmQv9hJ59G1kJ/A==
90
+ -----END DSA PRIVATE KEY-----
91
+ END
92
+
93
+ JRUBY_DES_DSA_PEM = <<END
94
+ -----BEGIN DSA PRIVATE KEY-----
95
+ Proc-Type: 4,ENCRYPTED
96
+ DEK-Info: DES-CBC,06b4e0b42bf90db9
97
+
98
+ mroGVjL7pb1BSJDtaksk3If8XidwLgv0DJsQcmwG8gc55eBxF65TDmAFZlc1vAp8
99
+ YlkQx84ZCWufiTlWzeZR/giEPeps0nbzkaNN4tWOEN3ILF7TKfaqFdtJgEwLXMJ8
100
+ 3L5jLZDsESmXpGY51RGp7LXYENoS1WwnJ+ke9kBty/IpFVUYyRtRZ2wpoFqWKfjV
101
+ rAlYqJLme+PQL1SXoPl3HOMr7NcjaEr9yYeq8mPCAg8YEW1ckyH0Z6j9ZK0spdtM
102
+ Cam9mftFK1gC4wqZbCSM3bRCrqiVfMr8uWIIZVpBwm1skYh8+yLlG1m0xhTcmMEq
103
+ Vo/ZKPN3/eLMl2nx5Td8ew==
104
+ -----END DSA PRIVATE KEY-----
105
+ END
106
+
107
+ CRUBY_3DES_DSA_PEM = <<END
108
+ -----BEGIN DSA PRIVATE KEY-----
109
+ Proc-Type: 4,ENCRYPTED
110
+ DEK-Info: DES-EDE3-CBC,75267DEE9DB19A15
111
+
112
+ rWX5EyFJ4n64oHadHhSKmW/wJWTeoA5K/CxdlAzh9sGzNtbJB1qevd7iV3HouQiZ
113
+ iGeA0b8tJWI8NJZFjYsQyNZgFemnpQ/Nz0kYXR/z0TpJzMHepyDn+3n7WBupRM+J
114
+ aEmgwSJSiwEDYDInscdIdTNW/zfXt8+wKf72rttV8ocTAHkIbBew1YFQK+hM2OZ5
115
+ MubNrFaiSwTJisGU0Vc5sAcaq60ZyfI730LN1QSA9FRWn/O8od3O+Ri7w8K2qRXV
116
+ R/z33GsXqt1dkaQVwH4yFUaUect/fgXfuijZaJrBY7ZT9oBPxsBrAxVIATf2bfQY
117
+ Vk30SWL9mazMmDcgjD32hg==
118
+ -----END DSA PRIVATE KEY-----
119
+ END
120
+
121
+ JRUBY_3DES_DSA_PEM = <<END
122
+ -----BEGIN DSA PRIVATE KEY-----
123
+ Proc-Type: 4,ENCRYPTED
124
+ DEK-Info: DES-EDE3-CBC,d795fb005ae84cd7
125
+
126
+ iSSWTjX84CqfaBGlds7NNBDNaAIvnbv6WI8uh2Mv4KJ5PLvpAAb2bxQUNLCAHlvP
127
+ gqWdUbNvC9IVGNfE9exYdW/1bevp9wjcjv6dK+1dH9H+WxFqZtnsuH0fOw5EWrXY
128
+ +yB0SQQo44UVqy/w+2SbYrYEQ/MAA4ebYqd8ubdi3qFoSjfuUnh/vdAakePqM82a
129
+ Vb4w35j7ihXr/RrtbP+bCW5rVHPUCKOvBy9XD0UG8wtEQH0wUmJnELWoWM6/xLS8
130
+ rFBX3EOYR2nItP5XQyHO49RRT3vzLY04cCYIa5/LhBBRbCSWi6oQaydxq6/buGff
131
+ z//DKy1e6FpeUIFgyjkldQ==
132
+ -----END DSA PRIVATE KEY-----
133
+ END
134
+
135
+ CRUBY_AES_DSA_PEM = <<END
136
+ -----BEGIN DSA PRIVATE KEY-----
137
+ Proc-Type: 4,ENCRYPTED
138
+ DEK-Info: AES-128-CBC,5F8642885141BB27B7D10E089006BF22
139
+
140
+ aBYZIZw67pJFf8voJK2PH6dT2npXL2sGgG4NStgrClAowFF3o0v+p7eAzKwIsfex
141
+ LSE60JAPtD/ooqGDoGkJqT3VXncpNw0B9dR3l2Z2j79ZCNuH64z8PnQKDCLjIVKj
142
+ yhqUsifokc/s7Vd96uaIfR8z3S3go+/96gbIr6p34FLD6N2Pi06t0XrN70msURaX
143
+ Q84edbPto/5Zl8zjVFuV+nvGidozytJ1b6txzyatKeCBQO8doZHihXpW32iyUkJ8
144
+ 1H0047SzKhswP7Xxwob7ukcrPcn2ehPG3+bXC1w7J47jsIi6ihvHKMl6KfgPwVgu
145
+ a8/ecsqcdOGUXmtRJ2l3dw==
146
+ -----END DSA PRIVATE KEY-----
147
+ END
148
+
149
+ JRUBY_AES_DSA_PEM = <<END
150
+ -----BEGIN DSA PRIVATE KEY-----
151
+ Proc-Type: 4,ENCRYPTED
152
+ DEK-Info: AES-128-CBC,2327f11cbbaaf0a5f9ec992ae04677b1
153
+
154
+ YSG7L3SO9/Z+IgDSGf30oXaqUlwc+/AzKeMfqBCxs0qGP2lMELfHnwz/mwxlbepP
155
+ W4zDqgTV88Fvg8PpQVsFamrEWjIy2Bldztc+8Aj8ndBON3vqDkSDk9/FIVFnKCsQ
156
+ xXR/6ixhFVwBsWGJeGSM1PRPcX74JLBbUlY0vzZPk/uUcg7dQO/oGskOlBo/oLnS
157
+ xVXLvRo2CR+3ydHE9iF+y4Y/66f7uccbIAyUDgaurZLf/3MRihAydlkEUQriK88Q
158
+ z1fEb60qcDl8N4bQD2HOILUyPcwvT7OZsn01HmfwxtxMvMsfeIO2NnUUqmpCXawW
159
+ Cj7lDxD1ioXbyqmJyucyVg==
160
+ -----END DSA PRIVATE KEY-----
161
+ END
162
+
163
+ def test_load_dsa_des_encrypted_compat
164
+ password = 'pass'
165
+ assert_equal(2601835381435922300807529879321911722473209798319079426284347845245761126085714618755566626587428986614532580618831696049079493874672683842235950274336046, OpenSSL::PKey::DSA.new(CRUBY_DES_DSA_PEM, password).g)
166
+ assert_equal(5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796, OpenSSL::PKey::DSA.new(JRUBY_DES_DSA_PEM, password).g)
167
+ end
168
+
169
+ def test_load_dsa_3des_encrypted_compat
170
+ password = 'pass'
171
+ assert_equal(9936878837924433385259546254653845785685748445545516924244160189763997725813126701147586419234217178553350132394993861862023343427937351327849016782576411, OpenSSL::PKey::DSA.new(CRUBY_3DES_DSA_PEM, password).g)
172
+ assert_equal(5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796, OpenSSL::PKey::DSA.new(JRUBY_3DES_DSA_PEM, password).g)
173
+ end
174
+
175
+ def test_load_dsa_aes_encrypted_compat
176
+ password = 'pass'
177
+ assert_equal(4237872605088828155551665609293446566126489611054397621156235339811966387210852049465706387691172976146024902239923506580469901654107741400464080284215372, OpenSSL::PKey::DSA.new(CRUBY_AES_DSA_PEM, password).g)
178
+ assert_equal(5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796, OpenSSL::PKey::DSA.new(JRUBY_AES_DSA_PEM, password).g)
179
+ end
180
+ end
@@ -0,0 +1,298 @@
1
+ require "openssl"
2
+ require "test/unit"
3
+
4
+ class TestPKeyRSA < Test::Unit::TestCase
5
+ def test_has_correct_methods
6
+ pkey_methods = OpenSSL::PKey::PKey.instance_methods(false).sort.map(&:intern) - [:initialize]
7
+ assert_equal [:sign, :verify], pkey_methods
8
+
9
+ rsa_methods = OpenSSL::PKey::RSA.instance_methods(false).sort.map(&:intern) - [:initialize]
10
+ assert_equal [:d, :d=, :dmp1, :dmp1=, :dmq1, :dmq1=, :e, :e=, :export, :iqmp, :iqmp=, :n, :n=, :p, :p=, :params, :private?, :private_decrypt, :private_encrypt, :public?, :public_decrypt, :public_encrypt, :public_key, :q, :q=, :to_der, :to_pem, :to_s, :to_text], rsa_methods
11
+
12
+ assert_equal [:generate], OpenSSL::PKey::RSA.methods(false).map(&:intern)
13
+ end
14
+
15
+ #iqmp == coefficient
16
+ #e == public exponent
17
+ #n == modulus
18
+ #d == private exponent
19
+ #p == prime1
20
+ #q == prime2
21
+ #dmq1 == exponent2
22
+ #dmp1 == exponent1
23
+
24
+ def test_can_generate_rsa_key
25
+ OpenSSL::PKey::RSA.generate(512)
26
+ end
27
+
28
+ def test_malformed_rsa_handling
29
+ pem = <<__EOP__
30
+ -----BEGIN PUBLIC KEY-----
31
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtiU1/UMzIQ1On9OlZGoV
32
+ S0yySFYWoXLH12nmP69fg9jwdRbQlb0rxLn7zATbwfqcvGpCcW+8SmdwW74elNrc
33
+ wRtbKjJKfbJCsVfDssbbj6BF+Bcq3ihi8+CGNXFdJOYhZZ+5Adg2Qc9Qp3Ubw9wu
34
+ /3Ai87+1aQxoZPMFwdX2BRiZvxch9dwHVyL8EuFGUOYId/8JQepHyZMbTqp/8wlA
35
+ UAbMcPW+IKp3N0WMgred3CjXKHAqqM0Ira9RLSXdlO2uFV4OrM0ak8rnTN5w1DsI
36
+ McjvVvOck0aIxfHEEmeadt3YMn4PCW33/j8geulZLvt0ci60/OWMSCcIqByITlvY
37
+ DwIDAQAB
38
+ -----END PUBLIC KEY-----
39
+ __EOP__
40
+ pkey = OpenSSL::PKey::RSA.new(pem)
41
+ # jruby-openssl/0.6 raises NativeException
42
+ assert_raise(OpenSSL::PKey::RSAError, 'JRUBY-4492') do
43
+ pkey.public_decrypt("rah")
44
+ end
45
+ end
46
+
47
+ # http://github.com/jruby/jruby-openssl/issues#issue/1
48
+ def test_load_pkey_rsa
49
+ pem = <<__EOP__
50
+ -----BEGIN PRIVATE KEY-----
51
+ MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALRiMLAh9iimur8V
52
+ A7qVvdqxevEuUkW4K+2KdMXmnQbG9Aa7k7eBjK1S+0LYmVjPKlJGNXHDGuy5Fw/d
53
+ 7rjVJ0BLB+ubPK8iA/Tw3hLQgXMRRGRXXCn8ikfuQfjUS1uZSatdLB81mydBETlJ
54
+ hI6GH4twrbDJCR2Bwy/XWXgqgGRzAgMBAAECgYBYWVtleUzavkbrPjy0T5FMou8H
55
+ X9u2AC2ry8vD/l7cqedtwMPp9k7TubgNFo+NGvKsl2ynyprOZR1xjQ7WgrgVB+mm
56
+ uScOM/5HVceFuGRDhYTCObE+y1kxRloNYXnx3ei1zbeYLPCHdhxRYW7T0qcynNmw
57
+ rn05/KO2RLjgQNalsQJBANeA3Q4Nugqy4QBUCEC09SqylT2K9FrrItqL2QKc9v0Z
58
+ zO2uwllCbg0dwpVuYPYXYvikNHHg+aCWF+VXsb9rpPsCQQDWR9TT4ORdzoj+Nccn
59
+ qkMsDmzt0EfNaAOwHOmVJ2RVBspPcxt5iN4HI7HNeG6U5YsFBb+/GZbgfBT3kpNG
60
+ WPTpAkBI+gFhjfJvRw38n3g/+UeAkwMI2TJQS4n8+hid0uus3/zOjDySH3XHCUno
61
+ cn1xOJAyZODBo47E+67R4jV1/gzbAkEAklJaspRPXP877NssM5nAZMU0/O/NGCZ+
62
+ 3jPgDUno6WbJn5cqm8MqWhW1xGkImgRk+fkDBquiq4gPiT898jusgQJAd5Zrr6Q8
63
+ AO/0isr/3aa6O6NLQxISLKcPDk2NOccAfS/xOtfOz4sJYM3+Bs4Io9+dZGSDCA54
64
+ Lw03eHTNQghS0A==
65
+ -----END PRIVATE KEY-----
66
+ __EOP__
67
+ assert_nothing_raised do
68
+ pkey = OpenSSL::PKey::RSA.new(pem)
69
+ pkey2 = OpenSSL::PKey::RSA.new(pkey.to_pem)
70
+ assert_equal(pkey.n, pkey2.n)
71
+ assert_equal(pkey.e, pkey2.e)
72
+ assert_equal(pkey.d, pkey2.d)
73
+ end
74
+ end
75
+
76
+ def test_load_pkey_rsa_enc
77
+ # password is '1234'
78
+ pem = <<__EOP__
79
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
80
+ MIICoTAbBgkqhkiG9w0BBQMwDgQIfvehP6JEg2wCAggABIICgD7kzSr+xWgdAuzG
81
+ cYNkCEWyKF6V0cJ58AKSoL4FQ59OQvQP/hMnSZEMiUpeGNRE6efC7O02RUjNarIk
82
+ ciCYIBqd5EFG3OSypK5l777AbCChIkzZHbyE/pIbadr8ZX9C4pkwzPqS0Avzavxi
83
+ 5s1WDX2GggJkBcQUijqG9QuOZcOvoYbojHPT4tdJq+J6s+0LFas9Jp3a6dYkxtgv
84
+ u8Z6EFDZoLGOSVy/jCSMuZAnhoOxUCYqd9FFo2jryV7tQ/CaYAUApAQFTLgBA9qk
85
+ 4WmyKRpwzIx6EG1pkqulvPXJCcTat9YwllEDVuQ2rKVwDepSl9O7X170Kx1sBecz
86
+ mGcfqviU9xwP5mkXO/TLoTZExkHF08Y3d/PTMdxGEDZH37/yRqCIb3Uyqv/jLibM
87
+ /s9fm52aWsfO1ndHEhciovlMJvGXq3+e+9gmq1w2TyNQahRc5fwfhwWKhPKfYDBk
88
+ 7AtjPGfELDX61WZ5m+4Kb70BcGSAEgXCaBydVsMROy0B8jkYgtAnVBb4EMrGOsCG
89
+ jmNeW9MRIhrhDcifdyq1DMNg7IONMF+5mDdQ3FhK6WzlFU+8cTN517qA8L3A3+ZX
90
+ asiS+rx5/50InINknjuvVkmTGMzjl89nMNrZCjhx9sIDfXQ3ZKFmh1mvnXq/fLan
91
+ CgXn/UtLoykrSlobgqIxZslhj3p01kMCgGe62S3kokYrDTQEc57rlKWWR3Xyjy/T
92
+ LsecXAKEROj95IHSMMnT4jl+TJnbvGKQ2U9tOOB3W+OOOlDEFE59pQlcmQPAwdzr
93
+ mzI4kupi3QRTFjOgvX29leII9sPtpr4dKMKVIRxKnvMZhUAkS/n3+Szfa6zKexLa
94
+ 4CHVgDo=
95
+ -----END ENCRYPTED PRIVATE KEY-----
96
+ __EOP__
97
+ assert_nothing_raised do
98
+ pkey = OpenSSL::PKey::RSA.new(pem, '1234')
99
+ pkey2 = OpenSSL::PKey::RSA.new(pkey.to_pem)
100
+ assert_equal(pkey.n, pkey2.n)
101
+ assert_equal(pkey.e, pkey2.e)
102
+ assert_equal(pkey.d, pkey2.d)
103
+ end
104
+ end
105
+
106
+ # jruby-openssl/0.6 causes NPE
107
+ def test_generate_pkey_rsa_empty
108
+ assert_nothing_raised do
109
+ OpenSSL::PKey::RSA.new.to_pem
110
+ end
111
+ end
112
+
113
+ def test_generate_pkey_rsa_length
114
+ assert_nothing_raised do
115
+ OpenSSL::PKey::RSA.new(512).to_pem
116
+ end
117
+ end
118
+
119
+ def test_generate_pkey_rsa_to_text
120
+ assert_match(
121
+ /Private-Key: \(512 bit\)/,
122
+ OpenSSL::PKey::RSA.new(512).to_text
123
+ )
124
+ end
125
+
126
+ def test_load_pkey_rsa
127
+ pkey = OpenSSL::PKey::RSA.new(512)
128
+ assert_equal(pkey.to_pem, OpenSSL::PKey::RSA.new(pkey.to_pem).to_pem)
129
+ end
130
+
131
+ def test_load_pkey_rsa_public
132
+ pkey = OpenSSL::PKey::RSA.new(512).public_key
133
+ assert_equal(pkey.to_pem, OpenSSL::PKey::RSA.new(pkey.to_pem).to_pem)
134
+ end
135
+
136
+ def test_load_pkey_rsa_der
137
+ pkey = OpenSSL::PKey::RSA.new(512)
138
+ assert_equal(pkey.to_der, OpenSSL::PKey::RSA.new(pkey.to_der).to_der)
139
+ end
140
+
141
+ def test_load_pkey_rsa_public_der
142
+ pkey = OpenSSL::PKey::RSA.new(512).public_key
143
+ assert_equal(pkey.to_der, OpenSSL::PKey::RSA.new(pkey.to_der).to_der)
144
+ end
145
+
146
+ def test_load_rsa_des_encrypted
147
+ password = 'pass'
148
+ pkey = OpenSSL::PKey::RSA.generate(1024)
149
+ cipher = OpenSSL::Cipher::Cipher.new('des-cbc')
150
+ pem = pkey.to_pem(cipher, password)
151
+ assert_equal(pkey.n, OpenSSL::PKey::RSA.new(pem, password).n)
152
+ end
153
+
154
+ def test_load_rsa_3des_encrypted
155
+ password = 'pass'
156
+ pkey = OpenSSL::PKey::RSA.generate(1024)
157
+ cipher = OpenSSL::Cipher::Cipher.new('des-ede3-cbc')
158
+ pem = pkey.to_pem(cipher, password)
159
+ assert_equal(pkey.n, OpenSSL::PKey::RSA.new(pem, password).n)
160
+ end
161
+
162
+ def test_load_rsa_aes_encrypted
163
+ password = 'pass'
164
+ pkey = OpenSSL::PKey::RSA.generate(1024)
165
+ cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
166
+ pem = pkey.to_pem(cipher, password)
167
+ assert_equal(pkey.n, OpenSSL::PKey::RSA.new(pem, password).n)
168
+ end
169
+
170
+ CRUBY_DES_RSA_PEM = <<END
171
+ -----BEGIN RSA PRIVATE KEY-----
172
+ Proc-Type: 4,ENCRYPTED
173
+ DEK-Info: DES-CBC,D22ABA5D7A345AAF
174
+
175
+ uSRJRBARry1L2DUZwdLkQ0JA4riJ9CWnsA+Y6M76dznyzJCLK/rLyQSLxZefVWVk
176
+ CzkRMhi4n4NrSS1hB7qUlphX6y67O5Rv/O0S4SYa3d87hDJKqNpR47gfj35efNUk
177
+ izIb4rHoVgolRNm/L4joChuIrKqHkQnkusNxp9wReuNT/B2qPbqqEGxiDCcv8jni
178
+ fq1ifvkJyTlEKnmrdml65fhjHHDuNENVAXVrsPsVJXI6kk7PahJk24rn29qPOAlJ
179
+ d+E6Q6YDgRM1MDrEQmaXFzNJi8Mco1712LjXIYH9+vkJ5GnXrIk8XrAmY2E4ERgQ
180
+ XdFx9J6Qncnjj/y18H9WilvoaN4hJiE22OqNI/PeK+nYeeYnxzu2qc2E5QVyjCqA
181
+ N2nTwx0ZtZRxFakP8CMyrVCn7BVYdIF3ISgX7RT+GwkujKwWAO0xrjkMc3y3Pv2R
182
+ 9MG5PzeFe4EuuwkjN0rWB8ra4HCkaPxk
183
+ -----END RSA PRIVATE KEY-----
184
+ END
185
+
186
+ JRUBY_DES_RSA_PEM = <<END
187
+ -----BEGIN RSA PRIVATE KEY-----
188
+ Proc-Type: 4,ENCRYPTED
189
+ DEK-Info: DES-CBC,14f319c66f99b413
190
+
191
+ JTTxyeEPF9HcOyyLQ0Y+oO91RaVYIoqppxpfKaULXBZwHN8pGSrHFPliCgahgEEC
192
+ aF39H6/69KrEKw7h8XYKrFK+sinBYd975qWfspexmDHTyMcN7MPBPpbnV5Ha2z+m
193
+ weenO/2rAzsOxNa6dRBmdCyHYODJrSDq71h6W7255t79E4Tjr1u72/lHPVTO2r9a
194
+ sv0AhkfM5G95n+qamgNYOYjWODKFaSA6vN4sB08UQZBN7EJeE6Ouv5hw8E0uooLu
195
+ 10iaBJUWkYF9v50+Z+cVd890VlUiQZihybQ8dETHtBtJ6moaMxBzQjkXjGJf6vd+
196
+ h0YPQOIg0YLwxg+aIC4L+Sh/11DrXSeb6j/7d0HfqGW060AC1b7crits71v2vEGe
197
+ +9kGgboShossQLoOuFicETEo5UgyhWfJ+ftvKM5DgYfsKJNsegSH9WwISFNWGSsY
198
+ njt38WTtkSxDQmm1G+VGfdfOIUQWohI9Prol2qodhsN6SvJgd0n9nVYi388bh1IR
199
+ 23jnX9eayTrCm6Ff9EBVIroG8wVr0Qqme36o0GDtmCXtuBY9F3utr/8n03lTBuW7
200
+ E/Cx4XKlTtA7oBQjDz/ecbSGZXIROQmZh2f4wX6JeDhQH93InvM5DP7nN7qq+bxp
201
+ aZPRS3QFj0XlcF/QTI5r/GqT+DAWZ4ZXGtuKUg2yEjCNz6+r8xW9zOFSFos+773U
202
+ MVitdHtRLjfRVV6PT6VyThaHI56f6T9PC7KHgX8e/YcA8cAR0IoOjVsy1Xy0KWn7
203
+ CLxLcO6qbYRDyoFEpMrYq/O2beA1BH28BXnDkODbOje/lbvL9sSaHg==
204
+ -----END RSA PRIVATE KEY-----
205
+ END
206
+
207
+ CRUBY_3DES_RSA_PEM = <<END
208
+ -----BEGIN RSA PRIVATE KEY-----
209
+ Proc-Type: 4,ENCRYPTED
210
+ DEK-Info: DES-EDE3-CBC,F4E217EFFC0C21F0
211
+
212
+ KblUxUrSn2mJlzZUyZ/QBBWdhDkPwO4bzH6y6XxUmVEhv3DgiiWiOccQoE9s06Gt
213
+ LguPArk2W61DfksDH7ESeVd5syS+6LVmuVXePrXlef45flNwmdFHXgy+OVM9uLHT
214
+ y1AvHs6f3NLsDlf+ho8yoKgCTTBWf9lwAxw6EO9iKqUWY4ofRjSefiGxwhIW77Vc
215
+ MIktK9wMcZL9d8mINqQEY/Pz7pg70bLp3uZlljNFo6i8OA2SnitTOmU97dyknbee
216
+ +HDzrFFGdwsCg6nJdnjDsOXYeXDW2sul8g258ipUEVpkByWZ7Vy3vpAZKwO2dIrj
217
+ oEr/6glDvOKd7w2U5DIqmuWo5zvtCBu1taonyyaJKRoxsmJO9PTbDhz38WU3wcbf
218
+ 9AQxDlMY//N5hSICrcnIaXsjMTxiJrERHLPjW+auYSRl7E9qKh4KqjDHsJ2/LyTE
219
+ dQ7IaJwE9xygO1hVHLJze1pZs+xHsxdR
220
+ -----END RSA PRIVATE KEY-----
221
+ END
222
+
223
+ JRUBY_3DES_RSA_PEM = <<END
224
+ -----BEGIN RSA PRIVATE KEY-----
225
+ Proc-Type: 4,ENCRYPTED
226
+ DEK-Info: DES-EDE3-CBC,102c5e7fdd051c1a
227
+
228
+ u19K4AySBL8KAM9DSLsSJSuxtKLQgmPiawpPRBpYjMITxw2NQtpZMYJKLZOtx/uU
229
+ kVjbwzJhhr51ciBF2HztLLvrpmh9xPybLZFh4Ew7/yMMOir+GyO3G8pf3sL5roAA
230
+ +sR4VERTiK6KWdblZQCYOmyJDiffjWBfzSz6MlLdjjTZr+NBQ6d0vGFGdLE1662Y
231
+ XpjcG6nw3fpUhdTXhXJDYneSBD30P6sfSxzPY0G7TLNU6vv9qlaeZ3nksfY/2Li1
232
+ aOSzrYtZe9+uzqAd9KxNNO7Eya3GAgdhErwVQGIU/cmtNybYdeaEhOtd80Vx8qY0
233
+ l9Lz/FtKdbxxoSAFhpRupRY2cFC80LJ2e9hp+TRkYp2k9a9UuPMrTYmK6GoYsPRC
234
+ SqnL9xIlCrByxhQ3vJaogSseAFlFmLxb+E61cQxCHfc5oBM9XY3e60Cirfsx/POG
235
+ xvTPXBLS1SuLybLh68wZDpLcqTFk0zG0oSchUt6x5JqK4OImKnI2VpXZ1H7j/rSU
236
+ ghUJvDcvAiMwiqep/81Ue9KIrP+ouluk81njjFTA636Dx23PdPq0dyBwi4iF+WOf
237
+ A4EhhISttdb+ZSmS9kPDYn2a79Qvds29yOgEB2OwKIstDzlBNO85CA+E3JbOndBq
238
+ +zpQklVLA+dWw0dTIbwI5xYKGb7HJJPOpBC0aWcnudr4rda2b2WIFPzH/PTAoIhJ
239
+ kBuwNoLBA38qh+T6Se66hLWzWyt3yPWaH81KW0WOaHW68LC572+qq7hrsOHp7ya6
240
+ C4/lMsQ5zUyRI0fwpnSJv1RjYemNJMV+oUiHFDKN5jQ=
241
+ -----END RSA PRIVATE KEY-----
242
+ END
243
+
244
+ CRUBY_AES_RSA_PEM = <<END
245
+ -----BEGIN RSA PRIVATE KEY-----
246
+ Proc-Type: 4,ENCRYPTED
247
+ DEK-Info: AES-128-CBC,E6FB0DECDE6009CF6EEE61885679905E
248
+
249
+ 254YnHYZVo139fw1jbztY/v7BbaaCoYAMC27q6NF4k5Qocfe12HYWD/pgpe1YKbX
250
+ 8fmfBhKFpjqTAr8emp0HOOw8VjfcaITiN4MvrnyhT7Ir4yjJjO5mUQVBZQha+i7P
251
+ CFTsuZhDF1iEkxkyVsHQ56iWT+SL7d0uvWW2eVNZ0L/vRVrdffNG1m+92xIm66Fj
252
+ 0/fMudTSUYJvad2Isj64i1DWKxo6gfxgmukLCwj4DnmjVQvOH/VQT7nUe9oqxCuy
253
+ VUC+c2FAZgTr+2vSYdpPnU/u//DKjqvDgZHDkRIKDNNDv1yyVRY7giuOfFE9GqbE
254
+ wQTwaLdJYnu9I4HaS8tWCLHgNYRKbvNcTRX7CMxlV82ndn7aKoIDb/x8O5frObEF
255
+ 2gMnv4H5mxrtHCJVk0ivQf3BgZWTdom/YEBr56RC8R/8y5dWsaGhIbXr9kNW0Lom
256
+ 50oQToYBbM5ulLJxYXV3tA==
257
+ -----END RSA PRIVATE KEY-----
258
+ END
259
+
260
+ JRUBY_AES_RSA_PEM = <<END
261
+ -----BEGIN RSA PRIVATE KEY-----
262
+ Proc-Type: 4,ENCRYPTED
263
+ DEK-Info: AES-128-CBC,5c6a1d2d24302e15a23bb77483db3966
264
+
265
+ 2IBvwJDEw3CkZVMp7/ML0qiozHqmkmkZ+XEe3YD8EV8te7rO7zRVNCW+NOxfqUhu
266
+ TrP5gXNLK2rUrhBairruFz6iXWndtkGs1o8LL2X+dCSRbFpkVOo6d7IEpRi5xJDJ
267
+ MK1LzWLb1I3EUxlEY/NkpfIaULxldix9QCXejqdlHyuRvDEO11HwT2AO1ND/Pir9
268
+ 510nnDrBF0oGy/y9n5Quw/3F30CLyNUoQ+yb05unRt3MXQ40Qh4qIxE2bEsT5bPV
269
+ YHQ7Ls4ETxSyqVETpWfghAl2pipU2S6ZhCcPETnv6nfjC72uk/dFRuaMsve4IUTu
270
+ AnxZCKQ6ICaExlgUzY97lEIj3nJDY5PbDARqE1EQt24nS4wHq+5hrMumDLaiYcFu
271
+ QqfDYDXJiZt0gUYXlHwezNyv+iH4Y5xhko7fQn0yFhp4ud748zZJVYzULJCMGVWT
272
+ ObQ6I5JE2UoTeTHl/UfE3UYqKoBPnnElsJkTFzdql8zBS5PGAHgrF06Wg/jp9iCG
273
+ h0BXTnPw5jBVF8YF15F9oWt6hzLVrBfihTCi1+KxKPYDCoKUVGyeaSmCRTwu/Shp
274
+ WJpKokBtazrML5gXE2rTho3yHOpiwv/3HLLGKpVxBZk/w+quo5o1dQbuNcdVkXUy
275
+ uvMFYJGBMXhpFHxWOnrHe5EWmlergjbH6FtDnZ6q9mGKX3Zv0mj16rGTwaC8ojFJ
276
+ klvWNuzEyQRT2OJNbiJ+w8v4yF9nKcoNnWaLwsTXkdfrPkrUEyG03aNj5UVkJ8cq
277
+ jfdOf8b35frgdBJrFb1fNxXUDiOmHxBeffidJ7LEHD0zvh8yke9iqCRquRbQw4ua
278
+ -----END RSA PRIVATE KEY-----
279
+ END
280
+
281
+ def test_load_rsa_des_encrypted_compat
282
+ password = 'pass'
283
+ assert_equal(171121679472900958735046240032013822902814135418044632926746858725279957006460484359346082493980272450155346042705805047522822137075000873718614673206839485927470809962483274240113443184049955325778842883884472730809338103721103527723371013427831682847229398280665281140996554391864952366240593334371598093357, OpenSSL::PKey::RSA.new(CRUBY_DES_RSA_PEM, password).n)
284
+ assert_equal(95186390926176289293448721787465460008681849005943627766414746880750829275325362105354699806095724614833850511391997530422798534550053092884697848715098905298125981139872096315909555296044739053126836027629923201408465604387441696201951345435727705264545384652266958892017406564235498456780610723946372077161, OpenSSL::PKey::RSA.new(JRUBY_DES_RSA_PEM, password).n)
285
+ end
286
+
287
+ def test_load_rsa_3des_encrypted_compat
288
+ password = 'pass'
289
+ assert_equal(159891081887610779337613110093558981667630640397086024796277575756132362092191306947719745882625669532365621381440788450544049011459945371880102089907577418294502920328095107337128188112059054500699255092076505828498357575128536918367005034864200777995404401769611478230798677758186716282278489076140546075717, OpenSSL::PKey::RSA.new(CRUBY_3DES_RSA_PEM, password).n)
290
+ assert_equal(132634270546428248975101416587398035596645524786882670408365466475894396526829329830349264854502825314377251520406282650983030314030180184335663605776194424399755874220996106852804569548140575796496611429489809370931661876941690628312711482612941088835232077828296662784479160183720585553373956579796213039707, OpenSSL::PKey::RSA.new(JRUBY_3DES_RSA_PEM, password).n)
291
+ end
292
+
293
+ def test_load_rsa_aes_encrypted_compat
294
+ password = 'pass'
295
+ assert_equal(152164605304862839347386799863418642272176047421496804966498177563653853015174053675480323318393334405555865282832768092329962715390636176200784476670180320842603832200246642618431746763085706624847469867394029459008113763032679106133646348160741974785288005086128311619599829066360227829804048705177001887963, OpenSSL::PKey::RSA.new(CRUBY_AES_RSA_PEM, password).n)
296
+ assert_equal(120124464337037052596736192517844019014106857114253451267066925743499301063116479220243836708739023567649536721432121286547319736881999977669587689339777273865695637895993003754843628769179367393259439036333237000420047538052601743699164582419555307462460610926941760286052729693393703143580060262101504625743, OpenSSL::PKey::RSA.new(JRUBY_AES_RSA_PEM, password).n)
297
+ end
298
+ end