jruby-openssl 0.7.4 → 0.7.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. data/.gemtest +0 -0
  2. data/History.txt +51 -14
  3. data/Manifest.txt +136 -79
  4. data/README.txt +1 -1
  5. data/Rakefile +17 -8
  6. data/lib/{openssl → 1.8/openssl}/bn.rb +2 -2
  7. data/lib/{openssl → 1.8/openssl}/buffering.rb +3 -1
  8. data/lib/{openssl → 1.8/openssl}/cipher.rb +0 -0
  9. data/lib/{openssl → 1.8/openssl}/config.rb +1 -1
  10. data/lib/{openssl → 1.8/openssl}/digest.rb +2 -2
  11. data/lib/{openssl → 1.8/openssl}/pkcs7.rb +0 -0
  12. data/lib/{openssl/ssl.rb → 1.8/openssl/ssl-internal.rb} +2 -2
  13. data/lib/1.8/openssl/ssl.rb +1 -0
  14. data/lib/{openssl/x509.rb → 1.8/openssl/x509-internal.rb} +8 -9
  15. data/lib/1.8/openssl/x509.rb +1 -0
  16. data/lib/{openssl.rb → 1.8/openssl.rb} +2 -11
  17. data/lib/1.9/openssl/bn.rb +35 -0
  18. data/lib/1.9/openssl/buffering.rb +448 -0
  19. data/lib/1.9/openssl/cipher.rb +65 -0
  20. data/lib/1.9/openssl/config.rb +313 -0
  21. data/lib/1.9/openssl/digest.rb +72 -0
  22. data/lib/1.9/openssl/ssl-internal.rb +177 -0
  23. data/lib/1.9/openssl/ssl.rb +2 -0
  24. data/lib/1.9/openssl/x509-internal.rb +158 -0
  25. data/lib/1.9/openssl/x509.rb +2 -0
  26. data/lib/1.9/openssl.rb +22 -0
  27. data/lib/{jopenssl → shared/jopenssl}/version.rb +1 -1
  28. data/lib/shared/jopenssl.jar +0 -0
  29. data/lib/{openssl → shared/openssl}/dummy.rb +0 -0
  30. data/lib/{openssl → shared/openssl}/dummyssl.rb +0 -0
  31. data/lib/shared/openssl/pkcs12.rb +50 -0
  32. data/lib/shared/openssl/ssl.rb +1 -0
  33. data/lib/shared/openssl/x509.rb +1 -0
  34. data/lib/shared/openssl.rb +20 -0
  35. data/test/{openssl → 1.8}/ssl_server.rb +0 -0
  36. data/test/{openssl → 1.8}/test_asn1.rb +15 -0
  37. data/test/{openssl → 1.8}/test_cipher.rb +0 -0
  38. data/test/{openssl → 1.8}/test_config.rb +0 -0
  39. data/test/{openssl → 1.8}/test_digest.rb +0 -0
  40. data/test/{openssl → 1.8}/test_ec.rb +0 -0
  41. data/test/{openssl → 1.8}/test_hmac.rb +0 -0
  42. data/test/{openssl → 1.8}/test_ns_spki.rb +0 -0
  43. data/test/{openssl → 1.8}/test_pair.rb +10 -2
  44. data/test/{openssl → 1.8}/test_pkcs7.rb +0 -0
  45. data/test/{openssl → 1.8}/test_pkey_rsa.rb +0 -0
  46. data/test/{openssl → 1.8}/test_ssl.rb +17 -20
  47. data/test/{openssl → 1.8}/test_x509cert.rb +0 -0
  48. data/test/{openssl → 1.8}/test_x509crl.rb +0 -0
  49. data/test/{openssl → 1.8}/test_x509ext.rb +0 -0
  50. data/test/{openssl → 1.8}/test_x509name.rb +0 -0
  51. data/test/{openssl → 1.8}/test_x509req.rb +0 -0
  52. data/test/{openssl → 1.8}/test_x509store.rb +0 -0
  53. data/test/{openssl → 1.8}/utils.rb +0 -0
  54. data/test/1.9/ssl_server.rb +81 -0
  55. data/test/1.9/test_asn1.rb +589 -0
  56. data/test/1.9/test_bn.rb +23 -0
  57. data/test/1.9/test_buffering.rb +88 -0
  58. data/test/1.9/test_cipher.rb +107 -0
  59. data/test/1.9/test_config.rb +288 -0
  60. data/test/1.9/test_digest.rb +118 -0
  61. data/test/1.9/test_engine.rb +15 -0
  62. data/test/1.9/test_hmac.rb +32 -0
  63. data/test/1.9/test_ns_spki.rb +50 -0
  64. data/test/1.9/test_ocsp.rb +47 -0
  65. data/test/1.9/test_pair.rb +257 -0
  66. data/test/1.9/test_pkcs12.rb +209 -0
  67. data/test/1.9/test_pkcs7.rb +151 -0
  68. data/test/1.9/test_pkey_dh.rb +72 -0
  69. data/test/1.9/test_pkey_dsa.rb +224 -0
  70. data/test/1.9/test_pkey_ec.rb +182 -0
  71. data/test/1.9/test_pkey_rsa.rb +244 -0
  72. data/test/1.9/test_ssl.rb +455 -0
  73. data/test/1.9/test_ssl_session.rb +327 -0
  74. data/test/1.9/test_x509cert.rb +217 -0
  75. data/test/1.9/test_x509crl.rb +221 -0
  76. data/test/1.9/test_x509ext.rb +69 -0
  77. data/test/1.9/test_x509name.rb +296 -0
  78. data/test/1.9/test_x509req.rb +150 -0
  79. data/test/1.9/test_x509store.rb +229 -0
  80. data/test/1.9/utils.rb +304 -0
  81. data/test/fixture/ids_in_subject_rdn_set.pem +31 -0
  82. data/test/fixture/purpose/ca/ca_config.rb +1 -1
  83. data/test/fixture/purpose/ca/gen_cert.rb +128 -0
  84. data/test/fixture/purpose/ca/newcerts/4_cert.pem +19 -0
  85. data/test/fixture/purpose/ca/serial +1 -1
  86. data/test/fixture/purpose/sslserver_no_dsig_in_keyUsage.pem +19 -0
  87. data/test/ruby/envutil.rb +208 -0
  88. data/test/ruby/ut_eof.rb +128 -0
  89. data/test/test_certificate.rb +9 -0
  90. data/test/test_java.rb +1 -1
  91. data/test/test_openssl.rb +1 -1
  92. data/test/test_pkcs7.rb +16 -0
  93. data/test/test_pkey_dsa.rb +180 -0
  94. data/test/test_pkey_rsa.rb +298 -0
  95. data/test/test_ssl.rb +1 -1
  96. data/test/test_x509store.rb +8 -0
  97. metadata +133 -73
  98. data/lib/jopenssl.jar +0 -0
  99. data/test/test_pkey.rb +0 -204
