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.
Files changed (485) hide show
  1. data/CHANGES +49 -2
  2. data/README.md +2 -7
  3. data/ROADMAP.md +8 -9
  4. data/Rakefile +29 -44
  5. data/bin/redcar +11 -2
  6. data/lib/openssl/History.txt +75 -0
  7. data/lib/openssl/License.txt +30 -0
  8. data/lib/openssl/Manifest.txt +99 -0
  9. data/lib/openssl/README.txt +24 -0
  10. data/lib/openssl/Rakefile +71 -0
  11. data/lib/openssl/build.properties.SAMPLE +7 -0
  12. data/lib/openssl/build.xml +57 -0
  13. data/lib/openssl/lib/jopenssl/version.rb +5 -0
  14. data/lib/openssl/lib/openssl.rb +24 -0
  15. data/lib/openssl/lib/openssl/bn.rb +33 -0
  16. data/lib/openssl/lib/openssl/buffering.rb +239 -0
  17. data/lib/openssl/lib/openssl/cipher.rb +56 -0
  18. data/lib/openssl/lib/openssl/digest.rb +46 -0
  19. data/lib/openssl/lib/openssl/dummy.rb +34 -0
  20. data/lib/openssl/lib/openssl/dummyssl.rb +13 -0
  21. data/lib/openssl/lib/openssl/ssl.rb +135 -0
  22. data/lib/openssl/lib/openssl/x509.rb +154 -0
  23. data/lib/openssl/mocha/COPYING +3 -0
  24. data/lib/openssl/mocha/MIT-LICENSE +7 -0
  25. data/lib/openssl/mocha/README +35 -0
  26. data/lib/openssl/mocha/RELEASE +171 -0
  27. data/lib/openssl/mocha/Rakefile +147 -0
  28. data/lib/openssl/mocha/TODO +48 -0
  29. data/lib/openssl/mocha/examples/misc.rb +36 -0
  30. data/lib/openssl/mocha/examples/mocha.rb +26 -0
  31. data/lib/openssl/mocha/examples/stubba.rb +65 -0
  32. data/lib/openssl/mocha/init.rb +3 -0
  33. data/lib/openssl/mocha/lib/mocha.rb +19 -0
  34. data/lib/openssl/mocha/lib/mocha/any_instance_method.rb +35 -0
  35. data/lib/openssl/mocha/lib/mocha/auto_verify.rb +111 -0
  36. data/lib/openssl/mocha/lib/mocha/central.rb +35 -0
  37. data/lib/openssl/mocha/lib/mocha/class_method.rb +62 -0
  38. data/lib/openssl/mocha/lib/mocha/deprecation.rb +22 -0
  39. data/lib/openssl/mocha/lib/mocha/exception_raiser.rb +17 -0
  40. data/lib/openssl/mocha/lib/mocha/expectation.rb +382 -0
  41. data/lib/openssl/mocha/lib/mocha/expectation_error.rb +6 -0
  42. data/lib/openssl/mocha/lib/mocha/expectation_list.rb +45 -0
  43. data/lib/openssl/mocha/lib/mocha/infinite_range.rb +25 -0
  44. data/lib/openssl/mocha/lib/mocha/inspect.rb +39 -0
  45. data/lib/openssl/mocha/lib/mocha/instance_method.rb +8 -0
  46. data/lib/openssl/mocha/lib/mocha/is_a.rb +9 -0
  47. data/lib/openssl/mocha/lib/mocha/metaclass.rb +7 -0
  48. data/lib/openssl/mocha/lib/mocha/missing_expectation.rb +27 -0
  49. data/lib/openssl/mocha/lib/mocha/mock.rb +200 -0
  50. data/lib/openssl/mocha/lib/mocha/multiple_yields.rb +20 -0
  51. data/lib/openssl/mocha/lib/mocha/no_yields.rb +11 -0
  52. data/lib/openssl/mocha/lib/mocha/object.rb +110 -0
  53. data/lib/openssl/mocha/lib/mocha/parameter_matchers.rb +9 -0
  54. data/lib/openssl/mocha/lib/mocha/parameter_matchers/all_of.rb +39 -0
  55. data/lib/openssl/mocha/lib/mocha/parameter_matchers/any_of.rb +44 -0
  56. data/lib/openssl/mocha/lib/mocha/parameter_matchers/anything.rb +30 -0
  57. data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_entry.rb +39 -0
  58. data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_key.rb +39 -0
  59. data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_value.rb +39 -0
  60. data/lib/openssl/mocha/lib/mocha/parameter_matchers/includes.rb +37 -0
  61. data/lib/openssl/mocha/lib/mocha/parameter_matchers/instance_of.rb +39 -0
  62. data/lib/openssl/mocha/lib/mocha/parameter_matchers/kind_of.rb +39 -0
  63. data/lib/openssl/mocha/lib/mocha/pretty_parameters.rb +28 -0
  64. data/lib/openssl/mocha/lib/mocha/return_values.rb +31 -0
  65. data/lib/openssl/mocha/lib/mocha/setup_and_teardown.rb +23 -0
  66. data/lib/openssl/mocha/lib/mocha/single_return_value.rb +24 -0
  67. data/lib/openssl/mocha/lib/mocha/single_yield.rb +18 -0
  68. data/lib/openssl/mocha/lib/mocha/standalone.rb +32 -0
  69. data/lib/openssl/mocha/lib/mocha/stub.rb +18 -0
  70. data/lib/openssl/mocha/lib/mocha/test_case_adapter.rb +49 -0
  71. data/lib/openssl/mocha/lib/mocha/yield_parameters.rb +31 -0
  72. data/lib/openssl/mocha/lib/mocha_standalone.rb +2 -0
  73. data/lib/openssl/mocha/lib/stubba.rb +2 -0
  74. data/lib/openssl/mocha/templates/html_with_google_analytics.rb +742 -0
  75. data/lib/openssl/mocha/test/acceptance/expected_invocation_count_acceptance_test.rb +187 -0
  76. data/lib/openssl/mocha/test/acceptance/mocha_acceptance_test.rb +98 -0
  77. data/lib/openssl/mocha/test/acceptance/mocked_methods_dispatch_acceptance_test.rb +71 -0
  78. data/lib/openssl/mocha/test/acceptance/parameter_matcher_acceptance_test.rb +63 -0
  79. data/lib/openssl/mocha/test/acceptance/standalone_acceptance_test.rb +131 -0
  80. data/lib/openssl/mocha/test/acceptance/stubba_acceptance_test.rb +102 -0
  81. data/lib/openssl/mocha/test/active_record_test_case.rb +36 -0
  82. data/lib/openssl/mocha/test/deprecation_disabler.rb +15 -0
  83. data/lib/openssl/mocha/test/execution_point.rb +34 -0
  84. data/lib/openssl/mocha/test/integration/mocha_test_result_integration_test.rb +105 -0
  85. data/lib/openssl/mocha/test/integration/stubba_integration_test.rb +89 -0
  86. data/lib/openssl/mocha/test/integration/stubba_test_result_integration_test.rb +85 -0
  87. data/lib/openssl/mocha/test/method_definer.rb +18 -0
  88. data/lib/openssl/mocha/test/test_helper.rb +12 -0
  89. data/lib/openssl/mocha/test/test_runner.rb +31 -0
  90. data/lib/openssl/mocha/test/unit/any_instance_method_test.rb +124 -0
  91. data/lib/openssl/mocha/test/unit/array_inspect_test.rb +16 -0
  92. data/lib/openssl/mocha/test/unit/auto_verify_test.rb +122 -0
  93. data/lib/openssl/mocha/test/unit/central_test.rb +124 -0
  94. data/lib/openssl/mocha/test/unit/class_method_test.rb +196 -0
  95. data/lib/openssl/mocha/test/unit/date_time_inspect_test.rb +21 -0
  96. data/lib/openssl/mocha/test/unit/expectation_list_test.rb +69 -0
  97. data/lib/openssl/mocha/test/unit/expectation_raiser_test.rb +28 -0
  98. data/lib/openssl/mocha/test/unit/expectation_test.rb +399 -0
  99. data/lib/openssl/mocha/test/unit/hash_inspect_test.rb +16 -0
  100. data/lib/openssl/mocha/test/unit/infinite_range_test.rb +53 -0
  101. data/lib/openssl/mocha/test/unit/metaclass_test.rb +22 -0
  102. data/lib/openssl/mocha/test/unit/missing_expectation_test.rb +45 -0
  103. data/lib/openssl/mocha/test/unit/mock_test.rb +316 -0
  104. data/lib/openssl/mocha/test/unit/multiple_yields_test.rb +18 -0
  105. data/lib/openssl/mocha/test/unit/no_yield_test.rb +18 -0
  106. data/lib/openssl/mocha/test/unit/object_inspect_test.rb +35 -0
  107. data/lib/openssl/mocha/test/unit/object_test.rb +165 -0
  108. data/lib/openssl/mocha/test/unit/parameter_matchers/all_of_test.rb +26 -0
  109. data/lib/openssl/mocha/test/unit/parameter_matchers/any_of_test.rb +26 -0
  110. data/lib/openssl/mocha/test/unit/parameter_matchers/anything_test.rb +21 -0
  111. data/lib/openssl/mocha/test/unit/parameter_matchers/has_entry_test.rb +25 -0
  112. data/lib/openssl/mocha/test/unit/parameter_matchers/has_key_test.rb +25 -0
  113. data/lib/openssl/mocha/test/unit/parameter_matchers/has_value_test.rb +25 -0
  114. data/lib/openssl/mocha/test/unit/parameter_matchers/includes_test.rb +25 -0
  115. data/lib/openssl/mocha/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  116. data/lib/openssl/mocha/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  117. data/lib/openssl/mocha/test/unit/parameter_matchers/stub_matcher.rb +22 -0
  118. data/lib/openssl/mocha/test/unit/pretty_parameters_test.rb +32 -0
  119. data/lib/openssl/mocha/test/unit/return_values_test.rb +63 -0
  120. data/lib/openssl/mocha/test/unit/setup_and_teardown_test.rb +76 -0
  121. data/lib/openssl/mocha/test/unit/single_return_value_test.rb +33 -0
  122. data/lib/openssl/mocha/test/unit/single_yield_test.rb +18 -0
  123. data/lib/openssl/mocha/test/unit/string_inspect_test.rb +11 -0
  124. data/lib/openssl/mocha/test/unit/stub_test.rb +24 -0
  125. data/lib/openssl/mocha/test/unit/yield_parameters_test.rb +93 -0
  126. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/FOLDERS +53 -0
  127. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/LICENSE +340 -0
  128. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/README +117 -0
  129. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/bin/coderay +77 -0
  130. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/bin/coderay_stylesheet +4 -0
  131. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay.rb +319 -0
  132. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/duo.rb +29 -0
  133. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoder.rb +173 -0
  134. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/_map.rb +8 -0
  135. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/count.rb +21 -0
  136. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/debug.rb +46 -0
  137. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/div.rb +20 -0
  138. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html.rb +260 -0
  139. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/classes.rb +77 -0
  140. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/css.rb +65 -0
  141. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/numerization.rb +122 -0
  142. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/output.rb +195 -0
  143. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/null.rb +26 -0
  144. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/page.rb +21 -0
  145. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/span.rb +20 -0
  146. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/statistic.rb +81 -0
  147. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/text.rb +33 -0
  148. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/tokens.rb +44 -0
  149. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/xml.rb +71 -0
  150. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/yaml.rb +22 -0
  151. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/file_type.rb +182 -0
  152. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/gzip_simple.rb +122 -0
  153. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/plugin.rb +326 -0
  154. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/word_list.rb +119 -0
  155. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanner.rb +238 -0
  156. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/_map.rb +15 -0
  157. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/c.rb +163 -0
  158. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/debug.rb +60 -0
  159. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/delphi.rb +149 -0
  160. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/html.rb +177 -0
  161. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/nitro_xhtml.rb +133 -0
  162. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/plaintext.rb +16 -0
  163. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/rhtml.rb +73 -0
  164. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/ruby.rb +367 -0
  165. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/ruby/patterns.rb +230 -0
  166. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/xml.rb +18 -0
  167. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/style.rb +20 -0
  168. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/_map.rb +7 -0
  169. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/cycnus.rb +125 -0
  170. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/murphy.rb +119 -0
  171. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/tokens.rb +368 -0
  172. data/lib/openssl/mocha/vendor/meta_project-0.4.15/CHANGES +295 -0
  173. data/lib/openssl/mocha/vendor/meta_project-0.4.15/MIT-LICENSE +21 -0
  174. data/lib/openssl/mocha/vendor/meta_project-0.4.15/README +129 -0
  175. data/lib/openssl/mocha/vendor/meta_project-0.4.15/Rakefile +152 -0
  176. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project.rb +19 -0
  177. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/open_uri.rb +22 -0
  178. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/pathname.rb +36 -0
  179. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/string.rb +5 -0
  180. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/http/multipart.rb +32 -0
  181. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/patois.rb +1 -0
  182. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/patois/parser.rb +99 -0
  183. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project.rb +4 -0
  184. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/base.rb +9 -0
  185. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/codehaus.rb +1 -0
  186. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/codehaus/codehaus_project_svn.rb +31 -0
  187. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/trac.rb +1 -0
  188. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/trac/trac_project.rb +54 -0
  189. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge.rb +5 -0
  190. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/ruby_forge.rb +47 -0
  191. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/session.rb +177 -0
  192. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/source_forge.rb +50 -0
  193. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/xfile.rb +45 -0
  194. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/xforge_base.rb +85 -0
  195. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project_analyzer.rb +36 -0
  196. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/release/freshmeat.rb +267 -0
  197. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/release/raa.rb +572 -0
  198. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web.rb +2 -0
  199. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web/browser.rb +112 -0
  200. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web/pathname.rb +89 -0
  201. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker.rb +6 -0
  202. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/base.rb +24 -0
  203. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/digit_issues.rb +34 -0
  204. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/issue.rb +57 -0
  205. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira.rb +2 -0
  206. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira/jira_issues.rb +35 -0
  207. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira/jira_tracker.rb +149 -0
  208. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/trac.rb +1 -0
  209. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/trac/trac_tracker.rb +33 -0
  210. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge.rb +3 -0
  211. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +17 -0
  212. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/source_forge_tracker.rb +17 -0
  213. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/xforge_tracker.rb +191 -0
  214. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/version_parser.rb +52 -0
  215. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge.rb +3 -0
  216. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/base.rb +64 -0
  217. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/news_publisher.rb +97 -0
  218. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/release.rb +134 -0
  219. data/lib/openssl/nbproject/genfiles.properties +5 -0
  220. data/lib/openssl/nbproject/jdk.xml +157 -0
  221. data/lib/openssl/nbproject/nbjdk.properties +1 -0
  222. data/lib/openssl/nbproject/nbjdk.xml +16 -0
  223. data/lib/openssl/nbproject/project.xml +117 -0
  224. data/lib/openssl/src/java/JopensslService.java +41 -0
  225. data/lib/openssl/src/java/org/jruby/ext/openssl/ASN1.java +930 -0
  226. data/lib/openssl/src/java/org/jruby/ext/openssl/Attribute.java +132 -0
  227. data/lib/openssl/src/java/org/jruby/ext/openssl/BN.java +769 -0
  228. data/lib/openssl/src/java/org/jruby/ext/openssl/BouncyCastlePEMHandler.java +69 -0
  229. data/lib/openssl/src/java/org/jruby/ext/openssl/Callable.java +10 -0
  230. data/lib/openssl/src/java/org/jruby/ext/openssl/Cipher.java +661 -0
  231. data/lib/openssl/src/java/org/jruby/ext/openssl/CipherStrings.java +1827 -0
  232. data/lib/openssl/src/java/org/jruby/ext/openssl/Config.java +49 -0
  233. data/lib/openssl/src/java/org/jruby/ext/openssl/DefaultPEMHandler.java +44 -0
  234. data/lib/openssl/src/java/org/jruby/ext/openssl/Digest.java +207 -0
  235. data/lib/openssl/src/java/org/jruby/ext/openssl/HMAC.java +183 -0
  236. data/lib/openssl/src/java/org/jruby/ext/openssl/NetscapeSPKI.java +212 -0
  237. data/lib/openssl/src/java/org/jruby/ext/openssl/OpenSSLImpl.java +341 -0
  238. data/lib/openssl/src/java/org/jruby/ext/openssl/OpenSSLReal.java +113 -0
  239. data/lib/openssl/src/java/org/jruby/ext/openssl/PEMHandler.java +40 -0
  240. data/lib/openssl/src/java/org/jruby/ext/openssl/PKCS10CertificationRequestExt.java +159 -0
  241. data/lib/openssl/src/java/org/jruby/ext/openssl/PKCS7.java +642 -0
  242. data/lib/openssl/src/java/org/jruby/ext/openssl/PKey.java +154 -0
  243. data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyDH.java +401 -0
  244. data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyDSA.java +419 -0
  245. data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyRSA.java +762 -0
  246. data/lib/openssl/src/java/org/jruby/ext/openssl/Random.java +103 -0
  247. data/lib/openssl/src/java/org/jruby/ext/openssl/Request.java +336 -0
  248. data/lib/openssl/src/java/org/jruby/ext/openssl/SSL.java +71 -0
  249. data/lib/openssl/src/java/org/jruby/ext/openssl/SSLContext.java +358 -0
  250. data/lib/openssl/src/java/org/jruby/ext/openssl/SSLSocket.java +561 -0
  251. data/lib/openssl/src/java/org/jruby/ext/openssl/SimpleSecretKey.java +53 -0
  252. data/lib/openssl/src/java/org/jruby/ext/openssl/Utils.java +60 -0
  253. data/lib/openssl/src/java/org/jruby/ext/openssl/X509.java +108 -0
  254. data/lib/openssl/src/java/org/jruby/ext/openssl/X509CRL.java +446 -0
  255. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Cert.java +520 -0
  256. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Extensions.java +751 -0
  257. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Name.java +405 -0
  258. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Revoked.java +111 -0
  259. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Store.java +282 -0
  260. data/lib/openssl/src/java/org/jruby/ext/openssl/X509StoreCtx.java +206 -0
  261. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/ASN1Registry.java +5135 -0
  262. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Attribute.java +79 -0
  263. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/BIO.java +345 -0
  264. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/BIOFilter.java +38 -0
  265. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Base64BIOFilter.java +84 -0
  266. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/CipherBIOFilter.java +157 -0
  267. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Digest.java +126 -0
  268. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/EVP.java +136 -0
  269. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/EncContent.java +178 -0
  270. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Encrypt.java +77 -0
  271. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Envelope.java +169 -0
  272. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/IssuerAndSerial.java +35 -0
  273. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MemBIO.java +117 -0
  274. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MessageDigestBIOFilter.java +76 -0
  275. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Mime.java +245 -0
  276. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MimeHeader.java +103 -0
  277. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MimeParam.java +69 -0
  278. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/NotVerifiedPKCS7Exception.java +38 -0
  279. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/NullSinkBIO.java +52 -0
  280. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java +1276 -0
  281. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java +168 -0
  282. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataData.java +88 -0
  283. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataDigest.java +64 -0
  284. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEncrypted.java +61 -0
  285. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEnveloped.java +85 -0
  286. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java +127 -0
  287. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java +91 -0
  288. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7Exception.java +68 -0
  289. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java +244 -0
  290. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SMIME.java +281 -0
  291. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java +202 -0
  292. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Signed.java +345 -0
  293. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SignerInfoWithPkey.java +365 -0
  294. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/TypeDiscriminating.java +34 -0
  295. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/utils/Base64.java +1809 -0
  296. data/lib/openssl/src/java/org/jruby/ext/openssl/util/Base64Coder.java +103 -0
  297. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CRL.java +59 -0
  298. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Certificate.java +57 -0
  299. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CertificateFile.java +46 -0
  300. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CertificateHashDir.java +46 -0
  301. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function0.java +43 -0
  302. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function1.java +43 -0
  303. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function2.java +43 -0
  304. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function3.java +43 -0
  305. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function4.java +43 -0
  306. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function5.java +43 -0
  307. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Lookup.java +560 -0
  308. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/LookupMethod.java +84 -0
  309. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Name.java +85 -0
  310. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java +1210 -0
  311. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PKey.java +41 -0
  312. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PolicyTree.java +36 -0
  313. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Purpose.java +475 -0
  314. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Store.java +377 -0
  315. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/StoreContext.java +1356 -0
  316. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Trust.java +279 -0
  317. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/VerifyParameter.java +324 -0
  318. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Aux.java +43 -0
  319. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509AuxCertificate.java +170 -0
  320. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Error.java +70 -0
  321. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Object.java +88 -0
  322. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Utils.java +541 -0
  323. data/lib/openssl/test/cert_with_ec_pk.cer +27 -0
  324. data/lib/openssl/test/fixture/ca_path/72fa7371.0 +19 -0
  325. data/lib/openssl/test/fixture/ca_path/verisign.pem +19 -0
  326. data/lib/openssl/test/fixture/cacert.pem +23 -0
  327. data/lib/openssl/test/fixture/cert_localhost.pem +19 -0
  328. data/lib/openssl/test/fixture/common.pem +48 -0
  329. data/lib/openssl/test/fixture/localhost_keypair.pem +18 -0
  330. data/lib/openssl/test/fixture/max.pem +29 -0
  331. data/lib/openssl/test/fixture/purpose/b70a5bc1.0 +24 -0
  332. data/lib/openssl/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
  333. data/lib/openssl/test/fixture/purpose/ca/ca_config.rb +37 -0
  334. data/lib/openssl/test/fixture/purpose/ca/cacert.pem +24 -0
  335. data/lib/openssl/test/fixture/purpose/ca/newcerts/2_cert.pem +19 -0
  336. data/lib/openssl/test/fixture/purpose/ca/newcerts/3_cert.pem +19 -0
  337. data/lib/openssl/test/fixture/purpose/ca/private/cakeypair.pem +30 -0
  338. data/lib/openssl/test/fixture/purpose/ca/serial +1 -0
  339. data/lib/openssl/test/fixture/purpose/cacert.pem +24 -0
  340. data/lib/openssl/test/fixture/purpose/scripts/gen_cert.rb +127 -0
  341. data/lib/openssl/test/fixture/purpose/scripts/gen_csr.rb +50 -0
  342. data/lib/openssl/test/fixture/purpose/scripts/init_ca.rb +66 -0
  343. data/lib/openssl/test/fixture/purpose/sslclient.pem +19 -0
  344. data/lib/openssl/test/fixture/purpose/sslclient/csr.pem +10 -0
  345. data/lib/openssl/test/fixture/purpose/sslclient/keypair.pem +15 -0
  346. data/lib/openssl/test/fixture/purpose/sslclient/sslclient.pem +19 -0
  347. data/lib/openssl/test/fixture/purpose/sslserver.pem +19 -0
  348. data/lib/openssl/test/fixture/purpose/sslserver/csr.pem +10 -0
  349. data/lib/openssl/test/fixture/purpose/sslserver/keypair.pem +15 -0
  350. data/lib/openssl/test/fixture/purpose/sslserver/sslserver.pem +19 -0
  351. data/lib/openssl/test/fixture/verisign.pem +19 -0
  352. data/lib/openssl/test/fixture/verisign_c3.pem +14 -0
  353. data/lib/openssl/test/openssl/ssl_server.rb +99 -0
  354. data/lib/openssl/test/openssl/test_asn1.rb +199 -0
  355. data/lib/openssl/test/openssl/test_cipher.rb +196 -0
  356. data/lib/openssl/test/openssl/test_digest.rb +88 -0
  357. data/lib/openssl/test/openssl/test_hmac.rb +44 -0
  358. data/lib/openssl/test/openssl/test_ns_spki.rb +69 -0
  359. data/lib/openssl/test/openssl/test_pair.rb +149 -0
  360. data/lib/openssl/test/openssl/test_pkcs7.rb +160 -0
  361. data/lib/openssl/test/openssl/test_pkey_rsa.rb +49 -0
  362. data/lib/openssl/test/openssl/test_ssl.rb +413 -0
  363. data/lib/openssl/test/openssl/test_x509cert.rb +236 -0
  364. data/lib/openssl/test/openssl/test_x509crl.rb +234 -0
  365. data/lib/openssl/test/openssl/test_x509ext.rb +95 -0
  366. data/lib/openssl/test/openssl/test_x509name.rb +281 -0
  367. data/lib/openssl/test/openssl/test_x509req.rb +178 -0
  368. data/lib/openssl/test/openssl/test_x509store.rb +245 -0
  369. data/lib/openssl/test/openssl/utils.rb +135 -0
  370. data/lib/openssl/test/pkcs7_mime_enveloped.message +19 -0
  371. data/lib/openssl/test/pkcs7_mime_signed.message +30 -0
  372. data/lib/openssl/test/pkcs7_multipart_signed.message +45 -0
  373. data/lib/openssl/test/ref/compile.rb +8 -0
  374. data/lib/openssl/test/ref/pkcs1 +0 -0
  375. data/lib/openssl/test/ref/pkcs1.c +21 -0
  376. data/lib/openssl/test/test_cipher.rb +95 -0
  377. data/lib/openssl/test/test_integration.rb +139 -0
  378. data/lib/openssl/test/test_java.rb +98 -0
  379. data/lib/openssl/test/test_java_attribute.rb +25 -0
  380. data/lib/openssl/test/test_java_bio.rb +42 -0
  381. data/lib/openssl/test/test_java_mime.rb +173 -0
  382. data/lib/openssl/test/test_java_pkcs7.rb +769 -0
  383. data/lib/openssl/test/test_java_smime.rb +177 -0
  384. data/lib/openssl/test/test_openssl.rb +34 -0
  385. data/lib/openssl/test/test_openssl_x509.rb +34 -0
  386. data/lib/openssl/test/test_parse_certificate.rb +20 -0
  387. data/lib/openssl/test/test_pkey.rb +46 -0
  388. data/lib/openssl/test/test_x509store.rb +155 -0
  389. data/lib/openssl/test/ut_eof.rb +128 -0
  390. data/lib/redcar.rb +134 -8
  391. data/lib/redcar/installer.rb +46 -11
  392. data/lib/redcar/runner.rb +2 -1
  393. data/lib/redcar/usage.rb +12 -5
  394. data/lib/redcar_quick_start.rb +37 -0
  395. data/plugins/application/features/support/env.rb +9 -1
  396. data/plugins/application/icons/redcar_icon_beta.png +0 -0
  397. data/plugins/application/lib/application.rb +113 -43
  398. data/plugins/application/lib/application/clipboard.rb +28 -4
  399. data/plugins/application/lib/application/command.rb +4 -12
  400. data/plugins/application/lib/application/command/executor.rb +2 -2
  401. data/plugins/application/lib/application/keymap.rb +39 -0
  402. data/plugins/application/lib/application/keymap/builder.rb +19 -0
  403. data/plugins/application/lib/application/speedbar.rb +33 -24
  404. data/plugins/application/lib/application/tab.rb +15 -0
  405. data/plugins/application/lib/application/window.rb +28 -5
  406. data/plugins/application/spec/application/clipboard_spec.rb +20 -1
  407. data/plugins/application/spec/application/command/executor_spec.rb +7 -2
  408. data/plugins/application/spec/application/command_spec.rb +0 -5
  409. data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
  410. data/plugins/application/spec/application/menu_spec.rb +30 -0
  411. data/plugins/application/spec/application/speedbar_spec.rb +30 -6
  412. data/plugins/application/spec/application/window_spec.rb +2 -2
  413. data/plugins/application/spec/spec_helper.rb +1 -1
  414. data/plugins/application_swt/lib/application_swt.rb +3 -0
  415. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +10 -1
  416. data/plugins/application_swt/lib/application_swt/html_tab.rb +1 -0
  417. data/plugins/application_swt/lib/application_swt/menu.rb +4 -3
  418. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +12 -4
  419. data/plugins/application_swt/lib/application_swt/speedbar.rb +105 -19
  420. data/plugins/application_swt/lib/application_swt/swt_wrapper.rb +2 -0
  421. data/plugins/application_swt/lib/application_swt/window.rb +55 -23
  422. data/plugins/application_swt/spec/spec_helper.rb +0 -1
  423. data/plugins/auto_completer/lib/auto_completer.rb +57 -3
  424. data/plugins/auto_indenter/lib/auto_indenter.rb +1 -1
  425. data/plugins/core/lib/core.rb +5 -3
  426. data/plugins/core/lib/core/interface.rb +73 -0
  427. data/plugins/core/lib/core/model.rb +2 -0
  428. data/plugins/core/lib/core/observable.rb +12 -1
  429. data/plugins/core/lib/core/observable_struct.rb +34 -0
  430. data/plugins/core/lib/core/plugin/storage.rb +16 -3
  431. data/plugins/core/lib/core/reentry_helpers.rb +13 -0
  432. data/plugins/core/spec/core/observable_spec.rb +13 -0
  433. data/plugins/core/spec/core/storage_spec.rb +18 -0
  434. data/plugins/core/spec/spec_helper.rb +1 -0
  435. data/plugins/edit_view/features/cut_and_paste.feature +4 -2
  436. data/plugins/edit_view/features/soft_tabs.feature +243 -0
  437. data/plugins/edit_view/features/step_definitions/editing_steps.rb +91 -2
  438. data/plugins/edit_view/features/step_definitions/tab_steps.rb +1 -1
  439. data/plugins/edit_view/features/tabs.feature +146 -0
  440. data/plugins/edit_view/lib/edit_view.rb +197 -8
  441. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +121 -0
  442. data/plugins/edit_view/lib/edit_view/actions/deletion.rb +30 -0
  443. data/plugins/edit_view/lib/edit_view/actions/tab.rb +66 -0
  444. data/plugins/edit_view/lib/edit_view/command.rb +0 -2
  445. data/plugins/edit_view/lib/edit_view/document.rb +62 -27
  446. data/plugins/edit_view/lib/edit_view/document/command.rb +11 -0
  447. data/plugins/edit_view/lib/edit_view/edit_tab.rb +2 -1
  448. data/plugins/edit_view/lib/edit_view/info_speedbar.rb +69 -0
  449. data/plugins/edit_view/lib/edit_view/tab_settings.rb +40 -0
  450. data/plugins/edit_view/spec/edit_view/document_spec.rb +26 -0
  451. data/plugins/edit_view/spec/spec_helper.rb +0 -1
  452. data/plugins/edit_view_swt/lib/edit_view_swt.rb +57 -69
  453. data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +24 -3
  454. data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +23 -6
  455. data/plugins/edit_view_swt/spec/spec_helper.rb +0 -1
  456. data/plugins/edit_view_swt/vendor/java-mateview.rb +19 -2
  457. data/plugins/encryption/encryption.rb +38 -0
  458. data/plugins/encryption/ezcrypto.rb +652 -0
  459. data/plugins/encryption/jarmor-1.1.jar +0 -0
  460. data/plugins/encryption/plugin.rb +9 -0
  461. data/plugins/execute_current_tab/lib/execute_current_tab.rb +56 -0
  462. data/plugins/execute_current_tab/plugin.rb +8 -0
  463. data/plugins/html_view/lib/html_view.rb +16 -11
  464. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +2 -1
  465. data/plugins/plugin_manager_ui/views/index.html.erb +22 -4
  466. data/plugins/project/lib/project.rb +140 -26
  467. data/plugins/project/lib/project/drb_service.rb +75 -0
  468. data/plugins/project/lib/project/file_mirror.rb +5 -5
  469. data/plugins/project/lib/project/find_file_dialog.rb +123 -32
  470. data/plugins/project/spec/project/file_mirror_spec.rb +10 -1
  471. data/plugins/project/spec/spec_helper.rb +0 -1
  472. data/plugins/redcar/plugin.rb +1 -1
  473. data/plugins/redcar/redcar.rb +204 -109
  474. data/plugins/redcar/spec/redcar/redcar_spec.rb +70 -0
  475. data/plugins/redcar/spec/spec_helper.rb +4 -0
  476. data/plugins/repl/lib/repl.rb +14 -7
  477. data/plugins/repl/lib/repl/internal_mirror.rb +43 -22
  478. data/plugins/repl/spec/repl/internal_mirror_spec.rb +34 -7
  479. data/plugins/repl/spec/spec_helper.rb +0 -1
  480. data/plugins/tree/spec/spec_helper.rb +0 -1
  481. data/plugins/tree_view_swt/lib/tree_view_swt.rb +1 -1
  482. data/textmate/Bundles/RedcarRepl.tmbundle/Syntaxes/InternalRuby.plist +2 -18
  483. data/textmate/Bundles/asciidoc.tmbundle/Syntaxes/AsciiDoc.tmLanguage +428 -0
  484. metadata +790 -371
  485. data/lib/redcar/boot.rb +0 -108
