rubygems-update 3.3.18 → 3.4.19

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 (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,22 +1,23 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/security'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/security"
4
5
 
5
6
  unless Gem::HAVE_OPENSSL
6
- warn 'Skipping Gem::Security tests. openssl not found.'
7
+ warn "Skipping Gem::Security tests. openssl not found."
7
8
  end
8
9
 
9
10
  if Gem.java_platform?
10
- warn 'Skipping Gem::Security tests on jruby.'
11
+ warn "Skipping Gem::Security tests on jruby."
11
12
  end
12
13
 
13
14
  class TestGemSecurity < Gem::TestCase
14
- CHILD_KEY = load_key 'child'
15
- EC_KEY = load_key 'private_ec', 'Foo bar'
15
+ CHILD_KEY = load_key "child"
16
+ EC_KEY = load_key "private_ec", "Foo bar"
16
17
 
17
- ALTERNATE_CERT = load_cert 'child'
18
- CHILD_CERT = load_cert 'child'
19
- EXPIRED_CERT = load_cert 'expired'
18
+ ALTERNATE_CERT = load_cert "child"
19
+ CHILD_CERT = load_cert "child"
20
+ EXPIRED_CERT = load_cert "expired"
20
21
 
21
22
  def setup
22
23
  super
@@ -42,19 +43,19 @@ class TestGemSecurity < Gem::TestCase
42
43
  assert_equal 3, cert.extensions.length,
43
44
  cert.extensions.map {|e| e.to_a.first }
44
45
 
45
- constraints = cert.extensions.find {|ext| ext.oid == 'basicConstraints' }
46
- assert_equal 'CA:FALSE', constraints.value
46
+ constraints = cert.extensions.find {|ext| ext.oid == "basicConstraints" }
47
+ assert_equal "CA:FALSE", constraints.value
47
48
 
48
- key_usage = cert.extensions.find {|ext| ext.oid == 'keyUsage' }
49
- assert_equal 'Digital Signature, Key Encipherment, Data Encipherment',
49
+ key_usage = cert.extensions.find {|ext| ext.oid == "keyUsage" }
50
+ assert_equal "Digital Signature, Key Encipherment, Data Encipherment",
50
51
  key_usage.value
51
52
 
52
- key_ident = cert.extensions.find {|ext| ext.oid == 'subjectKeyIdentifier' }
53
+ key_ident = cert.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
53
54
  assert_equal 59, key_ident.value.length
54
- assert_equal '5F:43:6E:F6:9A:8E:45:25:E9:22:E3:7D:37:5E:A4:D5:36:02:85:1B',
55
+ assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
55
56
  key_ident.value
56
57
 
57
- assert_equal '', cert.issuer.to_s
58
+ assert_equal "", cert.issuer.to_s
58
59
  assert_equal name.to_s, cert.subject.to_s
59
60
  end
60
61
 
@@ -63,12 +64,12 @@ class TestGemSecurity < Gem::TestCase
63
64
 
64
65
  cert = @SEC.create_cert_self_signed subject, PRIVATE_KEY, 60
65
66
 
66
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
67
+ assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
67
68
  assert_equal "sha256WithRSAEncryption", cert.signature_algorithm
68
69
  end
69
70
 
70
71
  def test_class_create_cert_email
71
- email = 'nobody@example'
72
+ email = "nobody@example"
72
73
  name = PUBLIC_CERT.subject
73
74
  key = PRIVATE_KEY
74
75
 
@@ -87,37 +88,37 @@ class TestGemSecurity < Gem::TestCase
87
88
  assert_equal 5, cert.extensions.length,
88
89
  cert.extensions.map {|e| e.to_a.first }
89
90
 
90
- constraints = cert.extensions.find {|ext| ext.oid == 'subjectAltName' }
91
- assert_equal 'email:nobody@example', constraints.value
91
+ constraints = cert.extensions.find {|ext| ext.oid == "subjectAltName" }
92
+ assert_equal "email:nobody@example", constraints.value
92
93
 
93
- constraints = cert.extensions.find {|ext| ext.oid == 'basicConstraints' }
94
- assert_equal 'CA:FALSE', constraints.value
94
+ constraints = cert.extensions.find {|ext| ext.oid == "basicConstraints" }
95
+ assert_equal "CA:FALSE", constraints.value
95
96
 
96
- key_usage = cert.extensions.find {|ext| ext.oid == 'keyUsage' }
97
- assert_equal 'Digital Signature, Key Encipherment, Data Encipherment',
97
+ key_usage = cert.extensions.find {|ext| ext.oid == "keyUsage" }
98
+ assert_equal "Digital Signature, Key Encipherment, Data Encipherment",
98
99
  key_usage.value
99
100
 
100
- key_ident = cert.extensions.find {|ext| ext.oid == 'subjectKeyIdentifier' }
101
+ key_ident = cert.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
101
102
  assert_equal 59, key_ident.value.length
102
- assert_equal '5F:43:6E:F6:9A:8E:45:25:E9:22:E3:7D:37:5E:A4:D5:36:02:85:1B',
103
+ assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
103
104
  key_ident.value
104
105
  end
105
106
 
106
107
  def test_class_create_key
107
- key = @SEC.create_key 'rsa'
108
+ key = @SEC.create_key "rsa"
108
109
 
109
110
  assert_kind_of OpenSSL::PKey::RSA, key
110
111
  end
111
112
 
112
113
  def test_class_create_key_downcases
113
- key = @SEC.create_key 'DSA'
114
+ key = @SEC.create_key "DSA"
114
115
 
115
116
  assert_kind_of OpenSSL::PKey::DSA, key
116
117
  end
117
118
 
118
119
  def test_class_create_key_raises_unknown_algorithm
119
120
  e = assert_raise Gem::Security::Exception do
120
- @SEC.create_key 'NOT_RSA'
121
+ @SEC.create_key "NOT_RSA"
121
122
  end
122
123
 
123
124
  assert_equal "NOT_RSA algorithm not found. RSA, DSA, and EC algorithms are supported.",
@@ -137,21 +138,21 @@ class TestGemSecurity < Gem::TestCase
137
138
  end
138
139
 
139
140
  def test_class_email_to_name
140
- assert_equal '/CN=nobody/DC=example',
141
- @SEC.email_to_name('nobody@example').to_s
141
+ assert_equal "/CN=nobody/DC=example",
142
+ @SEC.email_to_name("nobody@example").to_s
142
143
 
143
- assert_equal '/CN=nobody/DC=example/DC=com',
144
- @SEC.email_to_name('nobody@example.com').to_s
144
+ assert_equal "/CN=nobody/DC=example/DC=com",
145
+ @SEC.email_to_name("nobody@example.com").to_s
145
146
 
146
- assert_equal '/CN=no.body/DC=example',
147
- @SEC.email_to_name('no.body@example').to_s
147
+ assert_equal "/CN=no.body/DC=example",
148
+ @SEC.email_to_name("no.body@example").to_s
148
149
 
149
- assert_equal '/CN=no_body/DC=example',
150
- @SEC.email_to_name('no+body@example').to_s
150
+ assert_equal "/CN=no_body/DC=example",
151
+ @SEC.email_to_name("no+body@example").to_s
151
152
  end
152
153
 
153
154
  def test_class_re_sign
154
- assert_equal "sha1WithRSAEncryption", EXPIRED_CERT.signature_algorithm
155
+ assert_equal "sha256WithRSAEncryption", EXPIRED_CERT.signature_algorithm
155
156
  re_signed = Gem::Security.re_sign EXPIRED_CERT, PRIVATE_KEY, 60
156
157
 
157
158
  assert_in_delta Time.now, re_signed.not_before, 10
@@ -168,7 +169,7 @@ class TestGemSecurity < Gem::TestCase
168
169
  end
169
170
 
170
171
  child_alt_name = CHILD_CERT.extensions.find do |extension|
171
- extension.oid == 'subjectAltName'
172
+ extension.oid == "subjectAltName"
172
173
  end
173
174
 
174
175
  assert_equal "#{child_alt_name.value} is not self-signed, contact " +
@@ -217,20 +218,20 @@ class TestGemSecurity < Gem::TestCase
217
218
  assert_equal 4, signed.extensions.length,
218
219
  signed.extensions.map {|e| e.to_a.first }
219
220
 
220
- constraints = signed.extensions.find {|ext| ext.oid == 'issuerAltName' }
221
- assert_equal 'email:nobody@example', constraints.value, 'issuerAltName'
221
+ constraints = signed.extensions.find {|ext| ext.oid == "issuerAltName" }
222
+ assert_equal "email:nobody@example", constraints.value, "issuerAltName"
222
223
 
223
- constraints = signed.extensions.find {|ext| ext.oid == 'basicConstraints' }
224
- assert_equal 'CA:FALSE', constraints.value
224
+ constraints = signed.extensions.find {|ext| ext.oid == "basicConstraints" }
225
+ assert_equal "CA:FALSE", constraints.value
225
226
 
226
- key_usage = signed.extensions.find {|ext| ext.oid == 'keyUsage' }
227
- assert_equal 'Digital Signature, Key Encipherment, Data Encipherment',
227
+ key_usage = signed.extensions.find {|ext| ext.oid == "keyUsage" }
228
+ assert_equal "Digital Signature, Key Encipherment, Data Encipherment",
228
229
  key_usage.value
229
230
 
230
231
  key_ident =
231
- signed.extensions.find {|ext| ext.oid == 'subjectKeyIdentifier' }
232
+ signed.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
232
233
  assert_equal 59, key_ident.value.length
233
- assert_equal '5F:43:6E:F6:9A:8E:45:25:E9:22:E3:7D:37:5E:A4:D5:36:02:85:1B',
234
+ assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
234
235
  key_ident.value
235
236
 
236
237
  assert signed.verify key
@@ -240,7 +241,7 @@ class TestGemSecurity < Gem::TestCase
240
241
  issuer = PUBLIC_CERT.subject
241
242
  signee = OpenSSL::X509::Name.parse "/CN=signee/DC=example"
242
243
 
243
- cert = @SEC.create_cert_email 'signee@example', PRIVATE_KEY
244
+ cert = @SEC.create_cert_email "signee@example", PRIVATE_KEY
244
245
 
245
246
  signed = @SEC.sign cert, PRIVATE_KEY, PUBLIC_CERT, 60
246
247
 
@@ -256,23 +257,23 @@ class TestGemSecurity < Gem::TestCase
256
257
  assert_equal 5, signed.extensions.length,
257
258
  signed.extensions.map {|e| e.to_a.first }
258
259
 
259
- constraints = signed.extensions.find {|ext| ext.oid == 'issuerAltName' }
260
- assert_equal 'email:nobody@example', constraints.value, 'issuerAltName'
260
+ constraints = signed.extensions.find {|ext| ext.oid == "issuerAltName" }
261
+ assert_equal "email:nobody@example", constraints.value, "issuerAltName"
261
262
 
262
- constraints = signed.extensions.find {|ext| ext.oid == 'subjectAltName' }
263
- assert_equal 'email:signee@example', constraints.value, 'subjectAltName'
263
+ constraints = signed.extensions.find {|ext| ext.oid == "subjectAltName" }
264
+ assert_equal "email:signee@example", constraints.value, "subjectAltName"
264
265
 
265
- constraints = signed.extensions.find {|ext| ext.oid == 'basicConstraints' }
266
- assert_equal 'CA:FALSE', constraints.value
266
+ constraints = signed.extensions.find {|ext| ext.oid == "basicConstraints" }
267
+ assert_equal "CA:FALSE", constraints.value
267
268
 
268
- key_usage = signed.extensions.find {|ext| ext.oid == 'keyUsage' }
269
- assert_equal 'Digital Signature, Key Encipherment, Data Encipherment',
269
+ key_usage = signed.extensions.find {|ext| ext.oid == "keyUsage" }
270
+ assert_equal "Digital Signature, Key Encipherment, Data Encipherment",
270
271
  key_usage.value
271
272
 
272
273
  key_ident =
273
- signed.extensions.find {|ext| ext.oid == 'subjectKeyIdentifier' }
274
+ signed.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
274
275
  assert_equal 59, key_ident.value.length
275
- assert_equal '5F:43:6E:F6:9A:8E:45:25:E9:22:E3:7D:37:5E:A4:D5:36:02:85:1B',
276
+ assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
276
277
  key_ident.value
277
278
 
278
279
  assert signed.verify PUBLIC_KEY
@@ -281,15 +282,15 @@ class TestGemSecurity < Gem::TestCase
281
282
  def test_class_trust_dir
282
283
  trust_dir = @SEC.trust_dir
283
284
 
284
- expected = File.join Gem.user_home, '.gem/trust'
285
+ expected = File.join Gem.user_home, ".gem/trust"
285
286
 
286
287
  assert_equal expected, trust_dir.dir
287
288
  end
288
289
 
289
290
  def test_class_write
290
- key = @SEC.create_key 'rsa'
291
+ key = @SEC.create_key "rsa"
291
292
 
292
- path = File.join @tempdir, 'test-private_key.pem'
293
+ path = File.join @tempdir, "test-private_key.pem"
293
294
 
294
295
  @SEC.write key, path
295
296
 
@@ -301,11 +302,11 @@ class TestGemSecurity < Gem::TestCase
301
302
  end
302
303
 
303
304
  def test_class_write_encrypted
304
- key = @SEC.create_key 'rsa'
305
+ key = @SEC.create_key "rsa"
305
306
 
306
- path = File.join @tempdir, 'test-private_encrypted_key.pem'
307
+ path = File.join @tempdir, "test-private_encrypted_key.pem"
307
308
 
308
- passphrase = 'It should be long.'
309
+ passphrase = "It should be long."
309
310
 
310
311
  @SEC.write key, path, 0600, passphrase
311
312
 
@@ -317,13 +318,13 @@ class TestGemSecurity < Gem::TestCase
317
318
  end
318
319
 
319
320
  def test_class_write_encrypted_cipher
320
- key = @SEC.create_key 'rsa'
321
+ key = @SEC.create_key "rsa"
321
322
 
322
- path = File.join @tempdir, 'test-private_encrypted__with_non_default_cipher_key.pem'
323
+ path = File.join @tempdir, "test-private_encrypted__with_non_default_cipher_key.pem"
323
324
 
324
- passphrase = 'It should be long.'
325
+ passphrase = "It should be long."
325
326
 
326
- cipher = OpenSSL::Cipher.new 'AES-192-CBC'
327
+ cipher = OpenSSL::Cipher.new "AES-192-CBC"
327
328
 
328
329
  @SEC.write key, path, 0600, passphrase, cipher
329
330
 
@@ -1,34 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'helper'
3
+ require_relative "helper"
4
4
 
5
5
  unless Gem::HAVE_OPENSSL
6
- warn 'Skipping Gem::Security::Policy tests. openssl not found.'
6
+ warn "Skipping Gem::Security::Policy tests. openssl not found."
7
7
  end
8
8
 
9
9
  class TestGemSecurityPolicy < Gem::TestCase
10
- ALTERNATE_KEY = load_key 'alternate'
11
- INVALID_KEY = load_key 'invalid'
12
- CHILD_KEY = load_key 'child'
13
- GRANDCHILD_KEY = load_key 'grandchild'
14
- INVALIDCHILD_KEY = load_key 'invalidchild'
15
-
16
- ALTERNATE_CERT = load_cert 'alternate'
17
- CA_CERT = load_cert 'ca'
18
- CHILD_CERT = load_cert 'child'
19
- EXPIRED_CERT = load_cert 'expired'
20
- FUTURE_CERT = load_cert 'future'
21
- GRANDCHILD_CERT = load_cert 'grandchild'
22
- INVALIDCHILD_CERT = load_cert 'invalidchild'
23
- INVALID_ISSUER_CERT = load_cert 'invalid_issuer'
24
- INVALID_SIGNER_CERT = load_cert 'invalid_signer'
25
- WRONG_KEY_CERT = load_cert 'wrong_key'
10
+ ALTERNATE_KEY = load_key "alternate"
11
+ INVALID_KEY = load_key "invalid"
12
+ CHILD_KEY = load_key "child"
13
+ GRANDCHILD_KEY = load_key "grandchild"
14
+ INVALIDCHILD_KEY = load_key "invalidchild"
15
+
16
+ ALTERNATE_CERT = load_cert "alternate"
17
+ CA_CERT = load_cert "ca"
18
+ CHILD_CERT = load_cert "child"
19
+ EXPIRED_CERT = load_cert "expired"
20
+ FUTURE_CERT = load_cert "future"
21
+ GRANDCHILD_CERT = load_cert "grandchild"
22
+ INVALIDCHILD_CERT = load_cert "invalidchild"
23
+ INVALID_ISSUER_CERT = load_cert "invalid_issuer"
24
+ INVALID_SIGNER_CERT = load_cert "invalid_signer"
25
+ WRONG_KEY_CERT = load_cert "wrong_key"
26
26
 
27
27
  def setup
28
28
  super
29
29
 
30
- @spec = quick_gem 'a' do |s|
31
- s.description = 'π'
30
+ @spec = quick_gem "a" do |s|
31
+ s.description = "π"
32
32
  s.files = %w[lib/code.rb]
33
33
  end
34
34
 
@@ -42,28 +42,28 @@ class TestGemSecurityPolicy < Gem::TestCase
42
42
  @high = Gem::Security::HighSecurity
43
43
 
44
44
  @chain = Gem::Security::Policy.new(
45
- 'Chain',
46
- :verify_data => true,
45
+ "Chain",
46
+ :verify_data => true,
47
47
  :verify_signer => true,
48
- :verify_chain => true,
49
- :verify_root => false,
50
- :only_trusted => false,
51
- :only_signed => false
48
+ :verify_chain => true,
49
+ :verify_root => false,
50
+ :only_trusted => false,
51
+ :only_signed => false
52
52
  )
53
53
 
54
54
  @root = Gem::Security::Policy.new(
55
- 'Root',
56
- :verify_data => true,
55
+ "Root",
56
+ :verify_data => true,
57
57
  :verify_signer => true,
58
- :verify_chain => true,
59
- :verify_root => true,
60
- :only_trusted => false,
61
- :only_signed => false
58
+ :verify_chain => true,
59
+ :verify_root => true,
60
+ :only_trusted => false,
61
+ :only_signed => false
62
62
  )
63
63
  end
64
64
 
65
65
  def test_check_data
66
- data = digest 'hello'
66
+ data = digest "hello"
67
67
 
68
68
  signature = sign data
69
69
 
@@ -71,17 +71,17 @@ class TestGemSecurityPolicy < Gem::TestCase
71
71
  end
72
72
 
73
73
  def test_check_data_invalid
74
- data = digest 'hello'
74
+ data = digest "hello"
75
75
 
76
76
  signature = sign data
77
77
 
78
- invalid = digest 'hello!'
78
+ invalid = digest "hello!"
79
79
 
80
80
  e = assert_raise Gem::Security::Exception do
81
81
  @almost_no.check_data PUBLIC_KEY, @digest, signature, invalid
82
82
  end
83
83
 
84
- assert_equal 'invalid signature', e.message
84
+ assert_equal "invalid signature", e.message
85
85
  end
86
86
 
87
87
  def test_check_chain
@@ -95,7 +95,7 @@ class TestGemSecurityPolicy < Gem::TestCase
95
95
  @chain.check_chain [], Time.now
96
96
  end
97
97
 
98
- assert_equal 'empty signing chain', e.message
98
+ assert_equal "empty signing chain", e.message
99
99
  end
100
100
 
101
101
  def test_check_chain_invalid
@@ -115,7 +115,7 @@ class TestGemSecurityPolicy < Gem::TestCase
115
115
  @chain.check_chain nil, Time.now
116
116
  end
117
117
 
118
- assert_equal 'missing signing chain', e.message
118
+ assert_equal "missing signing chain", e.message
119
119
  end
120
120
 
121
121
  def test_check_cert
@@ -161,7 +161,7 @@ class TestGemSecurityPolicy < Gem::TestCase
161
161
  @high.check_cert(nil, nil, Time.now)
162
162
  end
163
163
 
164
- assert_equal 'missing signing certificate', e.message
164
+ assert_equal "missing signing certificate", e.message
165
165
  end
166
166
 
167
167
  def test_check_key
@@ -175,7 +175,7 @@ class TestGemSecurityPolicy < Gem::TestCase
175
175
  @high.check_key(nil, nil)
176
176
  end
177
177
 
178
- assert_equal 'missing key or signature', e.message
178
+ assert_equal "missing key or signature", e.message
179
179
  end
180
180
 
181
181
  def test_check_key_wrong_key
@@ -198,7 +198,7 @@ class TestGemSecurityPolicy < Gem::TestCase
198
198
  @chain.check_root [], Time.now
199
199
  end
200
200
 
201
- assert_equal 'missing root certificate', e.message
201
+ assert_equal "missing root certificate", e.message
202
202
  end
203
203
 
204
204
  def test_check_root_invalid_signer
@@ -230,7 +230,7 @@ class TestGemSecurityPolicy < Gem::TestCase
230
230
  @chain.check_root nil, Time.now
231
231
  end
232
232
 
233
- assert_equal 'missing signing chain', e.message
233
+ assert_equal "missing signing chain", e.message
234
234
  end
235
235
 
236
236
  def test_check_trust
@@ -250,7 +250,7 @@ class TestGemSecurityPolicy < Gem::TestCase
250
250
  @chain.check_trust [], @digest, @trust_dir
251
251
  end
252
252
 
253
- assert_equal 'missing root certificate', e.message
253
+ assert_equal "missing root certificate", e.message
254
254
  end
255
255
 
256
256
  def test_check_trust_mismatch
@@ -269,7 +269,7 @@ class TestGemSecurityPolicy < Gem::TestCase
269
269
  @chain.check_trust nil, @digest, @trust_dir
270
270
  end
271
271
 
272
- assert_equal 'missing signing chain', e.message
272
+ assert_equal "missing signing chain", e.message
273
273
  end
274
274
 
275
275
  def test_check_trust_no_trust
@@ -290,8 +290,8 @@ class TestGemSecurityPolicy < Gem::TestCase
290
290
  end
291
291
 
292
292
  def test_subject
293
- assert_equal 'email:nobody@example', @no.subject(PUBLIC_CERT)
294
- assert_equal '/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA', @no.subject(CA_CERT)
293
+ assert_equal "email:nobody@example", @no.subject(PUBLIC_CERT)
294
+ assert_equal "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA", @no.subject(CA_CERT)
295
295
  end
296
296
 
297
297
  def test_verify
@@ -319,7 +319,7 @@ class TestGemSecurityPolicy < Gem::TestCase
319
319
  @almost_no.verify [PUBLIC_CERT], nil, {}, signatures
320
320
  end
321
321
 
322
- assert_equal 'no digests provided (probable bug)', e.message
322
+ assert_equal "no digests provided (probable bug)", e.message
323
323
  end
324
324
 
325
325
  def test_verify_no_digests_no_security
@@ -331,7 +331,7 @@ class TestGemSecurityPolicy < Gem::TestCase
331
331
  @no.verify [PUBLIC_CERT], nil, {}, signatures
332
332
  end
333
333
 
334
- assert_equal 'missing digest for 0', e.message
334
+ assert_equal "missing digest for 0", e.message
335
335
  end
336
336
 
337
337
  def test_verify_no_signatures
@@ -340,7 +340,7 @@ class TestGemSecurityPolicy < Gem::TestCase
340
340
  digests, = dummy_signatures
341
341
 
342
342
  use_ui @ui do
343
- @no.verify [PUBLIC_CERT], nil, digests, {}, 'some_gem'
343
+ @no.verify [PUBLIC_CERT], nil, digests, {}, "some_gem"
344
344
  end
345
345
 
346
346
  assert_match "WARNING: some_gem is not signed\n", @ui.error
@@ -354,7 +354,7 @@ class TestGemSecurityPolicy < Gem::TestCase
354
354
  Gem::Security.trust_dir.trust_cert PUBLIC_CERT
355
355
 
356
356
  use_ui @ui do
357
- @no.verify [PUBLIC_CERT], nil, {}, {}, 'some_gem'
357
+ @no.verify [PUBLIC_CERT], nil, {}, {}, "some_gem"
358
358
  end
359
359
 
360
360
  assert_empty @ui.output
@@ -366,7 +366,7 @@ class TestGemSecurityPolicy < Gem::TestCase
366
366
 
367
367
  digests, signatures = dummy_signatures
368
368
 
369
- data = digest 'goodbye'
369
+ data = digest "goodbye"
370
370
 
371
371
  signatures[1] = PRIVATE_KEY.sign @digest.new, data.digest
372
372
 
@@ -374,14 +374,14 @@ class TestGemSecurityPolicy < Gem::TestCase
374
374
  @almost_no.verify [PUBLIC_CERT], nil, digests, signatures
375
375
  end
376
376
 
377
- assert_equal 'missing digest for 1', e.message
377
+ assert_equal "missing digest for 1", e.message
378
378
  end
379
379
 
380
380
  def test_verify_no_trust
381
381
  digests, signatures = dummy_signatures
382
382
 
383
383
  use_ui @ui do
384
- @low.verify [PUBLIC_CERT], nil, digests, signatures, 'some_gem'
384
+ @low.verify [PUBLIC_CERT], nil, digests, signatures, "some_gem"
385
385
  end
386
386
 
387
387
  assert_equal "WARNING: email:nobody@example is not trusted for some_gem\n",
@@ -395,18 +395,18 @@ class TestGemSecurityPolicy < Gem::TestCase
395
395
  def test_verify_wrong_digest_type
396
396
  Gem::Security.trust_dir.trust_cert PUBLIC_CERT
397
397
 
398
- data = OpenSSL::Digest.new('SHA512')
399
- data << 'hello'
398
+ data = OpenSSL::Digest.new("SHA512")
399
+ data << "hello"
400
400
 
401
- digests = { 'SHA512' => { 0 => data } }
402
- signature = PRIVATE_KEY.sign 'sha512', data.digest
401
+ digests = { "SHA512" => { 0 => data } }
402
+ signature = PRIVATE_KEY.sign "sha512", data.digest
403
403
  signatures = { 0 => signature }
404
404
 
405
405
  e = assert_raise Gem::Security::Exception do
406
406
  @almost_no.verify [PUBLIC_CERT], nil, digests, signatures
407
407
  end
408
408
 
409
- assert_equal 'no digests provided (probable bug)', e.message
409
+ assert_equal "no digests provided (probable bug)", e.message
410
410
  end
411
411
 
412
412
  def test_verify_signatures_chain
@@ -448,17 +448,17 @@ class TestGemSecurityPolicy < Gem::TestCase
448
448
 
449
449
  metadata_gz = Gem::Util.gzip @spec.to_yaml
450
450
 
451
- package = Gem::Package.new 'nonexistent.gem'
451
+ package = Gem::Package.new "nonexistent.gem"
452
452
  package.checksums[Gem::Security::DIGEST_NAME] = {}
453
453
 
454
454
  s = StringIO.new metadata_gz
455
- def s.full_name() 'metadata.gz' end
455
+ def s.full_name() "metadata.gz" end
456
456
 
457
457
  digests = package.digest s
458
- metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]['metadata.gz']
458
+ metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]["metadata.gz"]
459
459
 