@@ -0,0 +1,2 @@
1
+ warn 'deprecated openssl/x509 use: require "openssl" instead of "openssl/x509"'
2
+ require 'openssl'
@@ -0,0 +1,22 @@
1
+ =begin
2
+ = $RCSfile$ -- Loader for all OpenSSL C-space and Ruby-space definitions
3
+
4
+ = Info
5
+ 'OpenSSL for Ruby 2' project
6
+ Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
7
+ All rights reserved.
8
+
9
+ = Licence
10
+ This program is licenced under the same licence as Ruby.
11
+ (See the file 'LICENCE'.)
12
+
13
+ = Version
14
+ $Id$
15
+ =end
16
+
17
+ require 'openssl/bn'
18
+ require 'openssl/cipher'
19
+ require 'openssl/config'
20
+ require 'openssl/digest'
21
+ require 'openssl/ssl-internal'
22
+ require 'openssl/x509-internal'
@@ -1,5 +1,5 @@
1
1
  module Jopenssl
2
2
  module Version
3
- VERSION = "0.7.4"
3
+ VERSION = "0.7.6.1"
4
4
  end
5
5
  end
Binary file
File without changes
File without changes
@@ -0,0 +1,50 @@
1
+ require 'java'
2
+
3
+ module OpenSSL
4
+ class PKCS12
5
+ java_import java.io.StringReader
6
+ java_import java.io.StringBufferInputStream
7
+ java_import java.security.cert.CertificateFactory
8
+ java_import java.security.KeyStore
9
+ java_import java.io.ByteArrayOutputStream
10
+ java_import org.bouncycastle.openssl.PEMReader
11
+
12
+ java.security.Security.add_provider(org.bouncycastle.jce.provider.BouncyCastleProvider.new)
13
+
14
+ def self.create(pass, name, key, cert)
15
+ pkcs12 = self.new(pass, name, key, cert)
16
+ pkcs12.generate
17
+ pkcs12
18
+ end
19
+
20
+ attr_reader :key, :certificate
21
+
22
+ def initialize(pass, name, key, cert)
23
+ @pass = pass
24
+ @name = name
25
+ @key = key
26
+ @certificate = cert
27
+ end
28
+
29
+ def generate
30
+ key_reader = StringReader.new(key.to_pem)
31
+ key_pair = PEMReader.new(key_reader).read_object
32
+
33
+ cert_input_stream = StringBufferInputStream.new(certificate.to_pem)
34
+ certs = CertificateFactory.get_instance("X.509").generate_certificates(cert_input_stream)
35
+
36
+ store = KeyStore.get_instance("PKCS12", "BC")
37
+ store.load(nil, nil)
38
+ store.set_key_entry(@name, key_pair.get_private, nil, certs.to_array(Java::java.security.cert.Certificate[certs.size].new))
39
+
40
+ pkcs12_output_stream = ByteArrayOutputStream.new
41
+ store.store(pkcs12_output_stream, @pass.to_java.to_char_array)
42
+
43
+ @der = String.from_java_bytes(pkcs12_output_stream.to_byte_array)
44
+ end
45
+
46
+ def to_der
47
+ @der
48
+ end
49
+ end
50
+ end
@@ -0,0 +1 @@
1
+ require 'openssl'
@@ -0,0 +1 @@
1
+ require 'openssl'
@@ -0,0 +1,20 @@
1
+ unless defined? JRUBY_VERSION
2
+ warn 'Loading jruby-openssl in a non-JRuby interpreter'
3
+ end
4
+
5
+ begin
6
+ require 'bouncy-castle-java'
7
+ rescue LoadError
8
+ # runs under restricted mode.
9
+ end
10
+ require 'jopenssl'
11
+
12
+ if RUBY_VERSION >= '1.9.0'
13
+ $LOAD_PATH.unshift(File.expand_path('../../1.9', __FILE__))
14
+ load(File.expand_path('../../1.9/openssl.rb', __FILE__))
15
+ else
16
+ $LOAD_PATH.unshift(File.expand_path('../../1.8', __FILE__))
17
+ load(File.expand_path('../../1.8/openssl.rb', __FILE__))
18
+ end
19
+
20
+ require 'openssl/pkcs12'
File without changes
@@ -35,6 +35,7 @@ class OpenSSL::TestASN1 < Test::Unit::TestCase
35
35
  assert_equal(1, version.value.size)
