rubygems-update 3.0.0 → 3.0.4

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/CODE_OF_CONDUCT.md +10 -8
  4. data/CONTRIBUTING.md +7 -0
  5. data/History.txt +95 -0
  6. data/README.md +6 -0
  7. data/Rakefile +27 -3
  8. data/bundler/CHANGELOG.md +11 -0
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
  11. data/bundler/lib/bundler/source/metadata.rb +2 -3
  12. data/bundler/lib/bundler/version.rb +1 -1
  13. data/bundler/man/bundle.ronn +3 -0
  14. data/lib/rubygems/command_manager.rb +12 -4
  15. data/lib/rubygems/commands/build_command.rb +28 -13
  16. data/lib/rubygems/commands/owner_command.rb +6 -1
  17. data/lib/rubygems/commands/setup_command.rb +5 -5
  18. data/lib/rubygems/dependency_list.rb +1 -1
  19. data/lib/rubygems/gemcutter_utilities.rb +5 -2
  20. data/lib/rubygems/install_update_options.rb +1 -1
  21. data/lib/rubygems/installer.rb +29 -10
  22. data/lib/rubygems/package/old.rb +1 -1
  23. data/lib/rubygems/package.rb +12 -2
  24. data/lib/rubygems/rdoc.rb +2 -2
  25. data/lib/rubygems/request_set/gem_dependency_api.rb +8 -5
  26. data/lib/rubygems/requirement.rb +16 -5
  27. data/lib/rubygems/specification.rb +8 -9
  28. data/lib/rubygems/test_case.rb +15 -8
  29. data/lib/rubygems/uninstaller.rb +1 -1
  30. data/lib/rubygems/user_interaction.rb +4 -1
  31. data/lib/rubygems/util.rb +1 -1
  32. data/lib/rubygems.rb +3 -2
  33. data/rubygems-update.gemspec +1 -1
  34. data/test/rubygems/ca_cert.pem +74 -65
  35. data/test/rubygems/client.pem +103 -45
  36. data/test/rubygems/ssl_cert.pem +78 -17
  37. data/test/rubygems/ssl_key.pem +25 -13
  38. data/test/rubygems/test_bundled_ca.rb +1 -1
  39. data/test/rubygems/test_gem.rb +15 -10
  40. data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
  41. data/test/rubygems/test_gem_command_manager.rb +10 -0
  42. data/test/rubygems/test_gem_commands_build_command.rb +1 -0
  43. data/test/rubygems/test_gem_ext_cmake_builder.rb +1 -1
  44. data/test/rubygems/test_gem_indexer.rb +7 -0
  45. data/test/rubygems/test_gem_installer.rb +113 -3
  46. data/test/rubygems/test_gem_package.rb +37 -0
  47. data/test/rubygems/test_gem_package_tar_writer.rb +3 -0
  48. data/test/rubygems/test_gem_rdoc.rb +1 -135
  49. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +60 -27
  50. data/test/rubygems/test_gem_requirement.rb +6 -0
  51. data/test/rubygems/test_gem_security_policy.rb +1 -1
  52. data/test/rubygems/test_gem_specification.rb +3 -0
  53. data/test/rubygems/test_gem_stream_ui.rb +2 -2
  54. data/test/rubygems/test_gem_text.rb +5 -0
  55. data/test/rubygems/test_gem_uninstaller.rb +21 -2
  56. data/test/rubygems/test_gem_util.rb +17 -0
  57. data/util/ci +6 -1
  58. data/util/create_encrypted_key.rb +4 -4
  59. metadata +3 -4
@@ -357,7 +357,7 @@ EOM
357
357
  def extract_files(destination_dir, pattern = "*")
358
358
  verify unless @spec
359
359
 
360
- FileUtils.mkdir_p destination_dir, :mode => dir_mode && 0700
360
+ FileUtils.mkdir_p destination_dir, :mode => dir_mode && 0755
361
361
 
362
362
  @gem.with_read_io do |io|
363
363
  reader = Gem::Package::TarReader.new io
@@ -394,7 +394,7 @@ EOM
394
394
  FileUtils.rm_rf destination
395
395
 
396
396
  mkdir_options = {}
397
- mkdir_options[:mode] = dir_mode ? 0700 : (entry.header.mode if entry.directory?)
397
+ mkdir_options[:mode] = dir_mode ? 0755 : (entry.header.mode if entry.directory?)
398
398
  mkdir =
399
399
  if entry.directory?
400
400
  destination
@@ -456,6 +456,16 @@ EOM
456
456
  raise Gem::Package::PathError.new(destination, destination_dir) unless
457
457
  destination.start_with? destination_dir + '/'
458
458
 
459
+ begin
460
+ real_destination = File.expand_path(File.realpath(destination))
461
+ rescue
462
+ # it's fine if the destination doesn't exist, because rm -rf'ing it can't cause any damage
463
+ nil
464
+ else
465
+ raise Gem::Package::PathError.new(real_destination, destination_dir) unless
466
+ real_destination.start_with? destination_dir + '/'
467
+ end
468
+
459
469
  destination.untaint
