jruby-openssl 0.9.4 → 0.14.0-java

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 (67) hide show
  1. checksums.yaml +7 -0
  2. data/History.md +652 -0
  3. data/LICENSE.txt +37 -0
  4. data/Mavenfile +163 -5
  5. data/README.md +75 -0
  6. data/Rakefile +52 -2
  7. data/lib/jopenssl/_compat23.rb +71 -0
  8. data/lib/jopenssl/load.rb +75 -16
  9. data/lib/jopenssl/version.rb +9 -4
  10. data/lib/jopenssl.jar +0 -0
  11. data/lib/openssl/bn.rb +40 -5
  12. data/lib/openssl/buffering.rb +477 -4
  13. data/lib/openssl/cipher.rb +67 -5
  14. data/lib/openssl/config.rb +500 -4
  15. data/lib/openssl/digest.rb +73 -5
  16. data/lib/openssl/hmac.rb +13 -0
  17. data/lib/openssl/marshal.rb +30 -0
  18. data/lib/openssl/pkcs12.rb +60 -99
  19. data/lib/openssl/pkcs5.rb +22 -0
  20. data/lib/openssl/pkey.rb +42 -0
  21. data/lib/openssl/ssl.rb +542 -4
  22. data/lib/openssl/x509.rb +368 -4
  23. data/lib/openssl.rb +3 -1
  24. data/lib/org/bouncycastle/bcpkix-jdk18on/1.71/bcpkix-jdk18on-1.71.jar +0 -0
  25. data/lib/org/bouncycastle/bcprov-jdk18on/1.71/bcprov-jdk18on-1.71.jar +0 -0
  26. data/lib/org/bouncycastle/bctls-jdk18on/1.71/bctls-jdk18on-1.71.jar +0 -0
  27. data/lib/org/bouncycastle/bcutil-jdk18on/1.71/bcutil-jdk18on-1.71.jar +0 -0
  28. data/pom.xml +772 -0
  29. metadata +40 -107
  30. data/History.txt +0 -218
  31. data/License.txt +0 -30
  32. data/README.txt +0 -13
  33. data/TODO-1_9-support.txt +0 -23
  34. data/lib/jopenssl18/openssl/bn.rb +0 -35
  35. data/lib/jopenssl18/openssl/buffering.rb +0 -241
  36. data/lib/jopenssl18/openssl/cipher.rb +0 -65
  37. data/lib/jopenssl18/openssl/config.rb +0 -316
  38. data/lib/jopenssl18/openssl/digest.rb +0 -61
  39. data/lib/jopenssl18/openssl/pkcs7.rb +0 -25
  40. data/lib/jopenssl18/openssl/ssl-internal.rb +0 -179
  41. data/lib/jopenssl18/openssl/ssl.rb +0 -1
  42. data/lib/jopenssl18/openssl/x509-internal.rb +0 -153
  43. data/lib/jopenssl18/openssl/x509.rb +0 -1
  44. data/lib/jopenssl18/openssl.rb +0 -67
  45. data/lib/jopenssl19/openssl/bn.rb +0 -35
  46. data/lib/jopenssl19/openssl/buffering.rb +0 -449
  47. data/lib/jopenssl19/openssl/cipher.rb +0 -65
  48. data/lib/jopenssl19/openssl/config.rb +0 -313
  49. data/lib/jopenssl19/openssl/digest.rb +0 -72
  50. data/lib/jopenssl19/openssl/ssl-internal.rb +0 -177
  51. data/lib/jopenssl19/openssl/ssl.rb +0 -2
  52. data/lib/jopenssl19/openssl/x509-internal.rb +0 -158
  53. data/lib/jopenssl19/openssl/x509.rb +0 -2
  54. data/lib/jopenssl19/openssl.rb +0 -23
  55. data/lib/openssl/pkcs7.rb +0 -5
  56. data/lib/openssl/ssl-internal.rb +0 -5
  57. data/lib/openssl/x509-internal.rb +0 -5
  58. data/test/java/pkcs7_mime_enveloped.message +0 -19
  59. data/test/java/pkcs7_mime_signed.message +0 -30
  60. data/test/java/pkcs7_multipart_signed.message +0 -45
  61. data/test/java/test_java_attribute.rb +0 -25
  62. data/test/java/test_java_bio.rb +0 -42
  63. data/test/java/test_java_mime.rb +0 -173
  64. data/test/java/test_java_pkcs7.rb +0 -772
  65. data/test/java/test_java_smime.rb +0 -177
  66. data/test/test_java.rb +0 -98
  67. data/test/ut_eof.rb +0 -128
@@ -5,15 +5,8 @@ module OpenSSL
5
5
  class PKCS12Error < OpenSSLError
6
6
  end
7
7
 
8
- java_import java.io.StringReader
9
- java_import java.io.StringBufferInputStream
10
- java_import java.security.cert.CertificateFactory
11
- java_import java.security.cert.Certificate
12
- java_import java.security.KeyStore
13
- java_import java.io.ByteArrayOutputStream
14
- java_import org.bouncycastle.openssl.PEMReader
15
-
16
- java.security.Security.add_provider(org.bouncycastle.jce.provider.BouncyCastleProvider.new)
8
+ java_import 'org.jruby.ext.openssl.PEMUtils'
9
+ java_import 'org.jruby.ext.openssl.SecurityHelper'
17
10
 
