jruby-openssl 0.9.4 → 0.14.0-java

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