460
470
  destination
461
471
  end
data/lib/rubygems/rdoc.rb CHANGED
@@ -18,7 +18,7 @@ begin
18
18
  module Gem
19
19
  RDoc = ::RDoc::RubygemsHook
20
20
  end
21
+
22
+ Gem.done_installing(&Gem::RDoc.method(:generation_hook))
21
23
  rescue LoadError
22
24
  end
23
-
24
- Gem.done_installing(&Gem::RDoc.method(:generation_hook))
@@ -43,11 +43,12 @@ class Gem::RequestSet::GemDependencyAPI
43
43
  :mri_20 => %w[ruby],
44
44
  :mri_21 => %w[ruby],
45
45
  :rbx => %w[rbx],
46
- :ruby => %w[ruby rbx maglev],
47
- :ruby_18 => %w[ruby rbx maglev],
48
- :ruby_19 => %w[ruby rbx maglev],
49
- :ruby_20 => %w[ruby rbx maglev],
50
- :ruby_21 => %w[ruby rbx maglev],
46
+ :truffleruby => %w[truffleruby],
47
+ :ruby => %w[ruby rbx maglev truffleruby],
48
+ :ruby_18 => %w[ruby rbx maglev truffleruby],
49
+ :ruby_19 => %w[ruby rbx maglev truffleruby],
50
+ :ruby_20 => %w[ruby rbx maglev truffleruby],
51
+ :ruby_21 => %w[ruby rbx maglev truffleruby],
51
52
  }.freeze
52
53
 
53
54
  mswin = Gem::Platform.new 'x86-mswin32'
@@ -85,6 +86,7 @@ class Gem::RequestSet::GemDependencyAPI
85
86
  :ruby_19 => Gem::Platform::RUBY,
86
87
  :ruby_20 => Gem::Platform::RUBY,
87
88
  :ruby_21 => Gem::Platform::RUBY,
89
+ :truffleruby => Gem::Platform::RUBY,
88
90
  :x64_mingw => x64_mingw,
89
91
  :x64_mingw_20 => x64_mingw,
90
92
  :x64_mingw_21 => x64_mingw
@@ -126,6 +128,7 @@ class Gem::RequestSet::GemDependencyAPI
126
128
  :ruby_19 => tilde_gt_1_9_0,
127
129
  :ruby_20 => tilde_gt_2_0_0,
128
130
  :ruby_21 => tilde_gt_2_1_0,
131
+ :truffleruby => gt_eq_0,
129
132
  :x64_mingw => gt_eq_0,
130
133
  :x64_mingw_20 => tilde_gt_2_0_0,
131
134
  :x64_mingw_21 => tilde_gt_2_1_0,
@@ -2,10 +2,6 @@
2
2
  require "rubygems/version"
3
3
  require "rubygems/deprecate"
4
4
 
5
- # If we're being loaded after yaml was already required, then
6
- # load our yaml + workarounds now.
7
- Gem.load_yaml if defined? ::YAML
8
-
9
5
  ##
10
6
  # A Requirement is a set of one or more version restrictions. It supports a
11
7
  # few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
@@ -267,7 +263,22 @@ class Gem::Requirement
267
263
 
268
264
  def ==(other) # :nodoc:
269
265
  return unless Gem::Requirement === other
270
- requirements == other.requirements
266
+
267
+ # An == check is always necessary
268
+ return false unless requirements == other.requirements
269
+
270
+ # An == check is sufficient unless any requirements use ~>
271
+ return true unless _tilde_requirements.any?
272
+
273
+ # If any requirements use ~> we use the stricter `#eql?` that also checks
274
+ # that version precision is the same
275
+ _tilde_requirements.eql?(other._tilde_requirements)
276
+ end
277
+
278
+ protected
279
+
280
+ def _tilde_requirements
281
+ requirements.select { |r| r.first == "~>" }
271
282
  end
272
283
 
273
284
  private
@@ -18,7 +18,7 @@ require 'rubygems/util/list'
18
18
  require 'stringio'
19
19
 
20
20
  ##
21
- # The Specification class contains the information for a Gem. Typically
21
+ # The Specification class contains the information for a gem. Typically
22
22
  # defined in a .gemspec file or a Rakefile, and looks like this:
23
23
  #
24
24
  # Gem::Specification.new do |s|
@@ -364,8 +364,7 @@ class Gem::Specification < Gem::BasicSpecification
364
364
 
365
365
  ##
366
366
  # The metadata holds extra data for this gem that may be useful to other
367
- # consumers and is settable by gem authors without requiring an update to
368
- # the rubygems software.
367
+ # consumers and is settable by gem authors.
369
368
  #
370
369
  # Metadata items have the following restrictions:
371
370
  #
@@ -656,8 +655,8 @@ class Gem::Specification < Gem::BasicSpecification
656
655
  # # This gem will work with 1.8.6 or greater...
657
656
  # spec.required_ruby_version = '>= 1.8.6'
658
657
  #