18
11
  def self.create(pass, name, key, cert, ca = nil)
19
12
  pkcs12 = self.new
@@ -23,114 +16,82 @@ module OpenSSL
23
16
 
24
17
  attr_reader :key, :certificate, :ca_certs
25
18
 
26
- def initialize(str = nil, pass = nil)
27
- if str
28
- if str.is_a?(File)
29
- file = File.open(str.path, "rb")
30
- @der = file.read
31
- file.close
32
- else
33
- @der = str
34
- end
19
+ def initialize(str = nil, password = '')
20
+ return @der = nil unless str
35
21
 
36
- p12_input_stream = StringBufferInputStream.new(@der)
22
+ if str.is_a?(File)
23
+ file = File.open(str.path, "rb")
24
+ @der = file.read
25
+ file.close
26
+ else
27
+ str.force_encoding(Encoding::ASCII_8BIT) if str.respond_to?(:force_encoding)
28
+ @der = str
29
+ end
37
30
 
38
- store = KeyStore.get_instance("PKCS12")
39
- password = pass.nil? ? "" : pass
40
- begin
41
- store.load(p12_input_stream, password.to_java.to_char_array)
42
- rescue java.lang.Exception => e
43
- raise PKCS12Error, "Exception: #{e}"
44
- end
31
+ store = SecurityHelper.getKeyStore("PKCS12")
32
+ store.load(java.io.ByteArrayInputStream.new(@der.to_java_bytes), password.to_java.to_char_array)
45
33
 
46
- aliases = store.aliases
47
- aliases.each { |alias_name|
48
- if store.is_key_entry(alias_name)
49
- begin
50
- java_certificate = store.get_certificate(alias_name)
51
- rescue java.lang.Exception => e
52
- raise PKCS12Error, "Exception: #{e}"
53
- end
54
- if java_certificate
55
- der = String.from_java_bytes(java_certificate.get_encoded)
56
- @certificate = OpenSSL::X509::Certificate.new(der)
57
- end
34
+ aliases = store.aliases
35
+ aliases.each do |alias_name|
36
+ if store.is_key_entry(alias_name)
37
+ if java_certificate = store.get_certificate(alias_name)
38
+ der = String.from_java_bytes(java_certificate.get_encoded)
39
+ @certificate = OpenSSL::X509::Certificate.new(der)
40
+ end
58
41
 
59
- begin
60
- java_key = store.get_key(alias_name, password.to_java.to_char_array)
61
- rescue java.lang.Exception => e
62
- raise PKCS12Error, "Exception: #{e}"
63
- end
64
- if java_key
65
- der = String.from_java_bytes(java_key.get_encoded)
66
- algorithm = java_key.get_algorithm
67
- if algorithm == "RSA"
68
- @key = OpenSSL::PKey::RSA.new(der)
69
- elsif algorithm == "DSA"
70
- @key = OpenSSL::PKey::DSA.new(der)
71
- elsif algorithm == "DH"
72
- @key = OpenSSL::PKey::DH.new(der)
73
- elsif algorithm == "EC"
74
- @key = OpenSSL::PKey::EC.new(der)
75
- else
76
- raise PKCS12Error, "Unknown key algorithm"
77
- end
42
+ java_key = store.get_key(alias_name, password.to_java.to_char_array)
43
+ if java_key
44
+ der = String.from_java_bytes(java_key.get_encoded)
45
+ algorithm = java_key.get_algorithm
46
+ if algorithm == "RSA"
47
+ @key = OpenSSL::PKey::RSA.new(der)
48
+ elsif algorithm == "DSA"
49
+ @key = OpenSSL::PKey::DSA.new(der)
50
+ elsif algorithm == "DH"
51
+ @key = OpenSSL::PKey::DH.new(der)
52
+ elsif algorithm == "EC"
53
+ @key = OpenSSL::PKey::EC.new(der)
54
+ else
55
+ raise PKCS12Error, "Unknown key algorithm #{algorithm}"
78
56
  end
57
+ end
79
58
 
80
- @ca_certs = Array.new
81
- begin
82
- java_ca_certs = store.get_certificate_chain(alias_name)
83
- rescue java.lang.Exception => e
84
- raise PKCS12Error, "Exception #{e}"
85
- end
86
- if java_ca_certs
87
- java_ca_certs.each do |java_ca_cert|
88
- der = String.from_java_bytes(java_ca_cert.get_encoded)
89
- ruby_cert = OpenSSL::X509::Certificate.new(der)
90
- if (ruby_cert.to_pem != @certificate.to_pem)
91
- @ca_certs << ruby_cert
92
- end
93
- end
59
+ @ca_certs = Array.new
60
+ java_ca_certs = store.get_certificate_chain(alias_name)
61
+ if java_ca_certs
62
+ java_ca_certs.each do |java_ca_cert|
63
+ der = String.from_java_bytes(java_ca_cert.get_encoded)
64
+ ruby_cert = OpenSSL::X509::Certificate.new(der)
65
+ if (ruby_cert.to_pem != @certificate.to_pem)
66
+ @ca_certs << ruby_cert
67
+ end
94
68
  end
95
69
  end
96
70
  break
97
- }
98
- else
99
- @der = nil
71
+ end
100
72
  end