460
460
  signatures = {}
461
- signatures['metadata.gz'] =
461
+ signatures["metadata.gz"] =
462
462
  PRIVATE_KEY.sign @digest.new, metadata_gz_digest.digest
463
463
 
464
464
  assert @high.verify_signatures @spec, digests, signatures
@@ -471,26 +471,26 @@ class TestGemSecurityPolicy < Gem::TestCase
471
471
 
472
472
  metadata_gz = Gem::Util.gzip @spec.to_yaml
473
473
 
474
- package = Gem::Package.new 'nonexistent.gem'
474
+ package = Gem::Package.new "nonexistent.gem"
475
475
  package.checksums[Gem::Security::DIGEST_NAME] = {}
476
476
 
477
477
  s = StringIO.new metadata_gz
478
- def s.full_name() 'metadata.gz' end
478
+ def s.full_name() "metadata.gz" end
479
479
 
480
480
  digests = package.digest s
481
- digests[Gem::Security::DIGEST_NAME]['data.tar.gz'] = @digest.hexdigest 'hello'
481
+ digests[Gem::Security::DIGEST_NAME]["data.tar.gz"] = @digest.hexdigest "hello"
482
482
 
483
- metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]['metadata.gz']
483
+ metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]["metadata.gz"]
484
484
 