659
- # # Only with ruby 2.0.x
660
- # spec.required_ruby_version = '~> 2.0'
658
+ # # Only with final releases of major version 2 where minor version is at least 3
659
+ # spec.required_ruby_version = '~> 2.3'
661
660
  #
662
661
  # # Only prereleases or final releases after 2.6.0.preview2
663
662
  # spec.required_ruby_version = '> 2.6.0.preview2'
@@ -745,9 +744,6 @@ class Gem::Specification < Gem::BasicSpecification
745
744
  def self._all # :nodoc:
746
745
  unless defined?(@@all) && @@all
747
746
  @@all = stubs.map(&:to_spec)
748
- if @@all.any?(&:nil?) # TODO: remove once we're happy
749
- raise "pid: #{$$} nil spec! included in #{stubs.inspect}"
750
- end
751
747
 
752
748
  # After a reset, make sure already loaded specs
753
749
  # are still marked as activated.
@@ -940,7 +936,6 @@ class Gem::Specification < Gem::BasicSpecification
940
936
  # -- wilsonb
941
937
 
942
938
  def self.all=(specs)
943
- raise "nil spec!" if specs.any?(&:nil?) # TODO: remove once we're happy
944
939
  @@stubs_by_name = specs.group_by(&:name)
945
940
  @@all = @@stubs = specs
946
941
  end
@@ -1311,6 +1306,8 @@ class Gem::Specification < Gem::BasicSpecification
1311
1306
  # Load custom marshal format, re-initializing defaults as needed
1312
1307
 
1313
1308
  def self._load(str)
1309
+ Gem.load_yaml
1310
+
1314
1311
  array = Marshal.load str
1315
1312
 
1316
1313
  spec = Gem::Specification.new
@@ -2590,6 +2587,8 @@ class Gem::Specification < Gem::BasicSpecification
2590
2587
  end
2591
2588
 
2592
2589
  def to_yaml(opts = {}) # :nodoc:
2590
+ Gem.load_yaml
2591
+
2593
2592
  # Because the user can switch the YAML engine behind our
2594
2593
  # back, we have to check again here to make sure that our
2595
2594
  # psych code was properly loaded, and load it if not.
@@ -115,6 +115,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
115
115
 
116
116
  attr_accessor :uri # :nodoc:
117
117
 
118
+ TEST_PATH = ENV.fetch('RUBYGEMS_TEST_PATH', File.expand_path('../../../test/rubygems', __FILE__))
119
+
118
120
  def assert_activate(expected, *specs)
119
121
  specs.each do |spec|
120
122
  case spec
@@ -254,6 +256,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
254
256
  @orig_gem_env_requirements = ENV.to_hash
255
257
 
256
258
  ENV['GEM_VENDOR'] = nil
259
+ ENV['SOURCE_DATE_EPOCH'] = nil
257
260
 
258
261
  @current_dir = Dir.pwd
259
262
  @fetcher = nil
@@ -750,6 +753,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
750
753
  Gem::Specification.reset
751
754
  end
752
755
 
756
+ def util_clear_default_gems
757
+ FileUtils.rm_rf @default_spec_dir
758
+ FileUtils.mkdir @default_spec_dir
759
+ end
760
+
753
761
  ##
754
762
  # Install the provided specs
755
763
 
@@ -1056,6 +1064,8 @@ Also, a list:
1056
1064
  Gem.instance_variable_set :@platforms, nil
1057
1065
  Gem::Platform.instance_variable_set :@local, nil
1058
1066
 
1067
+ yield if block_given?
1068
+
1059
1069
  platform
1060
1070
  end
1061
1071
 
@@ -1352,9 +1362,8 @@ Also, a list:
1352
1362
  end
1353
1363
 
1354
1364
  @@ruby = rubybin
1355
- gempath = File.expand_path('../../../test/rubygems', __FILE__)
1356
- @@good_rake = "#{rubybin} #{escape_path(gempath, 'good_rake.rb')}"
1357
- @@bad_rake = "#{rubybin} #{escape_path(gempath, 'bad_rake.rb')}"
1365
+ @@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
1366
+ @@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
1358
1367
 
1359
1368
  ##
1360
1369
  # Construct a new Gem::Dependency.
@@ -1542,14 +1551,12 @@ Also, a list:
1542
1551
 
1543
1552
  def self.cert_path(cert_name)
1544
1553
  if 32 == (Time.at(2**32) rescue 32)
1545
- cert_file =
1546
- File.expand_path "../../../test/rubygems/#{cert_name}_cert_32.pem",
1547
- __FILE__
1554
+ cert_file = "#{TEST_PATH}/#{cert_name}_cert_32.pem"
1548
1555
 
1549
1556
  return cert_file if File.exist? cert_file
1550
1557
  end
1551
1558
 
1552
- File.expand_path "../../../test/rubygems/#{cert_name}_cert.pem", __FILE__
1559
+ "#{TEST_PATH}/#{cert_name}_cert.pem"
1553
1560
  end
1554
1561
 
1555
1562
  ##