36
36
  assert_equal(OpenSSL::ASN1::Integer, version.value[0].class)
37
37
  assert_equal(2, version.value[0].value)
38
+ assert_equal(OpenSSL::BN, version.value[0].value.class)
38
39
 
39
40
  serial = tbs_cert.value[1]
40
41
  assert_equal(OpenSSL::ASN1::Integer, serial.class)
@@ -194,4 +195,18 @@ class OpenSSL::TestASN1 < Test::Unit::TestCase
194
195
  cululated_sig = key.sign(OpenSSL::Digest::SHA1.new, tbs_cert.to_der)
195
196
  assert_equal(cululated_sig, sig_val.value)
196
197
  end
198
+
199
+ def test_encode_boolean
200
+ encode_decode_test(OpenSSL::ASN1::Boolean, [true, false])
201
+ end
202
+
203
+ def test_encode_integer
204
+ encode_decode_test(OpenSSL::ASN1::Integer, [72, -127, -128, 128, -1, 0, 1, -(2**12345), 2**12345])
205
+ end
206
+
207
+ def encode_decode_test(type, values)
208
+ values.each do |v|
209
+ assert_equal(v, OpenSSL::ASN1.decode(type.new(v).to_der).value)
210
+ end
211
+ end
197
212
  end if defined?(OpenSSL)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -90,9 +90,17 @@ class OpenSSL::TestPair < Test::Unit::TestCase