@@ -0,0 +1,377 @@
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 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.x509store;
29
+
30
+ import java.io.FileNotFoundException;
31
+ import java.security.cert.X509Certificate;
32
+
33
+ import java.util.ArrayList;
34
+ import java.util.List;
35
+
36
+ import javax.net.ssl.X509TrustManager;
37
+
38
+ /**
39
+ * c: X509_STORE
40
+ *
41
+ * @author <a href="mailto:ola.bini@ki.se">Ola Bini</a>
42
+ */
43
+ public class Store implements X509TrustManager {
44
+ public int cache;
45
+ public List<X509Object> objs;
46
+ public List<Lookup> certificateMethods;
47
+ public VerifyParameter param;
48
+
49
+ public static interface VerifyFunction extends Function1 {
50
+ public static final VerifyFunction EMPTY = new VerifyFunction(){
51
+ public int call(Object arg0) {
52
+ return -1;
53
+ }
54
+ };
55
+ }
56
+ public static interface VerifyCallbackFunction extends Function2 {
57
+ public static final VerifyCallbackFunction EMPTY = new VerifyCallbackFunction(){
58
+ public int call(Object arg0, Object arg1) {
59
+ return -1;
60
+ }
61
+ };
62
+ }
63
+ public static interface GetIssuerFunction extends Function3 {
64
+ public static final GetIssuerFunction EMPTY = new GetIssuerFunction(){
65
+ public int call(Object arg0, Object arg1, Object arg2) {
66
+ return -1;
67
+ }
68
+ };
69
+ }
70
+ public static interface CheckIssuedFunction extends Function3 {
71
+ public static final CheckIssuedFunction EMPTY = new CheckIssuedFunction(){
72
+ public int call(Object arg0, Object arg1, Object arg2) {
73
+ return -1;
74
+ }
75
+ };
76
+ }
77
+ public static interface CheckRevocationFunction extends Function1 {
78
+ public static final CheckRevocationFunction EMPTY = new CheckRevocationFunction(){
79
+ public int call(Object arg0) {
80
+ return -1;
81
+ }
82
+ };
83
+ }
84
+ public static interface GetCRLFunction extends Function3 {
85
+ public static final GetCRLFunction EMPTY = new GetCRLFunction(){
86
+ public int call(Object arg0, Object arg1, Object arg2) {
87
+ return -1;
88
+ }
89
+ };
90
+ }
91
+ public static interface CheckCRLFunction extends Function2 {
92
+ public static final CheckCRLFunction EMPTY = new CheckCRLFunction(){
93
+ public int call(Object arg0, Object arg1) {
94
+ return -1;
95
+ }
96
+ };
97
+ }
98
+ public static interface CertificateCRLFunction extends Function3 {
99
+ public static final CertificateCRLFunction EMPTY = new CertificateCRLFunction(){
100
+ public int call(Object arg0, Object arg1, Object arg2) {
101
+ return -1;
102
+ }
103
+ };
104
+ }
105
+ public static interface CleanupFunction extends Function1 {
106
+ public static final CleanupFunction EMPTY = new CleanupFunction(){
107
+ public int call(Object arg0) {
108
+ return -1;
109
+ }
110
+ };
111
+ }
112
+
113
+ public VerifyFunction verify;
114
+ public VerifyCallbackFunction verifyCallback;
115
+ public GetIssuerFunction getIssuer;
116
+ public CheckIssuedFunction checkIssued;
117
+ public CheckRevocationFunction checkRevocation;
118
+ public GetCRLFunction getCRL;
119
+ public CheckCRLFunction checkCRL;
120
+ public CertificateCRLFunction certificateCRL;
121
+ public CleanupFunction cleanup;
122
+
123
+ public List<Object> extraData;
124
+ public int references;
125
+
126
+ /**
127
+ * c: X509_STORE_new
128
+ */
129
+ public Store() {
130
+ objs = new ArrayList<X509Object>();
131
+ cache = 1;
132
+ certificateMethods = new ArrayList<Lookup>();
133
+
134
+ verify = VerifyFunction.EMPTY;
135
+ verifyCallback = VerifyCallbackFunction.EMPTY;
136
+
137
+ param = new VerifyParameter();
138
+
139
+ getIssuer = GetIssuerFunction.EMPTY;
140
+ checkIssued = CheckIssuedFunction.EMPTY;
141
+ checkRevocation = CheckRevocationFunction.EMPTY;
142
+ getCRL = GetCRLFunction.EMPTY;
143
+ checkCRL = CheckCRLFunction.EMPTY;
144
+ certificateCRL = CertificateCRLFunction.EMPTY;
145
+ cleanup = CleanupFunction.EMPTY;
146
+
147
+ references = 1;
148
+ extraData = new ArrayList<Object>();
149
+ this.extraData.add(null);this.extraData.add(null);this.extraData.add(null);
150
+ this.extraData.add(null);this.extraData.add(null);this.extraData.add(null);
151
+ this.extraData.add(null);this.extraData.add(null);this.extraData.add(null);
152
+ }
153
+
154
+ /**
155
+ * c: X509_STORE_set_verify_func
156
+ */
157
+ public void setVerifyFunction(VerifyFunction func) {
158
+ verify = func;
159
+ }
160
+
161
+ /**
162
+ * c: X509_STORE_set_verify_cb_func
163
+ */
164
+ public void setVerifyCallbackFunction(VerifyCallbackFunction func) {
165
+ verifyCallback = func;
166
+ }
167
+
168
+ /**
169
+ * c: X509_STORE_free
170
+ */
171
+ public void free() throws Exception {
172
+ for(Lookup lu : certificateMethods) {
173
+ lu.shutdown();
174
+ lu.free();
175
+ }
176
+ if(param != null) {
177
+ param.free();
178
+ }
179
+ }
180
+
181
+ /**
182
+ * c: X509_set_ex_data
183
+ */
184
+ public int setExtraData(int idx,Object data) {
185
+ extraData.set(idx,data);
186
+ return 1;
187
+ }
188
+
189
+ /**
190
+ * c: X509_get_ex_data
191
+ */
192
+ public Object getExtraData(int idx) {
193
+ return extraData.get(idx);
194
+ }
195
+
196
+ /**
197
+ * c: X509_STORE_set_depth
198
+ */
199
+ public int setDepth(int depth) {
200
+ param.setDepth(depth);
201
+ return 1;
202
+ }
203
+
204
+ /**
205
+ * c: X509_STORE_set_flags
206
+ */
207
+ public int setFlags(long flags) {
208
+ return param.setFlags(flags);
209
+ }
210
+
211
+ /**
212
+ * c: X509_STORE_set_purpose
213
+ */
214
+ public int setPurpose(int purpose) {
215
+ return param.setPurpose(purpose);
216
+ }
217
+
218
+ /**
219
+ * c: X509_STORE_set_trust
220
+ */
221
+ public int setTrust(int trust) {
222
+ return param.setTrust(trust);
223
+ }
224
+
225
+ /**
226
+ * c: X509_STORE_set1_param
227
+ */
228
+ public int setParam(VerifyParameter pm) {
229
+ return param.set(param);
230
+ }
231
+
232
+ /**
233
+ * c: X509_STORE_add_lookup
234
+ */
235
+ public Lookup addLookup(LookupMethod m) throws Exception {
236
+ Lookup lu;
237
+
238
+ for(Lookup l : certificateMethods) {
239
+ if(l.equals(m)) {
240
+ return l;
241
+ }
242
+ }
243
+ lu = new Lookup(m);
244
+ lu.store = this;
245
+ certificateMethods.add(lu);
246
+ return lu;
247
+ }
248
+
249
+ /**
250
+ * c: X509_STORE_add_cert
251
+ */
252
+ public int addCertificate(X509Certificate x) {
253
+ int ret = 1;
254
+ if(x == null) {
255
+ return 0;
256
+ }
257
+
258
+ Certificate obj = new Certificate();
259
+ obj.x509 = StoreContext.ensureAux(x);
260
+
261
+ synchronized(X509Utils.CRYPTO_LOCK_X509_STORE) {
262
+ if(X509Object.retrieveMatch(objs,obj) != null) {
263
+ X509Error.addError(X509Utils.X509_R_CERT_ALREADY_IN_HASH_TABLE);
264
+ ret=0;
265
+ } else {
266
+ objs.add(obj);
267
+ }
268
+ }
269
+ return ret;
270
+ }
271
+
272
+ /**
273
+ * c: X509_STORE_add_crl
274
+ */
275
+ public int addCRL(java.security.cert.CRL x) {
276
+ int ret = 1;
277
+ if(null == x) {
278
+ return 0;
279
+ }
280
+ CRL obj = new CRL();
281
+ obj.crl = x;
282
+
283
+ synchronized(X509Utils.CRYPTO_LOCK_X509_STORE) {
284
+ if(X509Object.retrieveMatch(objs,obj) != null) {
285
+ X509Error.addError(X509Utils.X509_R_CERT_ALREADY_IN_HASH_TABLE);
286
+ ret=0;
287
+ } else {
288
+ objs.add(obj);
289
+ }
290
+ }
291
+ return ret;
292
+ }
293
+
294
+ /**
295
+ * c: X509_STORE_load_locations
296
+ */
297
+ public int loadLocations(String file, String path) throws Exception {
298
+ Lookup lookup;
299
+
300
+ if(file != null) {
301
+ lookup = addLookup(Lookup.fileLookup());
302
+ if(lookup == null) {
303
+ return 0;
304
+ }
305
+ if(lookup.loadFile(new CertificateFile.Path(file,X509Utils.X509_FILETYPE_PEM)) != 1) {
306
+ return 0;
307
+ }
308
+ }
309
+
310
+ if(path != null) {
311
+ lookup = addLookup(Lookup.hashDirLookup());
312
+ if(lookup == null) {
313
+ return 0;
314
+ }
315
+ if(lookup.addDir(new CertificateHashDir.Dir(path,X509Utils.X509_FILETYPE_PEM)) != 1) {
316
+ return 0;
317
+ }
318
+ }
319
+ if((path == null) && (file == null)) {
320
+ return 0;
321
+ }
322
+
323
+ return 1;
324
+ }
325
+
326
+ /**
327
+ * c: X509_STORE_set_default_paths
328
+ * not used for now: invoking this method causes refering System.getenv("SSL_CERT_DIR") etc.
329
+ * We need to get the dir via evaluating "ENV['SSL_CERT_DIR']" instead of it.
330
+ */
331
+ public int setDefaultPaths() throws Exception {
332
+ Lookup lookup;
333
+
334
+ lookup = addLookup(Lookup.fileLookup());
335
+ if(lookup == null) {
336
+ return 0;
337
+ }
338
+ try {
339
+ lookup.loadFile(new CertificateFile.Path(null,X509Utils.X509_FILETYPE_DEFAULT));
340
+ }
341
+ catch(FileNotFoundException e) {
342
+ // set_default_paths ignores FileNotFound
343
+ }
344
+
345
+ lookup = addLookup(Lookup.hashDirLookup());
346
+ if(lookup == null) {
347
+ return 0;
348
+ }
349
+ try {
350
+ lookup.addDir(new CertificateHashDir.Dir(null,X509Utils.X509_FILETYPE_DEFAULT));
351
+ }
352
+ catch(FileNotFoundException e) {
353
+ // set_default_paths ignores FileNotFound
354
+ }
355
+
356
+ X509Error.clearErrors();
357
+
358
+ return 1;
359
+ }
360
+
361
+
362
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {
363
+ }
364
+
365
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {
366
+ }
367
+
368
+ public X509Certificate[] getAcceptedIssuers() {
369
+ List<X509Certificate> l = new ArrayList<X509Certificate>();
370
+ for(X509Object o : objs) {
371
+ if(o instanceof Certificate) {
372
+ l.add(((Certificate)o).x509);
373
+ }
374
+ }
375
+ return (X509Certificate[])l.toArray(new X509Certificate[l.size()]);
376
+ }
377
+ }// X509_STORE
@@ -0,0 +1,1356 @@
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 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.x509store;
29
+
30
+ import java.security.PublicKey;
31
+ import java.security.cert.X509CRL;
32
+ import java.security.cert.X509Certificate;
33
+ import java.security.cert.X509Extension;
34
+
35
+ import java.util.Calendar;
36
+ import java.util.Collection;
37
+ import java.util.Date;
38
+ import java.util.ArrayList;
39
+ import java.util.List;
40
+ import java.util.Set;
41
+ import java.util.HashSet;
42
+
43
+ import org.bouncycastle.asn1.ASN1InputStream;
44
+ import org.bouncycastle.asn1.DERSequence;
45
+ import org.bouncycastle.asn1.DERInteger;
46
+
47
+ import org.jruby.ext.openssl.OpenSSLReal;
48
+
49
+ /**
50
+ * c: X509_STORE_CTX
51
+ *
52
+ * @author <a href="mailto:ola.bini@ki.se">Ola Bini</a>
53
+ */
54
+ public class StoreContext {
55
+ public Store ctx;
56
+ public int currentMethod;
57
+
58
+ public X509AuxCertificate certificate;
59
+ public List<X509AuxCertificate> untrusted;
60
+ public List<X509CRL> crls;
61
+
62
+ public VerifyParameter param;
63
+
64
+ public List<X509AuxCertificate> otherContext;
65
+
66
+ public static interface CheckPolicyFunction extends Function1 {
67
+ public static final CheckPolicyFunction EMPTY = new CheckPolicyFunction(){
68
+ public int call(Object arg0) {
69
+ return -1;
70
+ }
71
+ };
72
+ }
73
+
74
+ public Store.VerifyFunction verify;
75
+ public Store.VerifyCallbackFunction verifyCallback;
76
+ public Store.GetIssuerFunction getIssuer;
77
+ public Store.CheckIssuedFunction checkIssued;
78
+ public Store.CheckRevocationFunction checkRevocation;
79
+ public Store.GetCRLFunction getCRL;
80
+ public Store.CheckCRLFunction checkCRL;
81
+ public Store.CertificateCRLFunction certificateCRL;
82
+ public CheckPolicyFunction checkPolicy;
83
+ public Store.CleanupFunction cleanup;
84
+
85
+ public boolean isValid;
86
+ public int lastUntrusted;
87
+
88
+ public List<X509AuxCertificate> chain; //List<X509AuxCertificate>
89
+ public PolicyTree tree;
90
+
91
+ public int explicitPolicy;
92
+
93
+ public int errorDepth;
94
+ public int error;
95
+ public X509AuxCertificate currentCertificate;
96
+ public X509AuxCertificate currentIssuer;
97
+ public java.security.cert.CRL currentCRL;
98
+
99
+ public List<Object> extraData;
100
+
101
+ /**
102
+ * c: X509_STORE_CTX_set_depth
103
+ */
104
+ public void setDepth(int depth) {
105
+ param.setDepth(depth);
106
+ }
107
+
108
+ /**
109
+ * c: X509_STORE_CTX_set_app_data
110
+ */
111
+ public void setApplicationData(Object data) {
112
+ setExtraData(0,data);
113
+ }
114
+
115
+ /**
116
+ * c: X509_STORE_CTX_get_app_data
117
+ */
118
+ public Object getApplicationData() {
119
+ return getExtraData(0);
120
+ }
121
+
122
+ /**
123
+ * c: X509_STORE_CTX_get1_issuer
124
+ */
125
+ public int getFirstIssuer(X509AuxCertificate[] issuer, X509AuxCertificate x) throws Exception {
126
+ Name xn = new Name(x.getIssuerX500Principal());
127
+ X509Object[] s_obj = new X509Object[1];
128
+ int ok = ctx == null ? 0 : getBySubject(X509Utils.X509_LU_X509,xn,s_obj);
129
+ if(ok != X509Utils.X509_LU_X509) {
130
+ if(ok == X509Utils.X509_LU_RETRY) {
131
+ X509Error.addError(X509Utils.X509_R_SHOULD_RETRY);
132
+ return -1;
133
+ } else if (ok != X509Utils.X509_LU_FAIL) {
134
+ return -1;
135
+ }
136
+ return 0;
137
+ }
138
+ X509Object obj = s_obj[0];
139
+ if(this.checkIssued.call(this,x,((Certificate)obj).x509) != 0) {
140
+ issuer[0] = ((Certificate)obj).x509;
141
+ return 1;
142
+ }
143
+
144
+ int idx = X509Object.indexBySubject(ctx.objs,X509Utils.X509_LU_X509, xn);
145
+ if(idx == -1) {
146
+ return 0;
147
+ }
148
+
149
+ /* Look through all matching certificates for a suitable issuer */
150
+ for(int i = idx; i < ctx.objs.size(); i++) {
151
+ X509Object pobj = (X509Object)ctx.objs.get(i);
152
+ if(pobj.type() != X509Utils.X509_LU_X509) {
153
+ return 0;
154
+ }
155
+ if(!xn.isEqual((((Certificate)pobj).x509).getSubjectX500Principal())) {
156
+ return 0;
157
+ }
158
+ if(this.checkIssued.call(this,x,((Certificate)pobj).x509) != 0) {
159
+ issuer[0] = ((Certificate)pobj).x509;
160
+ return 1;
161
+ }
162
+ }
163
+ return 0;
164
+ }
165
+
166
+ public static List<X509AuxCertificate> ensureAux(Collection inp) {
167
+ List<X509AuxCertificate> out = new ArrayList<X509AuxCertificate>();
168
+ for(Object o : inp) {
169
+ out.add(ensureAux((X509Certificate)o));
170
+ }
171
+ return out;
172
+ }
173
+
174
+ public static List<X509AuxCertificate> ensureAux(X509Certificate[] inp) {
175
+ List<X509AuxCertificate> o = new ArrayList<X509AuxCertificate>();
176
+ for(X509Certificate c : inp) {
177
+ o.add(ensureAux(c));
178
+ }
179
+ return o;
180
+ }
181
+
182
+ public static X509AuxCertificate ensureAux(X509Certificate i) {
183
+ if(i instanceof X509AuxCertificate) {
184
+ return (X509AuxCertificate)i;
185
+ } else {
186
+ return new X509AuxCertificate(i);
187
+ }
188
+ }
189
+
190
+ /**
191
+ * c: X509_STORE_CTX_init
192
+ */
193
+ public int init(Store store, X509AuxCertificate x509, List<X509AuxCertificate> chain) {
194
+ int ret = 1;
195
+ this.ctx=store;
196
+ this.currentMethod=0;
197
+ this.certificate=x509;
198
+ this.untrusted=ensureAux(chain);
199
+ this.crls = null;
200
+ this.lastUntrusted=0;
201
+ this.otherContext = null;
202
+ this.isValid=false;
203
+ this.chain = null;
204
+ this.error=0;
205
+ this.explicitPolicy=0;
206
+ this.errorDepth=0;
207
+ this.currentCertificate=null;
208
+ this.currentIssuer=null;
209
+ this.tree = null;
210
+
211
+ this.param = new VerifyParameter();
212
+
213
+ if(store != null) {
214
+ ret = param.inherit(store.param);
215
+ } else {
216
+ param.flags |= X509Utils.X509_VP_FLAG_DEFAULT | X509Utils.X509_VP_FLAG_ONCE;
217
+ }
218
+ if(store != null) {
219
+ verifyCallback = store.verifyCallback;
220
+ cleanup = store.cleanup;
221
+ } else {
222
+ cleanup = Store.CleanupFunction.EMPTY;
223
+ }
224
+
225
+ if(ret != 0) {
226
+ ret = param.inherit(VerifyParameter.lookup("default"));
227
+ }
228
+
229
+ if(ret == 0) {
230
+ X509Error.addError(X509Utils.ERR_R_MALLOC_FAILURE);
231
+ return 0;
232
+ }
233
+
234
+ if(store != null && store.checkIssued != null && store.checkIssued != Store.CheckIssuedFunction.EMPTY) {
235
+ this.checkIssued = store.checkIssued;
236
+ } else {
237
+ this.checkIssued = defaultCheckIssued;
238
+ }
239
+
240
+ if(store != null && store.getIssuer != null && store.getIssuer != Store.GetIssuerFunction.EMPTY) {
241
+ this.getIssuer = store.getIssuer;
242
+ } else {
243
+ this.getIssuer = new Store.GetIssuerFunction() {
244
+ public int call(Object arg1, Object arg2, Object arg3) throws Exception {
245
+ return ((StoreContext)arg2).getFirstIssuer((X509AuxCertificate[])arg1,(X509AuxCertificate)arg3);
246
+ }
247
+ };
248
+ }
249
+
250
+ if(store != null && store.verifyCallback != null && store.verifyCallback != Store.VerifyCallbackFunction.EMPTY) {
251
+ this.verifyCallback = store.verifyCallback;
252
+ } else {
253
+ this.verifyCallback = NullCallback;
254
+ }
255
+
256
+ if(store != null && store.verify != null && store.verify != Store.VerifyFunction.EMPTY) {
257
+ this.verify = store.verify;
258
+ } else {
259
+ this.verify = internalVerify;
260
+ }
261
+
262
+ if(store != null && store.checkRevocation != null && store.checkRevocation != Store.CheckRevocationFunction.EMPTY) {
263
+ this.checkRevocation = store.checkRevocation;
264
+ } else {
265
+ this.checkRevocation = defaultCheckRevocation;
266
+ }
267
+
268
+ if(store != null && store.getCRL != null && store.getCRL != Store.GetCRLFunction.EMPTY) {
269
+ this.getCRL = store.getCRL;
270
+ } else {
271
+ this.getCRL = defaultGetCRL;
272
+ }
273
+
274
+ if(store != null && store.checkCRL != null && store.checkCRL != Store.CheckCRLFunction.EMPTY) {
275
+ this.checkCRL = store.checkCRL;
276
+ } else {
277
+ this.checkCRL = defaultCheckCRL;
278
+ }
279
+
280
+ if(store != null && store.certificateCRL != null && store.certificateCRL != Store.CertificateCRLFunction.EMPTY) {
281
+ this.certificateCRL = store.certificateCRL;
282
+ } else {
283
+ this.certificateCRL = defaultCertificateCRL;
284
+ }
285
+
286
+ this.checkPolicy = defaultCheckPolicy;
287
+
288
+ this.extraData = new ArrayList<Object>();
289
+ this.extraData.add(null);this.extraData.add(null);this.extraData.add(null);
290
+ this.extraData.add(null);this.extraData.add(null);this.extraData.add(null);
291
+ return 1;
292
+ }
293
+
294
+ /**
295
+ * c: X509_STORE_CTX_trusted_stack
296
+ */
297
+ public void trustedStack(List<X509AuxCertificate> sk) {
298
+ otherContext = sk;
299
+ getIssuer = getIssuerStack;
300
+ }
301
+
302
+ /**
303
+ * c: X509_STORE_CTX_cleanup
304
+ */
305
+ public void cleanup() throws Exception {
306
+ if(cleanup != null && cleanup != Store.CleanupFunction.EMPTY) {
307
+ cleanup.call(this);
308
+ }
309
+ param = null;
310
+ tree = null;
311
+ chain = null;
312
+ extraData = null;
313
+ }
314
+
315
+ /**
316
+ * c: find_issuer
317
+ */
318
+ public X509AuxCertificate findIssuer(List<X509AuxCertificate> sk, X509AuxCertificate x) throws Exception {
319
+ for(X509AuxCertificate issuer : sk) {
320
+ if(checkIssued.call(this,x,issuer) != 0) {
321
+ return issuer;
322
+ }
323
+ }
324
+ return null;
325
+ }
326
+
327
+ /**
328
+ * c: X509_STORE_CTX_set_ex_data
329
+ */
330
+ public int setExtraData(int idx,Object data) {
331
+ extraData.set(idx,data);
332
+ return 1;
333
+ }
334
+
335
+ /**
336
+ * c: X509_STORE_CTX_get_ex_data
337
+ */
338
+ public Object getExtraData(int idx) {
339
+ return extraData.get(idx);
340
+ }
341
+
342
+ /**
343
+ * c: X509_STORE_CTX_get_error
344
+ */
345
+ public int getError() {
346
+ return error;
347
+ }
348
+
349
+ /**
350
+ * c: X509_STORE_CTX_set_error
351
+ */
352
+ public void setError(int s) {
353
+ this.error = s;
354
+ }
355
+
356
+ /**
357
+ * c: X509_STORE_CTX_get_error_depth
358
+ */
359
+ public int getErrorDepth() {
360
+ return errorDepth;
361
+ }
362
+
363
+ /**
364
+ * c: X509_STORE_CTX_get_current_cert
365
+ */
366
+ public X509AuxCertificate getCurrentCertificate() {
367
+ return currentCertificate;
368
+ }
369
+
370
+ /**
371
+ * c: X509_STORE_CTX_get_chain
372
+ */
373
+ public List<X509AuxCertificate> getChain() {
374
+ return chain;
375
+ }
376
+
377
+ /**
378
+ * c: X509_STORE_CTX_get1_chain
379
+ */
380
+ public List getFirstChain() {
381
+ if(null == chain) {
382
+ return null;
383
+ }
384
+ return new ArrayList<X509AuxCertificate>(chain);
385
+ }
386
+
387
+ /**
388
+ * c: X509_STORE_CTX_set_cert
389
+ */
390
+ public void setCertificate(X509AuxCertificate x) {
391
+ this.certificate = x;
392
+ }
393
+
394
+ /**
395
+ * c: X509_STORE_CTX_set_chain
396
+ */
397
+ public void setChain(List sk) {
398
+ this.untrusted = ensureAux(sk);
399
+ }
400
+
401
+ /**
402
+ * c: X509_STORE_CTX_set0_crls
403
+ */
404
+ public void setCRLs(List<X509CRL> sk) {
405
+ this.crls = sk;
406
+ }
407
+
408
+ /**
409
+ * c: X509_STORE_CTX_set_purpose
410
+ */
411
+ public int setPurpose(int purpose) {
412
+ return purposeInherit(0,purpose,0);
413
+ }
414
+
415
+ /**
416
+ * c: X509_STORE_CTX_set_trust
417
+ */
418
+ public int setTrust(int trust) {
419
+ return purposeInherit(0,0,trust);
420
+ }
421
+
422
+ private void resetSettingsToWithoutStore() {
423
+ ctx = null;
424
+ this.param = new VerifyParameter();
425
+ this.param.flags |= X509Utils.X509_VP_FLAG_DEFAULT | X509Utils.X509_VP_FLAG_ONCE;
426
+ this.param.inherit(VerifyParameter.lookup("default"));
427
+ this.cleanup = Store.CleanupFunction.EMPTY;
428
+ this.checkIssued = defaultCheckIssued;
429
+ this.getIssuer = new Store.GetIssuerFunction() {
430
+ public int call(Object arg1, Object arg2, Object arg3) throws Exception {
431
+ return ((StoreContext)arg2).getFirstIssuer((X509AuxCertificate[])arg1,(X509AuxCertificate)arg3);
432
+ }
433
+ };
434
+ this.verifyCallback = NullCallback;
435
+ this.verify = internalVerify;
436
+ this.checkRevocation = defaultCheckRevocation;
437
+ this.getCRL = defaultGetCRL;
438
+ this.checkCRL = defaultCheckCRL;
439
+ this.certificateCRL = defaultCertificateCRL;
440
+ }
441
+
442
+ /**
443
+ * c: SSL_CTX_load_verify_locations
444
+ */
445
+ public int loadVerifyLocations(String CAfile, String CApath) {
446
+ boolean reset = false;
447
+ try {
448
+ if(ctx == null) {
449
+ reset = true;
450
+ ctx = new Store();
451
+ this.param.inherit(ctx.param);
452
+ param.inherit(VerifyParameter.lookup("default"));
453
+ this.cleanup = ctx.cleanup;
454
+ if(ctx.checkIssued != null && ctx.checkIssued != Store.CheckIssuedFunction.EMPTY) {
455
+ this.checkIssued = ctx.checkIssued;
456
+ }
457
+ if(ctx.getIssuer != null && ctx.getIssuer != Store.GetIssuerFunction.EMPTY) {
458
+ this.getIssuer = ctx.getIssuer;
459
+ }
460
+
461
+ if(ctx.verifyCallback != null && ctx.verifyCallback != Store.VerifyCallbackFunction.EMPTY) {
462
+ this.verifyCallback = ctx.verifyCallback;
463
+ }
464
+
465
+ if(ctx.verify != null && ctx.verify != Store.VerifyFunction.EMPTY) {
466
+ this.verify = ctx.verify;
467
+ }
468
+
469
+ if(ctx.checkRevocation != null && ctx.checkRevocation != Store.CheckRevocationFunction.EMPTY) {
470
+ this.checkRevocation = ctx.checkRevocation;
471
+ }
472
+
473
+ if(ctx.getCRL != null && ctx.getCRL != Store.GetCRLFunction.EMPTY) {
474
+ this.getCRL = ctx.getCRL;
475
+ }
476
+
477
+ if(ctx.checkCRL != null && ctx.checkCRL != Store.CheckCRLFunction.EMPTY) {
478
+ this.checkCRL = ctx.checkCRL;
479
+ }
480
+
481
+ if(ctx.certificateCRL != null && ctx.certificateCRL != Store.CertificateCRLFunction.EMPTY) {
482
+ this.certificateCRL = ctx.certificateCRL;
483
+ }
484
+ }
485
+
486
+ int ret = ctx.loadLocations(CAfile, CApath);
487
+ if(ret == 0 && reset) resetSettingsToWithoutStore();
488
+
489
+ return ret;
490
+ } catch(Exception e) {
491
+ if(reset) {
492
+ resetSettingsToWithoutStore();
493
+ }
494
+ return 0;
495
+ }
496
+ }
497
+
498
+ /**
499
+ * c: X509_STORE_CTX_purpose_inherit
500
+ */
501
+ public int purposeInherit(int defaultPurpose,int purpose, int trust) {
502
+ int idx;
503
+ if(purpose == 0) {
504
+ purpose = defaultPurpose;
505
+ }
506
+ if(purpose != 0) {
507
+ idx = Purpose.getByID(purpose);
508
+ if(idx == -1) {
509
+ X509Error.addError(X509Utils.X509_R_UNKNOWN_PURPOSE_ID);
510
+ return 0;
511
+ }
512
+ Purpose ptmp = Purpose.getFirst(idx);
513
+ if(ptmp.trust == X509Utils.X509_TRUST_DEFAULT) {
514
+ idx = Purpose.getByID(defaultPurpose);
515
+ if(idx == -1) {
516
+ X509Error.addError(X509Utils.X509_R_UNKNOWN_PURPOSE_ID);
517
+ return 0;
518
+ }
519
+ ptmp = Purpose.getFirst(idx);
520
+ }
521
+ if(trust == 0) {
522
+ trust = ptmp.trust;
523
+ }
524
+ }
525
+ if(trust != 0) {
526
+ idx = Trust.getByID(trust);
527
+ if(idx == -1) {
528
+ X509Error.addError(X509Utils.X509_R_UNKNOWN_TRUST_ID);
529
+ return 0;
530
+ }
531
+ }
532
+
533
+ if(purpose != 0 && param.purpose == 0) {
534
+ param.purpose = purpose;
535
+ }
536
+ if(trust != 0 && param.trust == 0) {
537
+ param.trust = trust;
538
+ }
539
+ return 1;
540
+ }
541
+
542
+ /**
543
+ * c: X509_STORE_CTX_set_flags
544
+ */
545
+ public void setFlags(long flags) {
546
+ param.setFlags(flags);
547
+ }
548
+
549
+ /**
550
+ * c: X509_STORE_CTX_set_time
551
+ */
552
+ public void setTime(long flags,Date t) {
553
+ param.setTime(t);
554
+ }
555
+
556
+ /**
557
+ * c: X509_STORE_CTX_set_verify_cb
558
+ */
559
+ public void setVerifyCallback(Store.VerifyCallbackFunction verifyCallback) {
560
+ this.verifyCallback = verifyCallback;
561
+ }
562
+
563
+ /**
564
+ * c: X509_STORE_CTX_get0_policy_tree
565
+ */
566
+ PolicyTree getPolicyTree() {
567
+ return tree;
568
+ }
569
+
570
+ /**
571
+ * c: X509_STORE_CTX_get_explicit_policy
572
+ */
573
+ public int getExplicitPolicy() {
574
+ return explicitPolicy;
575
+ }
576
+
577
+ /**
578
+ * c: X509_STORE_CTX_get0_param
579
+ */
580
+ public VerifyParameter getParam() {
581
+ return param;
582
+ }
583
+
584
+ /**
585
+ * c: X509_STORE_CTX_set0_param
586
+ */
587
+ public void setParam(VerifyParameter param) {
588
+ this.param = param;
589
+ }
590
+
591
+ /**
592
+ * c: X509_STORE_CTX_set_default
593
+ */
594
+ public int setDefault(String name) {
595
+ VerifyParameter p = VerifyParameter.lookup(name);
596
+ if(p == null) {
597
+ return 0;
598
+ }
599
+ return param.inherit(p);
600
+ }
601
+
602
+ /**
603
+ * c: X509_STORE_get_by_subject
604
+ */
605
+ public int getBySubject(int type,Name name,X509Object[] ret) throws Exception {
606
+ Store c = ctx;
607
+
608
+ X509Object tmp = X509Object.retrieveBySubject(c.objs,type,name);
609
+ if(tmp == null) {
610
+ for(int i=currentMethod; i<c.certificateMethods.size(); i++) {
611
+ Lookup lu = (Lookup)c.certificateMethods.get(i);
612
+ X509Object[] stmp = new X509Object[1];
613
+ int j = lu.bySubject(type,name,stmp);
614
+ if(j<0) {
615
+ currentMethod = i;
616
+ return j;
617
+ } else if(j>0) {
618
+ tmp = stmp[0];
619
+ break;
620
+ }
621
+ }
622
+ currentMethod = 0;
623
+ if(tmp == null) {
624
+ return 0;
625
+ }
626
+ }
627
+ ret[0] = tmp;
628
+ return 1;
629
+ }
630
+
631
+ /**
632
+ * c: X509_verify_cert
633
+ */
634
+ public int verifyCertificate() throws Exception {
635
+ X509AuxCertificate x,xtmp=null,chain_ss = null;
636
+ //X509_NAME xn;
637
+ int bad_chain = 0;
638
+ int depth,i,ok=0;
639
+ int num;
640
+ Store.VerifyCallbackFunction cb;
641
+ List<X509AuxCertificate> sktmp = null;
642
+ if(certificate == null) {
643
+ X509Error.addError(X509Utils.X509_R_NO_CERT_SET_FOR_US_TO_VERIFY);
644
+ return -1;
645
+ }
646
+ cb=verifyCallback;
647
+
648
+ if(null == chain) {
649
+ chain = new ArrayList<X509AuxCertificate>();
650
+ chain.add(certificate);
651
+ lastUntrusted = 1;
652
+ }
653
+
654
+ if(untrusted != null) {
655
+ sktmp = new ArrayList<X509AuxCertificate>(untrusted);
656
+ }
657
+ num = chain.size();
658
+ x = chain.get(num-1);
659
+ depth = param.depth;
660
+ for(;;) {
661
+ if(depth < num) {
662
+ break;
663
+ }
664
+
665
+ if(checkIssued.call(this,x,x) != 0) {
666
+ break;
667
+ }
668
+
669
+ if(untrusted != null) {
670
+ xtmp = findIssuer(sktmp,x);
671
+ if(xtmp != null) {
672
+ chain.add(xtmp);
673
+ sktmp.remove(xtmp);
674
+ lastUntrusted++;
675
+ x = xtmp;
676
+ num++;
677
+ continue;
678
+ }
679
+ }
680
+ break;
681
+ }
682
+
683
+ i = chain.size();
684
+ x = (X509AuxCertificate)chain.get(i-1);
685
+
686
+ if(checkIssued.call(this,x,x) != 0) {
687
+ if(chain.size() == 1) {
688
+ X509AuxCertificate[] p_xtmp = new X509AuxCertificate[]{xtmp};
689
+ ok = getIssuer.call(p_xtmp,this,x);
690
+ xtmp = p_xtmp[0];
691
+ if(ok <= 0 || !x.equals(xtmp)) {
692
+ error = X509Utils.V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT;
693
+ currentCertificate = x;
694
+ errorDepth = i-1;
695
+ bad_chain = 1;
696
+ ok = cb.call(new Integer(0),this);
697
+ if(ok == 0) {
698
+ return ok;
699
+ }
700
+ } else {
701
+ x = xtmp;
702
+ chain.set(i-1,x);
703
+ lastUntrusted = 0;
704
+ }
705
+ } else {
706
+ chain_ss = chain.remove(chain.size()-1);
707
+ lastUntrusted--;
708
+ num--;
709
+ x = chain.get(num-1);
710
+ }
711
+ }
712
+ for(;;) {
713
+ if(depth<num) {
714
+ break;
715
+ }
716
+ //xn = new X509_NAME(x.getIssuerX500Principal());
717
+ if(checkIssued.call(this,x,x) != 0) {
718
+ break;
719
+ }
720
+ X509AuxCertificate[] p_xtmp = new X509AuxCertificate[]{xtmp};
721
+ ok = getIssuer.call(p_xtmp,this,x);
722
+ xtmp = p_xtmp[0];
723
+ if(ok < 0) {
724
+ return ok;
725
+ }
726
+ if(ok == 0) {
727
+ break;
728
+ }
729
+ x = xtmp;
730
+ chain.add(x);
731
+ num++;
732
+ }
733
+
734
+ //xn = new X509_NAME(x.getIssuerX500Principal());
735
+ if(checkIssued.call(this,x,x) == 0) {
736
+ if(chain_ss == null || checkIssued.call(this,x,chain_ss) == 0) {
737
+ if(lastUntrusted >= num) {
738
+ error = X509Utils.V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
739
+ } else {
740
+ error = X509Utils.V_ERR_UNABLE_TO_GET_ISSUER_CERT;
741
+ }
742
+ currentCertificate = x;
743
+ } else {
744
+ chain.add(chain_ss);
745
+ num++;
746
+ lastUntrusted = num;
747
+ currentCertificate = chain_ss;
748
+ error = X509Utils.V_ERR_SELF_SIGNED_CERT_IN_CHAIN;
749
+ chain_ss = null;
750
+ }
751
+ errorDepth = num-1;
752
+ bad_chain = 1;
753
+ ok = cb.call(new Integer(0),this);
754
+ if(ok == 0) {
755
+ return ok;
756
+ }
757
+ }
758
+
759
+ ok = checkChainExtensions();
760
+ if(ok == 0) {
761
+ return ok;
762
+ }
763
+
764
+ if(param.trust > 0) {
765
+ ok = checkTrust();
766
+ }
767
+ if(ok == 0) {
768
+ return ok;
769
+ }
770
+
771
+ ok = checkRevocation.call(this);
772
+ if(ok == 0) {
773
+ return ok;
774
+ }
775
+
776
+ if(verify != null && verify != Store.VerifyFunction.EMPTY) {
777
+ ok = verify.call(this);
778
+ } else {
779
+ ok = internalVerify.call(this);
780
+ }
781
+ if(ok == 0) {
782
+ return ok;
783
+ }
784
+
785
+ if(bad_chain == 0 && (param.flags & X509Utils.V_FLAG_POLICY_CHECK) != 0) {
786
+ ok = checkPolicy.call(this);
787
+ }
788
+ return ok;
789
+ }
790
+
791
+
792
+ private final static Set<String> CRITICAL_EXTENSIONS = new HashSet<String>();
793
+ static {
794
+ CRITICAL_EXTENSIONS.add("2.16.840.1.113730.1.1"); // netscape cert type, NID 71
795
+ CRITICAL_EXTENSIONS.add("2.5.29.15"); // key usage, NID 83
796
+ CRITICAL_EXTENSIONS.add("2.5.29.17"); // subject alt name, NID 85
797
+ CRITICAL_EXTENSIONS.add("2.5.29.19"); // basic constraints, NID 87
798
+ CRITICAL_EXTENSIONS.add("2.5.29.37"); // ext key usage, NID 126
799
+ CRITICAL_EXTENSIONS.add("1.3.6.1.5.5.7.1.14"); // proxy cert info, NID 661
800
+ }
801
+
802
+ private static boolean supportsCriticalExtension(String oid) {
803
+ return CRITICAL_EXTENSIONS.contains(oid);
804
+ }
805
+
806
+ private static boolean unhandledCritical(X509Extension xx) {
807
+ if(xx.getCriticalExtensionOIDs() == null || xx.getCriticalExtensionOIDs().size() == 0) {
808
+ return false;
809
+ }
810
+ for(String ss : xx.getCriticalExtensionOIDs()) {
811
+ if(!supportsCriticalExtension(ss)) {
812
+ return true;
813
+ }
814
+ }
815
+ return false;
816
+ }
817
+
818
+ /**
819
+ * c: check_chain_extensions
820
+ */
821
+ public int checkChainExtensions() throws Exception {
822
+ int ok=0, must_be_ca;
823
+ X509AuxCertificate x;
824
+ Store.VerifyCallbackFunction cb;
825
+ int proxy_path_length = 0;
826
+ int allow_proxy_certs = (param.flags & X509Utils.V_FLAG_ALLOW_PROXY_CERTS) != 0 ? 1 : 0;
827
+ cb = verifyCallback;
828
+ must_be_ca = -1;
829
+
830
+ try {
831
+ if (System.getenv("OPENSSL_ALLOW_PROXY_CERTS") != null && !"false".equalsIgnoreCase((String) System.getenv("OPENSSL_ALLOW_PROXY_CERTS"))) {
832
+ allow_proxy_certs = 1;
833
+ }
834
+ } catch (Error e) {
835
+ // just ignore if we can't use System.getenv
836
+ }
837
+
838
+ for(int i = 0; i<lastUntrusted;i++) {
839
+ int ret;
840
+ x = chain.get(i);
841
+ if((param.flags & X509Utils.V_FLAG_IGNORE_CRITICAL) == 0 && unhandledCritical(x)) {
842
+ error = X509Utils.V_ERR_UNHANDLED_CRITICAL_EXTENSION;
843
+ errorDepth = i;
844
+ currentCertificate = x;
845
+ ok = cb.call(new Integer(0),this);
846
+ if(ok == 0) {
847
+ return ok;
848
+ }
849
+ }
850
+ if(allow_proxy_certs == 0 && x.getExtensionValue("1.3.6.1.5.5.7.1.14") != null) {
851
+ error = X509Utils.V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED;
852
+ errorDepth = i;
853
+ currentCertificate = x;
854
+ ok = cb.call(new Integer(0),this);
855
+ if(ok == 0) {
856
+ return ok;
857
+ }
858
+ }
859
+
860
+ ret = Purpose.checkCA(x);
861
+ switch(must_be_ca) {
862
+ case -1:
863
+ if((param.flags & X509Utils.V_FLAG_X509_STRICT) != 0 && ret != 1 && ret != 0) {
864
+ ret = 0;
865
+ error = X509Utils.V_ERR_INVALID_CA;
866
+ } else {
867
+ ret = 1;
868
+ }
869
+ break;
870
+ case 0:
871
+ if(ret != 0) {
872
+ ret = 0;
873
+ error = X509Utils.V_ERR_INVALID_NON_CA;
874
+ } else {
875
+ ret = 1;
876
+ }
877
+ break;
878
+ default:
879
+ if(ret == 0 || ((param.flags & X509Utils.V_FLAG_X509_STRICT) != 0 && ret != 1)) {
880
+ ret = 0;
881
+ error = X509Utils.V_ERR_INVALID_CA;
882
+ } else {
883
+ ret = 1;
884
+ }
885
+ break;
886
+ }
887
+ if(ret == 0) {
888
+ errorDepth = i;
889
+ currentCertificate = x;
890
+ ok = cb.call(new Integer(0),this);
891
+ if(ok == 0) {
892
+ return ok;
893
+ }
894
+ }
895
+ if(param.purpose > 0) {
896
+ ret = Purpose.checkPurpose(x,param.purpose, must_be_ca > 0 ? 1 : 0);
897
+ if(ret == 0 || ((param.flags & X509Utils.V_FLAG_X509_STRICT) != 0 && ret != 1)) {
898
+ error = X509Utils.V_ERR_INVALID_PURPOSE;
899
+ errorDepth = i;
900
+ currentCertificate = x;
901
+ ok = cb.call(new Integer(0),this);
902
+ if(ok == 0) {
903
+ return ok;
904
+ }
905
+ }
906
+ }
907
+
908
+ if(i > 1 && x.getBasicConstraints() != -1 && x.getBasicConstraints() != Integer.MAX_VALUE && (i > (x.getBasicConstraints() + proxy_path_length + 1))) {
909
+ error = X509Utils.V_ERR_PATH_LENGTH_EXCEEDED;
910
+ errorDepth = i;
911
+ currentCertificate = x;
912
+ ok = cb.call(new Integer(0),this);
913
+ if(ok == 0) {
914
+ return ok;
915
+ }
916
+ }
917
+
918
+ if(x.getExtensionValue("1.3.6.1.5.5.7.1.14") != null) {
919
+ DERSequence pci = (DERSequence)new ASN1InputStream(x.getExtensionValue("1.3.6.1.5.5.7.1.14")).readObject();
920
+ if(pci.size() > 0 && pci.getObjectAt(0) instanceof DERInteger) {
921
+ int pcpathlen = ((DERInteger)pci.getObjectAt(0)).getValue().intValue();
922
+ if(i > pcpathlen) {
923
+ error = X509Utils.V_ERR_PROXY_PATH_LENGTH_EXCEEDED;
924
+ errorDepth = i;
925
+ currentCertificate = x;
926
+ ok = cb.call(new Integer(0),this);
927
+ if(ok == 0) {
928
+ return ok;
929
+ }
930
+ }
931
+ }
932
+ proxy_path_length++;
933
+ must_be_ca = 0;
934
+ } else {
935
+ must_be_ca = 1;
936
+ }
937
+ }
938
+ return 1;
939
+ }
940
+
941
+ /**
942
+ * c: X509_check_trust
943
+ */
944
+ public int checkTrust() throws Exception {
945
+ int i,ok;
946
+ X509AuxCertificate x;
947
+ Store.VerifyCallbackFunction cb;
948
+ cb = verifyCallback;
949
+ i = chain.size()-1;
950
+ x = chain.get(i);
951
+ ok = Trust.checkTrust(x,param.trust,0);
952
+ if(ok == X509Utils.X509_TRUST_TRUSTED) {
953
+ return 1;
954
+ }
955
+ errorDepth = 1;
956
+ currentCertificate = x;
957
+ if(ok == X509Utils.X509_TRUST_REJECTED) {
958
+ error = X509Utils.V_ERR_CERT_REJECTED;
959
+ } else {
960
+ error = X509Utils.V_ERR_CERT_UNTRUSTED;
961
+ }
962
+ return cb.call(new Integer(0),this);
963
+ }
964
+
965
+ /**
966
+ * c: check_cert_time
967
+ */
968
+ public int checkCertificateTime(X509AuxCertificate x) throws Exception {
969
+ Date ptime = null;
970
+
971
+ if((param.flags & X509Utils.V_FLAG_USE_CHECK_TIME) != 0) {
972
+ ptime = this.param.checkTime;
973
+ } else {
974
+ ptime = Calendar.getInstance().getTime();
975
+ }
976
+ if(!x.getNotBefore().before(ptime)) {
977
+ error = X509Utils.V_ERR_CERT_NOT_YET_VALID;
978
+ currentCertificate = x;
979
+ if(verifyCallback.call(new Integer(0),this) == 0) {
980
+ return 0;
981
+ }
982
+ }
983
+ if(!x.getNotAfter().after(ptime)) {
984
+ error = X509Utils.V_ERR_CERT_HAS_EXPIRED;
985
+ currentCertificate = x;
986
+ if(verifyCallback.call(new Integer(0),this) == 0) {
987
+ return 0;
988
+ }
989
+ }
990
+ return 1;
991
+ }
992
+
993
+ /**
994
+ * c: check_cert
995
+ */
996
+ public int checkCertificate() throws Exception {
997
+ X509CRL[] crl = new X509CRL[1];
998
+ X509AuxCertificate x;
999
+ int ok,cnum;
1000
+ cnum = errorDepth;
1001
+ x = chain.get(cnum);
1002
+ currentCertificate = x;
1003
+ ok = getCRL.call(this,crl,x);
1004
+ if(ok == 0) {
1005
+ error = X509Utils.V_ERR_UNABLE_TO_GET_CRL;
1006
+ ok = verifyCallback.call(new Integer(0), this);
1007
+ currentCRL = null;
1008
+ return ok;
1009
+ }
1010
+ currentCRL = crl[0];
1011
+ ok = checkCRL.call(this, crl[0]);
1012
+ if(ok == 0) {
1013
+ currentCRL = null;
1014
+ return ok;
1015
+ }
1016
+ ok = certificateCRL.call(this,crl[0],x);
1017
+ currentCRL = null;
1018
+ return ok;
1019
+ }
1020
+
1021
+ /**
1022
+ * c: check_crl_time
1023
+ */
1024
+ public int checkCRLTime(X509CRL crl, int notify) throws Exception {
1025
+ currentCRL = crl;
1026
+ Date ptime = null;
1027
+
1028
+ if((param.flags & X509Utils.V_FLAG_USE_CHECK_TIME) != 0) {
1029
+ ptime = this.param.checkTime;
1030
+ } else {
1031
+ ptime = Calendar.getInstance().getTime();
1032
+ }
1033
+
1034
+ if(!crl.getThisUpdate().before(ptime)) {
1035
+ error=X509Utils.V_ERR_CRL_NOT_YET_VALID;
1036
+ if(notify == 0 || verifyCallback.call(new Integer(0),this) == 0) {
1037
+ return 0;
1038
+ }
1039
+ }
1040
+ if(crl.getNextUpdate() != null && !crl.getNextUpdate().after(ptime)) {
1041
+ error=X509Utils.V_ERR_CRL_HAS_EXPIRED;
1042
+ if(notify == 0 || verifyCallback.call(new Integer(0),this) == 0) {
1043
+ return 0;
1044
+ }
1045
+ }
1046
+
1047
+ currentCRL = null;
1048
+ return 1;
1049
+ }
1050
+
1051
+ /**
1052
+ * c: get_crl_sk
1053
+ */
1054
+ public int getCRLStack(X509CRL[] pcrl, Name nm, List<X509CRL> crls) throws Exception {
1055
+ X509CRL best_crl = null;
1056
+ if(null != crls) {
1057
+ for(X509CRL crl : crls) {
1058
+ if(!nm.isEqual(crl.getIssuerX500Principal())) {
1059
+ continue;
1060
+ }
1061
+ if(checkCRLTime(crl,0) != 0) {
1062
+ pcrl[0] = crl;
1063
+ return 1;
1064
+ }
1065
+ best_crl = crl;
1066
+ }
1067
+ }
1068
+ if(best_crl != null) {
1069
+ pcrl[0] = best_crl;
1070
+ }
1071
+ return 0;
1072
+ }
1073
+
1074
+ /**
1075
+ * c: get_issuer_sk
1076
+ */
1077
+ public final static Store.GetIssuerFunction getIssuerStack = new Store.GetIssuerFunction() {
1078
+ public int call(Object a1, Object a2, Object a3) throws Exception {
1079
+ X509AuxCertificate[] issuer = (X509AuxCertificate[])a1;
1080
+ StoreContext ctx = (StoreContext)a2;
1081
+ X509AuxCertificate x = (X509AuxCertificate)a3;
1082
+ issuer[0] = ctx.findIssuer(ctx.otherContext,x);
1083
+ if(issuer[0] != null) {
1084
+ return 1;
1085
+ } else {
1086
+ return 0;
1087
+ }
1088
+ }
1089
+ };
1090
+
1091
+ /**
1092
+ * c: check_issued
1093
+ */
1094
+ public final static Store.CheckIssuedFunction defaultCheckIssued = new Store.CheckIssuedFunction() {
1095
+ public int call(Object a1, Object a2, Object a3) throws Exception {
1096
+ StoreContext ctx = (StoreContext)a1;
1097
+ X509AuxCertificate x = (X509AuxCertificate)a2;
1098
+ X509AuxCertificate issuer = (X509AuxCertificate)a3;
1099
+ int ret = X509Utils.checkIfIssuedBy(issuer,x);
1100
+ if(ret == X509Utils.V_OK) {
1101
+ return 1;
1102
+ }
1103
+ if((ctx.param.flags & X509Utils.V_FLAG_CB_ISSUER_CHECK) == 0) {
1104
+ return 0;
1105
+ }
1106
+ ctx.error = ret;
1107
+ ctx.currentCertificate = x;
1108
+ ctx.currentIssuer = issuer;
1109
+ return ctx.verifyCallback.call(new Integer(0),ctx);
1110
+ }
1111
+ };
1112
+
1113
+ /**
1114
+ * c: null_callback
1115
+ */
1116
+ public final static Store.VerifyCallbackFunction NullCallback = new Store.VerifyCallbackFunction() {
1117
+ public int call(Object a1, Object a2) {
1118
+ return ((Integer)a1).intValue();
1119
+ }
1120
+ };
1121
+
1122
+ /**
1123
+ * c: internal_verify
1124
+ */
1125
+ public final static Store.VerifyFunction internalVerify = new Store.VerifyFunction() {
1126
+ public int call(Object a1) throws Exception {
1127
+ StoreContext ctx = (StoreContext)a1;
1128
+ Store.VerifyCallbackFunction cb = ctx.verifyCallback;
1129
+ int n = ctx.chain.size();
1130
+ ctx.errorDepth = n-1;
1131
+ n--;
1132
+ X509AuxCertificate xi = ctx.chain.get(n);
1133
+ X509AuxCertificate xs = null;
1134
+ int ok = 0;
1135
+ if(ctx.checkIssued.call(ctx,xi,xi) != 0) {
1136
+ xs = xi;
1137
+ } else {
1138
+ if(n<=0) {
1139
+ ctx.error = X509Utils.V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE;
1140
+ ctx.currentCertificate = xi;
1141
+ ok = cb.call(new Integer(0),ctx);
1142
+ return ok;
1143
+ } else {
1144
+ n--;
1145
+ ctx.errorDepth = n;
1146
+ xs = ctx.chain.get(n);
1147
+ }
1148
+ }
1149
+ while(n>=0) {
1150
+ ctx.errorDepth = n;
1151
+ if(!xs.isValid()) {
1152
+ try {
1153
+ xs.verify(xi.getPublicKey());
1154
+ } catch(Exception e) {
1155
+ /*
1156
+ System.err.println("n: " + n);
1157
+ System.err.println("verifying: " + xs);
1158
+ System.err.println("verifying with issuer?: " + xi);
1159
+ System.err.println("verifying with issuer.key?: " + xi.getPublicKey());
1160
+ System.err.println("exception: " + e);
1161
+ */
1162
+ ctx.error = X509Utils.V_ERR_CERT_SIGNATURE_FAILURE;
1163
+ ctx.currentCertificate = xs;
1164
+ ok = cb.call(new Integer(0),ctx);
1165
+ if(ok == 0) {
1166
+ return ok;
1167
+ }
1168
+ }
1169
+ }
1170
+ xs.setValid(true);
1171
+ ok = ctx.checkCertificateTime(xs);
1172
+ if(ok == 0) {
1173
+ return ok;
1174
+ }
1175
+ ctx.currentIssuer = xi;
1176
+ ctx.currentCertificate = xs;
1177
+ ok = cb.call(new Integer(1),ctx);
1178
+ if(ok == 0) {
1179
+ return ok;
1180
+ }
1181
+ n--;
1182
+ if(n>=0) {
1183
+ xi = xs;
1184
+ xs = ctx.chain.get(n);
1185
+ }
1186
+ }
1187
+ ok = 1;
1188
+ return ok;
1189
+ }
1190
+ };
1191
+
1192
+ /**
1193
+ * c: check_revocation
1194
+ */
1195
+ public final static Store.CheckRevocationFunction defaultCheckRevocation = new Store.CheckRevocationFunction() {
1196
+ public int call(Object a1) throws Exception {
1197
+ StoreContext ctx = (StoreContext)a1;
1198
+ int last,ok=0;
1199
+ if((ctx.param.flags & X509Utils.V_FLAG_CRL_CHECK) == 0) {
1200
+ return 1;
1201
+ }
1202
+ if((ctx.param.flags & X509Utils.V_FLAG_CRL_CHECK_ALL) != 0) {
1203
+ last = ctx.chain.size() -1;
1204
+ } else {
1205
+ last = 0;
1206
+ }
1207
+ for(int i=0;i<=last;i++) {
1208
+ ctx.errorDepth = i;
1209
+ ok = ctx.checkCertificate();
1210
+ if(ok == 0) {
1211
+ return 0;
1212
+ }
1213
+ }
1214
+ return 1;
1215
+ }
1216
+ };
1217
+
1218
+ /**
1219
+ * c: get_crl
1220
+ */
1221
+ public final static Store.GetCRLFunction defaultGetCRL = new Store.GetCRLFunction() {
1222
+ public int call(Object a1, Object a2, Object a3) throws Exception {
1223
+ StoreContext ctx = (StoreContext)a1;
1224
+ X509CRL[] pcrl = (X509CRL[])a2;
1225
+ X509AuxCertificate x = (X509AuxCertificate)a3;
1226
+ Name nm = new Name(x.getIssuerX500Principal());
1227
+ X509CRL[] crl = new X509CRL[1];
1228
+ int ok = ctx.getCRLStack(crl,nm,ctx.crls);
1229
+ if(ok != 0) {
1230
+ pcrl[0] = crl[0];
1231
+ return 1;
1232
+ }
1233
+ X509Object[] xobj = new X509Object[1];
1234
+ ok = ctx.getBySubject(X509Utils.X509_LU_CRL,nm,xobj);
1235
+ if(ok == 0) {
1236
+ if(crl[0] != null) {
1237
+ pcrl[0] = crl[0];
1238
+ return 1;
1239
+ }
1240
+ return 0;
1241
+ }
1242
+ pcrl[0] = (X509CRL)(((CRL)xobj[0]).crl);
1243
+ return 1;
1244
+ }
1245
+ };
1246
+
1247
+ /**
1248
+ * c: check_crl
1249
+ */
1250
+ public final static Store.CheckCRLFunction defaultCheckCRL = new Store.CheckCRLFunction() {
1251
+ public int call(Object a1, Object a2) throws Exception {
1252
+ StoreContext ctx = (StoreContext)a1;
1253
+ final X509CRL crl = (X509CRL)a2;
1254
+ X509AuxCertificate issuer = null;
1255
+ int ok = 0,chnum,cnum;
1256
+ cnum = ctx.errorDepth;
1257
+ chnum = ctx.chain.size()-1;
1258
+ if(cnum < chnum) {
1259
+ issuer = ctx.chain.get(cnum+1);
1260
+ } else {
1261
+ issuer = ctx.chain.get(chnum);
1262
+ if(ctx.checkIssued.call(ctx,issuer,issuer) == 0) {
1263
+ ctx.error = X509Utils.V_ERR_UNABLE_TO_GET_CRL_ISSUER;
1264
+ ok = ctx.verifyCallback.call(new Integer(0),ctx);
1265
+ if(ok == 0) {
1266
+ return ok;
1267
+ }
1268
+ }
1269
+ }
1270
+
1271
+ if(issuer != null) {
1272
+ if(issuer.getKeyUsage() != null && !issuer.getKeyUsage()[6]) {
1273
+ ctx.error = X509Utils.V_ERR_KEYUSAGE_NO_CRL_SIGN;
1274
+ ok = ctx.verifyCallback.call(new Integer(0),ctx);
1275
+ if(ok == 0) {
1276
+ return ok;
1277
+ }
1278
+ }
1279
+ final PublicKey ikey = issuer.getPublicKey();
1280
+ if(ikey == null) {
1281
+ ctx.error = X509Utils.V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;
1282
+ ok = ctx.verifyCallback.call(new Integer(0),ctx);
1283
+ if(ok == 0) {
1284
+ return ok;
1285
+ }
1286
+ } else {
1287
+ final boolean[] result = new boolean[1];
1288
+ OpenSSLReal.doWithBCProvider(new Runnable() {
1289
+ public void run() {
1290
+ try {
1291
+ crl.verify(ikey);
1292
+ result[0] = true;
1293
+ } catch(java.security.GeneralSecurityException e) {
1294
+ result[0] = false;
1295
+ }
1296
+ }
1297
+ });
1298
+
1299
+ if(!result[0]) {
1300
+ ctx.error= X509Utils.V_ERR_CRL_SIGNATURE_FAILURE;
1301
+ ok = ctx.verifyCallback.call(new Integer(0),ctx);
1302
+ if(ok == 0) {
1303
+ return ok;
1304
+ }
1305
+ }
1306
+ }
1307
+ }
1308
+
1309
+ ok = ctx.checkCRLTime(crl,1);
1310
+ if(ok == 0) {
1311
+ return ok;
1312
+ }
1313
+ return 1;
1314
+ }
1315
+ };
1316
+
1317
+ /**
1318
+ * c: cert_crl
1319
+ */
1320
+ public final static Store.CertificateCRLFunction defaultCertificateCRL = new Store.CertificateCRLFunction() {
1321
+ public int call(Object a1, Object a2, Object a3) throws Exception {
1322
+ StoreContext ctx = (StoreContext)a1;
1323
+ X509CRL crl = (X509CRL)a2;
1324
+ X509AuxCertificate x = (X509AuxCertificate)a3;
1325
+ int ok;
1326
+ if(crl.getRevokedCertificate(x.getSerialNumber()) != null) {
1327
+ ctx.error = X509Utils.V_ERR_CERT_REVOKED;
1328
+ ok = ctx.verifyCallback.call(new Integer(0), ctx);
1329
+ if(ok == 0) {
1330
+ return 0;
1331
+ }
1332
+ }
1333
+ if((ctx.param.flags & X509Utils.V_FLAG_IGNORE_CRITICAL) != 0) {
1334
+ return 1;
1335
+ }
1336
+
1337
+ if(crl.getCriticalExtensionOIDs() != null && crl.getCriticalExtensionOIDs().size()>0) {
1338
+ ctx.error = X509Utils.V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION;
1339
+ ok = ctx.verifyCallback.call(new Integer(0), ctx);
1340
+ if(ok == 0) {
1341
+ return 0;
1342
+ }
1343
+ }
1344
+ return 1;
1345
+ }
1346
+ };
1347
+
1348
+ /**
1349
+ * c: check_policy
1350
+ */
1351
+ public final static CheckPolicyFunction defaultCheckPolicy = new CheckPolicyFunction() {
1352
+ public int call(Object a1) throws Exception {
1353
+ return 1;
1354
+ }
1355
+ };
1356
+ }// X509_STORE_CTX