@@ -1567,7 +1574,7 @@ Also, a list:
1567
1574
  # Returns the path to the key named +key_name+ from <tt>test/rubygems</tt>
1568
1575
 
1569
1576
  def self.key_path(key_name)
1570
- File.expand_path "../../../test/rubygems/#{key_name}_key.pem", __FILE__
1577
+ "#{TEST_PATH}/#{key_name}_key.pem"
1571
1578
  end
1572
1579
 
1573
1580
  # :stopdoc:
@@ -46,7 +46,7 @@ class Gem::Uninstaller
46
46
  # TODO document the valid options
47
47
  @gem = gem
48
48
  @version = options[:version] || Gem::Requirement.default
49
- @gem_home = File.expand_path(options[:install_dir] || Gem.dir)
49
+ @gem_home = File.realpath(options[:install_dir] || Gem.dir)
50
50
  @force_executables = options[:executables]
51
51
  @force_all = options[:all]
52
52
  @force_ignore = options[:ignore]
@@ -7,6 +7,7 @@
7
7
 
8
8
  require 'rubygems/util'
9
9
  require 'rubygems/deprecate'
10
+ require 'rubygems/text'
10
11
 
11
12
  ##
12
13
  # Module that defines the default UserInteraction. Any class including this
@@ -14,6 +15,8 @@ require 'rubygems/deprecate'
14
15
 
15
16
  module Gem::DefaultUserInteraction
16
17
 
18
+ include Gem::Text
19
+
17
20
  ##
18
21
  # The default UI is a class variable of the singleton class for this
19
22
  # module.
@@ -162,7 +165,7 @@ module Gem::UserInteraction
162
165
  # is true.
163
166
 
164
167
  def verbose(msg = nil)
165
- say(msg || yield) if Gem.configuration.really_verbose
168
+ say(clean_text(msg || yield)) if Gem.configuration.really_verbose
166
169
  end
167
170
  end
168
171
 
data/lib/rubygems/util.rb CHANGED
@@ -122,7 +122,7 @@ module Gem::Util
122
122
 
123
123
  def self.glob_files_in_dir(glob, base_path)
124
124
  if RUBY_VERSION >= "2.5"
125
- Dir.glob(glob, base: base_path).map! {|f| File.join(base_path, f) }
125
+ Dir.glob(glob, base: base_path).map! {|f| File.expand_path(f, base_path) }
126
126
  else
127
127
  Dir.glob(File.expand_path(glob, base_path))
128
128
  end
data/lib/rubygems.rb CHANGED
@@ -9,7 +9,7 @@
9
9
  require 'rbconfig'
10
10
 
11
11
  module Gem
12
- VERSION = "3.0.0".freeze
12
+ VERSION = "3.0.4".freeze
13
13
  end
14
14
 
15
15
  # Must be first since it unloads the prelude from 1.9.2
@@ -18,6 +18,7 @@ require 'rubygems/compatibility'
18
18
  require 'rubygems/defaults'
19
19
  require 'rubygems/deprecate'
20
20
  require 'rubygems/errors'
21
+ require 'rubygems/path_support'
21
22
 
22
23
  ##
23
24
  # RubyGems is the Ruby standard for publishing and managing third party
@@ -572,7 +573,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
572
573
  #++
573
574
 
574
575
  def self.find_home
575
- Dir.home
576
+ Dir.home.dup
576
577
  rescue
577
578
  if Gem.win_platform?
578
579
  File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.0.0"
5
+ s.version = "3.0.4"
6
6
  s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
7
7
  s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
8
8
 