73
+ rescue java.lang.Exception => e
74
+ raise PKCS12Error, e.inspect
101
75
  end
102
76
 
103
77
  def generate(pass, alias_name, key, cert, ca = nil)
104
- @key = key
105
- @certificate = cert
106
- @ca_certs = ca
107
-
108
- key_reader = StringReader.new(key.to_pem)
109
- key_pair = PEMReader.new(key_reader).read_object
78
+ @key, @certificate, @ca_certs = key, cert, ca
110
79
 
111
80
  certificates = cert.to_pem
112
- if ca
113
- ca.each { |ca_cert|
114
- certificates << ca_cert.to_pem
115
- }
116
- end
117
-
118
- cert_input_stream = StringBufferInputStream.new(certificates)
119
- certs = CertificateFactory.get_instance("X.509").generate_certificates(cert_input_stream)
81
+ ca.each { |ca_cert| certificates << ca_cert.to_pem } if ca
120
82
 
121
- store = KeyStore.get_instance("PKCS12", "BC")
122
- store.load(nil, nil)
123
- store.set_key_entry(alias_name, key_pair.get_private, nil, certs.to_array(Java::java.security.cert.Certificate[certs.size].new))
124
-
125
- pkcs12_output_stream = ByteArrayOutputStream.new
126
- password = pass.nil? ? "" : pass;
127
83
  begin
128
- store.store(pkcs12_output_stream, password.to_java.to_char_array)
129
- rescue java.lang.Exception => e
130
- raise PKCS12Error, "Exception: #{e}"
131
- end
84
+ der_bytes = PEMUtils.generatePKCS12(
85
+ java.io.StringReader.new(key.to_pem), certificates.to_java_bytes,
86
+ alias_name, ( pass.nil? ? "" : pass ).to_java.to_char_array
87
+ )
88
+ rescue java.security.KeyStoreException, java.security.cert.CertificateException => e
89
+ raise PKCS12Error, e.message
90
+ rescue java.security.GeneralSecurityException, java.io.IOException => e
91
+ raise PKCS12Error, e.inspect
92
+ end
132
93
 
133
- @der = String.from_java_bytes(pkcs12_output_stream.to_byte_array)
94
+ @der = String.from_java_bytes(der_bytes)
134
95
  end
135
96
 
136
97
  def to_der
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ #--
3
+ # Ruby/OpenSSL Project
4
+ # Copyright (C) 2017 Ruby/OpenSSL Project Authors
5
+ #++
6
+
7
+ # module OpenSSL
8
+ # module PKCS5
9
+ # module_function
10
+ #
11
+ # # OpenSSL::PKCS5.pbkdf2_hmac has been renamed to OpenSSL::KDF.pbkdf2_hmac.
12
+ # # This method is provided for backwards compatibility.
13
+ # def pbkdf2_hmac(pass, salt, iter, keylen, digest)
14
+ # OpenSSL::KDF.pbkdf2_hmac(pass, salt: salt, iterations: iter,
15
+ # length: keylen, hash: digest)
16
+ # end
17
+ #
18
+ # def pbkdf2_hmac_sha1(pass, salt, iter, keylen)
19
+ # pbkdf2_hmac(pass, salt, iter, keylen, "sha1")
20
+ # end
21
+ # end
22
+ # end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+ #--
3
+ # Ruby/OpenSSL Project
4
+ # Copyright (C) 2017 Ruby/OpenSSL Project Authors
5
+ #++
6
+
7
+ require_relative 'marshal'
8
+
9
+ module OpenSSL::PKey
10
+ class DH
11
+ include OpenSSL::Marshal
12
+ end
13
+
14
+ class DSA
15
+ include OpenSSL::Marshal
16
+ end
17
+
18
+ if defined?(EC)
19
+ class EC
20
+ include OpenSSL::Marshal
21
+ end
22
+ class EC::Point
23
+ # :call-seq:
24
+ # point.to_bn([conversion_form]) -> OpenSSL::BN
25
+ #
26
+ # Returns the octet string representation of the EC point as an instance of
27
+ # OpenSSL::BN.
28
+ #
29
+ # If _conversion_form_ is not given, the _point_conversion_form_ attribute
30
+ # set to the group is used.
31
+ #
32
+ # See #to_octet_string for more information.
33
+ # def to_bn(conversion_form = group.point_conversion_form)
34
+ # OpenSSL::BN.new(to_octet_string(conversion_form), 2)
35
+ # end
36
+ end
37
+ end
38
+
39
+ class RSA
40
+ include OpenSSL::Marshal
41
+ end
42
+ end