90
90
  ssl_pair {|s1, s2|
91
91
  s2.write "a\nbcd"
92
92
  assert_equal("a\n", s1.gets)
93
- assert_equal("bcd", s1.readpartial(10))
93
+ read = s1.readpartial(10)
94
+ assert_equal("bcd"[0, read.bytesize], read)
95
+ s1.read(read.bytesize - 3) # drop unread bytes
96
+
94
97
  s2.write "efg"
95
- assert_equal("efg", s1.readpartial(10))
98
+ read = s1.readpartial(10)
99
+ assert_equal("efg"[0, read.bytesize], read)
100
+ rest = 3 - read.bytesize
101
+ while rest > 0
102
+ rest -= s1.readpartial(rest).size
103
+ end
96
104
  s2.close
97
105
  assert_raise(EOFError) { s1.readpartial(10) }
98
106
  assert_raise(EOFError) { s1.readpartial(10) }
File without changes
File without changes
@@ -200,19 +200,6 @@ class OpenSSL::TestSSL < Test::Unit::TestCase
200
200
 
201
201
  assert_raise(ArgumentError) { ssl.sysread(-1) }
202
202
 
203
- # syswrite and sysread
204
- ITERATIONS.times{|i|
205
- str = "x" * 100 + "\n"
206
- ssl.syswrite(str)
207
- assert_equal(str, ssl.sysread(str.size))
208
-
209
- str = "x" * i * 100 + "\n"
210
- buf = ""
211
- ssl.syswrite(str)
212
- assert_equal(buf.object_id, ssl.sysread(str.size, buf).object_id)
213
- assert_equal(str, buf)
214
- }
215
-
216
203
  # puts and gets
217
204
  ITERATIONS.times{
218
205
  str = "x" * 100 + "\n"
@@ -237,6 +224,14 @@ class OpenSSL::TestSSL < Test::Unit::TestCase
237
224
  }
238
225
  end
239
226
 
227
+ def sysread_size(ssl, size)
228
+ buf = ''
229
+ while buf.bytesize < size
230
+ buf += ssl.sysread(size - buf.bytesize)
231
+ end
232
+ buf
233
+ end
234
+
240
235
  def test_sysread_chunks
241
236
  args = {}
242
237
  args[:server_proc] = proc { |ctx, ssl|
@@ -257,11 +252,11 @@ class OpenSSL::TestSSL < Test::Unit::TestCase
257
252
  ssl.sync_close = true
258
253
  ssl.connect
259
254
  ssl.syswrite("hello\n")
260
- assert_equal("0" * 200, ssl.sysread(200))
261
- assert_equal("0" * 200, ssl.sysread(200))
262
- assert_equal("0" * 200, ssl.sysread(200))
263
- assert_equal("0" * 200, ssl.sysread(200))
264
- assert_equal("1" * 200, ssl.sysread(200))
255
+ assert_equal("0" * 200, sysread_size(ssl, 200))
256
+ assert_equal("0" * 200, sysread_size(ssl, 200))
257
+ assert_equal("0" * 200, sysread_size(ssl, 200))
258
+ assert_equal("0" * 200, sysread_size(ssl, 200))
259
+ assert_equal("1" * 200, sysread_size(ssl, 200))
265
260
  ssl.close
266
261
  }
267
262
  end
@@ -285,12 +280,14 @@ class OpenSSL::TestSSL < Test::Unit::TestCase
285
280
  read = ssl.sysread(str.size, buf)
286
281
  assert(!read.empty?)
287
282
  assert_equal(buf.object_id, read.object_id)
288
- assert_equal(str, buf)
283
+ assert_equal(str[0, buf.bytesize], buf)
284
+ sysread_size(ssl, str.bytesize - buf.bytesize) # drop unread bytes
289
285
 
290
286
  ssl.syswrite(str)
291
287
  read = ssl.sysread(str.size, nil)
292
288
  assert(!read.empty?)
293
- assert_equal(str, read)
289
+ assert_equal(str[0, read.bytesize], read)
290
+ sysread_size(ssl, str.bytesize - read.bytesize) # drop unread bytes
294
291
  }