@@ -1,68 +1,77 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIID0DCCArigAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
3
- MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
4
- DTA0MDEzMDAwNDIzMloXDTM2MDEyMjAwNDIzMlowPDELMAkGA1UEBgwCSlAxEjAQ
5
- BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQswCQYDVQQDDAJDQTCCASIw
6
- DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbv0x42BTKFEQOE+KJ2XmiSdZpR
7
- wjzQLAkPLRnLB98tlzs4xo+y4RyY/rd5TT9UzBJTIhP8CJi5GbS1oXEerQXB3P0d
8
- L5oSSMwGGyuIzgZe5+vZ1kgzQxMEKMMKlzA73rbMd4Jx3u5+jdbP0EDrPYfXSvLY
9
- bS04n2aX7zrN3x5KdDrNBfwBio2/qeaaj4+9OxnwRvYP3WOvqdW0h329eMfHw0pi
10
- JI0drIVdsEqClUV4pebT/F+CPUPkEh/weySgo9wANockkYu5ujw2GbLFcO5LXxxm
11
- dEfcVr3r6t6zOA4bJwL0W/e6LBcrwiG/qPDFErhwtgTLYf6Er67SzLyA66UCAwEA
12
- AaOB3DCB2TAPBgNVHRMBAf8EBTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09w
13
- ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRJ7Xd380KzBV7f
14
- USKIQ+O/vKbhDzAOBgNVHQ8BAf8EBAMCAQYwZAYDVR0jBF0wW4AUSe13d/NCswVe
15
- 31EiiEPjv7ym4Q+hQKQ+MDwxCzAJBgNVBAYMAkpQMRIwEAYDVQQKDAlKSU4uR1Iu
16
- SlAxDDAKBgNVBAsMA1JSUjELMAkGA1UEAwwCQ0GCAQAwDQYJKoZIhvcNAQEFBQAD
17
- ggEBAIu/mfiez5XN5tn2jScgShPgHEFJBR0BTJBZF6xCk0jyqNx/g9HMj2ELCuK+
18
- r/Y7KFW5c5M3AQ+xWW0ZSc4kvzyTcV7yTVIwj2jZ9ddYMN3nupZFgBK1GB4Y05GY
19
- MJJFRkSu6d/Ph5ypzBVw2YMT/nsOo5VwMUGLgS7YVjU+u/HNWz80J3oO17mNZllj
20
- PvORJcnjwlroDnS58KoJ7GDgejv3ESWADvX1OHLE4cRkiQGeLoEU4pxdCxXRqX0U
21
- PbwIkZN9mXVcrmPHq8MWi4eC/V7hnbZETMHuWhUoiNdOEfsAXr3iP4KjyyRdwc7a
22
- d/xgcK06UVQRL/HbEYGiQL056mc=
23
- -----END CERTIFICATE-----
24
-
25
- -----BEGIN CERTIFICATE-----
26
- MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
27
- MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
28
- DTA0MDEzMDAwNDMyN1oXDTM1MDEyMjAwNDMyN1owPzELMAkGA1UEBgwCSlAxEjAQ
29
- BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQ4wDAYDVQQDDAVTdWJDQTCC
30
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0Ou7AyRcRXnB/kVHv/6kwe
31
- ANzgg/DyJfsAUqW90m7Lu1nqyug8gK0RBd77yU0w5HOAMHTVSdpjZK0g2sgx4Mb1
32
- d/213eL9TTl5MRVEChTvQr8q5DVG/8fxPPE7fMI8eOAzd98/NOAChk+80r4Sx7fC
33
- kGVEE1bKwY1MrUsUNjOY2d6t3M4HHV3HX1V8ShuKfsHxgCmLzdI8U+5CnQedFgkm
34
- 3e+8tr8IX5RR1wA1Ifw9VadF7OdI/bGMzog/Q8XCLf+WPFjnK7Gcx6JFtzF6Gi4x
35
- 4dp1Xl45JYiVvi9zQ132wu8A1pDHhiNgQviyzbP+UjcB/tsOpzBQF8abYzgEkWEC
36
- AwEAAaNyMHAwDwYDVR0TAQH/BAUwAwEB/zAxBglghkgBhvhCAQ0EJBYiUnVieS9P
37
- cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlCjXWLsReYzH
38
- LzsxwVnCXmKoB/owCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCJ/OyN
39
- rT8Cq2Y+G2yA/L1EMRvvxwFBqxavqaqHl/6rwsIBFlB3zbqGA/0oec6MAVnYynq4
40
- c4AcHTjx3bQ/S4r2sNTZq0DH4SYbQzIobx/YW8PjQUJt8KQdKMcwwi7arHP7A/Ha
41
- LKu8eIC2nsUBnP4NhkYSGhbmpJK+PFD0FVtD0ZIRlY/wsnaZNjWWcnWF1/FNuQ4H
42
- ySjIblqVQkPuzebv3Ror6ZnVDukn96Mg7kP4u6zgxOeqlJGRe1M949SS9Vudjl8X
43
- SF4aZUUB9pQGhsqQJVqaz2OlhGOp9D0q54xko/rekjAIcuDjl1mdX4F2WRrzpUmZ
44
- uY/bPeOBYiVsOYVe
45
- -----END CERTIFICATE-----
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 0 (0x0)
5
+ Signature Algorithm: sha256WithRSAEncryption
6
+ Issuer: C=JP, ST=Tokyo, O=RubyGemsTest, CN=CA
7
+ Validity
8
+ Not Before: Jan 1 00:00:00 2009 GMT
9
+ Not After : Dec 31 23:59:59 2049 GMT
10
+ Subject: C=JP, ST=Tokyo, O=RubyGemsTest, CN=CA
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ RSA Public-Key: (2048 bit)
14
+ Modulus:
15
+ 00:c8:19:2c:5a:1d:4d:2a:65:1d:9a:0b:d6:3a:5c:
16
+ 5f:54:90:ac:17:6f:58:18:8f:e6:0f:33:36:ca:a0:
17
+ 92:02:b8:49:85:96:e9:74:16:14:40:67:98:4a:1f:
18
+ 4d:1c:d8:0b:c4:4e:f8:78:0a:68:70:39:d8:66:64:
19
+ c6:d5:ca:49:e9:02:c7:1a:1c:03:ba:a1:85:68:0a:
20
+ 03:05:27:b5:7f:97:21:94:20:f3:fe:ea:2e:f5:2e:
21
+ 99:34:6b:e0:e7:96:ca:51:4e:4d:40:48:09:d6:5f:
22
+ 64:7b:e5:df:eb:3d:44:bf:42:25:f7:84:c7:2d:22:
23
+ e0:7f:00:37:c6:c3:16:75:75:37:6a:e5:56:da:1c:
24
+ 77:37:3c:00:d3:1f:f4:9d:3b:27:08:ff:cd:cf:1e:
25
+ 60:74:65:90:c2:59:b4:12:3e:a0:7f:22:47:87:ff:
26
+ 52:f3:47:39:d1:91:02:1c:bb:8c:c9:20:1f:00:db:
27
+ d1:3a:b0:e0:ba:ee:55:05:8f:1a:f8:1e:dd:6d:83:
28
+ 1c:1d:18:01:44:92:27:22:f1:2a:07:fe:43:83:08:
29
+ 82:d3:2b:f1:ec:b1:68:b3:f8:94:1b:81:29:54:01:
30
+ 56:12:54:66:ba:60:e7:5c:27:04:4d:a3:61:e3:f9:
31
+ 8f:86:53:0b:83:eb:1f:1d:89:0c:83:66:88:c8:50:
32
+ 8d:c5
33
+ Exponent: 65537 (0x10001)
34
+ X509v3 extensions:
35
+ X509v3 Subject Key Identifier:
36
+ D6:DB:87:AD:D3:45:FC:D4:8D:6B:2B:97:F4:CF:95:08:B6:FA:62:A4
37
+ X509v3 Authority Key Identifier:
38
+ keyid:D6:DB:87:AD:D3:45:FC:D4:8D:6B:2B:97:F4:CF:95:08:B6:FA:62:A4
46
39
 