485
485
  signatures = {}
486
- signatures['metadata.gz'] =
486
+ signatures["metadata.gz"] =
487
487
  PRIVATE_KEY.sign @digest.new, metadata_gz_digest.digest
488
488
 
489
489
  e = assert_raise Gem::Security::Exception do
490
490
  @high.verify_signatures @spec, digests, signatures
491
491
  end
492
492
 
493
- assert_equal 'missing signature for data.tar.gz', e.message
493
+ assert_equal "missing signature for data.tar.gz", e.message
494
494
  end
495
495
 
496
496
  def test_verify_signatures_none
@@ -500,14 +500,14 @@ class TestGemSecurityPolicy < Gem::TestCase
500
500
 
501
501
  metadata_gz = Gem::Util.gzip @spec.to_yaml
502
502
 
503
- package = Gem::Package.new 'nonexistent.gem'
503
+ package = Gem::Package.new "nonexistent.gem"
504
504
  package.checksums[Gem::Security::DIGEST_NAME] = {}
505
505
 
506
506
  s = StringIO.new metadata_gz
507
- def s.full_name() 'metadata.gz' end
507
+ def s.full_name() "metadata.gz" end
508
508
 
509
509
  digests = package.digest s
510
- digests[Gem::Security::DIGEST_NAME]['data.tar.gz'] = @digest.hexdigest 'hello'
510
+ digests[Gem::Security::DIGEST_NAME]["data.tar.gz"] = @digest.hexdigest "hello"
511
511
 
512
512
  assert_raise Gem::Security::Exception do
513
513
  @high.verify_signatures @spec, digests, {}
@@ -525,7 +525,7 @@ class TestGemSecurityPolicy < Gem::TestCase
525
525
  end
526
526
 
527
527
  def dummy_signatures(key = PRIVATE_KEY)
528
- data = digest 'hello'
528
+ data = digest "hello"
529
529
 
530
530
  digests = { Gem::Security::DIGEST_NAME => { 0 => data } }
531
531
  signatures = { 0 => sign(data, key) }