295
292
  ssl.close
296
293
  }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,81 @@
1
+ require "socket"
2
+ require "thread"
3
+ require "openssl"
4
+ require File.join(File.dirname(__FILE__), "utils.rb")
5
+
6
+ def get_pem(io=$stdin)
7
+ buf = ""
8
+ while line = io.gets
9
+ if /^-----BEGIN / =~ line
10
+ buf << line
11
+ break
12
+ end
13
+ end
14
+ while line = io.gets
15
+ buf << line
16
+ if /^-----END / =~ line
17
+ break
18
+ end
19
+ end
20
+ return buf
21
+ end
22
+
23
+ def make_key(pem)
24
+ begin
25
+ return OpenSSL::PKey::RSA.new(pem)
26
+ rescue
27
+ return OpenSSL::PKey::DSA.new(pem)
28
+ end
29
+ end
30
+
31
+ ca_cert = OpenSSL::X509::Certificate.new(get_pem)
32
+ ssl_cert = OpenSSL::X509::Certificate.new(get_pem)
33
+ ssl_key = make_key(get_pem)
34
+ port = Integer(ARGV.shift)
35
+ verify_mode = Integer(ARGV.shift)
36
+ start_immediately = (/yes/ =~ ARGV.shift)
37
+
38
+ store = OpenSSL::X509::Store.new
39
+ store.add_cert(ca_cert)
40
+ store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
41
+ ctx = OpenSSL::SSL::SSLContext.new
42
+ ctx.cert_store = store
43
+ #ctx.extra_chain_cert = [ ca_cert ]
44
+ ctx.cert = ssl_cert
45
+ ctx.key = ssl_key
46
+ ctx.verify_mode = verify_mode
47
+
48
+ Socket.do_not_reverse_lookup = true
49
+ tcps = nil
50
+ 100.times{|i|
51
+ begin
52
+ tcps = TCPServer.new("0.0.0.0", port+i)
53
+ port = port + i
54
+ break
55
+ rescue Errno::EADDRINUSE
56
+ next
57
+ end
58
+ }
59
+ ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
60
+ ssls.start_immediately = start_immediately
61
+
62
+ $stdout.sync = true
63
+ $stdout.puts Process.pid
64
+ $stdout.puts port
65
+
66
+ loop do
67
+ ssl = ssls.accept rescue next
68
+ Thread.start{
69
+ q = Queue.new
70
+ th = Thread.start{ ssl.write(q.shift) while true }
71
+ while line = ssl.gets
72
+ if line =~ /^STARTTLS$/
73
+ ssl.accept
74
+ next
75
+ end
76
+ q.push(line)
77
+ end
78
+ th.kill if q.empty?
79
+ ssl.close
80
+ }
81
+ end