40
+ X509v3 Basic Constraints: critical
41
+ CA:TRUE
42
+ Signature Algorithm: sha256WithRSAEncryption
43
+ 06:92:f7:9a:0f:40:da:1a:7f:9f:0c:9e:04:37:4d:be:a4:1e:
44
+ 86:65:b3:4a:be:87:13:a1:e4:6b:3b:d6:58:9d:ca:f8:ba:6d:
45
+ e4:dd:de:c5:e3:a2:ec:ef:32:2d:c0:06:01:3a:d5:81:5a:e1:
46
+ e4:f7:5f:68:67:ea:cd:28:90:b1:9c:82:d3:4e:00:51:b6:eb:
47
+ d5:8d:ec:ab:c3:18:b2:8b:8d:5b:63:6d:f8:f5:40:c6:c6:7e:
48
+ 72:7b:ed:98:c5:5e:24:b9:ad:4f:5b:8f:1d:53:a3:d7:6a:4f:
49
+ 07:2e:6a:b6:63:5c:dc:05:22:ac:77:af:b0:72:9d:39:6f:77:
50
+ 9c:45:8b:ad:de:e8:bf:6a:b5:87:0b:58:47:af:11:1a:9e:84:
51
+ 25:21:68:48:2a:b3:3c:5a:97:54:20:03:bd:87:34:dd:db:24:
52
+ a6:c7:50:e9:6c:87:55:f2:e5:33:9c:83:8f:8c:9e:f3:3a:38:
53
+ a0:92:a1:a7:c4:89:31:bd:33:83:11:dd:ad:bb:e0:47:19:bb:
54
+ 62:6c:49:58:b3:13:12:c3:d0:dd:02:5f:6f:4f:13:07:6d:aa:
55
+ 7b:2c:46:5a:74:52:6d:13:10:9c:f7:3d:5d:84:5b:b8:5b:a9:
56
+ c5:ae:56:4b:9a:8c:e2:fd:7f:55:80:cb:b0:2d:56:d7:a4:3c:
57
+ cf:3c:b2:ff
47
58
  -----BEGIN CERTIFICATE-----
48
- MIIDtTCCAp2gAwIBAgIJANz6ehBcVuuiMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
49
- 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
- aWRnaXRzIFB0eSBMdGQwHhcNMTMwNTAxMTQ0NTQxWhcNMjMwMzEwMTQ0NTQxWjBF
51
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
68
77
  -----END CERTIFICATE-----
