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
data/LICENSE.txt ADDED
@@ -0,0 +1,37 @@
1
+ JRuby-OpenSSL is distributed under the same license as JRuby a tri EPL/GPL/LGPL
2
+ license. You can use it, redistribute it and/or modify it under the terms of the:
3
+
4
+ Eclipse Public License version 1.0
5
+ GNU General Public License version 2.0
6
+ GNU Lesser General Public License version 2.1
7
+
8
+ The contents of this file are subject to the Common Public License Version 1.0
9
+ (the "License"); you may not use this file except in compliance with the License.
10
+ You may obtain a copy of the License at http://www.eclipse.org/legal/cpl-v10.html
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
14
+ FOR APARTICULAR PURPOSE AND NONINFRINGEMENT.
15
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
16
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
17
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
18
+ DEALINGS IN THE SOFTWARE.
19
+
20
+ Copyright (C) 2007-2009 Ola Bini <ola.bini@gmail.com>
21
+ Copyright (C) 2009-2018 The JRuby Team
22
+
23
+ Alternatively, the contents of this file may be used under the terms of
24
+ either of the GNU General Public License Version 2 or later (the "GPL"),
25
+ or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26
+ in which case the provisions of the GPL or the LGPL are applicable instead
27
+ of those above. If you wish to allow use of your version of this file only
28
+ under the terms of either the GPL or the LGPL, and not to allow others to
29
+ use your version of this file under the terms of the EPL, indicate your
30
+ decision by deleting the provisions above and replace them with the notice
31
+ and other provisions required by the GPL or the LGPL. If you do not delete
32
+ the provisions above, a recipient may use your version of this file under
33
+ the terms of any one of the EPL, the GPL or the LGPL.
34
+
35
+
36
+ JRuby-OpenSSL includes software by The Legion of the Bouncy Castle Inc.
37
+ Please, visit (http://bouncycastle.org/license.html) for licensing details.
data/Mavenfile CHANGED
@@ -1,11 +1,169 @@
1
1
  #-*- mode: ruby -*-
2
2
 
3
- gemspec
3
+ gemspec :jar => 'jopenssl', :include_jars => true
4
4
 
5
- # just make sure the openssl jar is in place
6
- jar 'org.jruby:openssl', "#{model.version.sub(/.dev/, '')}-SNAPSHOT", :scope => :provided
5
+ distribution_management do
6
+ snapshot_repository :id => :ossrh, :url => 'https://oss.sonatype.org/content/repositories/snapshots'
7
+ repository :id => :ossrh, :url => 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
8
+ end
7
9
 
8
- properties( 'tesla.dump.pom' => 'pom.xml',
9
- 'tesla.dump.readonly' => true )
10
+ java_target = '1.8'
11
+ gen_sources = '${basedir}/target/generated-sources' # hard-coded in AnnotationBinder
12
+
13
+ plugin( 'org.codehaus.mojo:exec-maven-plugin', '1.3.2' ) do
14
+
15
+ =begin
16
+ invoker_main = '-Djruby.bytecode.version=${compiler.target}'
17
+ #invoker_main << ' -classpath '
18
+ invoker_main << ' org.jruby.anno.InvokerGenerator'
19
+ invoker_main << " #{gen_sources}/annotated_classes.txt ${project.build.outputDirectory}"
20
+
21
+ dependency 'org.jruby', 'jruby-core', '${jruby.version}'
22
+
23
+ execute_goal :java, :id => 'invoker-generator', :phase => 'process-classes',
24
+ :mainClass => 'org.jruby.anno.InvokerGenerator', :classpathScope => 'compile',
25
+ #:arguments => [ '${gen.sources}/annotated_classes.txt', '${project.build.outputDirectory}' ] do
26
+ :commandlineArgs => "#{gen_sources}/annotated_classes.txt ${project.build.outputDirectory}",
27
+ :classpathScope => 'runtime', :additionalClasspathElements => [ '${project.build.outputDirectory}' ],
28
+ :includeProjectDependencies => false, :includePluginDependencies => true do
29
+
30
+ #systemProperties do
31
+ # property '-Djruby.bytecode.version=${compiler.target}'
32
+ #end
33
+ =end
34
+
35
+ execute_goal :exec, :id => 'invoker-generator', :phase => 'process-classes',
36
+ :executable => 'java', :classpathScope => 'compile',
37
+ :arguments => [ "-Djruby.bytecode.version=#{java_target}",
38
+ '-classpath', xml( '<classpath/>' ),
39
+ 'org.jruby.anno.InvokerGenerator',
40
+ "#{gen_sources}/annotated_classes.txt",
41
+ '${project.build.outputDirectory}' ]
42
+ end
43
+
44
+ plugin( 'org.codehaus.mojo:build-helper-maven-plugin', '1.9' ) do
45
+ execute_goal 'add-source', :phase => 'process-classes', :sources => [ gen_sources ]
46
+ end
47
+
48
+ compiler_configuration = {
49
+ :source => '1.8', :target => java_target, :release => '8',
50
+ :encoding => 'UTF-8', :debug => true,
51
+ :showWarnings => true, :showDeprecation => true,
52
+ :excludes => [ 'module-info.java' ],
53
+ #:jdkToolchain => { :version => '[1.7,11)' },
54
+ :generatedSourcesDirectory => gen_sources,
55
+ :annotationProcessors => [ 'org.jruby.anno.AnnotationBinder' ]
56
+ }
57
+ compiler_configuration.delete(:release) if ENV_JAVA['java.specification.version'] == '1.8'
58
+
59
+ plugin( :compiler, '3.9.0', compiler_configuration) do
60
+
61
+ #execute_goal :compile, :id => 'annotation-binder', :phase => 'compile',
62
+ # :generatedSourcesDirectory => gen_sources, #:outputDirectory => gen_sources,
63
+ # :annotationProcessors => [ 'org.jruby.anno.AnnotationBinder' ],
64
+ # :proc => 'only', # :compilerReuseStrategy => 'alwaysNew',
65
+ # :useIncrementalCompilation => false, :fork => true, :verbose => true,
66
+ # :compilerArgs => [ '-XDignore.symbol.file=true', '-J-Dfile.encoding=UTF-8' ]
67
+
68
+ execute_goal :compile,
69
+ :id => 'compile-populators', :phase => 'process-classes',
70
+ :includes => [ 'org/jruby/gen/**/*.java' ],
71
+ :optimize => true,
72
+ :compilerArgs => [ '', '-XDignore.symbol.file=true' ]
73
+ end
74
+
75
+ plugin :clean do
76
+ execute_goals( 'clean', :id => 'default-clean', :phase => 'clean',
77
+ 'filesets' => [
78
+ { :directory => 'lib', :includes => [ 'jopenssl.jar' ] },
79
+ { :directory => 'lib/org' },
80
+ { :directory => 'target', :includes => [ '*' ] }
81
+ ],
82
+ 'failOnError' => 'false' )
83
+ end
84
+
85
+ jar 'org.jruby:jruby-core', '9.1.11.0', :scope => :provided
86
+ # for invoker generated classes we need to add javax.annotation when on Java > 8
87
+ jar 'javax.annotation:javax.annotation-api', '1.3.1', :scope => :compile
88
+ jar 'junit:junit', '[4.13.1,)', :scope => :test
89
+
90
+ # NOTE: to build on Java 11 - installing gems fails (due old jossl) with:
91
+ # load error: jopenssl/load -- java.lang.StringIndexOutOfBoundsException
92
+ MVN_JRUBY_VERSION = ENV_JAVA['java.version'].to_i >= 9 ? '9.2.19.0' : '9.1.17.0'
93
+
94
+ jruby_plugin! :gem do
95
+ # when installing dependent gems we want to use the built in openssl not the one from this lib directory
96
+ execute_goal :id => 'default-package', :addProjectClasspath => false, :libDirectory => 'something-which-does-not-exists'
97
+ execute_goals :id => 'default-push', :skip => true
98
+ end
99
+
100
+ # we want to have the snapshots on oss.sonatype.org and the released gems on maven central
101
+ plugin :deploy, '2.8.1' do
102
+ execute_goals( :deploy, :skip => false )
103
+ end
104
+
105
+ supported_bc_versions = %w{ 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 }
106
+
107
+ default_bc_version = File.read File.expand_path('lib/jopenssl/version.rb', File.dirname(__FILE__))
108
+ default_bc_version = default_bc_version[/BOUNCY_CASTLE_VERSION\s?=\s?'(.*?)'/, 1]
109
+
110
+ properties( 'jruby.plugins.version' => '2.0.1', # 2.0.1
111
+ 'jruby.switches' => '-W0', # https://github.com/torquebox/jruby-maven-plugins/issues/94
112
+ 'bc.versions' => default_bc_version,
113
+ 'invoker.test' => '${bc.versions}',
114
+ # allow to skip all tests with -Dmaven.test.skip
115
+ 'invoker.skip' => '${maven.test.skip}',
116
+ 'runit.dir' => 'src/test/ruby/**/test_*.rb',
117
+ 'mavengem.wagon.version' => '1.0.3', # for jruby plugin
118
+ 'mavengem-wagon.version' => '1.0.3', # for polyglot-ruby
119
+ # use this version of jruby for the jruby-maven-plugins
120
+ 'jruby.versions' => MVN_JRUBY_VERSION, 'jruby.version' => MVN_JRUBY_VERSION,
121
+ # dump pom.xml when running 'rmvn'
122
+ 'polyglot.dump.pom' => 'pom.xml', 'polyglot.dump.readonly' => false )
123
+
124
+ # make sure we have the embedded jars in place before we run runit plugin
125
+ plugin! :dependency do
126
+ execute_goal 'copy-dependencies',
127
+ :phase => 'generate-test-resources',
128
+ :outputDirectory => '${basedir}/lib',
129
+ :useRepositoryLayout => true,
130
+ :includeGroupIds => 'org.bouncycastle'
131
+ end
132
+
133
+ jruby_plugin(:runit) { execute_goal( :test, :runitDirectory => '${runit.dir}' ) }
134
+
135
+ invoker_run_options = {
136
+ :id => 'tests-with-different-bc-versions',
137
+ :projectsDirectory => 'integration',
138
+ :pomIncludes => [ '*/pom.xml' ],
139
+ :streamLogs => true,
140
+ # pass those properties on to the test project
141
+ :properties => {
142
+ 'jruby.versions' => '${jruby.versions}',
143
+ 'jruby.modes' => '${jruby.modes}',
144
+ 'jruby.openssl.version' => '${project.version}',
145
+ 'bc.versions' => '${bc.versions}',
146
+ 'runit.dir' => '${runit.dir}' }
147
+ }
148
+
149
+ jruby_9_K_versions = %w{ 9.1.2.0 9.1.8.0 9.1.12.0 9.1.16.0 9.1.17.0 }
150
+ jruby_9_K_versions += %w{ 9.2.0.0 9.2.5.0 9.2.10.0 9.2.17.0 9.2.19.0 }
151
+
152
+ jruby_9_K_versions.each { |version|
153
+ profile :id => "test-#{version}" do
154
+ plugin :invoker, '1.8' do
155
+ execute_goals( :install, :run, invoker_run_options )
156
+ end
157
+ properties 'jruby.version' => version,
158
+ 'jruby.versions' => version,
159
+ 'bc.versions' => supported_bc_versions.join(',')
160
+ end
161
+ }
162
+
163
+ profile :id => 'release' do
164
+ plugin :gpg, '1.6' do
165
+ execute_goal :sign, :phase => :verify
166
+ end
167
+ end
10
168
 
11
169
  # vim: syntax=Ruby
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # JRuby-OpenSSL
2
+
3
+ [JRuby-OpenSSL](https://github.com/jruby/jruby-openssl) is an add-on gem for
4
+ [JRuby](http://jruby.org) that emulates the Ruby OpenSSL native library.
5
+
6
+ Under the hood uses the [Bouncy Castle Crypto APIs](http://www.bouncycastle.org/).
7
+
8
+ Each jruby-openssl gem release includes a certain version, usually the latest available,
9
+ of the library (namely BC Provider and PKIX/CMS/EAC/PKCS/OCSP/TSP/OPENSSL jars).
10
+
11
+ Please report bugs and incompatibilities (preferably with test-cases) to either
12
+ the JRuby [mailing list][1] or the [bug tracker][2].
13
+
14
+ ## Compatibility
15
+
16
+
17
+ | JRuby-OpenSSL | JRuby compat | JVM compat | supported BC |
18
+ | ------------- |:-------------:| ----------:| ------------:|
19
+ | 0.9.6 | 1.6.8-9.0.2 | Java 6-8 | 1.47-1.50 |
20
+ | 0.9.12 | 1.6.8-9.0.5 | Java 6-8 | 1.47-1.52 |
21
+ | 0.9.13 | 1.6.8-9.1.2 | Java 6-8 | 1.49-1.52 |
22
+ | 0.9.14 | 1.6.8-9.1.5 | Java 6-8 | 1.49-1.54 |
23
+ | 0.9.17 | 1.6.8-9.1.5 | Java 6-8 | 1.50-1.54 |
24
+ | ~>0.9.18 | 1.6.8-9.1.x | Java 6-8 | 1.50-1.55 |
25
+ | 0.10.0 | 1.7.20-9.2.x | Java 7-10 | 1.55-1.59 |
26
+ | 0.10.3 | 1.7.20-9.2.x | Java 7-11 | 1.56-1.62 |
27
+ | ~>0.10.5 | 1.7.20-9.3.x | Java 7-11 | 1.60-1.68 |
28
+ | ~>0.11.x | 9.0.x-9.3.x | Java 7-11 | 1.62-1.68 |
29
+ | ~>0.12.x | 9.1.x-9.3.x | Java 8-15 | 1.65-1.68 |
30
+ | ~>0.13.x | 9.1.x-9.3.x | Java 8-17 | 1.68-1.69 |
31
+ | ~>0.14.x | 9.1.x-9.3.x | Java 8-17 | 1.71 |
32
+
33
+ NOTE: backwards JRuby compatibility was not handled for versions <= **0.9.6**
34
+
35
+ ## Security
36
+
37
+ JRuby-OpenSSL is an essential part of [JRuby](http://jruby.org), please report security
38
+ vulnerabilities to `security@jruby.org` as detailed on JRuby's [security page](http://jruby.org/security).
39
+
40
+ Please note that most OpenSSL vulnerabilities do not effect JRuby since its not using
41
+ any of OpenSSL's C code, only Ruby parts (*.rb) are the same as in MRI's OpenSSL library.
42
+
43
+ ## Testing
44
+
45
+ [![Build Status][0]](http://travis-ci.org/jruby/jruby-openssl)
46
+
47
+ rake jar:all # creates pom.xml and generates jopenssl.jar under lib
48
+ mvn test
49
+
50
+ will run (junit as well as ruby) tests and a some ruby tests against the default
51
+ jruby version. to pick a different JRuby version run
52
+
53
+ mvn test -Djruby.versions=9.2.8.0
54
+
55
+ for running integration-tests the gem will be first installed and then the same
56
+ tests run for each possible bouncy-castle version (see [listing][3]), run with
57
+
58
+ mvn verify -P test-9.2.9.0,test-9.1.17.0
59
+
60
+ or pick a bouncy-castle version
61
+
62
+ mvn verify -P test-9.2.9.0 -Dbc.versions=1.60
63
+
64
+ NOTE: you can pick any jruby version which is on [central][4] or on [ci.jruby][5]
65
+
66
+ ## License
67
+
68
+ (c) 2009-2020 JRuby distributed under EPL 1.0/GPL 2.0/LGPL 2.1
69
+
70
+ [0]: https://secure.travis-ci.org/jruby/jruby-openssl.svg
71
+ [1]: http://xircles.codehaus.org/projects/jruby/lists
72
+ [2]: https://github.com/jruby/jruby/issues
73
+ [3]: https://github.com/jruby/jruby-openssl/tree/master/integration
74
+ [4]: http://central.maven.org/maven2/org/jruby/
75
+ [5]: http://ci.jruby.org/snapshots/maven/org.jruby/
data/Rakefile CHANGED
@@ -1,7 +1,57 @@
1
1
  #-*- mode: ruby -*-
2
2
 
3
- require 'maven/ruby/tasks'
3
+ #Rake::Task[:jar].clear rescue nil
4
+ desc "Package jopenssl.jar with the compiled classes"
5
+ task :jar do
6
+ sh( './mvnw prepare-package -Dmaven.test.skip=true' )
7
+ end
8
+ namespace :jar do
9
+ desc "Package jopenssl.jar file (and dependendent jars)"
10
+ task :all do
11
+ sh( './mvnw package -Dmaven.test.skip=true' )
12
+ end
13
+ end
14
+ task :test_prepare do
15
+ sh( './mvnw prepare-package -Dmaven.test.skip=true' )
16
+ sh( './mvnw test-compile' ) # separate step due -Dmaven.test.skip=true
17
+ end
4
18
 
5
- # the actual build configuration is inside the Mavenfile
19
+ task :clean do
20
+ sh( './mvnw clean' )
21
+ end
22
+
23
+ task :build do
24
+ sh( './mvnw clean package -Dmaven.test.skip=true' )
25
+ end
6
26
 
7
27
  task :default => :build
28
+
29
+ file('lib/jopenssl.jar') { Rake::Task['jar'].invoke }
30
+
31
+ require 'rake/testtask'
32
+ Rake::TestTask.new do |task|
33
+ task.libs << File.expand_path('src/test/ruby', File.dirname(__FILE__))
34
+ test_files = FileList['src/test/ruby/**/test*.rb'].to_a
35
+ task.test_files = test_files.map { |path| path.sub('src/test/ruby/', '') }
36
+ task.verbose = true
37
+ task.loader = :direct
38
+ task.ruby_opts = [ '-C', 'src/test/ruby', '-rbundler/setup' ]
39
+ end
40
+ task :test => 'lib/jopenssl.jar'
41
+
42
+ namespace :integration do
43
+ it_path = File.expand_path('../src/test/integration', __FILE__)
44
+ task :install do
45
+ ruby "-C #{it_path} -S bundle install"
46
+ end
47
+ # desc "Run IT tests"
48
+ task :test => 'lib/jopenssl.jar' do
49
+ unless File.exist?(File.join(it_path, 'Gemfile.lock'))
50
+ raise "bundle not installed, run `rake integration:install'"
51
+ end
52
+ loader = "ARGV.each { |f| require f }"
53
+ lib = [ File.expand_path('../lib', __FILE__), it_path ]
54
+ test_files = FileList['src/test/integration/*_test.rb'].map { |path| path.sub('src/test/integration/', '') }
55
+ ruby "-I#{lib.join(':')} -C src/test/integration -e \"#{loader}\" #{test_files.map { |f| "\"#{f}\"" }.join(' ')}"
56
+ end
57
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: false
2
+
3
+ module OpenSSL
4
+
5
+ module PKey
6
+
7
+ class DH
8
+
9
+ def set_key(pub_key, priv_key)
10
+ self.pub_key = pub_key
11
+ self.priv_key = priv_key
12
+ self
13
+ end
14
+
15
+ def set_pqg(p, q, g)
16
+ self.p = p
17
+ if respond_to?(:q)
18
+ self.q = q
19
+ else # TODO self.q = q
20
+ OpenSSL.warn "JRuby-OpenSSL does not support setting q param on #{inspect}" if q
21
+ end
22
+ self.g = g
23
+ self
24
+ end
25
+
26
+ end
27
+
28
+ class DSA
29
+
30
+ def set_key(pub_key, priv_key)
31
+ self.pub_key = pub_key
32
+ self.priv_key = priv_key
33
+ self
34
+ end
35
+
36
+ def set_pqg(p, q, g)
37
+ self.p = p
38
+ self.q = q
39
+ self.g = g
40
+ self
41
+ end
42
+
43
+ end
44
+
45
+ class RSA
46
+
47
+ def set_key(n, e, d)
48
+ self.n = n
49
+ self.e = e
50
+ self.d = d
51
+ self
52
+ end
53
+
54
+ def set_factors(p, q)
55
+ self.p = p
56
+ self.q = q
57
+ self
58
+ end
59
+
60
+ def set_crt_params(dmp1, dmq1, iqmp)
61
+ self.dmp1 = dmp1
62
+ self.dmq1 = dmq1
63
+ self.iqmp = iqmp
64
+ self
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ end
data/lib/jopenssl/load.rb CHANGED
@@ -1,23 +1,82 @@
1
- unless defined? JRUBY_VERSION
2
- warn 'Loading jruby-openssl in a non-JRuby interpreter'
3
- end
1
+ warn 'Loading jruby-openssl gem in a non-JRuby interpreter' unless defined? JRUBY_VERSION
2
+
3
+ require 'jopenssl/version'
4
4
 
5
- # Load bouncy-castle gem if available
6
- begin
7
- require 'bouncy-castle-java'
8
- rescue LoadError
9
- # runs under restricted mode or uses builtin BC
5
+ # NOTE: assuming user does pull in BC .jars from somewhere else on the CP
6
+ unless ENV_JAVA['jruby.openssl.load.jars'].eql?('false')
7
+ version = JOpenSSL::BOUNCY_CASTLE_VERSION
8
+ begin
9
+ require 'jar-dependencies'
10
+ # if we have jar-dependencies we let it track the jars
11
+ require_jar 'org.bouncycastle', 'bcprov-jdk18on', version
12
+ require_jar 'org.bouncycastle', 'bcpkix-jdk18on', version
13
+ require_jar 'org.bouncycastle', 'bcutil-jdk18on', version
14
+ require_jar 'org.bouncycastle', 'bctls-jdk18on', version
15
+ bc_jars = true
16
+ rescue LoadError, RuntimeError
17
+ bc_jars = false
18
+ end
19
+ unless bc_jars
20
+ load "org/bouncycastle/bcprov-jdk18on/#{version}/bcprov-jdk18on-#{version}.jar"
21
+ load "org/bouncycastle/bcpkix-jdk18on/#{version}/bcpkix-jdk18on-#{version}.jar"
22
+ load "org/bouncycastle/bcutil-jdk18on/#{version}/bcutil-jdk18on-#{version}.jar"
23
+ load "org/bouncycastle/bctls-jdk18on/#{version}/bctls-jdk18on-#{version}.jar"
24
+ end
10
25
  end
11
26
 
12
- # Load extension
13
- require 'jruby'
14
27
  require 'jopenssl.jar'
15
- org.jruby.ext.openssl.OSSLLibrary.new.load(JRuby.runtime, false)
16
28
 
17
- if RUBY_VERSION >= '1.9.0'
18
- load('jopenssl19/openssl.rb')
19
- else
20
- load('jopenssl18/openssl.rb')
29
+ if JRuby::Util.respond_to?(:load_ext) # JRuby 9.2
30
+ JRuby::Util.load_ext('org.jruby.ext.openssl.OpenSSL')
31
+ else; require 'jruby'
32
+ org.jruby.ext.openssl.OpenSSL.load(JRuby.runtime)
33
+ end
34
+
35
+ if RUBY_VERSION > '2.3'
36
+ load 'jopenssl/_compat23.rb'
37
+ end
38
+
39
+ # NOTE: content bellow should live in *lib/openssl.rb* but due RubyGems/Bundler
40
+ # `autoload :OpenSSL` this will cause issues if an older version (0.11) is the
41
+ # default gem under JRuby 9.2 (which on auto-load does not trigger a dynamic
42
+ # require - this is only fixed in JRuby 9.3)
43
+
44
+ module OpenSSL
45
+ autoload :Config, 'openssl/config' unless const_defined?(:Config, false)
46
+ autoload :PKCS12, 'openssl/pkcs12'
21
47
  end
22
48
 
23
- require 'openssl/pkcs12'
49
+ =begin
50
+ = Info
51
+ 'OpenSSL for Ruby 2' project
52
+ Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
53
+ All rights reserved.
54
+
55
+ = Licence
56
+ This program is licensed under the same licence as Ruby.
57
+ (See the file 'LICENCE'.)
58
+ =end
59
+
60
+ require 'openssl/bn'
61
+ require 'openssl/pkey'
62
+ require 'openssl/cipher'
63
+ #require 'openssl/config' if OpenSSL.const_defined?(:Config, false)
64
+ require 'openssl/digest'
65
+ require 'openssl/hmac'
66
+ require 'openssl/x509'
67
+ require 'openssl/ssl'
68
+ require 'openssl/pkcs5'
69
+
70
+ module OpenSSL
71
+ # call-seq:
72
+ # OpenSSL.secure_compare(string, string) -> boolean
73
+ #
74
+ # Constant time memory comparison. Inputs are hashed using SHA-256 to mask
75
+ # the length of the secret. Returns +true+ if the strings are identical,
76
+ # +false+ otherwise.
77
+ def self.secure_compare(a, b)
78
+ hashed_a = OpenSSL::Digest.digest('SHA256', a)
79
+ hashed_b = OpenSSL::Digest.digest('SHA256', b)
80
+ OpenSSL.fixed_length_secure_compare(hashed_a, hashed_b) && a == b
81
+ end
82
+ end
@@ -1,5 +1,10 @@
1
- module Jopenssl
2
- module Version
3
- VERSION = "0.9.4"
4
- end
1
+ module JOpenSSL
2
+ VERSION = '0.14.0'
3
+ BOUNCY_CASTLE_VERSION = '1.71'
4
+ end
5
+
6
+ Object.class_eval do
7
+ Jopenssl = JOpenSSL
8
+ private_constant :Jopenssl if respond_to?(:private_constant)
9
+ deprecate_constant :Jopenssl if respond_to?(:deprecate_constant)
5
10
  end
data/lib/jopenssl.jar CHANGED
Binary file
data/lib/openssl/bn.rb CHANGED
@@ -1,5 +1,40 @@
1
- if RUBY_VERSION >= '1.9.0'
2
- load('jopenssl19/openssl/bn.rb')
3
- else
4
- load('jopenssl18/openssl/bn.rb')
5
- end
1
+ # frozen_string_literal: true
2
+ #--
3
+ #
4
+ # = Ruby-space definitions that completes C-space funcs for BN
5
+ #
6
+ # = Info
7
+ # 'OpenSSL for Ruby 2' project
8
+ # Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
9
+ # All rights reserved.
10
+ #
11
+ # = Licence
12
+ # This program is licensed under the same licence as Ruby.
13
+ # (See the file 'LICENCE'.)
14
+ #++
15
+
16
+ module OpenSSL
17
+ class BN
18
+ include Comparable
19
+
20
+ def pretty_print(q)
21
+ q.object_group(self) {
22
+ q.text ' '
23
+ q.text to_i.to_s
24
+ }
25
+ end
26
+ end # BN
27
+ end # OpenSSL
28
+
29
+ ##
30
+ #--
31
+ # Add double dispatch to Integer
32
+ #++
33
+ class Integer
34
+ # Casts an Integer as an OpenSSL::BN
35
+ #
36
+ # See `man bn` for more info.
37
+ def to_bn
38
+ OpenSSL::BN::new(self)
39
+ end
40
+ end # Integer