jruby-openssl 0.7.4 → 0.7.6.1

Sign up to get free protection for your applications and to get access to all the features.
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