@@ -1,49 +1,107 @@
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 2 (0x2)
5
+ Signature Algorithm: sha256WithRSAEncryption
6
+ Issuer: C=JP, ST=Tokyo, O=RubyGemsTest, CN=CA
7
+ Validity
8
+ Not Before: Jan 1 00:00:00 2009 GMT
9
+ Not After : Dec 31 23:59:59 2049 GMT
10
+ Subject: C=JP, ST=Tokyo, O=RubyGemsTest, CN=client
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ RSA Public-Key: (2048 bit)
14
+ Modulus:
15
+ 00:c7:87:4a:f4:77:32:54:0e:56:0a:80:04:ac:b5:
16
+ 71:b6:29:9f:c6:aa:f5:9b:3b:75:0a:c2:55:2c:cf:
17
+ 34:c8:78:b7:38:ed:af:48:7d:7e:6c:4c:39:d8:0f:
18
+ cf:fc:ba:f5:e0:50:47:a0:76:72:cf:c7:de:91:a6:
19
+ 1a:99:8b:5f:6f:0c:06:fc:f1:78:6b:0f:c5:bc:91:
20
+ cc:91:f0:85:05:5d:66:d3:cb:ac:54:a1:bc:9b:6c:
21
+ e8:17:f2:17:20:b8:b0:b2:03:cc:9d:a6:8e:c0:33:
22
+ 6c:8b:5f:ef:1a:f6:38:6d:80:3f:4d:b5:e3:a5:a4:
23
+ f1:86:15:76:62:8b:6c:9d:fa:24:59:32:8f:60:b0:
24
+ 80:f4:22:a2:68:57:13:aa:60:e4:cd:01:34:87:76:
25
+ 2a:15:ca:86:9b:b7:aa:b5:66:fd:72:d8:35:86:7e:
26
+ c8:1d:a1:71:71:85:ac:65:64:c2:ea:19:52:7b:34:
27
+ 1e:12:c4:87:8f:75:d7:65:35:85:dd:5a:33:5d:2c:
28
+ 31:f8:2f:b4:84:a7:b6:56:56:2b:e1:9c:c9:c8:f9:
29
+ 41:18:40:19:d9:bb:d4:3c:0d:c4:93:dc:b8:d1:99:
30
+ 44:d0:3d:a2:de:de:29:7f:d6:0c:a8:07:df:bc:ed:
31
+ 66:5b:aa:cc:64:44:b8:79:49:ed:48:77:88:e2:d1:
32
+ 94:b9
33
+ Exponent: 65537 (0x10001)
34
+ X509v3 extensions:
35
+ X509v3 Basic Constraints:
36
+ CA:FALSE
37
+ Netscape Comment:
38
+ OpenSSL Generated Certificate
39
+ X509v3 Subject Key Identifier:
40
+ EF:5A:B6:46:3A:44:5F:0F:E4:F9:E0:6B:B2:C8:45:8D:07:0D:70:15
41
+ X509v3 Authority Key Identifier:
42
+ keyid:D6:DB:87:AD:D3:45:FC:D4:8D:6B:2B:97:F4:CF:95:08:B6:FA:62:A4
43
+
44
+ Signature Algorithm: sha256WithRSAEncryption
45
+ 55:b5:5a:51:cd:0b:2a:81:10:e6:d1:d9:d6:6c:78:99:9b:01:
46
+ 18:e7:91:32:89:6c:fd:3b:eb:c0:03:82:f8:5c:e2:19:c1:04:
47
+ 5d:37:10:5b:97:0b:be:76:8b:98:71:d4:63:68:8c:0e:61:c9:
48
+ ec:3d:cf:ed:01:57:9f:9b:53:07:27:1a:7e:20:f3:8a:13:8c:
49
+ 4f:30:bd:e6:a0:eb:d7:2c:a1:95:35:3f:a6:53:c9:00:11:f9:
50
+ f6:b3:9d:53:e4:b5:71:33:f1:dc:86:47:94:6f:a9:64:01:d4:
51
+ c5:1b:7c:95:0a:02:0e:6f:d1:70:94:5a:5f:7b:ac:77:f7:56:
52
+ 35:6b:ad:a2:e2:fc:74:91:1e:c3:46:fc:32:01:19:a1:a5:27:
53
+ f3:31:14:79:86:7c:4d:9a:83:7c:28:03:9f:ac:3c:8c:e4:d9:
54
+ c8:b0:4e:a3:fe:75:cd:a9:8e:34:57:3b:6b:14:d6:df:35:42:
55
+ 7b:c9:3d:88:0d:ea:5f:1e:c6:5f:80:0e:a5:b9:bf:25:06:ac:
56
+ ac:38:7f:cc:f9:a5:9e:68:cc:08:77:1e:de:45:0d:91:e5:38:
57
+ d2:b3:62:ea:03:ec:3c:18:9f:16:ec:43:21:30:7a:a7:8b:42:
58
+ c6:cb:e4:a8:ac:0b:15:82:a5:9c:93:b2:2c:20:1f:d2:de:e1:
59
+ cf:c0:74:bc
1
60
  -----BEGIN CERTIFICATE-----
