redcar 0.3.2dev → 0.3.3
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.
- data/CHANGES +49 -2
- data/README.md +2 -7
- data/ROADMAP.md +8 -9
- data/Rakefile +29 -44
- data/bin/redcar +11 -2
- data/lib/openssl/History.txt +75 -0
- data/lib/openssl/License.txt +30 -0
- data/lib/openssl/Manifest.txt +99 -0
- data/lib/openssl/README.txt +24 -0
- data/lib/openssl/Rakefile +71 -0
- data/lib/openssl/build.properties.SAMPLE +7 -0
- data/lib/openssl/build.xml +57 -0
- data/lib/openssl/lib/jopenssl/version.rb +5 -0
- data/lib/openssl/lib/openssl.rb +24 -0
- data/lib/openssl/lib/openssl/bn.rb +33 -0
- data/lib/openssl/lib/openssl/buffering.rb +239 -0
- data/lib/openssl/lib/openssl/cipher.rb +56 -0
- data/lib/openssl/lib/openssl/digest.rb +46 -0
- data/lib/openssl/lib/openssl/dummy.rb +34 -0
- data/lib/openssl/lib/openssl/dummyssl.rb +13 -0
- data/lib/openssl/lib/openssl/ssl.rb +135 -0
- data/lib/openssl/lib/openssl/x509.rb +154 -0
- data/lib/openssl/mocha/COPYING +3 -0
- data/lib/openssl/mocha/MIT-LICENSE +7 -0
- data/lib/openssl/mocha/README +35 -0
- data/lib/openssl/mocha/RELEASE +171 -0
- data/lib/openssl/mocha/Rakefile +147 -0
- data/lib/openssl/mocha/TODO +48 -0
- data/lib/openssl/mocha/examples/misc.rb +36 -0
- data/lib/openssl/mocha/examples/mocha.rb +26 -0
- data/lib/openssl/mocha/examples/stubba.rb +65 -0
- data/lib/openssl/mocha/init.rb +3 -0
- data/lib/openssl/mocha/lib/mocha.rb +19 -0
- data/lib/openssl/mocha/lib/mocha/any_instance_method.rb +35 -0
- data/lib/openssl/mocha/lib/mocha/auto_verify.rb +111 -0
- data/lib/openssl/mocha/lib/mocha/central.rb +35 -0
- data/lib/openssl/mocha/lib/mocha/class_method.rb +62 -0
- data/lib/openssl/mocha/lib/mocha/deprecation.rb +22 -0
- data/lib/openssl/mocha/lib/mocha/exception_raiser.rb +17 -0
- data/lib/openssl/mocha/lib/mocha/expectation.rb +382 -0
- data/lib/openssl/mocha/lib/mocha/expectation_error.rb +6 -0
- data/lib/openssl/mocha/lib/mocha/expectation_list.rb +45 -0
- data/lib/openssl/mocha/lib/mocha/infinite_range.rb +25 -0
- data/lib/openssl/mocha/lib/mocha/inspect.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/instance_method.rb +8 -0
- data/lib/openssl/mocha/lib/mocha/is_a.rb +9 -0
- data/lib/openssl/mocha/lib/mocha/metaclass.rb +7 -0
- data/lib/openssl/mocha/lib/mocha/missing_expectation.rb +27 -0
- data/lib/openssl/mocha/lib/mocha/mock.rb +200 -0
- data/lib/openssl/mocha/lib/mocha/multiple_yields.rb +20 -0
- data/lib/openssl/mocha/lib/mocha/no_yields.rb +11 -0
- data/lib/openssl/mocha/lib/mocha/object.rb +110 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers.rb +9 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/all_of.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/any_of.rb +44 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/anything.rb +30 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_entry.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_key.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_value.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/includes.rb +37 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/instance_of.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/parameter_matchers/kind_of.rb +39 -0
- data/lib/openssl/mocha/lib/mocha/pretty_parameters.rb +28 -0
- data/lib/openssl/mocha/lib/mocha/return_values.rb +31 -0
- data/lib/openssl/mocha/lib/mocha/setup_and_teardown.rb +23 -0
- data/lib/openssl/mocha/lib/mocha/single_return_value.rb +24 -0
- data/lib/openssl/mocha/lib/mocha/single_yield.rb +18 -0
- data/lib/openssl/mocha/lib/mocha/standalone.rb +32 -0
- data/lib/openssl/mocha/lib/mocha/stub.rb +18 -0
- data/lib/openssl/mocha/lib/mocha/test_case_adapter.rb +49 -0
- data/lib/openssl/mocha/lib/mocha/yield_parameters.rb +31 -0
- data/lib/openssl/mocha/lib/mocha_standalone.rb +2 -0
- data/lib/openssl/mocha/lib/stubba.rb +2 -0
- data/lib/openssl/mocha/templates/html_with_google_analytics.rb +742 -0
- data/lib/openssl/mocha/test/acceptance/expected_invocation_count_acceptance_test.rb +187 -0
- data/lib/openssl/mocha/test/acceptance/mocha_acceptance_test.rb +98 -0
- data/lib/openssl/mocha/test/acceptance/mocked_methods_dispatch_acceptance_test.rb +71 -0
- data/lib/openssl/mocha/test/acceptance/parameter_matcher_acceptance_test.rb +63 -0
- data/lib/openssl/mocha/test/acceptance/standalone_acceptance_test.rb +131 -0
- data/lib/openssl/mocha/test/acceptance/stubba_acceptance_test.rb +102 -0
- data/lib/openssl/mocha/test/active_record_test_case.rb +36 -0
- data/lib/openssl/mocha/test/deprecation_disabler.rb +15 -0
- data/lib/openssl/mocha/test/execution_point.rb +34 -0
- data/lib/openssl/mocha/test/integration/mocha_test_result_integration_test.rb +105 -0
- data/lib/openssl/mocha/test/integration/stubba_integration_test.rb +89 -0
- data/lib/openssl/mocha/test/integration/stubba_test_result_integration_test.rb +85 -0
- data/lib/openssl/mocha/test/method_definer.rb +18 -0
- data/lib/openssl/mocha/test/test_helper.rb +12 -0
- data/lib/openssl/mocha/test/test_runner.rb +31 -0
- data/lib/openssl/mocha/test/unit/any_instance_method_test.rb +124 -0
- data/lib/openssl/mocha/test/unit/array_inspect_test.rb +16 -0
- data/lib/openssl/mocha/test/unit/auto_verify_test.rb +122 -0
- data/lib/openssl/mocha/test/unit/central_test.rb +124 -0
- data/lib/openssl/mocha/test/unit/class_method_test.rb +196 -0
- data/lib/openssl/mocha/test/unit/date_time_inspect_test.rb +21 -0
- data/lib/openssl/mocha/test/unit/expectation_list_test.rb +69 -0
- data/lib/openssl/mocha/test/unit/expectation_raiser_test.rb +28 -0
- data/lib/openssl/mocha/test/unit/expectation_test.rb +399 -0
- data/lib/openssl/mocha/test/unit/hash_inspect_test.rb +16 -0
- data/lib/openssl/mocha/test/unit/infinite_range_test.rb +53 -0
- data/lib/openssl/mocha/test/unit/metaclass_test.rb +22 -0
- data/lib/openssl/mocha/test/unit/missing_expectation_test.rb +45 -0
- data/lib/openssl/mocha/test/unit/mock_test.rb +316 -0
- data/lib/openssl/mocha/test/unit/multiple_yields_test.rb +18 -0
- data/lib/openssl/mocha/test/unit/no_yield_test.rb +18 -0
- data/lib/openssl/mocha/test/unit/object_inspect_test.rb +35 -0
- data/lib/openssl/mocha/test/unit/object_test.rb +165 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/all_of_test.rb +26 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/any_of_test.rb +26 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/anything_test.rb +21 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/has_entry_test.rb +25 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/has_key_test.rb +25 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/has_value_test.rb +25 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/includes_test.rb +25 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/instance_of_test.rb +25 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/kind_of_test.rb +25 -0
- data/lib/openssl/mocha/test/unit/parameter_matchers/stub_matcher.rb +22 -0
- data/lib/openssl/mocha/test/unit/pretty_parameters_test.rb +32 -0
- data/lib/openssl/mocha/test/unit/return_values_test.rb +63 -0
- data/lib/openssl/mocha/test/unit/setup_and_teardown_test.rb +76 -0
- data/lib/openssl/mocha/test/unit/single_return_value_test.rb +33 -0
- data/lib/openssl/mocha/test/unit/single_yield_test.rb +18 -0
- data/lib/openssl/mocha/test/unit/string_inspect_test.rb +11 -0
- data/lib/openssl/mocha/test/unit/stub_test.rb +24 -0
- data/lib/openssl/mocha/test/unit/yield_parameters_test.rb +93 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/FOLDERS +53 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/LICENSE +340 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/README +117 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/bin/coderay +77 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/bin/coderay_stylesheet +4 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay.rb +319 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/duo.rb +29 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoder.rb +173 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/_map.rb +8 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/count.rb +21 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/debug.rb +46 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/div.rb +20 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html.rb +260 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/classes.rb +77 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/css.rb +65 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/numerization.rb +122 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/output.rb +195 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/null.rb +26 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/page.rb +21 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/span.rb +20 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/statistic.rb +81 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/text.rb +33 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/tokens.rb +44 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/xml.rb +71 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/yaml.rb +22 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/file_type.rb +182 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/gzip_simple.rb +122 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/plugin.rb +326 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/word_list.rb +119 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanner.rb +238 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/_map.rb +15 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/c.rb +163 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/debug.rb +60 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/delphi.rb +149 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/html.rb +177 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/nitro_xhtml.rb +133 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/plaintext.rb +16 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/rhtml.rb +73 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/ruby.rb +367 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/ruby/patterns.rb +230 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/xml.rb +18 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/style.rb +20 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/_map.rb +7 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/cycnus.rb +125 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/murphy.rb +119 -0
- data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/tokens.rb +368 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/CHANGES +295 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/MIT-LICENSE +21 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/README +129 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/Rakefile +152 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project.rb +19 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/open_uri.rb +22 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/pathname.rb +36 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/string.rb +5 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/http/multipart.rb +32 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/patois.rb +1 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/patois/parser.rb +99 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project.rb +4 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/base.rb +9 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/codehaus.rb +1 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/codehaus/codehaus_project_svn.rb +31 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/trac.rb +1 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/trac/trac_project.rb +54 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge.rb +5 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/ruby_forge.rb +47 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/session.rb +177 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/source_forge.rb +50 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/xfile.rb +45 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/xforge_base.rb +85 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project_analyzer.rb +36 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/release/freshmeat.rb +267 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/release/raa.rb +572 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web.rb +2 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web/browser.rb +112 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web/pathname.rb +89 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker.rb +6 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/base.rb +24 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/digit_issues.rb +34 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/issue.rb +57 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira.rb +2 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira/jira_issues.rb +35 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira/jira_tracker.rb +149 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/trac.rb +1 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/trac/trac_tracker.rb +33 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge.rb +3 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +17 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/source_forge_tracker.rb +17 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/xforge_tracker.rb +191 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/version_parser.rb +52 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge.rb +3 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/base.rb +64 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/news_publisher.rb +97 -0
- data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/release.rb +134 -0
- data/lib/openssl/nbproject/genfiles.properties +5 -0
- data/lib/openssl/nbproject/jdk.xml +157 -0
- data/lib/openssl/nbproject/nbjdk.properties +1 -0
- data/lib/openssl/nbproject/nbjdk.xml +16 -0
- data/lib/openssl/nbproject/project.xml +117 -0
- data/lib/openssl/src/java/JopensslService.java +41 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/ASN1.java +930 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Attribute.java +132 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/BN.java +769 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/BouncyCastlePEMHandler.java +69 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Callable.java +10 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Cipher.java +661 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/CipherStrings.java +1827 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Config.java +49 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/DefaultPEMHandler.java +44 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Digest.java +207 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/HMAC.java +183 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/NetscapeSPKI.java +212 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/OpenSSLImpl.java +341 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/OpenSSLReal.java +113 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PEMHandler.java +40 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PKCS10CertificationRequestExt.java +159 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PKCS7.java +642 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PKey.java +154 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyDH.java +401 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyDSA.java +419 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyRSA.java +762 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Random.java +103 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Request.java +336 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/SSL.java +71 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/SSLContext.java +358 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/SSLSocket.java +561 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/SimpleSecretKey.java +53 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/Utils.java +60 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509.java +108 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509CRL.java +446 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509Cert.java +520 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509Extensions.java +751 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509Name.java +405 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509Revoked.java +111 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509Store.java +282 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/X509StoreCtx.java +206 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/ASN1Registry.java +5135 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Attribute.java +79 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/BIO.java +345 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/BIOFilter.java +38 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Base64BIOFilter.java +84 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/CipherBIOFilter.java +157 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Digest.java +126 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/EVP.java +136 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/EncContent.java +178 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Encrypt.java +77 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Envelope.java +169 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/IssuerAndSerial.java +35 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MemBIO.java +117 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MessageDigestBIOFilter.java +76 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Mime.java +245 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MimeHeader.java +103 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MimeParam.java +69 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/NotVerifiedPKCS7Exception.java +38 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/NullSinkBIO.java +52 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java +1276 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java +168 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataData.java +88 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataDigest.java +64 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEncrypted.java +61 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEnveloped.java +85 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java +127 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java +91 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7Exception.java +68 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java +244 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SMIME.java +281 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java +202 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Signed.java +345 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SignerInfoWithPkey.java +365 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/TypeDiscriminating.java +34 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/impl/utils/Base64.java +1809 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/util/Base64Coder.java +103 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CRL.java +59 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Certificate.java +57 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CertificateFile.java +46 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CertificateHashDir.java +46 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function0.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function1.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function2.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function3.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function4.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function5.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Lookup.java +560 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/LookupMethod.java +84 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Name.java +85 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java +1210 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PKey.java +41 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PolicyTree.java +36 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Purpose.java +475 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Store.java +377 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/StoreContext.java +1356 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Trust.java +279 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/VerifyParameter.java +324 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Aux.java +43 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509AuxCertificate.java +170 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Error.java +70 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Object.java +88 -0
- data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Utils.java +541 -0
- data/lib/openssl/test/cert_with_ec_pk.cer +27 -0
- data/lib/openssl/test/fixture/ca_path/72fa7371.0 +19 -0
- data/lib/openssl/test/fixture/ca_path/verisign.pem +19 -0
- data/lib/openssl/test/fixture/cacert.pem +23 -0
- data/lib/openssl/test/fixture/cert_localhost.pem +19 -0
- data/lib/openssl/test/fixture/common.pem +48 -0
- data/lib/openssl/test/fixture/localhost_keypair.pem +18 -0
- data/lib/openssl/test/fixture/max.pem +29 -0
- data/lib/openssl/test/fixture/purpose/b70a5bc1.0 +24 -0
- data/lib/openssl/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
- data/lib/openssl/test/fixture/purpose/ca/ca_config.rb +37 -0
- data/lib/openssl/test/fixture/purpose/ca/cacert.pem +24 -0
- data/lib/openssl/test/fixture/purpose/ca/newcerts/2_cert.pem +19 -0
- data/lib/openssl/test/fixture/purpose/ca/newcerts/3_cert.pem +19 -0
- data/lib/openssl/test/fixture/purpose/ca/private/cakeypair.pem +30 -0
- data/lib/openssl/test/fixture/purpose/ca/serial +1 -0
- data/lib/openssl/test/fixture/purpose/cacert.pem +24 -0
- data/lib/openssl/test/fixture/purpose/scripts/gen_cert.rb +127 -0
- data/lib/openssl/test/fixture/purpose/scripts/gen_csr.rb +50 -0
- data/lib/openssl/test/fixture/purpose/scripts/init_ca.rb +66 -0
- data/lib/openssl/test/fixture/purpose/sslclient.pem +19 -0
- data/lib/openssl/test/fixture/purpose/sslclient/csr.pem +10 -0
- data/lib/openssl/test/fixture/purpose/sslclient/keypair.pem +15 -0
- data/lib/openssl/test/fixture/purpose/sslclient/sslclient.pem +19 -0
- data/lib/openssl/test/fixture/purpose/sslserver.pem +19 -0
- data/lib/openssl/test/fixture/purpose/sslserver/csr.pem +10 -0
- data/lib/openssl/test/fixture/purpose/sslserver/keypair.pem +15 -0
- data/lib/openssl/test/fixture/purpose/sslserver/sslserver.pem +19 -0
- data/lib/openssl/test/fixture/verisign.pem +19 -0
- data/lib/openssl/test/fixture/verisign_c3.pem +14 -0
- data/lib/openssl/test/openssl/ssl_server.rb +99 -0
- data/lib/openssl/test/openssl/test_asn1.rb +199 -0
- data/lib/openssl/test/openssl/test_cipher.rb +196 -0
- data/lib/openssl/test/openssl/test_digest.rb +88 -0
- data/lib/openssl/test/openssl/test_hmac.rb +44 -0
- data/lib/openssl/test/openssl/test_ns_spki.rb +69 -0
- data/lib/openssl/test/openssl/test_pair.rb +149 -0
- data/lib/openssl/test/openssl/test_pkcs7.rb +160 -0
- data/lib/openssl/test/openssl/test_pkey_rsa.rb +49 -0
- data/lib/openssl/test/openssl/test_ssl.rb +413 -0
- data/lib/openssl/test/openssl/test_x509cert.rb +236 -0
- data/lib/openssl/test/openssl/test_x509crl.rb +234 -0
- data/lib/openssl/test/openssl/test_x509ext.rb +95 -0
- data/lib/openssl/test/openssl/test_x509name.rb +281 -0
- data/lib/openssl/test/openssl/test_x509req.rb +178 -0
- data/lib/openssl/test/openssl/test_x509store.rb +245 -0
- data/lib/openssl/test/openssl/utils.rb +135 -0
- data/lib/openssl/test/pkcs7_mime_enveloped.message +19 -0
- data/lib/openssl/test/pkcs7_mime_signed.message +30 -0
- data/lib/openssl/test/pkcs7_multipart_signed.message +45 -0
- data/lib/openssl/test/ref/compile.rb +8 -0
- data/lib/openssl/test/ref/pkcs1 +0 -0
- data/lib/openssl/test/ref/pkcs1.c +21 -0
- data/lib/openssl/test/test_cipher.rb +95 -0
- data/lib/openssl/test/test_integration.rb +139 -0
- data/lib/openssl/test/test_java.rb +98 -0
- data/lib/openssl/test/test_java_attribute.rb +25 -0
- data/lib/openssl/test/test_java_bio.rb +42 -0
- data/lib/openssl/test/test_java_mime.rb +173 -0
- data/lib/openssl/test/test_java_pkcs7.rb +769 -0
- data/lib/openssl/test/test_java_smime.rb +177 -0
- data/lib/openssl/test/test_openssl.rb +34 -0
- data/lib/openssl/test/test_openssl_x509.rb +34 -0
- data/lib/openssl/test/test_parse_certificate.rb +20 -0
- data/lib/openssl/test/test_pkey.rb +46 -0
- data/lib/openssl/test/test_x509store.rb +155 -0
- data/lib/openssl/test/ut_eof.rb +128 -0
- data/lib/redcar.rb +134 -8
- data/lib/redcar/installer.rb +46 -11
- data/lib/redcar/runner.rb +2 -1
- data/lib/redcar/usage.rb +12 -5
- data/lib/redcar_quick_start.rb +37 -0
- data/plugins/application/features/support/env.rb +9 -1
- data/plugins/application/icons/redcar_icon_beta.png +0 -0
- data/plugins/application/lib/application.rb +113 -43
- data/plugins/application/lib/application/clipboard.rb +28 -4
- data/plugins/application/lib/application/command.rb +4 -12
- data/plugins/application/lib/application/command/executor.rb +2 -2
- data/plugins/application/lib/application/keymap.rb +39 -0
- data/plugins/application/lib/application/keymap/builder.rb +19 -0
- data/plugins/application/lib/application/speedbar.rb +33 -24
- data/plugins/application/lib/application/tab.rb +15 -0
- data/plugins/application/lib/application/window.rb +28 -5
- data/plugins/application/spec/application/clipboard_spec.rb +20 -1
- data/plugins/application/spec/application/command/executor_spec.rb +7 -2
- data/plugins/application/spec/application/command_spec.rb +0 -5
- data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
- data/plugins/application/spec/application/menu_spec.rb +30 -0
- data/plugins/application/spec/application/speedbar_spec.rb +30 -6
- data/plugins/application/spec/application/window_spec.rb +2 -2
- data/plugins/application/spec/spec_helper.rb +1 -1
- data/plugins/application_swt/lib/application_swt.rb +3 -0
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +10 -1
- data/plugins/application_swt/lib/application_swt/html_tab.rb +1 -0
- data/plugins/application_swt/lib/application_swt/menu.rb +4 -3
- data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +12 -4
- data/plugins/application_swt/lib/application_swt/speedbar.rb +105 -19
- data/plugins/application_swt/lib/application_swt/swt_wrapper.rb +2 -0
- data/plugins/application_swt/lib/application_swt/window.rb +55 -23
- data/plugins/application_swt/spec/spec_helper.rb +0 -1
- data/plugins/auto_completer/lib/auto_completer.rb +57 -3
- data/plugins/auto_indenter/lib/auto_indenter.rb +1 -1
- data/plugins/core/lib/core.rb +5 -3
- data/plugins/core/lib/core/interface.rb +73 -0
- data/plugins/core/lib/core/model.rb +2 -0
- data/plugins/core/lib/core/observable.rb +12 -1
- data/plugins/core/lib/core/observable_struct.rb +34 -0
- data/plugins/core/lib/core/plugin/storage.rb +16 -3
- data/plugins/core/lib/core/reentry_helpers.rb +13 -0
- data/plugins/core/spec/core/observable_spec.rb +13 -0
- data/plugins/core/spec/core/storage_spec.rb +18 -0
- data/plugins/core/spec/spec_helper.rb +1 -0
- data/plugins/edit_view/features/cut_and_paste.feature +4 -2
- data/plugins/edit_view/features/soft_tabs.feature +243 -0
- data/plugins/edit_view/features/step_definitions/editing_steps.rb +91 -2
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +1 -1
- data/plugins/edit_view/features/tabs.feature +146 -0
- data/plugins/edit_view/lib/edit_view.rb +197 -8
- data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +121 -0
- data/plugins/edit_view/lib/edit_view/actions/deletion.rb +30 -0
- data/plugins/edit_view/lib/edit_view/actions/tab.rb +66 -0
- data/plugins/edit_view/lib/edit_view/command.rb +0 -2
- data/plugins/edit_view/lib/edit_view/document.rb +62 -27
- data/plugins/edit_view/lib/edit_view/document/command.rb +11 -0
- data/plugins/edit_view/lib/edit_view/edit_tab.rb +2 -1
- data/plugins/edit_view/lib/edit_view/info_speedbar.rb +69 -0
- data/plugins/edit_view/lib/edit_view/tab_settings.rb +40 -0
- data/plugins/edit_view/spec/edit_view/document_spec.rb +26 -0
- data/plugins/edit_view/spec/spec_helper.rb +0 -1
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +57 -69
- data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +24 -3
- data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +23 -6
- data/plugins/edit_view_swt/spec/spec_helper.rb +0 -1
- data/plugins/edit_view_swt/vendor/java-mateview.rb +19 -2
- data/plugins/encryption/encryption.rb +38 -0
- data/plugins/encryption/ezcrypto.rb +652 -0
- data/plugins/encryption/jarmor-1.1.jar +0 -0
- data/plugins/encryption/plugin.rb +9 -0
- data/plugins/execute_current_tab/lib/execute_current_tab.rb +56 -0
- data/plugins/execute_current_tab/plugin.rb +8 -0
- data/plugins/html_view/lib/html_view.rb +16 -11
- data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +2 -1
- data/plugins/plugin_manager_ui/views/index.html.erb +22 -4
- data/plugins/project/lib/project.rb +140 -26
- data/plugins/project/lib/project/drb_service.rb +75 -0
- data/plugins/project/lib/project/file_mirror.rb +5 -5
- data/plugins/project/lib/project/find_file_dialog.rb +123 -32
- data/plugins/project/spec/project/file_mirror_spec.rb +10 -1
- data/plugins/project/spec/spec_helper.rb +0 -1
- data/plugins/redcar/plugin.rb +1 -1
- data/plugins/redcar/redcar.rb +204 -109
- data/plugins/redcar/spec/redcar/redcar_spec.rb +70 -0
- data/plugins/redcar/spec/spec_helper.rb +4 -0
- data/plugins/repl/lib/repl.rb +14 -7
- data/plugins/repl/lib/repl/internal_mirror.rb +43 -22
- data/plugins/repl/spec/repl/internal_mirror_spec.rb +34 -7
- data/plugins/repl/spec/spec_helper.rb +0 -1
- data/plugins/tree/spec/spec_helper.rb +0 -1
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +1 -1
- data/textmate/Bundles/RedcarRepl.tmbundle/Syntaxes/InternalRuby.plist +2 -18
- data/textmate/Bundles/asciidoc.tmbundle/Syntaxes/AsciiDoc.tmLanguage +428 -0
- metadata +790 -371
- data/lib/redcar/boot.rb +0 -108
|
@@ -0,0 +1,930 @@
|
|
|
1
|
+
/***** BEGIN LICENSE BLOCK *****
|
|
2
|
+
* Version: CPL 1.0/GPL 2.0/LGPL 2.1
|
|
3
|
+
*
|
|
4
|
+
* The contents of this file are subject to the Common Public
|
|
5
|
+
* License Version 1.0 (the "License"); you may not use this file
|
|
6
|
+
* except in compliance with the License. You may obtain a copy of
|
|
7
|
+
* the License at http://www.eclipse.org/legal/cpl-v10.html
|
|
8
|
+
*
|
|
9
|
+
* Software distributed under the License is distributed on an "AS
|
|
10
|
+
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
11
|
+
* implied. See the License for the specific language governing
|
|
12
|
+
* rights and limitations under the License.
|
|
13
|
+
*
|
|
14
|
+
* Copyright (C) 2006, 2007 Ola Bini <ola@ologix.com>
|
|
15
|
+
*
|
|
16
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
17
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
18
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
19
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
20
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
21
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
22
|
+
* use your version of this file under the terms of the CPL, indicate your
|
|
23
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
24
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
25
|
+
* the provisions above, a recipient may use your version of this file under
|
|
26
|
+
* the terms of any one of the CPL, the GPL or the LGPL.
|
|
27
|
+
***** END LICENSE BLOCK *****/
|
|
28
|
+
package org.jruby.ext.openssl;
|
|
29
|
+
|
|
30
|
+
import java.math.BigInteger;
|
|
31
|
+
import java.text.DateFormat;
|
|
32
|
+
import java.text.SimpleDateFormat;
|
|
33
|
+
import java.util.ArrayList;
|
|
34
|
+
import java.util.Calendar;
|
|
35
|
+
import java.util.Date;
|
|
36
|
+
import java.util.Enumeration;
|
|
37
|
+
import java.util.HashMap;
|
|
38
|
+
import java.util.IdentityHashMap;
|
|
39
|
+
import java.util.Iterator;
|
|
40
|
+
import java.util.List;
|
|
41
|
+
import java.util.Map;
|
|
42
|
+
import java.io.IOException;
|
|
43
|
+
|
|
44
|
+
import org.bouncycastle.asn1.ASN1Encodable;
|
|
45
|
+
import org.bouncycastle.asn1.ASN1EncodableVector;
|
|
46
|
+
import org.bouncycastle.asn1.ASN1InputStream;
|
|
47
|
+
import org.bouncycastle.asn1.ASN1Sequence;
|
|
48
|
+
import org.bouncycastle.asn1.DERBitString;
|
|
49
|
+
import org.bouncycastle.asn1.DERBoolean;
|
|
50
|
+
import org.bouncycastle.asn1.DEREncodableVector;
|
|
51
|
+
import org.bouncycastle.asn1.DERInteger;
|
|
52
|
+
import org.bouncycastle.asn1.DERNull;
|
|
53
|
+
import org.bouncycastle.asn1.DERObjectIdentifier;
|
|
54
|
+
import org.bouncycastle.asn1.DEROctetString;
|
|
55
|
+
import org.bouncycastle.asn1.DERSequence;
|
|
56
|
+
import org.bouncycastle.asn1.DERSet;
|
|
57
|
+
import org.bouncycastle.asn1.DERString;
|
|
58
|
+
import org.bouncycastle.asn1.DERTaggedObject;
|
|
59
|
+
import org.bouncycastle.asn1.DERUTCTime;
|
|
60
|
+
import org.bouncycastle.asn1.DERUTF8String;
|
|
61
|
+
import org.jruby.Ruby;
|
|
62
|
+
import org.jruby.RubyArray;
|
|
63
|
+
import org.jruby.RubyBignum;
|
|
64
|
+
import org.jruby.RubyClass;
|
|
65
|
+
import org.jruby.RubyModule;
|
|
66
|
+
import org.jruby.RubyNumeric;
|
|
67
|
+
import org.jruby.RubyObject;
|
|
68
|
+
import org.jruby.RubyString;
|
|
69
|
+
import org.jruby.RubySymbol;
|
|
70
|
+
import org.jruby.RubyTime;
|
|
71
|
+
import org.jruby.anno.JRubyMethod;
|
|
72
|
+
import org.jruby.exceptions.RaiseException;
|
|
73
|
+
import org.jruby.runtime.Block;
|
|
74
|
+
import org.jruby.runtime.ObjectAllocator;
|
|
75
|
+
import org.jruby.runtime.ThreadContext;
|
|
76
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
|
77
|
+
import org.jruby.util.ByteList;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @author <a href="mailto:ola.bini@ki.se">Ola Bini</a>
|
|
81
|
+
*/
|
|
82
|
+
public class ASN1 {
|
|
83
|
+
private static Map<Ruby, Map<String, DERObjectIdentifier>> SYM_TO_OID = new IdentityHashMap<Ruby, Map<String, DERObjectIdentifier>>();
|
|
84
|
+
private static Map<Ruby, Map<DERObjectIdentifier, String>> OID_TO_SYM = new IdentityHashMap<Ruby, Map<DERObjectIdentifier, String>>();
|
|
85
|
+
private static Map<Ruby, Map<DERObjectIdentifier, Integer>> OID_TO_NID = new IdentityHashMap<Ruby, Map<DERObjectIdentifier, Integer>>();
|
|
86
|
+
private static Map<Ruby, Map<Integer, DERObjectIdentifier>> NID_TO_OID = new IdentityHashMap<Ruby, Map<Integer, DERObjectIdentifier>>();
|
|
87
|
+
private static Map<Ruby, Map<Integer, String>> NID_TO_SN = new IdentityHashMap<Ruby, Map<Integer, String>>();
|
|
88
|
+
private static Map<Ruby, Map<Integer, String>> NID_TO_LN = new IdentityHashMap<Ruby, Map<Integer, String>>();
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
static void addObject(Ruby runtime, int nid, String sn, String ln, String oid) {
|
|
92
|
+
Map<String, DERObjectIdentifier> s2o = SYM_TO_OID.get(runtime);
|
|
93
|
+
Map<DERObjectIdentifier, String> o2s = OID_TO_SYM.get(runtime);
|
|
94
|
+
Map<DERObjectIdentifier, Integer> o2n = OID_TO_NID.get(runtime);
|
|
95
|
+
Map<Integer, DERObjectIdentifier> n2o = NID_TO_OID.get(runtime);
|
|
96
|
+
Map<Integer, String> n2s = NID_TO_SN.get(runtime);
|
|
97
|
+
Map<Integer, String> n2l = NID_TO_LN.get(runtime);
|
|
98
|
+
if(null != oid && (null != sn || null != ln)) {
|
|
99
|
+
DERObjectIdentifier ident = new DERObjectIdentifier(oid);
|
|
100
|
+
if(sn != null) {
|
|
101
|
+
s2o.put(sn.toLowerCase(),ident);
|
|
102
|
+
}
|
|
103
|
+
if(ln != null) {
|
|
104
|
+
s2o.put(ln.toLowerCase(),ident);
|
|
105
|
+
}
|
|
106
|
+
o2s.put(ident,sn == null ? ln : sn);
|
|
107
|
+
o2n.put(ident,nid);
|
|
108
|
+
n2o.put(nid,ident);
|
|
109
|
+
n2s.put(nid,sn);
|
|
110
|
+
n2l.put(nid,ln);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@SuppressWarnings("unchecked")
|
|
115
|
+
private synchronized static void initMaps(Ruby runtime) {
|
|
116
|
+
Map<String, DERObjectIdentifier> val = new HashMap<String, DERObjectIdentifier>(org.bouncycastle.asn1.x509.X509Name.DefaultLookUp);
|
|
117
|
+
Map<DERObjectIdentifier, String> val2 = new HashMap<DERObjectIdentifier, String>(org.bouncycastle.asn1.x509.X509Name.DefaultSymbols);
|
|
118
|
+
SYM_TO_OID.put(runtime,val);
|
|
119
|
+
OID_TO_SYM.put(runtime,val2);
|
|
120
|
+
OID_TO_NID.put(runtime,new HashMap<DERObjectIdentifier, Integer>());
|
|
121
|
+
NID_TO_OID.put(runtime,new HashMap<Integer, DERObjectIdentifier>());
|
|
122
|
+
NID_TO_SN.put(runtime,new HashMap<Integer, String>());
|
|
123
|
+
NID_TO_LN.put(runtime,new HashMap<Integer, String>());
|
|
124
|
+
OpenSSLImpl.defaultObjects(runtime);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
synchronized static Integer obj2nid(Ruby runtime, String oid) {
|
|
128
|
+
return obj2nid(runtime, new DERObjectIdentifier(oid));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
synchronized static String ln2oid(Ruby runtime, String ln) {
|
|
132
|
+
Map<String, DERObjectIdentifier> val = SYM_TO_OID.get(runtime);
|
|
133
|
+
if(null == val) {
|
|
134
|
+
initMaps(runtime);
|
|
135
|
+
val = SYM_TO_OID.get(runtime);
|
|
136
|
+
}
|
|
137
|
+
return val.get(ln).getId();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
synchronized static Integer obj2nid(Ruby runtime, DERObjectIdentifier oid) {
|
|
141
|
+
Map<DERObjectIdentifier, Integer> o2n = OID_TO_NID.get(runtime);
|
|
142
|
+
if(null == o2n) {
|
|
143
|
+
initMaps(runtime);
|
|
144
|
+
o2n = OID_TO_NID.get(runtime);
|
|
145
|
+
}
|
|
146
|
+
return o2n.get(oid);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
synchronized static String o2a(Ruby runtime, DERObjectIdentifier obj) {
|
|
150
|
+
Integer nid = obj2nid(runtime,obj);
|
|
151
|
+
Map<Integer, String> n2l = NID_TO_LN.get(runtime);
|
|
152
|
+
Map<Integer, String> n2s = NID_TO_SN.get(runtime);
|
|
153
|
+
String one = n2l.get(nid);
|
|
154
|
+
if(one == null) {
|
|
155
|
+
one = n2s.get(nid);
|
|
156
|
+
}
|
|
157
|
+
return one;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
synchronized static String nid2ln(Ruby runtime, int nid) {
|
|
161
|
+
return nid2ln(runtime, new Integer(nid));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
synchronized static String nid2ln(Ruby runtime, Integer nid) {
|
|
165
|
+
Map<Integer, String> n2l = NID_TO_LN.get(runtime);
|
|
166
|
+
if(null == n2l) {
|
|
167
|
+
initMaps(runtime);
|
|
168
|
+
n2l = NID_TO_LN.get(runtime);
|
|
169
|
+
}
|
|
170
|
+
return n2l.get(nid);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
synchronized static Map<String, DERObjectIdentifier> getOIDLookup(Ruby runtime) {
|
|
174
|
+
Map<String, DERObjectIdentifier> val = SYM_TO_OID.get(runtime);
|
|
175
|
+
if(null == val) {
|
|
176
|
+
initMaps(runtime);
|
|
177
|
+
val = SYM_TO_OID.get(runtime);
|
|
178
|
+
}
|
|
179
|
+
return val;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
synchronized static Map<DERObjectIdentifier, String> getSymLookup(Ruby runtime) {
|
|
183
|
+
Map<DERObjectIdentifier, String> val = OID_TO_SYM.get(runtime);
|
|
184
|
+
if(null == val) {
|
|
185
|
+
initMaps(runtime);
|
|
186
|
+
val = OID_TO_SYM.get(runtime);
|
|
187
|
+
}
|
|
188
|
+
return val;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private final static Object[][] ASN1_INFO = {
|
|
192
|
+
{"EOC", null, null },
|
|
193
|
+
{"BOOLEAN", org.bouncycastle.asn1.DERBoolean.class, "Boolean" },
|
|
194
|
+
{"INTEGER", org.bouncycastle.asn1.DERInteger.class, "Integer" },
|
|
195
|
+
{"BIT_STRING", org.bouncycastle.asn1.DERBitString.class, "BitString" },
|
|
196
|
+
{"OCTET_STRING", org.bouncycastle.asn1.DEROctetString.class, "OctetString" },
|
|
197
|
+
{"NULL", org.bouncycastle.asn1.DERNull.class, "Null" },
|
|
198
|
+
{"OBJECT", org.bouncycastle.asn1.DERObjectIdentifier.class, "ObjectId" },
|
|
199
|
+
{"OBJECT_DESCRIPTOR", null, null },
|
|
200
|
+
{"EXTERNAL", null, null },
|
|
201
|
+
{"REAL", null, null },
|
|
202
|
+
{"ENUMERATED", org.bouncycastle.asn1.DEREnumerated.class, "Enumerated" },
|
|
203
|
+
{"EMBEDDED_PDV", null, null },
|
|
204
|
+
{"UTF8STRING", org.bouncycastle.asn1.DERUTF8String.class, "UTF8String" },
|
|
205
|
+
{"RELATIVE_OID", null, null },
|
|
206
|
+
{"[UNIVERSAL 14]", null, null },
|
|
207
|
+
{"[UNIVERSAL 15]", null, null },
|
|
208
|
+
{"SEQUENCE", org.bouncycastle.asn1.DERSequence.class, "Sequence" },
|
|
209
|
+
{"SET", org.bouncycastle.asn1.DERSet.class, "Set" },
|
|
210
|
+
{"NUMERICSTRING", org.bouncycastle.asn1.DERNumericString.class, "NumericString" },
|
|
211
|
+
{"PRINTABLESTRING", org.bouncycastle.asn1.DERPrintableString.class, "PrintableString" },
|
|
212
|
+
{"T61STRING", org.bouncycastle.asn1.DERT61String.class, "T61String" },
|
|
213
|
+
{"VIDEOTEXSTRING", null, null },
|
|
214
|
+
{"IA5STRING", org.bouncycastle.asn1.DERIA5String.class, "IA5String" },
|
|
215
|
+
{"UTCTIME", org.bouncycastle.asn1.DERUTCTime.class, "UTCTime" },
|
|
216
|
+
{"GENERALIZEDTIME", org.bouncycastle.asn1.DERGeneralizedTime.class, "GeneralizedTime" },
|
|
217
|
+
{"GRAPHICSTRING", null, null },
|
|
218
|
+
{"ISO64STRING", null, null },
|
|
219
|
+
{"GENERALSTRING", org.bouncycastle.asn1.DERGeneralString.class, "GeneralString" },
|
|
220
|
+
{"UNIVERSALSTRING", org.bouncycastle.asn1.DERUniversalString.class, "UniversalString" },
|
|
221
|
+
{"CHARACTER_STRING", null, null },
|
|
222
|
+
{"BMPSTRING", org.bouncycastle.asn1.DERBMPString.class, "BMPString" }};
|
|
223
|
+
|
|
224
|
+
private final static Map<Class, Integer> CLASS_TO_ID = new HashMap<Class, Integer>();
|
|
225
|
+
private final static Map<String, Integer> RUBYNAME_TO_ID = new HashMap<String, Integer>();
|
|
226
|
+
|
|
227
|
+
static {
|
|
228
|
+
for(int i=0;i<ASN1_INFO.length;i++) {
|
|
229
|
+
if(ASN1_INFO[i][1] != null) {
|
|
230
|
+
CLASS_TO_ID.put((Class)ASN1_INFO[i][1],new Integer(i));
|
|
231
|
+
}
|
|
232
|
+
if(ASN1_INFO[i][2] != null) {
|
|
233
|
+
RUBYNAME_TO_ID.put((String)ASN1_INFO[i][2],new Integer(i));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
public static int idForClass(Class type) {
|
|
239
|
+
Integer v = null;
|
|
240
|
+
while(type != Object.class && v == null) {
|
|
241
|
+
v = CLASS_TO_ID.get(type);
|
|
242
|
+
if(v == null) {
|
|
243
|
+
type = type.getSuperclass();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return null == v ? -1 : v.intValue();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
public static int idForRubyName(String name) {
|
|
250
|
+
Integer v = RUBYNAME_TO_ID.get(name);
|
|
251
|
+
return null == v ? -1 : v.intValue();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
public static Class<? extends ASN1Encodable> classForId(int id) {
|
|
255
|
+
@SuppressWarnings("unchecked")
|
|
256
|
+
Class<? extends ASN1Encodable> result = (Class<? extends ASN1Encodable>)(ASN1_INFO[id][1]);
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
public static void createASN1(Ruby runtime, RubyModule ossl) {
|
|
261
|
+
RubyModule mASN1 = ossl.defineModuleUnder("ASN1");
|
|
262
|
+
RubyClass openSSLError = ossl.getClass("OpenSSLError");
|
|
263
|
+
mASN1.defineClassUnder("ASN1Error",openSSLError, openSSLError.getAllocator());
|
|
264
|
+
|
|
265
|
+
mASN1.defineAnnotatedMethods(ASN1.class);
|
|
266
|
+
|
|
267
|
+
List<IRubyObject> ary = new ArrayList<IRubyObject>();
|
|
268
|
+
mASN1.setConstant("UNIVERSAL_TAG_NAME",runtime.newArray(ary));
|
|
269
|
+
for(int i=0;i<ASN1_INFO.length;i++) {
|
|
270
|
+
if(((String)(ASN1_INFO[i][0])).charAt(0) != '[') {
|
|
271
|
+
ary.add(runtime.newString(((String)(ASN1_INFO[i][0]))));
|
|
272
|
+
mASN1.setConstant(((String)(ASN1_INFO[i][0])),runtime.newFixnum(i));
|
|
273
|
+
} else {
|
|
274
|
+
ary.add(runtime.getNil());
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
RubyClass cASN1Data = mASN1.defineClassUnder("ASN1Data",runtime.getObject(), ASN1Data.ALLOCATOR);
|
|
279
|
+
cASN1Data.attr_accessor(runtime.getCurrentContext(), new IRubyObject[]{runtime.newString("value"),runtime.newString("tag"),runtime.newString("tag_class")});
|
|
280
|
+
cASN1Data.defineAnnotatedMethods(ASN1Data.class);
|
|
281
|
+
|
|
282
|
+
RubyClass cASN1Primitive = mASN1.defineClassUnder("Primitive",cASN1Data, ASN1Primitive.ALLOCATOR);
|
|
283
|
+
cASN1Primitive.attr_accessor(runtime.getCurrentContext(), new IRubyObject[]{runtime.newString("tagging")});
|
|
284
|
+
cASN1Primitive.defineAnnotatedMethods(ASN1Primitive.class);
|
|
285
|
+
|
|
286
|
+
RubyClass cASN1Constructive = mASN1.defineClassUnder("Constructive",cASN1Data,ASN1Constructive.ALLOCATOR);
|
|
287
|
+
cASN1Constructive.includeModule(runtime.getModule("Enumerable"));
|
|
288
|
+
cASN1Constructive.attr_accessor(runtime.getCurrentContext(), new IRubyObject[]{runtime.newString("tagging")});
|
|
289
|
+
cASN1Constructive.defineAnnotatedMethods(ASN1Constructive.class);
|
|
290
|
+
|
|
291
|
+
mASN1.defineClassUnder("Boolean",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
292
|
+
mASN1.defineClassUnder("Integer",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
293
|
+
mASN1.defineClassUnder("Enumerated",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
294
|
+
|
|
295
|
+
RubyClass cASN1BitString = mASN1.defineClassUnder("BitString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
296
|
+
|
|
297
|
+
mASN1.defineClassUnder("OctetString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
298
|
+
mASN1.defineClassUnder("UTF8String",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
299
|
+
mASN1.defineClassUnder("NumericString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
300
|
+
mASN1.defineClassUnder("PrintableString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
301
|
+
mASN1.defineClassUnder("T61String",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
302
|
+
mASN1.defineClassUnder("VideotexString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
303
|
+
mASN1.defineClassUnder("IA5String",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
304
|
+
mASN1.defineClassUnder("GraphicString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
305
|
+
mASN1.defineClassUnder("ISO64String",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
306
|
+
mASN1.defineClassUnder("GeneralString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
307
|
+
mASN1.defineClassUnder("UniversalString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
308
|
+
mASN1.defineClassUnder("BMPString",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
309
|
+
mASN1.defineClassUnder("Null",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
310
|
+
|
|
311
|
+
RubyClass cASN1ObjectId = mASN1.defineClassUnder("ObjectId",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
312
|
+
mASN1.defineClassUnder("UTCTime",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
313
|
+
mASN1.defineClassUnder("GeneralizedTime",cASN1Primitive,cASN1Primitive.getAllocator());
|
|
314
|
+
mASN1.defineClassUnder("Sequence",cASN1Constructive,cASN1Constructive.getAllocator());
|
|
315
|
+
mASN1.defineClassUnder("Set",cASN1Constructive,cASN1Constructive.getAllocator());
|
|
316
|
+
|
|
317
|
+
cASN1ObjectId.defineAnnotatedMethods(ObjectId.class);
|
|
318
|
+
|
|
319
|
+
cASN1BitString.attr_accessor(runtime.getCurrentContext(), new IRubyObject[]{runtime.newSymbol("unused_bits")});
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
private static String getShortNameFor(Ruby runtime, String nameOrOid) {
|
|
324
|
+
DERObjectIdentifier oid = getObjectIdentifier(runtime,nameOrOid);
|
|
325
|
+
Map em = getOIDLookup(runtime);
|
|
326
|
+
String name = null;
|
|
327
|
+
for(Iterator iter = em.keySet().iterator();iter.hasNext();) {
|
|
328
|
+
Object key = iter.next();
|
|
329
|
+
if(oid.equals(em.get(key))) {
|
|
330
|
+
if(name == null || ((String)key).length() < name.length()) {
|
|
331
|
+
name = (String)key;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return name;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
private static String getLongNameFor(Ruby runtime, String nameOrOid) {
|
|
339
|
+
DERObjectIdentifier oid = getObjectIdentifier(runtime,nameOrOid);
|
|
340
|
+
Map em = getOIDLookup(runtime);
|
|
341
|
+
String name = null;
|
|
342
|
+
for(Iterator iter = em.keySet().iterator();iter.hasNext();) {
|
|
343
|
+
Object key = iter.next();
|
|
344
|
+
if(oid.equals(em.get(key))) {
|
|
345
|
+
if(name == null || ((String)key).length() > name.length()) {
|
|
346
|
+
name = (String)key;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return name;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
private static DERObjectIdentifier getObjectIdentifier(Ruby runtime, String nameOrOid) {
|
|
354
|
+
Object val1 = ASN1.getOIDLookup(runtime).get(nameOrOid.toLowerCase());
|
|
355
|
+
if(null != val1) {
|
|
356
|
+
return (DERObjectIdentifier)val1;
|
|
357
|
+
}
|
|
358
|
+
DERObjectIdentifier val2 = new DERObjectIdentifier(nameOrOid);
|
|
359
|
+
return val2;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@JRubyMethod(name="Boolean", module=true, rest=true)
|
|
363
|
+
public static IRubyObject fact_Boolean(IRubyObject recv, IRubyObject[] args) {
|
|
364
|
+
return ((RubyModule)recv).getClass("Boolean").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
@JRubyMethod(name="Integer", module=true, rest=true)
|
|
368
|
+
public static IRubyObject fact_Integer(IRubyObject recv, IRubyObject[] args) {
|
|
369
|
+
return ((RubyModule)recv).getClass("Integer").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
@JRubyMethod(name="Enumerated", module=true, rest=true)
|
|
373
|
+
public static IRubyObject fact_Enumerated(IRubyObject recv, IRubyObject[] args) {
|
|
374
|
+
return ((RubyModule)recv).getClass("Enumerated").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
@JRubyMethod(name="BitString", module=true, rest=true)
|
|
378
|
+
public static IRubyObject fact_BitString(IRubyObject recv, IRubyObject[] args) {
|
|
379
|
+
return ((RubyModule)recv).getClass("BitString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
@JRubyMethod(name="OctetString", module=true, rest=true)
|
|
383
|
+
public static IRubyObject fact_OctetString(IRubyObject recv, IRubyObject[] args) {
|
|
384
|
+
return ((RubyModule)recv).getClass("OctetString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
@JRubyMethod(name="UTF8String", module=true, rest=true)
|
|
388
|
+
public static IRubyObject fact_UTF8String(IRubyObject recv, IRubyObject[] args) {
|
|
389
|
+
return ((RubyModule)recv).getClass("UTF8String").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@JRubyMethod(name="NumericString", module=true, rest=true)
|
|
393
|
+
public static IRubyObject fact_NumericString(IRubyObject recv, IRubyObject[] args) {
|
|
394
|
+
return ((RubyModule)recv).getClass("NumericString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
@JRubyMethod(name="PrintableString", module=true, rest=true)
|
|
398
|
+
public static IRubyObject fact_PrintableString(IRubyObject recv, IRubyObject[] args) {
|
|
399
|
+
return ((RubyModule)recv).getClass("PrintableString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
@JRubyMethod(name="T61String", module=true, rest=true)
|
|
403
|
+
public static IRubyObject fact_T61String(IRubyObject recv, IRubyObject[] args) {
|
|
404
|
+
return ((RubyModule)recv).getClass("T61String").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
@JRubyMethod(name="VideotexString", module=true, rest=true)
|
|
408
|
+
public static IRubyObject fact_VideotexString(IRubyObject recv, IRubyObject[] args) {
|
|
409
|
+
return ((RubyModule)recv).getClass("VideotexString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
@JRubyMethod(name="IA5String", module=true, rest=true)
|
|
413
|
+
public static IRubyObject fact_IA5String(IRubyObject recv, IRubyObject[] args) {
|
|
414
|
+
return ((RubyModule)recv).getClass("IA5String").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
@JRubyMethod(name="GraphicString", module=true, rest=true)
|
|
418
|
+
public static IRubyObject fact_GraphicString(IRubyObject recv, IRubyObject[] args) {
|
|
419
|
+
return ((RubyModule)recv).getClass("GraphicString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
@JRubyMethod(name="ISO64String", module=true, rest=true)
|
|
423
|
+
public static IRubyObject fact_ISO64String(IRubyObject recv, IRubyObject[] args) {
|
|
424
|
+
return ((RubyModule)recv).getClass("ISO64String").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
@JRubyMethod(name="GeneralString", module=true, rest=true)
|
|
428
|
+
public static IRubyObject fact_GeneralString(IRubyObject recv, IRubyObject[] args) {
|
|
429
|
+
return ((RubyModule)recv).getClass("GeneralString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
@JRubyMethod(name="UniversalString", module=true, rest=true)
|
|
433
|
+
public static IRubyObject fact_UniversalString(IRubyObject recv, IRubyObject[] args) {
|
|
434
|
+
return ((RubyModule)recv).getClass("UniversalString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
@JRubyMethod(name="BMPString", module=true, rest=true)
|
|
438
|
+
public static IRubyObject fact_BMPString(IRubyObject recv, IRubyObject[] args) {
|
|
439
|
+
return ((RubyModule)recv).getClass("BMPString").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
@JRubyMethod(name="Nul", module=true, rest=true)
|
|
443
|
+
public static IRubyObject fact_Null(IRubyObject recv, IRubyObject[] args) {
|
|
444
|
+
return ((RubyModule)recv).getClass("Null").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
@JRubyMethod(name="ObjectId", module=true, rest=true)
|
|
448
|
+
public static IRubyObject fact_ObjectId(IRubyObject recv, IRubyObject[] args) {
|
|
449
|
+
return ((RubyModule)recv).getClass("ObjectId").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
@JRubyMethod(name="UTCTime", module=true, rest=true)
|
|
453
|
+
public static IRubyObject fact_UTCTime(IRubyObject recv, IRubyObject[] args) {
|
|
454
|
+
return ((RubyModule)recv).getClass("UTCTime").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
@JRubyMethod(name="GeneralizedTime", module=true, rest=true)
|
|
458
|
+
public static IRubyObject fact_GeneralizedTime(IRubyObject recv, IRubyObject[] args) {
|
|
459
|
+
return ((RubyModule)recv).getClass("GeneralizedTime").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
@JRubyMethod(name="Sequence", module=true, rest=true)
|
|
463
|
+
public static IRubyObject fact_Sequence(IRubyObject recv, IRubyObject[] args) {
|
|
464
|
+
return ((RubyModule)recv).getClass("Sequence").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
@JRubyMethod(name="Set", module=true, rest=true)
|
|
468
|
+
public static IRubyObject fact_Set(IRubyObject recv, IRubyObject[] args) {
|
|
469
|
+
return ((RubyModule)recv).getClass("Set").callMethod(recv.getRuntime().getCurrentContext(),"new",args);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
@JRubyMethod(meta=true, required=1)
|
|
473
|
+
public static IRubyObject traverse(IRubyObject recv, IRubyObject a) {
|
|
474
|
+
System.err.println("WARNING: unimplemented method called: traverse");
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
public static class ObjectId {
|
|
479
|
+
@JRubyMethod(meta=true, rest=true)
|
|
480
|
+
public static IRubyObject register(IRubyObject recv, IRubyObject[] args) {
|
|
481
|
+
DERObjectIdentifier deroi = new DERObjectIdentifier(args[0].toString());
|
|
482
|
+
getOIDLookup(recv.getRuntime()).put(args[1].toString().toLowerCase(),deroi);
|
|
483
|
+
getOIDLookup(recv.getRuntime()).put(args[2].toString().toLowerCase(),deroi);
|
|
484
|
+
getSymLookup(recv.getRuntime()).put(deroi,args[1].toString());
|
|
485
|
+
return recv.getRuntime().getTrue();
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
@JRubyMethod(name={"sn","short_name"})
|
|
489
|
+
public static IRubyObject sn(IRubyObject self) {
|
|
490
|
+
return self.getRuntime().newString(getShortNameFor(self.getRuntime(),self.callMethod(self.getRuntime().getCurrentContext(),"value").toString()));
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
@JRubyMethod(name={"ln","long_name"})
|
|
494
|
+
public static IRubyObject ln(IRubyObject self) {
|
|
495
|
+
return self.getRuntime().newString(getLongNameFor(self.getRuntime(),self.callMethod(self.getRuntime().getCurrentContext(),"value").toString()));
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
@JRubyMethod
|
|
499
|
+
public static IRubyObject oid(IRubyObject self) {
|
|
500
|
+
return self.getRuntime().newString(getObjectIdentifier(self.getRuntime(),self.callMethod(self.getRuntime().getCurrentContext(),"value").toString()).getId());
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
private final static DateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
|
|
505
|
+
private static IRubyObject decodeObj(RubyModule asnM,Object v) throws IOException, java.text.ParseException {
|
|
506
|
+
int ix = idForClass(v.getClass());
|
|
507
|
+
String v_name = ix == -1 ? null : (String)(ASN1_INFO[ix][2]);
|
|
508
|
+
ThreadContext tc = asnM.getRuntime().getCurrentContext();
|
|
509
|
+
if(null != v_name) {
|
|
510
|
+
RubyClass c = asnM.getClass(v_name);
|
|
511
|
+
if(v instanceof DERBitString) {
|
|
512
|
+
ByteList bl = new ByteList(((DERBitString)v).getBytes(), false);
|
|
513
|
+
IRubyObject bString = c.callMethod(tc,"new",asnM.getRuntime().newString(bl));
|
|
514
|
+
bString.callMethod(tc,"unused_bits=",asnM.getRuntime().newFixnum(((DERBitString)v).getPadBits()));
|
|
515
|
+
return bString;
|
|
516
|
+
} else if(v instanceof DERString) {
|
|
517
|
+
ByteList val;
|
|
518
|
+
if (v instanceof DERUTF8String) {
|
|
519
|
+
val = new ByteList(((DERUTF8String) v).getString().getBytes("UTF-8"));
|
|
520
|
+
} else {
|
|
521
|
+
val = ByteList.create(((DERString)v).getString());
|
|
522
|
+
}
|
|
523
|
+
return c.callMethod(tc,"new",asnM.getRuntime().newString(val));
|
|
524
|
+
} else if(v instanceof ASN1Sequence) {
|
|
525
|
+
List<IRubyObject> l = new ArrayList<IRubyObject>();
|
|
526
|
+
for(Enumeration enm = ((ASN1Sequence)v).getObjects(); enm.hasMoreElements(); ) {
|
|
527
|
+
l.add(decodeObj(asnM,enm.nextElement()));
|
|
528
|
+
}
|
|
529
|
+
return c.callMethod(tc,"new",asnM.getRuntime().newArray(l));
|
|
530
|
+
} else if(v instanceof DERSet) {
|
|
531
|
+
List<IRubyObject> l = new ArrayList<IRubyObject>();
|
|
532
|
+
for(Enumeration enm = ((DERSet)v).getObjects(); enm.hasMoreElements(); ) {
|
|
533
|
+
l.add(decodeObj(asnM,enm.nextElement()));
|
|
534
|
+
}
|
|
535
|
+
return c.callMethod(tc,"new",asnM.getRuntime().newArray(l));
|
|
536
|
+
} else if(v instanceof DERNull) {
|
|
537
|
+
return c.callMethod(tc,"new",asnM.getRuntime().getNil());
|
|
538
|
+
} else if(v instanceof DERInteger) {
|
|
539
|
+
return c.callMethod(tc,"new",RubyNumeric.str2inum(asnM.getRuntime(),asnM.getRuntime().newString(((DERInteger)v).getValue().toString()),10));
|
|
540
|
+
} else if(v instanceof DERUTCTime) {
|
|
541
|
+
Date d = dateF.parse(((DERUTCTime)v).getAdjustedTime());
|
|
542
|
+
Calendar cal = Calendar.getInstance();
|
|
543
|
+
cal.setTime(d);
|
|
544
|
+
IRubyObject[] argv = new IRubyObject[6];
|
|
545
|
+
argv[0] = asnM.getRuntime().newFixnum(cal.get(Calendar.YEAR));
|
|
546
|
+
argv[1] = asnM.getRuntime().newFixnum(cal.get(Calendar.MONTH)+1);
|
|
547
|
+
argv[2] = asnM.getRuntime().newFixnum(cal.get(Calendar.DAY_OF_MONTH));
|
|
548
|
+
argv[3] = asnM.getRuntime().newFixnum(cal.get(Calendar.HOUR_OF_DAY));
|
|
549
|
+
argv[4] = asnM.getRuntime().newFixnum(cal.get(Calendar.MINUTE));
|
|
550
|
+
argv[5] = asnM.getRuntime().newFixnum(cal.get(Calendar.SECOND));
|
|
551
|
+
return c.callMethod(tc,"new",asnM.getRuntime().getClass("Time").callMethod(tc,"local",argv));
|
|
552
|
+
} else if(v instanceof DERObjectIdentifier) {
|
|
553
|
+
String av = ((DERObjectIdentifier)v).getId();
|
|
554
|
+
return c.callMethod(tc,"new",asnM.getRuntime().newString(av));
|
|
555
|
+
} else if(v instanceof DEROctetString) {
|
|
556
|
+
ByteList bl = new ByteList(((DEROctetString)v).getOctets(), false);
|
|
557
|
+
return c.callMethod(tc,"new",asnM.getRuntime().newString(bl));
|
|
558
|
+
} else if(v instanceof DERBoolean) {
|
|
559
|
+
return c.callMethod(tc,"new",((DERBoolean)v).isTrue() ? asnM.getRuntime().getTrue() : asnM.getRuntime().getFalse());
|
|
560
|
+
} else {
|
|
561
|
+
System.out.println("Should handle: " + v.getClass().getName());
|
|
562
|
+
}
|
|
563
|
+
} else if(v instanceof DERTaggedObject) {
|
|
564
|
+
RubyClass c = asnM.getClass("ASN1Data");
|
|
565
|
+
IRubyObject val = decodeObj(asnM, ((DERTaggedObject)v).getObject());
|
|
566
|
+
IRubyObject tag = asnM.getRuntime().newFixnum(((DERTaggedObject)v).getTagNo());
|
|
567
|
+
IRubyObject tag_class = asnM.getRuntime().newSymbol("CONTEXT_SPECIFIC");
|
|
568
|
+
return c.callMethod(tc,"new",new IRubyObject[]{asnM.getRuntime().newArray(val),tag,tag_class});
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// System.err.println("v: " + v + "[" + v.getClass().getName() + "]");
|
|
572
|
+
return null;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
@JRubyMethod(meta = true)
|
|
576
|
+
public static IRubyObject decode(IRubyObject recv, IRubyObject obj) {
|
|
577
|
+
try {
|
|
578
|
+
IRubyObject obj2 = OpenSSLImpl.to_der_if_possible(obj);
|
|
579
|
+
RubyModule asnM = (RubyModule)recv;
|
|
580
|
+
ASN1InputStream asis = new ASN1InputStream(obj2.convertToString().getBytes());
|
|
581
|
+
IRubyObject ret = decodeObj(asnM, asis.readObject());
|
|
582
|
+
return ret;
|
|
583
|
+
} catch(IOException e) {
|
|
584
|
+
throw recv.getRuntime().newIOErrorFromException(e);
|
|
585
|
+
} catch(Exception e) {
|
|
586
|
+
throw recv.getRuntime().newArgumentError(e.getMessage());
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
@JRubyMethod(meta=true, required=1)
|
|
591
|
+
public static IRubyObject decode_all(IRubyObject recv, IRubyObject a) {
|
|
592
|
+
System.err.println("WARNING: unimplemented method called: decode_all");
|
|
593
|
+
return null;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
public static class ASN1Data extends RubyObject {
|
|
597
|
+
public static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
|
598
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
|
599
|
+
return new ASN1Data(runtime, klass);
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
public ASN1Data(Ruby runtime, RubyClass type) {
|
|
603
|
+
super(runtime,type);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
protected void asn1Error() {
|
|
607
|
+
asn1Error(null);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
protected void asn1Error(String msg) {
|
|
611
|
+
throw new RaiseException(getRuntime(), (RubyClass)(((RubyModule)(getRuntime().getModule("OpenSSL").getConstant("ASN1"))).getConstant("ASN1Error")), msg, true);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
@JRubyMethod
|
|
615
|
+
public IRubyObject initialize(IRubyObject value, IRubyObject tag, IRubyObject tag_class) {
|
|
616
|
+
if(!(tag_class instanceof RubySymbol)) {
|
|
617
|
+
asn1Error("invalid tag class");
|
|
618
|
+
}
|
|
619
|
+
if(tag_class.toString().equals(":UNIVERSAL") && RubyNumeric.fix2int(tag) > 31) {
|
|
620
|
+
asn1Error("tag number for Universal too large");
|
|
621
|
+
}
|
|
622
|
+
ThreadContext tc = getRuntime().getCurrentContext();
|
|
623
|
+
this.callMethod(tc,"tag=", tag);
|
|
624
|
+
this.callMethod(tc,"value=", value);
|
|
625
|
+
this.callMethod(tc,"tag_class=", tag_class);
|
|
626
|
+
|
|
627
|
+
return this;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
ASN1Encodable toASN1() {
|
|
631
|
+
// System.err.println(getMetaClass().getRealClass().getBaseName()+"#toASN1");
|
|
632
|
+
ThreadContext tc = getRuntime().getCurrentContext();
|
|
633
|
+
int tag = RubyNumeric.fix2int(callMethod(tc,"tag"));
|
|
634
|
+
IRubyObject val = callMethod(tc,"value");
|
|
635
|
+
if(val instanceof RubyArray) {
|
|
636
|
+
RubyArray arr = (RubyArray)callMethod(tc,"value");
|
|
637
|
+
if(arr.getList().size() > 1) {
|
|
638
|
+
ASN1EncodableVector vec = new ASN1EncodableVector();
|
|
639
|
+
for(Iterator iter = arr.getList().iterator();iter.hasNext();) {
|
|
640
|
+
vec.add(((ASN1Data)iter.next()).toASN1());
|
|
641
|
+
}
|
|
642
|
+
return new DERTaggedObject(tag, new DERSequence(vec));
|
|
643
|
+
} else {
|
|
644
|
+
return new DERTaggedObject(tag,((ASN1Data)(arr.getList().get(0))).toASN1());
|
|
645
|
+
}
|
|
646
|
+
} else {
|
|
647
|
+
return new DERTaggedObject(tag, ((ASN1Data)val).toASN1());
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
@JRubyMethod
|
|
652
|
+
public IRubyObject to_der() {
|
|
653
|
+
return getRuntime().newString(new ByteList(toASN1().getDEREncoded(),false));
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
protected IRubyObject defaultTag() {
|
|
657
|
+
int i = idForRubyName(getMetaClass().getRealClass().getBaseName());
|
|
658
|
+
if(i != -1) {
|
|
659
|
+
return getRuntime().newFixnum(i);
|
|
660
|
+
} else {
|
|
661
|
+
return getRuntime().getNil();
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
protected void print() {
|
|
666
|
+
print(0);
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
protected void printIndent(int indent) {
|
|
670
|
+
for(int i=0;i<indent;i++) {
|
|
671
|
+
System.out.print(" ");
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
protected void print(int indent) {
|
|
676
|
+
printIndent(indent);
|
|
677
|
+
System.out.println("ASN1Data: ");
|
|
678
|
+
IRubyObject val = callMethod(getRuntime().getCurrentContext(),"value");
|
|
679
|
+
if(val instanceof RubyArray) {
|
|
680
|
+
RubyArray arr = (RubyArray)val;
|
|
681
|
+
for(Iterator iter = arr.getList().iterator();iter.hasNext();) {
|
|
682
|
+
((ASN1Data)iter.next()).print(indent+1);
|
|
683
|
+
}
|
|
684
|
+
} else {
|
|
685
|
+
((ASN1Data)val).print(indent+1);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
public static class ASN1Primitive extends ASN1Data {
|
|
691
|
+
public static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
|
692
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
|
693
|
+
return new ASN1Primitive(runtime, klass);
|
|
694
|
+
}
|
|
695
|
+
};
|
|
696
|
+
public ASN1Primitive(Ruby runtime, RubyClass type) {
|
|
697
|
+
super(runtime,type);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
public String toString() {
|
|
701
|
+
return this.callMethod(getRuntime().getCurrentContext(),"value").toString();
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
@JRubyMethod
|
|
705
|
+
public IRubyObject to_der() {
|
|
706
|
+
return super.to_der();
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
@JRubyMethod(required=1, optional=4)
|
|
710
|
+
public IRubyObject initialize(IRubyObject[] args) {
|
|
711
|
+
IRubyObject value = args[0];
|
|
712
|
+
IRubyObject tag = getRuntime().getNil();
|
|
713
|
+
IRubyObject tagging = getRuntime().getNil();
|
|
714
|
+
IRubyObject tag_class = getRuntime().getNil();
|
|
715
|
+
if(args.length>1) {
|
|
716
|
+
tag = args[1];
|
|
717
|
+
if(args.length>2) {
|
|
718
|
+
tagging = args[2];
|
|
719
|
+
if(args.length>3) {
|
|
720
|
+
tag_class = args[3];
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
if(tag.isNil()) {
|
|
724
|
+
asn1Error("must specify tag number");
|
|
725
|
+
}
|
|
726
|
+
if(tagging.isNil()) {
|
|
727
|
+
tagging = getRuntime().newSymbol("EXPLICIT");
|
|
728
|
+
}
|
|
729
|
+
if(!(tagging instanceof RubySymbol)) {
|
|
730
|
+
asn1Error("invalid tag default");
|
|
731
|
+
}
|
|
732
|
+
if(tag_class.isNil()) {
|
|
733
|
+
tag_class = getRuntime().newSymbol("CONTEXT_SPECIFIC");
|
|
734
|
+
}
|
|
735
|
+
if(!(tag_class instanceof RubySymbol)) {
|
|
736
|
+
asn1Error("invalid tag class");
|
|
737
|
+
}
|
|
738
|
+
if(tagging.toString().equals(":IMPLICIT") && RubyNumeric.fix2int(tag) > 31) {
|
|
739
|
+
asn1Error("tag number for Universal too large");
|
|
740
|
+
}
|
|
741
|
+
} else {
|
|
742
|
+
tag = defaultTag();
|
|
743
|
+
tagging = getRuntime().getNil();
|
|
744
|
+
tag_class = getRuntime().newSymbol("UNIVERSAL");
|
|
745
|
+
}
|
|
746
|
+
if("ObjectId".equals(getMetaClass().getRealClass().getBaseName())) {
|
|
747
|
+
String v = (String)(getSymLookup(getRuntime()).get(getObjectIdentifier(value.toString())));
|
|
748
|
+
if(v != null) {
|
|
749
|
+
value = getRuntime().newString(v);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
ThreadContext tc = getRuntime().getCurrentContext();
|
|
753
|
+
this.callMethod(tc,"tag=",tag);
|
|
754
|
+
this.callMethod(tc,"value=",value);
|
|
755
|
+
this.callMethod(tc,"tagging=",tagging);
|
|
756
|
+
this.callMethod(tc,"tag_class=",tag_class);
|
|
757
|
+
|
|
758
|
+
return this;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
private DERObjectIdentifier getObjectIdentifier(String nameOrOid) {
|
|
762
|
+
Object val1 = ASN1.getOIDLookup(getRuntime()).get(nameOrOid.toLowerCase());
|
|
763
|
+
if(null != val1) {
|
|
764
|
+
return (DERObjectIdentifier)val1;
|
|
765
|
+
}
|
|
766
|
+
DERObjectIdentifier val2 = new DERObjectIdentifier(nameOrOid);
|
|
767
|
+
return val2;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
ASN1Encodable toASN1() {
|
|
771
|
+
// System.err.println(getMetaClass().getRealClass().getBaseName()+"#toASN1");
|
|
772
|
+
int tag = idForRubyName(getMetaClass().getRealClass().getBaseName());
|
|
773
|
+
@SuppressWarnings("unchecked") Class<? extends ASN1Encodable> imp = (Class<? extends ASN1Encodable>)ASN1_INFO[tag][1];
|
|
774
|
+
IRubyObject val = callMethod(getRuntime().getCurrentContext(),"value");
|
|
775
|
+
if(imp == DERObjectIdentifier.class) {
|
|
776
|
+
return getObjectIdentifier(val.toString());
|
|
777
|
+
} else if(imp == DERNull.class) {
|
|
778
|
+
return new DERNull();
|
|
779
|
+
} else if(imp == DERBoolean.class) {
|
|
780
|
+
return new DERBoolean(val.isTrue());
|
|
781
|
+
} else if(imp == DERUTCTime.class) {
|
|
782
|
+
return new DERUTCTime(((RubyTime)val).getJavaDate());
|
|
783
|
+
} else if(imp == DERInteger.class && val instanceof RubyBignum) {
|
|
784
|
+
return new DERInteger(((RubyBignum)val).getValue());
|
|
785
|
+
} else if(imp == DERInteger.class) {
|
|
786
|
+
return new DERInteger(new BigInteger(val.toString()));
|
|
787
|
+
} else if(imp == DEROctetString.class) {
|
|
788
|
+
return new DEROctetString(val.convertToString().getBytes());
|
|
789
|
+
} else if(imp == DERBitString.class) {
|
|
790
|
+
byte[] bs = val.convertToString().getBytes();
|
|
791
|
+
int unused = 0;
|
|
792
|
+
for(int i = (bs.length-1); i>-1; i--) {
|
|
793
|
+
if(bs[i] == 0) {
|
|
794
|
+
unused += 8;
|
|
795
|
+
} else {
|
|
796
|
+
byte v2 = bs[i];
|
|
797
|
+
int x = 8;
|
|
798
|
+
while(v2 != 0) {
|
|
799
|
+
v2 <<= 1;
|
|
800
|
+
x--;
|
|
801
|
+
}
|
|
802
|
+
unused += x;
|
|
803
|
+
break;
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
return new DERBitString(bs,unused);
|
|
807
|
+
} else if(val instanceof RubyString) {
|
|
808
|
+
try {
|
|
809
|
+
return imp.getConstructor(String.class).newInstance(val.toString());
|
|
810
|
+
} catch (Exception ex) {
|
|
811
|
+
throw RaiseException.createNativeRaiseException(getRuntime(), ex);
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
System.err.println("object with tag: " + tag + " and value: " + val + " and val.class: " + val.getClass().getName() + " and impl: " + imp.getName());
|
|
816
|
+
System.err.println("WARNING: unimplemented method called: asn1data#toASN1");
|
|
817
|
+
return null;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
protected void print(int indent) {
|
|
821
|
+
printIndent(indent);
|
|
822
|
+
System.out.println(getMetaClass().getRealClass().getBaseName() + ": " + callMethod(getRuntime().getCurrentContext(),"value").callMethod(getRuntime().getCurrentContext(),"inspect").toString());
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
public static class ASN1Constructive extends ASN1Data {
|
|
827
|
+
public static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
|
828
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
|
829
|
+
return new ASN1Constructive(runtime, klass);
|
|
830
|
+
}
|
|
831
|
+
};
|
|
832
|
+
public ASN1Constructive(Ruby runtime, RubyClass type) {
|
|
833
|
+
super(runtime,type);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
@JRubyMethod
|
|
837
|
+
public IRubyObject to_der() {
|
|
838
|
+
return super.to_der();
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
@JRubyMethod(required=1, optional=3)
|
|
842
|
+
public IRubyObject initialize(IRubyObject[] args) {
|
|
843
|
+
IRubyObject value = args[0];
|
|
844
|
+
IRubyObject tag = getRuntime().getNil();
|
|
845
|
+
IRubyObject tagging = getRuntime().getNil();
|
|
846
|
+
IRubyObject tag_class = getRuntime().getNil();
|
|
847
|
+
if(args.length>1) {
|
|
848
|
+
tag = args[1];
|
|
849
|
+
if(args.length>2) {
|
|
850
|
+
tagging = args[2];
|
|
851
|
+
if(args.length>3) {
|
|
852
|
+
tag_class = args[3];
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
if(tag.isNil()) {
|
|
856
|
+
asn1Error("must specify tag number");
|
|
857
|
+
}
|
|
858
|
+
if(tagging.isNil()) {
|
|
859
|
+
tagging = getRuntime().newSymbol("EXPLICIT");
|
|
860
|
+
}
|
|
861
|
+
if(!(tagging instanceof RubySymbol)) {
|
|
862
|
+
asn1Error("invalid tag default");
|
|
863
|
+
}
|
|
864
|
+
if(tag_class.isNil()) {
|
|
865
|
+
tag_class = getRuntime().newSymbol("CONTEXT_SPECIFIC");
|
|
866
|
+
}
|
|
867
|
+
if(!(tag_class instanceof RubySymbol)) {
|
|
868
|
+
asn1Error("invalid tag class");
|
|
869
|
+
}
|
|
870
|
+
if(tagging.toString().equals(":IMPLICIT") && RubyNumeric.fix2int(tag) > 31) {
|
|
871
|
+
asn1Error("tag number for Universal too large");
|
|
872
|
+
}
|
|
873
|
+
} else {
|
|
874
|
+
tag = defaultTag();
|
|
875
|
+
tagging = getRuntime().getNil();
|
|
876
|
+
tag_class = getRuntime().newSymbol("UNIVERSAL");
|
|
877
|
+
}
|
|
878
|
+
ThreadContext tc = getRuntime().getCurrentContext();
|
|
879
|
+
this.callMethod(tc,"tag=",tag);
|
|
880
|
+
this.callMethod(tc,"value=",value);
|
|
881
|
+
this.callMethod(tc,"tagging=",tagging);
|
|
882
|
+
this.callMethod(tc,"tag_class=",tag_class);
|
|
883
|
+
|
|
884
|
+
return this;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
ASN1Encodable toASN1() {
|
|
888
|
+
// System.err.println(getMetaClass().getRealClass().getBaseName()+"#toASN1");
|
|
889
|
+
int id = idForRubyName(getMetaClass().getRealClass().getBaseName());
|
|
890
|
+
if(id != -1) {
|
|
891
|
+
ASN1EncodableVector vec = new ASN1EncodableVector();
|
|
892
|
+
RubyArray arr = (RubyArray)callMethod(getRuntime().getCurrentContext(),"value");
|
|
893
|
+
for(Iterator iter = arr.getList().iterator();iter.hasNext();) {
|
|
894
|
+
IRubyObject v = (IRubyObject)iter.next();
|
|
895
|
+
if(v instanceof ASN1Data) {
|
|
896
|
+
vec.add(((ASN1Data)v).toASN1());
|
|
897
|
+
} else {
|
|
898
|
+
vec.add(((ASN1Data)ASN1.decode(getRuntime().getModule("OpenSSL").getConstant("ASN1"),OpenSSLImpl.to_der_if_possible(v))).toASN1());
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
try {
|
|
902
|
+
@SuppressWarnings("unchecked")
|
|
903
|
+
ASN1Encodable result = (ASN1Encodable)(((Class<? extends ASN1Encodable>)(ASN1_INFO[id][1])).getConstructor(new Class[]{DEREncodableVector.class}).newInstance(new Object[]{vec}));
|
|
904
|
+
return result;
|
|
905
|
+
} catch (Exception e) {
|
|
906
|
+
throw RaiseException.createNativeRaiseException(getRuntime(), e);
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
return null;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
@JRubyMethod(frame=true)
|
|
913
|
+
public IRubyObject each(Block block) {
|
|
914
|
+
RubyArray arr = (RubyArray)callMethod(getRuntime().getCurrentContext(),"value");
|
|
915
|
+
for(Iterator iter = arr.getList().iterator();iter.hasNext();) {
|
|
916
|
+
block.yield(getRuntime().getCurrentContext(),(IRubyObject)iter.next());
|
|
917
|
+
}
|
|
918
|
+
return getRuntime().getNil();
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
protected void print(int indent) {
|
|
922
|
+
printIndent(indent);
|
|
923
|
+
System.out.println(getMetaClass().getRealClass().getBaseName() + ": ");
|
|
924
|
+
RubyArray arr = (RubyArray)callMethod(getRuntime().getCurrentContext(),"value");
|
|
925
|
+
for(Iterator iter = arr.getList().iterator();iter.hasNext();) {
|
|
926
|
+
((ASN1Data)iter.next()).print(indent+1);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
}// ASN1
|