2
- MIIDgTCCAmmgAwIBAgICEAIwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUx
3
- EzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMg
4
- UHR5IEx0ZDAeFw0xMzA1MDExNTAxMzFaFw0yMzAzMTAxNTAxMzFaMEUxCzAJBgNV
5
- BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
6
- aWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw
7
- +lcrpdWcloQCgAlxcM3GjvBxZ3yjzi6SgXKRBSi54i0J1LXxznWKcJ5P/O1+j+7i
8
- LjHK+OWqsa0+EbKTwSu+0tx20h0z++YJF9GWEoCwT5aH1kor/0+EQLgYnxBaF8GC
9
- 2xAbkRkWmbSu2aLDIey3lg7lqAazYqdS2wH0UjSDjFKDLxz9LwpfFm0yGL3DgwLW
10
- +dobYkgt1A6F/8Pz6D2FjwYKcM8JE6w7KJSJDUvXcv2E18wmhZ/qF/MtFAF4coB1
11
- f5ALnz8YqY6eyDF5aY/VfaHZvXdirLlMH6/miie9GBVMnJWF0ah5ssbsMvcpmnDJ
12
- qkiYju2e1oLFEE7zztU/AgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgEN
13
- BB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBTcOELj
14
- hSUdiLrdRF3CFZDZkWaGzDAfBgNVHSMEGDAWgBS7B027H/ZIkW3ngm1SrR0X/aTC
15
- wDANBgkqhkiG9w0BAQUFAAOCAQEAlQMzHlnT6L1qqA4hL6tABPbiMsVwXyKCcfNB
16
- zBn82Wkxgbg7Mp31fbR6/qvGeXOtaX6IdPdgtVf8nh1NURk0MmFBP+gfnwfNBD+m
17
- Q1cldDt9kY2LGIrPii40xbugF1/xqEYcZMgXU08aEvQ2IHX46J8wZoqMa2KhrU8/
18
- mzY0F+UEFOGWtKDgUzz3dyBPsdzVrX+SXULwH0lqZX8Nsw5LyfrlVt3xQvS5Ogm4
19
- kYlt8kqhF8lUS3WTbuADrIs3NaDPRWSs1iLRRFgosgUtHN7tkrkrVaHeBo0KbAJG
20
- mMqtxSY0XZI9WBxffP9UtoY3EiTWNVWLtuCN3OSvryP6NDe4BA==
61
+ MIIDfDCCAmSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBBMQswCQYDVQQGEwJKUDEO
62
+ MAwGA1UECAwFVG9reW8xFTATBgNVBAoMDFJ1YnlHZW1zVGVzdDELMAkGA1UEAwwC
63
+ Q0EwHhcNMDkwMTAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjBFMQswCQYDVQQGEwJK
64
+ UDEOMAwGA1UECAwFVG9reW8xFTATBgNVBAoMDFJ1YnlHZW1zVGVzdDEPMA0GA1UE
65
+ AwwGY2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx4dK9Hcy
66
+ VA5WCoAErLVxtimfxqr1mzt1CsJVLM80yHi3OO2vSH1+bEw52A/P/Lr14FBHoHZy
67
+ z8fekaYamYtfbwwG/PF4aw/FvJHMkfCFBV1m08usVKG8m2zoF/IXILiwsgPMnaaO
68
+ wDNsi1/vGvY4bYA/TbXjpaTxhhV2YotsnfokWTKPYLCA9CKiaFcTqmDkzQE0h3Yq
69
+ FcqGm7eqtWb9ctg1hn7IHaFxcYWsZWTC6hlSezQeEsSHj3XXZTWF3VozXSwx+C+0
70
+ hKe2VlYr4ZzJyPlBGEAZ2bvUPA3Ek9y40ZlE0D2i3t4pf9YMqAffvO1mW6rMZES4
71
+ eUntSHeI4tGUuQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P
72
+ cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU71q2RjpEXw/k
73
+ +eBrsshFjQcNcBUwHwYDVR0jBBgwFoAU1tuHrdNF/NSNayuX9M+VCLb6YqQwDQYJ
74
+ KoZIhvcNAQELBQADggEBAFW1WlHNCyqBEObR2dZseJmbARjnkTKJbP0768ADgvhc
75
+ 4hnBBF03EFuXC752i5hx1GNojA5hyew9z+0BV5+bUwcnGn4g84oTjE8wveag69cs
76
+ oZU1P6ZTyQAR+faznVPktXEz8dyGR5RvqWQB1MUbfJUKAg5v0XCUWl97rHf3VjVr
77
+ raLi/HSRHsNG/DIBGaGlJ/MxFHmGfE2ag3woA5+sPIzk2ciwTqP+dc2pjjRXO2sU
78
+ 1t81QnvJPYgN6l8exl+ADqW5vyUGrKw4f8z5pZ5ozAh3Ht5FDZHlONKzYuoD7DwY
79
+ nxbsQyEweqeLQsbL5KisCxWCpZyTsiwgH9Le4c/AdLw=
21
80
  -----END CERTIFICATE-----
22
-
23
81
  -----BEGIN RSA PRIVATE KEY-----
24
- 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
- 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
- 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
- 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
- JoWf6hfzLRQBeHKAdX+QC58/GKmOnsgxeWmP1X2h2b13Yqy5TB+v5oonvRgVTJyV
29
- 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
- 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
- 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
- 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
- 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
- yf5tUkICRcPkekcx+XtpGrCMlRLl770bZBZX+YNmbYXVWhFp09cNR+U0KZqPNcDp
35
- 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
- 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
- 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
- jxzviIk8bll5uCIuXJyCfao7ywaZABbL6a20kdVGKrHj57O/OJ2WZVwBihhB7OS+
39
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
49
107
  -----END RSA PRIVATE KEY-----