diff --git a/NEWS.md b/NEWS.md
index f01fffa3dac934..b2e34e3025f8db 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -103,6 +103,13 @@ Note: We're only listing outstanding class updates.
## Stdlib updates
+* Psych
+
+ * An experimental libfyaml backend has been added. It is only
+ enabled when psych is built with `--enable-libfyaml`, and the
+ default libyaml backend remains unchanged otherwise. It is not
+ supported on Windows. [[GH-psych #805]]
+
### The following bundled gems are added.
@@ -117,6 +124,14 @@ releases.
* tsort 0.2.0
* win32-registry 0.1.2
+### The following bundled gems are removed.
+
+* net-ftp 0.3.9
+* net-pop 0.1.2
+
+They are still available on rubygems.org and can be installed with
+`gem install`. [[Feature #21835]]
+
### The following default gem is added.
### The following default gems are updated.
@@ -193,6 +208,14 @@ Ruby 4.0 bundled RubyGems and Bundler version 4. see the following links for det
## Supported platforms
+* Support code for the following platforms has been removed. Note
+ that all of them reached end of life many years ago and Ruby has
+ long been unbuildable on them.
+
+ * Interix (Windows Services for UNIX)
+ * SunOS 4 (Solaris, i.e. SunOS 5, is unaffected)
+ * BSD/OS (BSDi)
+
## Compatibility issues
* `Kernel#at_exit` and `END {}` now raise `Ractor::IsolationError` when called
@@ -240,6 +263,12 @@ The following APIs, which have been deprecated for many years, are removed.
- The default garbage collector has been switched from a freelist allocator to a bump pointer allocator. [[PR #17201]]
+- The error_highlight, did_you_mean, and syntax_suggest gems are now
+ loaded lazily on the first error display instead of at interpreter
+ boot, which reduces startup time. `Process.warmup` loads them
+ eagerly so that pre-forking servers keep their code in
+ copy-on-write shared memory. [[Feature #21951]]
+
### Ractor
A lot of work has gone into making Ractors more stable, performant, and usable. These improvements bring Ractor implementation closer to leaving experimental status.
@@ -254,9 +283,11 @@ A lot of work has gone into making Ractors more stable, performant, and usable.
[Feature #21781]: https://bugs.ruby-lang.org/issues/21781
[Feature #21785]: https://bugs.ruby-lang.org/issues/21785
[Feature #21796]: https://bugs.ruby-lang.org/issues/21796
+[Feature #21835]: https://bugs.ruby-lang.org/issues/21835
[Feature #21853]: https://bugs.ruby-lang.org/issues/21853
[Feature #21861]: https://bugs.ruby-lang.org/issues/21861
[Feature #21932]: https://bugs.ruby-lang.org/issues/21932
+[Feature #21951]: https://bugs.ruby-lang.org/issues/21951
[Feature #21981]: https://bugs.ruby-lang.org/issues/21981
[Feature #22097]: https://bugs.ruby-lang.org/issues/22097
[Feature #22135]: https://bugs.ruby-lang.org/issues/22135
@@ -265,6 +296,7 @@ A lot of work has gone into making Ractors more stable, performant, and usable.
[Feature #22175]: https://bugs.ruby-lang.org/issues/22175
[Feature #22185]: https://bugs.ruby-lang.org/issues/22185
[PR #17201]: https://github.com/ruby/ruby/pull/17201
+[GH-psych #805]: https://github.com/ruby/psych/pull/805
[RubyGems-v4.0.4]: https://github.com/rubygems/rubygems/releases/tag/v4.0.4
[RubyGems-v4.0.5]: https://github.com/rubygems/rubygems/releases/tag/v4.0.5
[RubyGems-v4.0.6]: https://github.com/rubygems/rubygems/releases/tag/v4.0.6
diff --git a/compile.c b/compile.c
index f654514256c404..95efcefb8b69ea 100644
--- a/compile.c
+++ b/compile.c
@@ -5857,7 +5857,7 @@ compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const pre, LINK_ANCHOR *const
ci = ci_flag_set(iseq, ci, VM_CALL_ARGS_SPLAT_MUT);
}
OPERAND_AT(iobj, 0) = (VALUE)ci;
- RB_OBJ_WRITTEN(iseq, Qundef, iobj);
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
/* Given: h[*a], h[*b, 1] = ary
* h[*a] uses splatarray false and does not set VM_CALL_ARGS_SPLAT_MUT,
diff --git a/ext/io/console/console.c b/ext/io/console/console.c
index ebd4c39089cc2b..05a4d684d5873a 100644
--- a/ext/io/console/console.c
+++ b/ext/io/console/console.c
@@ -1916,14 +1916,14 @@ console_ttyname(VALUE io)
typedef enum {
platform_default,
-#if defined _WIN32 || defined __CYGWIN__
+#if defined _WIN32
platform_cygwin,
platform_msys,
#endif
platform_any,
platform_default_bit = 1U << platform_default,
-#if defined _WIN32 || defined __CYGWIN__
+#if defined _WIN32
platform_cygwin_bit = 1U << platform_cygwin,
platform_msys_bit = 1U << platform_msys,
#endif
@@ -1965,7 +1965,7 @@ console_platform_tty_p(int argc, VALUE *argv, VALUE io)
if (m == ID2SYM(rb_intern("any"))) {
mode |= platform_any_bit;
}
-#if defined _WIN32 || defined __CYGWIN__
+#if defined _WIN32
else if (m == ID2SYM(rb_intern("cygwin"))) {
mode |= platform_cygwin_bit;
}
@@ -1982,7 +1982,7 @@ console_platform_tty_p(int argc, VALUE *argv, VALUE io)
ret = rb_call_super(0, 0);
}
if ((mode & ~platform_default_bit) && !RTEST(ret)) {
-#if defined _WIN32 || defined __CYGWIN__
+#if defined _WIN32
if (mode & (platform_cygwin_bit | platform_msys_bit)) {
struct {
FILE_NAME_INFO info;
@@ -2080,9 +2080,8 @@ InitVM_console(void)
rb_define_method(rb_cIO, "getpass", console_getpass, -1);
rb_define_method(rb_cIO, "ttyname", console_ttyname, 0);
{
- /* :stopdoc: */
+ /* :nodoc: */
VALUE platform = rb_define_module_under(rb_cIO, "platform_tty");
- /* :startdoc: */
{
VALUE rb_cIO = platform;
rb_define_method(rb_cIO, "tty?", console_platform_tty_p, -1);
diff --git a/file.c b/file.c
index 80aae78a5b90ad..23247461f57052 100644
--- a/file.c
+++ b/file.c
@@ -4762,13 +4762,25 @@ s_absolute_path(int c, const VALUE * v, VALUE _)
}
/*
+ * :markup: markdown
+ *
* call-seq:
- * File.absolute_path?(file_name) -> true or false
+ * File.absolute_path?(path) -> true or false
*
- * Returns true if +file_name+ is an absolute path, and
- * false otherwise.
+ * Returns whether the given `path` is an absolute path:
+ *
+ * ```ruby
+ * File.absolute_path?('/home') # => true
+ * File.absolute_path?('lib') # => false
+ * ```
+ *
+ * The result is OS-dependent for some paths:
+ *
+ * ```ruby
+ * File.absolute_path?('C:/') # => true # On Windows.
+ * File.absolute_path?('C:/') # => false # Elsewhere.
+ * ```
*
- * File.absolute_path?("c:/foo") #=> false (on Linux), true (on Windows)
*/
static VALUE
diff --git a/gc.rb b/gc.rb
index 48bed27880f3ae..ef127705042a2b 100644
--- a/gc.rb
+++ b/gc.rb
@@ -12,7 +12,7 @@ module GC
# Keyword arguments:
#
# - +full_mark+:
- # its boolean value determines whether to perform a major garbage collection cycle:
+ # a boolean value specifying whether to perform a major garbage collection cycle:
#
# - +true+: initiates a major garbage collection cycle,
# meaning all objects (old and new) are marked.
@@ -20,20 +20,20 @@ module GC
# meaning only young objects are marked.
#
# - +immediate_mark+:
- # its boolean value determines whether to perform incremental marking:
+ # a boolean value specifying whether marking is performed incrementally:
#
# - +true+: marking is completed before the method returns.
- # - +false+: marking is performed by parts,
+ # - +false+: marking is performed in parts,
# interleaved with program execution both before the method returns and afterward;
# therefore marking may not be completed before the return.
- # Note that if +full_mark+ is +false+, marking will always be immediate,
+ # Note that if +full_mark+ is +false+, marking is always immediate,
# regardless of the value of +immediate_mark+.
#
# - +immediate_sweep+:
- # its boolean value determines whether to defer sweeping (using lazy sweep):
+ # a boolean value specifying whether sweeping is deferred (lazy sweep):
#
# - +true+: sweeping is completed before the method returns.
- # - +false+: sweeping is performed by parts,
+ # - +false+: sweeping is performed in parts,
# interleaved with program execution both before the method returns and afterward;
# therefore sweeping may not be completed before the return.
#
diff --git a/lib/bundler/bundler.gemspec b/lib/bundler/bundler.gemspec
index e6d77310c670f3..33cfc71148328d 100644
--- a/lib/bundler/bundler.gemspec
+++ b/lib/bundler/bundler.gemspec
@@ -36,11 +36,12 @@ Gem::Specification.new do |s|
s.files = Dir.glob("lib/bundler{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
- # Bundler reuses RubyGems' vendored URI and SecureRandom. Ship a copy under
- # lib/rubygems so Bundler stays self-contained on RubyGems versions that
- # predate them.
+ # Bundler reuses RubyGems' vendored URI and SecureRandom and its pure-Ruby
+ # YAML serializer. Ship a copy under lib/rubygems so Bundler stays
+ # self-contained on RubyGems versions that predate them.
s.files += Dir.glob("lib/rubygems/vendor/uri/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
s.files += Dir.glob("lib/rubygems/vendor/securerandom/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
+ s.files += Dir.glob("lib/rubygems/yaml_serializer.rb")
# include the gemspec itself because warbler breaks w/o it
s.files += %w[lib/bundler/bundler.gemspec]
diff --git a/lib/bundler/plugin/index.rb b/lib/bundler/plugin/index.rb
index 1dfb061304a466..0e4be4c7f91f8c 100644
--- a/lib/bundler/plugin/index.rb
+++ b/lib/bundler/plugin/index.rb
@@ -171,14 +171,16 @@ def load_index(index_file, global = false)
data = index_f.read
- require_relative "../yaml_serializer"
- index = YAMLSerializer.load(data)
+ require "rubygems/yaml_serializer"
+ # Empty sections load as nil, e.g. from index files written by
+ # older Bundler versions, which dumped empty hashes as a bare key.
+ index = Gem::YAMLSerializer.load(data) || {}
- @commands.merge!(index["commands"])
- @hooks.merge!(index["hooks"])
+ @commands.merge!(index["commands"] || {})
+ @hooks.merge!(index["hooks"] || {})
@load_paths.merge!(transform_index_paths(index["load_paths"]) {|p| absolutize_path(p, base) })
@plugin_paths.merge!(transform_index_paths(index["plugin_paths"]) {|p| absolutize_path(p, base) })
- @sources.merge!(index["sources"]) unless global
+ @sources.merge!(index["sources"] || {}) unless global
end
end
@@ -196,10 +198,10 @@ def save_index
"sources" => @sources,
}
- require_relative "../yaml_serializer"
+ require "rubygems/yaml_serializer"
SharedHelpers.filesystem_access(index_file) do |index_f|
FileUtils.mkdir_p(index_f.dirname)
- File.open(index_f, "w") {|f| f.puts YAMLSerializer.dump(index) }
+ File.open(index_f, "w") {|f| f.puts Gem::YAMLSerializer.dump(index) }
end
end
diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb
index cc4577b3e19df3..c1f8ecf824e1de 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -504,12 +504,10 @@ def load_config(config_file)
end
def serializer_class
+ # The Bundler gem ships its own copy of Gem::YAMLSerializer, so this
+ # resolves even on RubyGems versions that predate it.
require "rubygems/yaml_serializer"
Gem::YAMLSerializer
- rescue LoadError
- # TODO: Remove this when RubyGems 3.4 is EOL
- require_relative "yaml_serializer"
- YAMLSerializer
end
FALLBACK_TIMEOUT_URI_OPTION = "fallback_timeout"
diff --git a/lib/bundler/yaml_serializer.rb b/lib/bundler/yaml_serializer.rb
deleted file mode 100644
index ab1eb6dbcfdab7..00000000000000
--- a/lib/bundler/yaml_serializer.rb
+++ /dev/null
@@ -1,98 +0,0 @@
-# frozen_string_literal: true
-
-module Bundler
- # A stub yaml serializer that can handle only hashes and strings (as of now).
- module YAMLSerializer
- module_function
-
- def dump(hash)
- yaml = String.new("---")
- yaml << dump_hash(hash)
- end
-
- def dump_hash(hash)
- yaml = String.new("\n")
- hash.each do |k, v|
- yaml << k << ":"
- if v.is_a?(Hash)
- yaml << dump_hash(v).gsub(/^(?!$)/, " ") # indent all non-empty lines
- elsif v.is_a?(Array) # Expected to be array of strings
- if v.empty?
- yaml << " []\n"
- else
- yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
- end
- else
- yaml << " " << v.to_s.gsub(/\s+/, " ").inspect << "\n"
- end
- end
- yaml
- end
-
- ARRAY_REGEX = /
- ^
- (?:[ ]*-[ ]) # '- ' before array items
- (['"]?) # optional opening quote
- (.*) # value
- \1 # matching closing quote
- $
- /xo
-
- HASH_REGEX = /
- ^
- ([ ]*) # indentations
- ([^#]+) # key excludes comment char '#'
- (?::(?=(?:\s|$))) # : (without the lookahead the #key includes this when : is present in value)
- [ ]?
- (['"]?) # optional opening quote
- (.*) # value
- \3 # matching closing quote
- $
- /xo
-
- def load(str)
- res = {}
- stack = [res]
- last_hash = nil
- last_empty_key = nil
- str.split(/\r?\n/) do |line|
- if match = HASH_REGEX.match(line)
- indent, key, quote, val = match.captures
- val = strip_comment(val)
-
- depth = indent.size / 2
- if quote.empty? && val.empty?
- new_hash = {}
- stack[depth][key] = new_hash
- stack[depth + 1] = new_hash
- last_empty_key = key
- last_hash = stack[depth]
- else
- val = [] if val == "[]" # empty array
- stack[depth][key] = val
- end
- elsif match = ARRAY_REGEX.match(line)
- _, val = match.captures
- val = strip_comment(val)
-
- last_hash[last_empty_key] = [] unless last_hash[last_empty_key].is_a?(Array)
-
- last_hash[last_empty_key].push(val)
- end
- end
- res
- end
-
- def strip_comment(val)
- if val.include?("#") && !val.start_with?("#")
- val.split("#", 2).first.strip
- else
- val
- end
- end
-
- class << self
- private :dump_hash
- end
- end
-end
diff --git a/lib/rubygems/commands/cert_command.rb b/lib/rubygems/commands/cert_command.rb
index fe03841ddb4451..09ae43e35f683d 100644
--- a/lib/rubygems/commands/cert_command.rb
+++ b/lib/rubygems/commands/cert_command.rb
@@ -96,8 +96,6 @@ def open_private_key(key_file)
check_openssl
passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
key = OpenSSL::PKey.read File.read(key_file), passphrase
- raise Gem::OptionParser::InvalidArgument,
- "#{key_file}: private key not found" unless key.private?
key
rescue Errno::ENOENT
raise Gem::OptionParser::InvalidArgument, "#{key_file}: does not exist"
@@ -161,7 +159,7 @@ def build_cert(email, key) # :nodoc:
Gem::Security::ONE_DAY * expiration_length_days
)
- Gem::Security.write cert, "gem-public_cert.pem"
+ Gem::Security.write_certificate cert, "gem-public_cert.pem"
end
def build_key # :nodoc:
@@ -178,7 +176,7 @@ def build_key # :nodoc:
algorithm = options[:key_algorithm] || Gem::Security::DEFAULT_KEY_ALGORITHM
key = Gem::Security.create_key(algorithm)
- key_path = Gem::Security.write key, "gem-private_key.pem", 0o600, passphrase
+ key_path = Gem::Security.write_private_key key, "gem-private_key.pem", 0o600, passphrase
[key, key_path]
end
@@ -298,7 +296,7 @@ def sign(cert_file)
cert = Gem::Security.sign cert, issuer_key, issuer_cert
- Gem::Security.write cert, cert_file, permissions
+ Gem::Security.write_certificate cert, cert_file, permissions
end
def sign_certificates # :nodoc:
diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb
index 69ba87b07f8e41..6b46a483fd1c40 100644
--- a/lib/rubygems/security.rb
+++ b/lib/rubygems/security.rb
@@ -562,7 +562,12 @@ def self.sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions
signed = create_cert signee_subject, signee_key, age, extensions, serial
signed.issuer = signing_cert.subject
- signed.sign signing_key, Gem::Security::DIGEST_NAME
+ begin
+ signed.sign signing_key, Gem::Security::DIGEST_NAME
+ rescue OpenSSL::PKey::PKeyError, ArgumentError
+ raise Gem::Security::Exception,
+ "incorrect signing key for signing"
+ end
end
##
@@ -585,24 +590,36 @@ def self.trusted_certificates(&block)
end
##
- # Writes +pemmable+, which must respond to +to_pem+ to +path+ with the given
- # +permissions+. If passed +cipher+ and +passphrase+ those arguments will be
- # passed to +to_pem+.
+ # Writes the private +key+ to +path+ with the given +permissions+.
+ # If passed +passphrase+ and +cipher+, the key is encrypted.
- def self.write(pemmable, path, permissions = 0o600, passphrase = nil, cipher = KEY_CIPHER)
+ def self.write_private_key(key, path, permissions = 0o600, passphrase = nil, cipher = KEY_CIPHER)
path = File.expand_path path
File.open path, "wb", permissions do |io|
if passphrase && cipher
- io.write pemmable.to_pem cipher, passphrase
+ io.write key.private_to_pem cipher, passphrase
else
- io.write pemmable.to_pem
+ io.write key.private_to_pem
end
end
path
end
+ ##
+ # Writes the +certificate+ to +path+ with the given +permissions+.
+
+ def self.write_certificate(certificate, path, permissions = 0o600)
+ path = File.expand_path path
+
+ File.open path, "wb", permissions do |io|
+ io.write certificate.to_pem
+ end
+
+ path
+ end
+
reset
end
diff --git a/lib/rubygems/security/policy.rb b/lib/rubygems/security/policy.rb
index 128958ab802ab2..03ddbe530e4820 100644
--- a/lib/rubygems/security/policy.rb
+++ b/lib/rubygems/security/policy.rb
@@ -165,9 +165,9 @@ def check_trust(chain, digester, trust_dir)
end
save_cert = OpenSSL::X509::Certificate.new File.read path
- save_dgst = digester.digest save_cert.public_key.to_pem
+ save_dgst = digester.digest save_cert.public_key.public_to_pem
- pkey_str = root.public_key.to_pem
+ pkey_str = root.public_key.public_to_pem
cert_dgst = digester.digest pkey_str
raise Gem::Security::Exception,
diff --git a/lib/rubygems/security/signer.rb b/lib/rubygems/security/signer.rb
index eeeeb52906cb48..044562137cb856 100644
--- a/lib/rubygems/security/signer.rb
+++ b/lib/rubygems/security/signer.rb
@@ -47,7 +47,7 @@ def self.re_sign_cert(expired_cert, expired_cert_path, private_key)
expired_cert_file = "#{File.basename(expired_cert_path)}.expired.#{expiry}"
new_expired_cert_path = File.join(Gem.user_home, ".gem", expired_cert_file)
- Gem::Security.write(expired_cert, new_expired_cert_path)
+ Gem::Security.write_certificate(expired_cert, new_expired_cert_path)
re_signed_cert = Gem::Security.re_sign(
expired_cert,
@@ -55,7 +55,7 @@ def self.re_sign_cert(expired_cert, expired_cert_path, private_key)
Gem::Security::ONE_DAY * Gem.configuration.cert_expiration_length_days
)
- Gem::Security.write(re_signed_cert, expired_cert_path)
+ Gem::Security.write_certificate(re_signed_cert, expired_cert_path)
yield(expired_cert_path, new_expired_cert_path) if block_given?
end
@@ -190,17 +190,17 @@ def re_sign_key(expiration_length: Gem::Security::ONE_YEAR) # :nodoc:
return unless disk_key
- if disk_key.to_pem == @key.to_pem && disk_cert == old_cert.to_pem
+ if disk_key.private_to_pem == @key.private_to_pem && disk_cert == old_cert.to_pem
expiry = old_cert.not_after.strftime("%Y%m%d%H%M%S")
old_cert_file = "gem-public_cert.pem.expired.#{expiry}"
old_cert_path = File.join(Gem.user_home, ".gem", old_cert_file)
unless File.exist?(old_cert_path)
- Gem::Security.write(old_cert, old_cert_path)
+ Gem::Security.write_certificate(old_cert, old_cert_path)
cert = Gem::Security.re_sign(old_cert, @key, expiration_length)
- Gem::Security.write(cert, disk_cert_path)
+ Gem::Security.write_certificate(cert, disk_cert_path)
alert("Your cert: #{disk_cert_path} has been auto re-signed with the key: #{disk_key_path}")
alert("Your expired cert will be located at: #{old_cert_path}")
diff --git a/lib/rubygems/yaml_serializer.rb b/lib/rubygems/yaml_serializer.rb
index cf88a942c7e492..b9bb6c527712c4 100644
--- a/lib/rubygems/yaml_serializer.rb
+++ b/lib/rubygems/yaml_serializer.rb
@@ -1,5 +1,9 @@
# frozen_string_literal: true
+# Skip reloading when an identical copy (e.g. the one shipped inside the Bundler
+# gem) was already required from a different path, to avoid redefinition warnings.
+return if defined?(Gem::YAMLSerializer)
+
unless defined?(Psych::VERSION)
module Psych
class Exception < ::RuntimeError; end
diff --git a/spec/bundler/bundler/plugin/index_spec.rb b/spec/bundler/bundler/plugin/index_spec.rb
index a28934269bd24a..b7f57d05b0ce3b 100644
--- a/spec/bundler/bundler/plugin/index_spec.rb
+++ b/spec/bundler/bundler/plugin/index_spec.rb
@@ -99,9 +99,9 @@
end
it "is gone after unregistration" do
- expect(index.index_file.read).to include("after-bar:\n - \"new-plugin\"\n")
+ expect(index.index_file.read).to include("after-bar:\n - new-plugin\n")
index.unregister_plugin(plugin_name)
- expect(index.index_file.read).to_not include("after-bar:\n - \n")
+ expect(index.index_file.read).to_not include("after-bar")
end
context "that are not registered" do
@@ -219,7 +219,7 @@
end
it "expands relative paths to absolute on load" do
- require "bundler/yaml_serializer"
+ require "rubygems/yaml_serializer"
plugin_root = Bundler::Plugin.root
@@ -231,7 +231,7 @@
"sources" => {},
}
- File.open(index.index_file, "w") {|f| f.puts Bundler::YAMLSerializer.dump(relative_index) }
+ File.open(index.index_file, "w") {|f| f.puts Gem::YAMLSerializer.dump(relative_index) }
new_index = Index.new
expect(new_index.plugin_path(plugin_name)).to eq(plugin_root.join(plugin_name))
@@ -252,7 +252,7 @@
end
it "reads legacy index files with absolute paths" do
- require "bundler/yaml_serializer"
+ require "rubygems/yaml_serializer"
plugin_root = Bundler::Plugin.root
absolute_path = plugin_root.join(plugin_name).to_s
@@ -265,7 +265,7 @@
"sources" => {},
}
- File.open(index.index_file, "w") {|f| f.puts Bundler::YAMLSerializer.dump(legacy_index) }
+ File.open(index.index_file, "w") {|f| f.puts Gem::YAMLSerializer.dump(legacy_index) }
new_index = Index.new
expect(new_index.plugin_path(plugin_name)).to eq(Pathname.new(absolute_path))
diff --git a/spec/bundler/bundler/yaml_serializer_spec.rb b/spec/bundler/bundler/yaml_serializer_spec.rb
deleted file mode 100644
index 9ff1579b76c896..00000000000000
--- a/spec/bundler/bundler/yaml_serializer_spec.rb
+++ /dev/null
@@ -1,235 +0,0 @@
-# frozen_string_literal: true
-
-require "bundler/yaml_serializer"
-
-RSpec.describe Bundler::YAMLSerializer do
- subject(:serializer) { Bundler::YAMLSerializer }
-
- describe "#dump" do
- it "works for simple hash" do
- hash = { "Q" => "Where does Thursday come before Wednesday? In the dictionary. :P" }
-
- expected = <<~YAML
- ---
- Q: "Where does Thursday come before Wednesday? In the dictionary. :P"
- YAML
-
- expect(serializer.dump(hash)).to eq(expected)
- end
-
- it "handles nested hash" do
- hash = {
- "nice-one" => {
- "read_ahead" => "All generalizations are false, including this one",
- },
- }
-
- expected = <<~YAML
- ---
- nice-one:
- read_ahead: "All generalizations are false, including this one"
- YAML
-
- expect(serializer.dump(hash)).to eq(expected)
- end
-
- it "array inside an hash" do
- hash = {
- "nested_hash" => {
- "contains_array" => [
- "Jack and Jill went up the hill",
- "To fetch a pail of water.",
- "Jack fell down and broke his crown,",
- "And Jill came tumbling after.",
- ],
- },
- }
-
- expected = <<~YAML
- ---
- nested_hash:
- contains_array:
- - "Jack and Jill went up the hill"
- - "To fetch a pail of water."
- - "Jack fell down and broke his crown,"
- - "And Jill came tumbling after."
- YAML
-
- expect(serializer.dump(hash)).to eq(expected)
- end
-
- it "handles empty array" do
- hash = {
- "empty_array" => [],
- }
-
- expected = <<~YAML
- ---
- empty_array: []
- YAML
-
- expect(serializer.dump(hash)).to eq(expected)
- end
- end
-
- describe "#load" do
- it "works for simple hash" do
- yaml = <<~YAML
- ---
- Jon: "Air is free dude!"
- Jack: "Yes.. until you buy a bag of chips!"
- YAML
-
- hash = {
- "Jon" => "Air is free dude!",
- "Jack" => "Yes.. until you buy a bag of chips!",
- }
-
- expect(serializer.load(yaml)).to eq(hash)
- end
-
- it "works for nested hash" do
- yaml = <<~YAML
- ---
- baa:
- baa: "black sheep"
- have: "you any wool?"
- yes: "merry have I"
- three: "bags full"
- YAML
-
- hash = {
- "baa" => {
- "baa" => "black sheep",
- "have" => "you any wool?",
- "yes" => "merry have I",
- },
- "three" => "bags full",
- }
-
- expect(serializer.load(yaml)).to eq(hash)
- end
-
- it "handles colon in key/value" do
- yaml = <<~YAML
- BUNDLE_MIRROR__HTTPS://RUBYGEMS__ORG/: http://example-mirror.rubygems.org
- YAML
-
- expect(serializer.load(yaml)).to eq("BUNDLE_MIRROR__HTTPS://RUBYGEMS__ORG/" => "http://example-mirror.rubygems.org")
- end
-
- it "handles arrays inside hashes" do
- yaml = <<~YAML
- ---
- nested_hash:
- contains_array:
- - "Why shouldn't you write with a broken pencil?"
- - "Because it's pointless!"
- YAML
-
- hash = {
- "nested_hash" => {
- "contains_array" => [
- "Why shouldn't you write with a broken pencil?",
- "Because it's pointless!",
- ],
- },
- }
-
- expect(serializer.load(yaml)).to eq(hash)
- end
-
- it "handles windows-style CRLF line endings" do
- yaml = <<~YAML.gsub("\n", "\r\n")
- ---
- nested_hash:
- contains_array:
- - "Why shouldn't you write with a broken pencil?"
- - "Because it's pointless!"
- - oh so silly
- YAML
-
- hash = {
- "nested_hash" => {
- "contains_array" => [
- "Why shouldn't you write with a broken pencil?",
- "Because it's pointless!",
- "oh so silly",
- ],
- },
- }
-
- expect(serializer.load(yaml)).to eq(hash)
- end
-
- it "handles empty array" do
- yaml = <<~YAML
- ---
- empty_array: []
- YAML
-
- hash = {
- "empty_array" => [],
- }
-
- expect(serializer.load(yaml)).to eq(hash)
- end
-
- it "skip commented out words" do
- yaml = <<~YAML
- ---
- foo: bar
- buzz: foo # bar
- YAML
-
- hash = {
- "foo" => "bar",
- "buzz" => "foo",
- }
-
- expect(serializer.load(yaml)).to eq(hash)
- end
- end
-
- describe "against yaml lib" do
- let(:hash) do
- {
- "a_joke" => {
- "my-stand" => "I can totally keep secrets",
- "but" => "The people I tell them to can't :P",
- "wouldn't it be funny if this string were empty?" => "",
- },
- "more" => {
- "first" => [
- "Can a kangaroo jump higher than a house?",
- "Of course, a house doesn't jump at all.",
- ],
- "second" => [
- "What did the sea say to the sand?",
- "Nothing, it simply waved.",
- ],
- "array with empty string" => [""],
- },
- "sales" => {
- "item" => "A Parachute",
- "description" => "Only used once, never opened.",
- },
- "one-more" => "I'd tell you a chemistry joke but I know I wouldn't get a reaction.",
- }
- end
-
- context "#load" do
- it "retrieves the original hash" do
- require "yaml"
- expect(serializer.load(YAML.dump(hash))).to eq(hash)
- end
- end
-
- context "#dump" do
- it "retrieves the original hash" do
- require "yaml"
- expect(YAML.load(serializer.dump(hash))).to eq(hash)
- end
- end
- end
-end
diff --git a/spec/bundler/support/path.rb b/spec/bundler/support/path.rb
index 0efea82cbaf9ee..925730e1c0d391 100644
--- a/spec/bundler/support/path.rb
+++ b/spec/bundler/support/path.rb
@@ -359,7 +359,7 @@ def git_ls_files(glob)
end
def tracked_files_glob
- ruby_core? ? "libexec/bundle* lib/bundler lib/bundler.rb lib/rubygems/vendor/uri lib/rubygems/vendor/securerandom spec/bundler man/bundle*" : "exe/bundle exe/bundler lib/bundler lib/bundler.rb lib/rubygems/vendor/uri lib/rubygems/vendor/securerandom bundler.gemspec CHANGELOG-bundler.md LICENSE-bundler.md README-bundler.md"
+ ruby_core? ? "libexec/bundle* lib/bundler lib/bundler.rb lib/rubygems/vendor/uri lib/rubygems/vendor/securerandom lib/rubygems/yaml_serializer.rb spec/bundler man/bundle*" : "exe/bundle exe/bundler lib/bundler lib/bundler.rb lib/rubygems/vendor/uri lib/rubygems/vendor/securerandom lib/rubygems/yaml_serializer.rb bundler.gemspec CHANGELOG-bundler.md LICENSE-bundler.md README-bundler.md"
end
def lib_tracked_files_glob
diff --git a/spec/bundler/support/shards.rb b/spec/bundler/support/shards.rb
index 0de964017030b5..7ef9a190361d84 100644
--- a/spec/bundler/support/shards.rb
+++ b/spec/bundler/support/shards.rb
@@ -42,7 +42,6 @@ module Shards
"spec/bundler/env_spec.rb",
"spec/install/gems/mirror_spec.rb",
"spec/install/failure_spec.rb",
- "spec/bundler/yaml_serializer_spec.rb",
"spec/bundler/environment_preserver_spec.rb",
"spec/install/gemfile/install_if_spec.rb",
"spec/install/gems/gemfile_source_header_spec.rb",
diff --git a/test/rubygems/alternate_cert.pem b/test/rubygems/alternate_cert.pem
index 55303190f5d81d..80b9a2a932baa3 100644
--- a/test/rubygems/alternate_cert.pem
+++ b/test/rubygems/alternate_cert.pem
@@ -3,17 +3,17 @@ MIIDFjCCAf6gAwIBAgIBBDANBgkqhkiG9w0BAQsFADAtMRIwEAYDVQQDDAlhbHRl
cm5hdGUxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoY
Dzk5OTkxMjMxMjM1OTU5WjAtMRIwEAYDVQQDDAlhbHRlcm5hdGUxFzAVBgoJkiaJ
k/IsZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-pebGm7NOnx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0AnYNiDZAG3J/gFQmYZ
-9gJ98rzEwfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SFC+1f8KVuH4tLXORW
-30DwayPhNxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMKqaTTPjxoXJIcgacy
-prkNgIq48cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RRftEwktFo8vQgDBo9
-NT/EqoE72tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgOQSXCGPsM/AEdFrh/
-LKQQv2M/M7WNevnEUgsEIwIDAQABoz8wPTAcBgNVHREEFTATgRFhbHRlcm5hdGVA
-ZXhhbXBsZTAdBgNVHQ4EFgQUYPwS8g98+4Tq/8gcEK1iilkGXH4wDQYJKoZIhvcN
-AQELBQADggEBABSKUFmTk53+yrVFT3TvX5iGgXudNdACQqcnknAg66Q8+wMA8WT1
-M2oZJIH4SWSKUGMYubpYuc53tTtMnR594LPidyNbxo8KXMYoNfEkZCk6hh0eKVdx
-zPJSZ4fOQ4mKFCd7HrycOr4bxuGPTVQERYJ45vZnhvVJDIRMgshnQuivP3VBwXkQ
-gKLTCh2ew2ZJgPi1dfqdNMMSw7k4OQtQVhwbAkHgwL1TUShAO9lHzxFHlQgssfR0
-f6c89eB035Vn9s21StjerTOlC9+v4hOO7QhvbsCcUs2wWiE1BWo1QqnVBCjGKyVE
-fISkJd1Sn5j+Vx/NJ7EfZcOGGQMdxHC+c90=
+w1JNbNmBLCW7Cw6lZePL9d3gOi7ZoNSXEu4v3d1b0oMLuG1k1KPbB3GcXn/4T2wZ
+ciuItuVlPFAvboxXIa+Ym9K2prhG94VTAUX26l9/ZO6dqZACfOMK6ZM8ObY7QX9G
+E/DYHtRkl6DFFY1NlFBqrsWvCDFmmO94XeKC+ANQDMgg3Hx/UO/OVRoczcZncE0g
+6kcyxKlN2Sb0eu7LPeX6QbQhUqbhj9Vf2wom3uvy0eSyESS7YFOQSotkgdFCUk7z
+r17aHco1tnyh9S1sxNNaG9II1/uET2Xer/JierXrXbui1vIKelfrWUqGWvZQqJVl
+iG/WAy/8Mqf/zUqFDNKjSQIDAQABoz8wPTAcBgNVHREEFTATgRFhbHRlcm5hdGVA
+ZXhhbXBsZTAdBgNVHQ4EFgQUPHEhRMt/+2vNQzsJIr1VfuRD8yIwDQYJKoZIhvcN
+AQELBQADggEBAEVErszzPGB6raXPlBRNhZJKzXZSRNBG0lR3th+we1W1loW1udaU
+pT65RDyRB0CoQ1e3JneYp5/qfXpY2lXk4RryMF0j4Ze9aqg0gqO97deA9Lu7xlr6
+Th1KXR1f8UXgKbgGS/hhw0AhF/4MM6HXu4dJORdRoQtM+GvSNPeDfLA3keKrXL1W
+WUgv5zC3xjm7xfWTv/zLUJhNNemQDPVfQzZoNxygp1tZVL8za+4ZmN8dGfc/GJur
+wM4mCj1Z/7NDYRoscAXsKgIsHUGa4dJPfdC8x8pbrOrnfbvtmRDcwFiyNGaTtu5p
+NUZUbCC0MqWI1pcW2VytWBuxcRD3J3IPv3s=
-----END CERTIFICATE-----
diff --git a/test/rubygems/alternate_cert_32.pem b/test/rubygems/alternate_cert_32.pem
index e727189470e0da..c3a8cc9e9a2ed2 100644
--- a/test/rubygems/alternate_cert_32.pem
+++ b/test/rubygems/alternate_cert_32.pem
@@ -2,18 +2,18 @@
MIIDFDCCAfygAwIBAgIBBTANBgkqhkiG9w0BAQsFADAtMRIwEAYDVQQDDAlhbHRl
cm5hdGUxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTEyMDEwMTAwMDAwMFoX
DTM4MDExOTAzMTQwN1owLTESMBAGA1UEAwwJYWx0ZXJuYXRlMRcwFQYKCZImiZPy
-LGQBGRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXm
-xpuzTp8fg7VhtcULCQX038DZWb382OtZ5WXHK4VOr8dAJ2DYg2QBtyf4BUJmGfYC
-ffK8xMHyzAhqvUf02TPpQBGi4c2GQrt1+EHYSsa9cWf0hQvtX/Clbh+LS1zkVt9A
-8Gsj4TcZ6zr7qeKVi4mLl1EmaVfQhjLz0lAltqHYTJATCqmk0z48aFySHIGnMqa5
-DYCKuPHEr6lhv3vx6zEbZKrxWw+bWtNLjtZpaWo2GMNUUX7RMJLRaPL0IAwaPTU/
-xKqBO9rX32g5y6uq0K1bcOCq/X8u++Q4zQFl8oggY5yYDkElwhj7DPwBHRa4fyyk
-EL9jPzO1jXr5xFILBCMCAwEAAaM/MD0wHAYDVR0RBBUwE4ERYWx0ZXJuYXRlQGV4
-YW1wbGUwHQYDVR0OBBYEFGD8EvIPfPuE6v/IHBCtYopZBlx+MA0GCSqGSIb3DQEB
-CwUAA4IBAQBJeq9kniAdddOY2r9MhRYb8/rzWL1mcCgbIzkwXCTeOyVt0nWZZwAy
-arEy8ofkXt1O3Bm+59+dPORnG5WJeBGVmGDHo9HxDjm4dgTramYqgtxbthmB/pu+
-QhJ5DQg59odomoRRG7dkqacd8GMdcJVYcb3OzV3Fe5v2gtvnVPZ711APtjZ7sZUR
-4XBA+ok95QFeSUYo4WIOCHh16pPtZ9ium5SZ7ChVVNj5rthr+sS+rQKjEdjG510w
-UOkg8rUjEvXPGjM80/DnOvzyRJvbcCWBWWHquft3wqbjTomnQtqHne2SwRFEyfpd
-JLEuY9QtEUCUy7obccN39+nT9jUOyg3B
+LGQBGRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMNS
+TWzZgSwluwsOpWXjy/Xd4Dou2aDUlxLuL93dW9KDC7htZNSj2wdxnF5/+E9sGXIr
+iLblZTxQL26MVyGvmJvStqa4RveFUwFF9upff2TunamQAnzjCumTPDm2O0F/RhPw
+2B7UZJegxRWNTZRQaq7FrwgxZpjveF3igvgDUAzIINx8f1DvzlUaHM3GZ3BNIOpH
+MsSpTdkm9Hruyz3l+kG0IVKm4Y/VX9sKJt7r8tHkshEku2BTkEqLZIHRQlJO869e
+2h3KNbZ8ofUtbMTTWhvSCNf7hE9l3q/yYnq16127otbyCnpX61lKhlr2UKiVZYhv
+1gMv/DKn/81KhQzSo0kCAwEAAaM/MD0wHAYDVR0RBBUwE4ERYWx0ZXJuYXRlQGV4
+YW1wbGUwHQYDVR0OBBYEFDxxIUTLf/trzUM7CSK9VX7kQ/MiMA0GCSqGSIb3DQEB
+CwUAA4IBAQCFFbDq4+btZ7YvLWgNGKtiCFOdaumAlbpI8WbhB4dBPA7j8D7kOdoa
+Rb0fsFmw/Klu7CId4oLaaG2fMwzShm2Kgl7Kp4TUHX6STI9T+zRa4p7dfINW+xFC
+TTZRerU++wnDRRTTQERmT9wzwWdXjgeN84T/Ktc5BmoQCuKMxxSCq+26+wSXncxn
+tZ/6+5jIcpnO+BqdzoYeveI22Wr0cWGq2NG0QlGMGQr1dNfnfzD9FjOgPUQs2I/y
+48+i1KTibgvxq5coQw/VfBwrE8aA2sEcHrz7yo2f9pud71v1UVB8jCCdYeJ2Y+PL
+H8bfzw21G1/51AWX0xKRij+YshWkKreL
-----END CERTIFICATE-----
diff --git a/test/rubygems/alternate_key.pem b/test/rubygems/alternate_key.pem
index ae587b34258050..7ad67fde5e52fe 100644
--- a/test/rubygems/alternate_key.pem
+++ b/test/rubygems/alternate_key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEApebGm7NOnx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0An
-YNiDZAG3J/gFQmYZ9gJ98rzEwfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SF
-C+1f8KVuH4tLXORW30DwayPhNxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMK
-qaTTPjxoXJIcgacyprkNgIq48cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RR
-ftEwktFo8vQgDBo9NT/EqoE72tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgO
-QSXCGPsM/AEdFrh/LKQQv2M/M7WNevnEUgsEIwIDAQABAoIBABB/S16uTPIr2xgN
-WFr4xvPtrtZphrAK1bNJpDMjxCMkePxSV9gcj6xBM2ppEnTQ3GIHS2j49oPm1f08
-SAhAw9ySpElcriGW6Unk6EP78yuiKQXSXeyatUCj4riGTH83QaA/v+iXj8y/6hFa
-d0FN56tM00ZBkJYn6UBl2JMZvPiI9cdRO1KhhK4+NZrKg8jdRwjJe9fxo31xefpr
-jNqyx7O06hzaVfMt5jUi5qSc+/1EWJtXlvCyuJJCjpEay6ePUP5eTi/hQpwfaO82
-nIRXolwg7TPxg8rea6WQM/x6Ec3MWYUflJUdZbKDQQv1pyZR62T7WHNA1p5jHMzq
-MW3kctkCgYEAxhnT8+TZG9sF/fQro0JZnKxnZXjQ9ob7vmvbyBgHf2HzrY716UkX
-vLAHrykgqzZmIlWATayCryr+CzkaXu/xLrS0IMmjF//VlFjlob6OL9n40qrOW221
-ryqNNaKkMmm4c4N9D1rhsNH+vVQoeEDkHet9Pll9ilB2o3ERapMfBzcCgYEA1mO+
-iJLf7y1chmpwMWLFrK4hjPK6670K4UvDCfX6517xHtykZ05lZQ9OQLjjDsyG8Uub
-H6k7KxCTV+zxLQDcUUEh/UbTb6eMhh2HAU+Bym8+lWCIdl8qPouPKz1dc+rImRwC
-JE7LtxbyHXv67sPL5/7GhmdCxThXQvjH7fP1CHUCgYEArbj4pmmJ+2OXXZ1Cp2kI
-LN0Dz3ijx42YNuVfV5m6+Xpst0cnX+05Y776/iCTBZIu/uz8FyGxeOu63Ry2g4rn
-do4BaL9qxyETq4RJ3A2/ozcDfbtMO+F58qLeMqruU0di+enVQiHwyZ9eRaoH020U
-nyhkLMlNzn3BjJMbMtrR2wECgYEAm54tSI9sUv2XQs5x/7cVi6GeIuRyP/mpsx2+
-RjWx2U52MZOxFne2a+PvRlWuIyjc7ruVrya1Fy5h9Zm8+pC8W5KurF1DzrFM9HDs
-dUwUBzA2ulEm3N15GYtN8fIKKsEKuPC2sUos3wqd1j8PR08CbLTnv9mmgufBl5Bj
-91p0y50CgYEAsD/KO1/BTJWVFAXoPgde4Fmt3vQyF7OYkOI0EEIGSVPydo8ebNib
-cozGB1H0vhuvdrysi1Oc+uZ2pL8gpZfdYXbmD9cScXL+pP+GUmKKHTKKGAeQCWpv
-2M3MZEjqOGQrqY50khXUDi77H1sAHMIBQ8yF6mdb+YU+OayRwBZmHiI=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDDUk1s2YEsJbsL
+DqVl48v13eA6Ltmg1JcS7i/d3VvSgwu4bWTUo9sHcZxef/hPbBlyK4i25WU8UC9u
+jFchr5ib0ramuEb3hVMBRfbqX39k7p2pkAJ84wrpkzw5tjtBf0YT8Nge1GSXoMUV
+jU2UUGquxa8IMWaY73hd4oL4A1AMyCDcfH9Q785VGhzNxmdwTSDqRzLEqU3ZJvR6
+7ss95fpBtCFSpuGP1V/bCibe6/LR5LIRJLtgU5BKi2SB0UJSTvOvXtodyjW2fKH1
+LWzE01ob0gjX+4RPZd6v8mJ6tetdu6LW8gp6V+tZSoZa9lColWWIb9YDL/wyp//N
+SoUM0qNJAgMBAAECggEAR/nvwzFhuvmKdDgo9iOcORXSt84k73H33Ad/ByS33hrh
+ekyBsCRTpeoVY/OHdwkQVXS6dB+Tj0bDO9smjqjNNXrQSR62NCdi36C/LT4UzYZq
+/h2t9QSbtFhIBMJlEq1KjzWdBrtg+ElL5zXDhWie75m0dvHxa2Evu3UpqyhZWuPN
+g6+ORLDKSXy1cJS/vBOdfDbmtNo9RGXsGuEE9xhSAgnQeHm9AZbDl6q/8wlY8G/u
+Xh0JKdCjgtHNG0VrNSoaQJHKgJiqahBti1ioq+yMxDoKuOX+j7TuV7AtINtFzkg8
+IQr8s2j6uQS8iy26kCVmxNxlCDJK23A15hwAcQrOOwKBgQDxTrF5+5WvEh2WiYjV
+p1BaOYv8TPrjrl1FSQJ1OxQLc6ue/XVTGPpvsg1TM7JHx6xGCJtkNoDi1QLdSBTs
+YdGK5bkGVRBo9tJdU5YE5TraIljdmVg2PFDh/OIn81C0HiATB13aMHcFONfG0Loo
+e9fF3VLgFPAP8VI3xaX9YPS8CwKBgQDPNtFVb7w83XUyp4qHYgNusdRiPl3bdedz
+HX7Lk5mLQ+NZm+vRaWEn5ucBThFO4lVPQjaSPAqfN9uqlOsVMUp3NnVTSM+7QuBA
+9JFOHo76mZSn4Imly1hh84Xh03wQFIXSWx5cDXX2d4uQBoes6sKbUHKrb9QOAlOp
+veCCuHkeewKBgEN65SiekUpG/500Ut6kjlTc2OeyQ0reXNjeROCxp7ZYH3szl9ao
+GoiXuyA0SbvG+8cN6x6IG1zTgpyM5sT/ydBU03wQ16jytPtCP6aYz+9mQYGeu0tX
+bKr1w+y2HzBvaDrKCZXVjcMZFUZU4molz75WWTGuyT88Fejgzb1gmq/nAoGATwXH
+xT5MWiXWiQ/Ny518U52rsh+4qXYIYyUvcrGCT9L/A/BreTwn2hC7rgq4nQ3BnO1S
+ZGhTYK7rrd0G3dkjXd091xogZni1ju/17gXHXxhs0azWsYyf0xMMzrdZS8SX2EX5
+iP91Kh4i8jUbTr1ko9iFMo3+H62RfF02HoP9ZLsCgYAwUV7JugM+vlRTHU1XhuY2
+YvNOl8kwYihyLH5xLGoaj1Fye4fQdZkF1ULSdGfxJKDnK5P6jIyD0KnizNmev4X5
+MZCm0p+/yxgtQyWpdZ+KBYado/MvO775bD6gEz8tTp1hd2GqVFJE1mbIxymN4Psv
+mTt2nuHoeBWdnBcp7ufoeg==
+-----END PRIVATE KEY-----
diff --git a/test/rubygems/child_cert.pem b/test/rubygems/child_cert.pem
index 26c916cf96ad64..593d1bf9e03c43 100644
--- a/test/rubygems/child_cert.pem
+++ b/test/rubygems/child_cert.pem
@@ -2,18 +2,18 @@
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
-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
+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
-----END CERTIFICATE-----
diff --git a/test/rubygems/child_cert_32.pem b/test/rubygems/child_cert_32.pem
index 4e2fcf10df3f2c..3082b0e1e716fa 100644
--- a/test/rubygems/child_cert_32.pem
+++ b/test/rubygems/child_cert_32.pem
@@ -2,18 +2,18 @@
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
-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
+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
-----END CERTIFICATE-----
diff --git a/test/rubygems/child_key.pem b/test/rubygems/child_key.pem
index 61fdfb628e3ce0..66bf52dafaa6b3 100644
--- a/test/rubygems/child_key.pem
+++ b/test/rubygems/child_key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAh8sYiI0fWZt7c5zHPDqgL5uYdeAwFIp/tnqtR840GdX8ZE7T
-+ItOYnqaRy08XyazPZh+R+rG9zUjbV/y+6dtvbTN6J/FD1GUae6g5hTU6YHUW39N
-2SRQ6dzE6awPOcKvvoHOxjCOqkB4S7nN4LIbsuIhc1X61hNDERf2lZBIh/dYjVAm
-d72U2oQxv402n8jGJwAxPtupo3yvMgqEwOqmJ2EKzD8t43K9IN2mpOfs+Rp+eaiC
-ZJWgF1e7wMqDYGCKujI17PSdH5HnWVsCUxHwGq2Q6NrPcBEIuzHD87+B5jQdx+iX
-ybAFYGg9FrUHAFa+zYK9uJSMeADGO5KBmsg/lQIDAQABAoIBAA9dClPKuakK9xLr
-wjvdeymfvkZZ3L66M7xa0VeOLCVfKTzVEVTtt+ra6bETXGD8kStvIRx0YtntvGof
-wK85sGgV+HTw/Jvg1DyO98vIQBWCL5tBgjaGzhPDe1Dfu2JC1VzltVYFgOKgxCt3
-JGSfahRZUsUIjYZibARXVHnz9szRJFYg3lzBcVeCMWDGlPVydGaV3ttrhs4cFgPk
-1TinEH80K9GfpZvkH5/4O1E2uVFetSLONRQiTs+WXpx9flEXP+mNwdrjECI6xvIP
-x7pMfIo9kI9XniXXTvbGdEIeVrOL5OpW/nBCA3+EsL9S72TBVaMuiPTqUPlxA8up
-v/oS2qkCgYEAu7Kj1t2M+NJtR50wQ2g3efY1qO3dQ41SCnoGEWJd/17riNV3u7Xw
-FwPpnpcQAceoctK095JTtRTFGRN6FPl0VWuEsCS9lnwLzS7mQXiBg5EO7474v2Ki
-JPgncJefmCbtjJwaB78l+ybk9iUkdRv80QCHqdeHA5CegbsnDGkcJSkCgYEAuTUx
-Tfd3zpIEz0qhUf1D4PpgtoTj1zbXIUEFWl1SkLqklTF7k4LXZoWj7i3LraFk+jC2
-769qkLzF0CTHRFr5d00v9tCDOT5Sv2lqJw5UAmouKSuLF7XBp5tAkICkFX7Lo61v
-4iS2HtpK9wzri+L2XnDD3bxcHFHsEaxuD0V6iI0CgYEAp6Nsa4pizxT53z1IDtw0
-uCwrTt5rgVrlzE+hvcMSWvPG/+ZQUwmzDotDC462EDDnhO4mDPvW4WNUign4PmVx
-/pzR3JRj89SEodRieFUNr5lOMq2KAz0vvj8Y0pnJQ5Z5Ed2V7hdN79uUITeZMTM3
-AOAtSochohB3UTz7Kj1ykskCgYBPXZAHTSi2CLSu79g5fkJ8Qk73Z/MK4qFFyss0
-chFTm+ezV0URbVxIvrQE+PLzMNpIrF94Tr9nzr0l+Ny7WhDVIuqO5cOV4DMte0rV
-+bneXwnw8ovkWSrnXAxK4BVwcKlrNoNfcUPp7Ll7LLozc8sHpWMJvhHqwOBcont3
-Z9qecQKBgAiiWHPgMKChKDg/JVQGEqILF67c7ZuzBMtUHmGNVn8NNr++NXZ4YIRB
-/TgYNXySTgEuD7tUE6B/iO9Mp1CpJbzRtdk8oqJlgJ4rza50N07k/SGIIWl7hAr8
-No1ibENOfw7aeMKRz3udLT50TFoluykWc/m1nJEaqtSEJLkBRM5c
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC68VMf9g/hrskz
+ypXMML1PFYaEAIdSj7tExYFcAi2OFnnk7km/tZAcr9WPna/aWjD1v6mI35JPOshq
+8b6dXq74izXodm/bfTPYAMXWgeL4c5J+Gw+GgIbNU71ayyd0LIiwpdQZNHhlX1xu
+7+ki7BfxZceZTc7cehjqX21Kzq1TvpnR++N/7lyAqrcEI5bOk/EzyiT623jA5AJD
+7kAoHREaNmw3h4Eb3tpSJl+3Fx0lJomCV/PFN/ooXNJpcIe815qNW4tE/E3AanJy
+s0XGhDuzoriVvyAzF8alTp0iiDVITqURplZy1tb1dgWZzHbAmXB2SG+K+iXVFYeo
+X/weinAtAgMBAAECggEAIkpSVk4/BwVV1DlwhUIac3duE2f6an9BWUHGMu+WVhYS
+2VaJMhBWhSCOspd40ntROD6mFRx3XK+aZB2AOqMLwrzcUE3rQi5C1Hf90hVEohCm
++hkyHZiVQXP/C3iwvbtOfmKIl2/7tpKJpLK+h6CZWrbx6BGw5FnEGLeU11A2VGIU
+08L+0X0+A1aEPYtd+m3EbD8XPCBzlCol+aBUv9oHjEDYPx0mzxMIjU1Cdj/uPXpp
+htjwDQC9tZCT11Ya/Ch4/MroNTfWpwl+C7/0Amdj7eu3AnY2+fxWoK1KqvtH5dA+
+R3pkDUnWK3ruxnFlSUxjF/xD66oG75mpsl4vwtPBcQKBgQD1JtOZIA2752BO1T6w
+sOUAuMLogRrR74KeNS5GTEai4wCKMDM4VkDzrDVKXnYkXGz3dkZ9FM3m55rIU4mO
+vgOmDkcHSv1VniphHQBRQ2yf/XtUBCwZ0RKtSXqUF4nupBkq5ftSRktdJQ4tDg5z
+66BIqmM0P653KTK8IgmYUILs0QKBgQDDNxWESHC5X+HhjQuMyl1EvIXNRUKb7vBy
+UIPRis/+/kYKfb7nBoo0hOfUhE2WyfTv8HhH86pAGFPTbqMMea2PsBw4Hm6KL+iH
+wSrcJGy25OOt+IzCkA3pvG1K5i9T4UbDEOwkm9aPTMkux6HtivZC9Ng3d72fVfuL
+e5thLgj0nQKBgQCrthZgGuODyfzbOuI+QKkmaEOdN1Dh2zFSP026T5LqZLXsFPbL
+bx7vjp+FB8UYkuSAMIgO9JOEOJVh26FuKgnENhvqL8xiO/bTLs0aHm/nYFUR9Bov
+uxGp7t28/P/P94DpW009w57mDx5u0HmvGEucmjwCTNiW/nRa8jxmQ35xAQKBgAjM
+kNG3mi0g30OVYfHkpTOV88n+1zPEH15ntqlZQmrR90I9zL8JEm2vl+uCUyT60WmH
+Q0Sq/P+KmSysjfjf+yzA2WTGKmFcK3UDBfWKRsQvqPuMenvCln30mlCH85YqT1A3
+kQ1NYOxwn5jWMrxMSTFXa++EHC30aDQvTB+jPZAZAoGBAIIFBhAgm8yh6VM2JSZn
+819+OGuT6lvW7PWhoVaOH0cfrWm07ljBF5vCRfAlwY6R4k2ie6Poj1eQTguctaX9
+MwUTbMqK3ItsQ0/ZLN/fG+lLEbfJoqtHKHPaIoYLC9e5q3TbPyjy/9hI0i0uec5j
+4H4xUnsJ7hwz+1YUR6RPHWOu
+-----END PRIVATE KEY-----
diff --git a/test/rubygems/encrypted_private_key.pem b/test/rubygems/encrypted_private_key.pem
index 2d0022a6c005f4..ac65aff030752a 100644
--- a/test/rubygems/encrypted_private_key.pem
+++ b/test/rubygems/encrypted_private_key.pem
@@ -1,30 +1,30 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: AES-256-CBC,4851D8D265711252BA5EAD983C957412
-
-0CH43Il/Lamd5AIkeYFRdCLJUUiUAEuAlE+DDYJ+Schulv9Lp+Au00VvAH/VVdqP
-jFzEJ7FIwcPac2y4SVSa8uMGdzezVhduMz3yrwWNSUPFAJCLazh4FhGMmK2kYRfx
-IReEBebwr1x+e3VqoREfTuwxQqpA5Ho7dgnrzSf2UeIQrnXfDh1rIn3SCqb/xYDI
-qqQ9bPlDs9iY/W24KM/ZfWOB/Dr6SQXXVDu1JS8EAxB9TK4PRMHZIBlIN+OVzju5
-v7FDysTu7g2BTH9BeHs4lWFpsUdJmrj0GjGoM9DCH/6xdPHQSWKpDptFu+06htBB
-zyr2chX5RMjlPxApqtz59YJaHLNhI/nABIAJdEvAgG3CAiYHB4G+X5kQwIYryJIt
-IeD8oerxNtNOVzunGL/QvYyiLB9EcDEBfPUIlriPCpTFz7r/GCLO2wX3y0u6m631
-rh/tVRPMzWTSd4HjJiBQZU/d2bVvdOKKY12b1ieai/QiaO7HjgrcVAgWLwJB8XKr
-QkXIo6W4uZv+W0YVTVQ5lPfwdNY6eQ1ZWPnqIOoczAZtFbs3zdBobgoIjyQ6cEgq
-fgRsIjJmLVYq39F2oDX7bLdUK5UaPgHWGbNi07cOIn0hqo6YNCw1YaQikUw4qfBb
-golYKoSV73/M6IVWlTjuzP6CRDRHY80epQjA3FR9P7ToT2VgcsG+pKxoYjZxotGm
-/E4PEEl+9lxNN9IXR4XuEzWSGTOiNUZ+iVOJIyNQN5tC8k6yYr08s12b9LVzvG+q
-Ro/bD/3UNaDwfujoSNgwKelZPBZmSkJIUECNDXE2i4hr6WqoJu7ZhpO5f/iU5d+i
-Ea0bbSne50zlYoIMIa7YG01zgI5Y+sV8BWSwwK+FaH5dORjpRUVat/yIw/Qx8VZ+
-f9RIfMnOShf5zvXIX8pF+Cayf8nPk4X8rhwrd+gL2cthHlYa58DkfKpJ4FxxRItJ
-mQ01K29PuQPYBdTXN0A8jurxQgETdM2R0JrLCnDOEleshUJqdsqC69Le5Sn5ucui
-ZWqxHjm+ycF4OAO99oq1T9QDyUCtIkMXPpf982KYVyzEbNw9hEr5/0CZdCaMEL4M
-gecBM9rpYeWy0ndmZ/Y9rBdTT6+en2WnONKQj3nCgL8e59y9S1VG+sgQ2LwQ2nxJ
-Mj2CeFi4B4D+2JdqyDKRFXfGKmzLIWW5Xw7/rrnMc7NtWZjRmUkvAOk3ILC81AmY
-QPCEuqju5q9hasKfIDBnB7/eNscAvf23Aa/P3A0NBTPcTko+M+Pkpc82m4eXx1Aw
-MfpfaIcfgPI4LEo+d8IfT0zcPNDuH9ACCcYa8/4q+PnKCmOsxgZ9wGpRHOQ2QfLR
-qTus6c0l9zab8EWJZBnQvuacUecU64OAryP3QAWZl/NerHsKZ/i9ZIDXtDIscCHl
-Yylu68l+vBZmfD455QN3iPVqSm4valJTGZnk40STtf8qLAuXdVhbyI921yGIz63n
-dcRx9+wd9M3VQqmvbrri8FuavTn9/uMMpKeOeR3AIhci8EJdLxhvz2A3+w9cxIO+
-Imj0syk5TWH0c3menzkYe2cO4P8jqBsb+QRdNcA2+YSTpEsvS7Tqvogl/RWnv7r4
------END RSA PRIVATE KEY-----
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQszCZ96lQ5i0t93po
+J0Hm2AICCAAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEELMyH+FB4sJdrb7f
+XiBAu5EEggTQdTHLO/rEYXwlsWLdoY8QfqjP5o7yxXffCedXq8tCV06KoUDKj2l8
+xuQwvlAwzojVDy02IGpPuOuLgYpaYpnCpsnz5pcXkXTu8hx/lPt4sz9DV1W783b/
+kBCkEG2T8JXrMtOX0WjuvhljhW+zWS8GchFSe9ap6tg794wimGz3tvGgOTsa+a/g
+G8lUlCJMtxuBrdhdm1QPwN+BwKlYC0rQJuRqtoJNrrsf09a0MJYH9uhLUcER+t8o
+CYHY1G/cMLXa85+CyAy6gi73qoDUaWNRwaVfNnzttJ74bNPs2vNmcMkKqpOtGF5N
+QpDq2Lbc8/er4XmRM6ZsglpycrbEj5DSPFZLL43EGssPAQLR6fCiHOogB4DopeHQ
+eFdQy1a7y+Gwp5IOwk46ZvAIai5+7zA7ZEEfS1V1bRd9lfnAA/lCA+VsL81tS3vE
+VYYsWejCEqYXWvOGt8Fh3KGwfv/t9X2xWh6MRqjYRv3uBJJUkg3Y/5atc5yZbALS
+uAQA3BJilPTMv20SJRw/PTFm8I3/AV7LLaU7c2TiI9pNyvEDoaRxyRhTWGPpR0eH
+4FioK2Wg1y0gm0FxUq1vHbNbE279kadQ/bg9/kIqohxp+prrOest34gJuHGy6azY
+CawkjPhTpWbGQBClPg1egB5/nUN0b/bs3UxR8UU2rFDGCHUAmQEn/uElW3BymHX7
+hnW6nQ1+JZjRjsO/X3Qt2I2UgJuLvwCPSplMRV79I46vOFfaoo7YgK/IFlunvuVU
+ifvQFmWXONcZ0FuZeg5O+Yo3ek6dhLD9Ovcju1IxzKp7OiYYQkALMv2dyQF3XYW2
+EnfT9o7LoGiW2CzqANHLYtg7nRPgTSTEpcks0Qn3+OVaDb3FrwxjTzIJzZ7Uuq0r
+b3eztoRy7FWu4SpgDQyDgmhxPSnknDaWgDGrOQRiyR7qgzrVoOrS/uVcQHPx+rpc
+OeihfyKUrMOpRjGTazjjSOPz7Yf62IJFpy8YLv+q7dE8TJrKy7kaiWQF1qEjbv4I
+R4OkuWcspK5npqwbh2varpxJf/KftDktRJdI1ppllvodK2A7asg5TMIBM/mcUwDx
+zUvtU99YKeeu1gbLJsKnz7dsuyDqG5/ra8DbD8K9XcaWStpWXV3KGLB8TVdSjCpn
+0th5esRCBvoeNpmocx0jed+erqo9LhZlHnnxDLQIwcAqhu5ISWNmeYb9Xp6+2LeX
+VBhIPwzaSQ2jP8um2bvKc29NZSKT2U02T2sYXTO5WgJQxCxvf4jeuYmCdBFyULML
+mzbwMSfUbP+uKrO/sO5j8QlJefkmLNxPC6xByTjA4L/JL8h13Teu1/vB5NacvDUL
+fKyE6X9Iw2kWwzdxIBL9IS/FibBTTyxSFqEDM/9Ckc1sTpVnGCmRpIPQrBD0RBEx
+tN5cXlltW+pO9Vht579RQG6TfPkmvkvfoeJReirveZ/lWD+CWupBmFrhBN4Okftk
+3WfA9oxQLPtZsm37h8rOnVyAO49dM/fFTQNtjY0ljJdFToek15z8Yt/QfpcfdsHD
+futXKNEKIByxWBB353JvVzKk+gOFZibrWxMYtHTnhGLAVzXJfZ5y3OcMdn+oLjgh
+iArYfm25s7bmVHAsCLqEBqxOmy7VKB2a+KVfvmEUGsAGt4Wcod2pXNU=
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/test/rubygems/expired_cert.pem b/test/rubygems/expired_cert.pem
index 12b8836607861a..7fd7034dc0989b 100644
--- a/test/rubygems/expired_cert.pem
+++ b/test/rubygems/expired_cert.pem
@@ -2,18 +2,18 @@
MIIDCzCCAfOgAwIBAgIBBjANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTcwMDEwMTAwMDAwMFoXDTcw
MDEwMTAwMDAwMFowKjEPMA0GA1UEAwwGbm9ib2R5MRcwFQYKCZImiZPyLGQBGRYH
-ZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFC3H6Q26GO
-bllXTiJBeALUbouzzxaGinwZeYYhhXKWEcfA0D8k+22w/JyndeEYc29JxwjFNwxM
-/DyyQplptzbM1Q5BCcLNQaQhmpOryosjWuYWW1JUDGTG3nEg0qRCrtjwVoAU++Ko
-NkQboM0wFQJxkBns0J1sr+O5Ml73YzKKtdVWWvg89osxyb4wRxkEoa9a/b9/aiK7
-WoeQhF00cRKoa/eoIN8usTjzKsYudHUtEQWibD7IxWdY3nMntGf1jyLYi40lVUbL
-FFytWtlZGMVKpMVIOMMCQ+ex+ExGQaJrQF5QEqPq1L/BvXgTZkv5P6CS3YjBdVC2
-/ntfos3gMhsCAwEAAaM8MDowGQYDVR0RBBIwEIEObm9ib2R5QGV4YW1wbGUwHQYD
-VR0OBBYEFLEaVAlnRWACAtfO9B1gSonf51jZMA0GCSqGSIb3DQEBCwUAA4IBAQDI
-x70p19RI73Y9AEfBd0Wmk7KsZQyP55kjTAdaM37crhmClkUQRrk/Y2a0pXOhsrNI
-0YO7t44fJKwMu++1dxh/bllKbuOkca6ApxTb2IfhOejx3IXXWzp+C1F9pmG9q5QW
-0FDt//0SFZJIqDq9N+zFiA2z0MM1L7X/r29uUgAqkU7rsytKavHXru9EGQrrkxwh
-5dM5VI+pnJgk9HYpBDPwiFVd0yFelebqdlv/nnW11tVBMTkMloVYyhei5yZbWKFk
-f0Aj5g94+S107oRMyzq5e6lxQcJBhmKfOXqGaz2wue3/IHnwio9dMArayug9GLEr
-ycy6PubJImhM/dboDIdO
+ZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDI+wDC0tjK
+py6QvthKf7w+LZht1J7E+YK2lFl4y7+pCFKfG1M1UeyGkSktEFfZ7tMj71ohBdCm
+HYPUp1IVt3jcmKqm6s9l2QFlkC1Fc+gu1wBW9nj/kTnb5GaFh+y33S+e0Y5l5iQJ
+0Fs+7C6ODCBQ+v8a8GFukYetMwKQ7fllhuapcIQFBSmvG4Uauc5rLiLyNf2FS4Fi
+/3blOIR1qIKVdH2hiu3ARhK38UVeVGszzENBDg4okM5DpQ6d+wOXZLcN9WyUdPI7
+pxpqTBnLBdSWSMAUMClpe1ZHsyHSx3ZZezilFjAkuLk5mkBEN2KMurwWyK6CZTvf
+Xh92WPBsjlMCAwEAAaM8MDowGQYDVR0RBBIwEIEObm9ib2R5QGV4YW1wbGUwHQYD
+VR0OBBYEFIdQrNH1ebpR9I65ZJdbm/tXJ8oLMA0GCSqGSIb3DQEBCwUAA4IBAQCh
+V0M1jUPVFTzZZgZSWTN1lvnTy7e22AXfLylniv4+G2VSXwBG2Wx7/T2W7StD5yPc
+S7h2E+KbjzbmONrt+YnxP/BHzAAHdZahtOnXGC9/zxGTPAuhQqrerzfFgQjAnhdk
+5RAYJ+iDY/OQiAQ006GCLSBBNH0qRcoT7cb+jC+oiMhQ27beaPBVAYRfEYQDXr4b
+ERGuvGJRDen4usOZPdmF7ioOF5RXbB+rcJQ3rd3J0ElxP5ee25p0FnOjv6LJ6Hxv
+N2RQuLCN0p1zsC1A2WHklszE8rtZcnOf0RfY/ml0Etuych1XM42hIq0hKqD0TdRl
+jK0TQQzdxQDIkYH97l8J
-----END CERTIFICATE-----
diff --git a/test/rubygems/future_cert.pem b/test/rubygems/future_cert.pem
index 06e08bb4c6288f..1f4ff9b815957f 100644
--- a/test/rubygems/future_cert.pem
+++ b/test/rubygems/future_cert.pem
@@ -2,18 +2,18 @@
MIIDDzCCAfegAwIBAgIBCDANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCIYDzk5OTkxMjMxMjM1OTU5WhgP
OTk5OTEyMzEyMzU5NTlaMCoxDzANBgNVBAMMBm5vYm9keTEXMBUGCgmSJomT8ixk
-ARkWB2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRQtx+
-kNuhjm5ZV04iQXgC1G6Ls88Whop8GXmGIYVylhHHwNA/JPttsPycp3XhGHNvSccI
-xTcMTPw8skKZabc2zNUOQQnCzUGkIZqTq8qLI1rmFltSVAxkxt5xINKkQq7Y8FaA
-FPviqDZEG6DNMBUCcZAZ7NCdbK/juTJe92MyirXVVlr4PPaLMcm+MEcZBKGvWv2/
-f2oiu1qHkIRdNHESqGv3qCDfLrE48yrGLnR1LREFomw+yMVnWN5zJ7Rn9Y8i2IuN
-JVVGyxRcrVrZWRjFSqTFSDjDAkPnsfhMRkGia0BeUBKj6tS/wb14E2ZL+T+gkt2I
-wXVQtv57X6LN4DIbAgMBAAGjPDA6MBkGA1UdEQQSMBCBDm5vYm9keUBleGFtcGxl
-MB0GA1UdDgQWBBSxGlQJZ0VgAgLXzvQdYEqJ3+dY2TANBgkqhkiG9w0BAQsFAAOC
-AQEAATJNbSaVk8fM1uhqQnlBiQ/0TzchHADy+WmsbIbOiUAc8c29sjpCC4x0o5Gk
-Zn18+BsXUjfyF6zyY4wPABZp9SCDIxvLxP2QVmbCtY2TJeKV95c4mWEnrFcCqYZ/
-je13m5iLnAu1WqVjSbFn1KamTf25pfBd9mqgQVwrdJMGoviJC18LyKJTZs7aV+Bu
-tsF9fVMIP8p1Xu0Es/hBXFRwths41seqT0dYFszhwTCBC9tt85TTixWmEXpdyrov
-vLFULJg4ijn9YZeKMViC6V3zgHUl9ZnMlWdFpVZ6cf7kA/1acW1ESEZnARLQhvMF
-a1gof1D2Mj5k3AtQJ2TtPXytxw==
+ARkWB2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAyPsA
+wtLYyqcukL7YSn+8Pi2YbdSexPmCtpRZeMu/qQhSnxtTNVHshpEpLRBX2e7TI+9a
+IQXQph2D1KdSFbd43JiqpurPZdkBZZAtRXPoLtcAVvZ4/5E52+RmhYfst90vntGO
+ZeYkCdBbPuwujgwgUPr/GvBhbpGHrTMCkO35ZYbmqXCEBQUprxuFGrnOay4i8jX9
+hUuBYv925TiEdaiClXR9oYrtwEYSt/FFXlRrM8xDQQ4OKJDOQ6UOnfsDl2S3DfVs
+lHTyO6caakwZywXUlkjAFDApaXtWR7Mh0sd2WXs4pRYwJLi5OZpARDdijLq8Fsiu
+gmU7314fdljwbI5TAgMBAAGjPDA6MBkGA1UdEQQSMBCBDm5vYm9keUBleGFtcGxl
+MB0GA1UdDgQWBBSHUKzR9Xm6UfSOuWSXW5v7VyfKCzANBgkqhkiG9w0BAQsFAAOC
+AQEAn/R2fTgdxCvsOEPDyG5uRKivX/OX3uWlMoV6oParZ4dsWrh6SQ9xzVh7ckN1
+B7dUFy8OKpehy0c0mh0Xi+GRufj6Cgv/UoKcK6JfSpOjCFAo5mbC3HsZi7ry24UV
+sEDRVsU3AxmEl3DdxmbKiB00ouEv43TL4gj58cIfNXgW2RXRDhV1x8SGo0QSju5q
+PHyvc6xppJpKqcAYfbRoKOxLOMwmWyyneheAqWyxl/Q+RTApqf9m1jN4NPOkigT9
+UAMXZXeSczw9+aoFh17Wgp5spjL38ga3B/Q/8o8YgulEoEeuekE1EGGBOfOI+l7R
+gfiRLFUbYlxF2AL0KgvIGI5KFg==
-----END CERTIFICATE-----
diff --git a/test/rubygems/future_cert_32.pem b/test/rubygems/future_cert_32.pem
index c0231101414f93..7713645ad7abdf 100644
--- a/test/rubygems/future_cert_32.pem
+++ b/test/rubygems/future_cert_32.pem
@@ -2,18 +2,18 @@
MIIDCzCCAfOgAwIBAgIBCTANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTM4MDExOTAzMTQwN1oXDTM4
MDExOTAzMTQwN1owKjEPMA0GA1UEAwwGbm9ib2R5MRcwFQYKCZImiZPyLGQBGRYH
-ZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFC3H6Q26GO
-bllXTiJBeALUbouzzxaGinwZeYYhhXKWEcfA0D8k+22w/JyndeEYc29JxwjFNwxM
-/DyyQplptzbM1Q5BCcLNQaQhmpOryosjWuYWW1JUDGTG3nEg0qRCrtjwVoAU++Ko
-NkQboM0wFQJxkBns0J1sr+O5Ml73YzKKtdVWWvg89osxyb4wRxkEoa9a/b9/aiK7
-WoeQhF00cRKoa/eoIN8usTjzKsYudHUtEQWibD7IxWdY3nMntGf1jyLYi40lVUbL
-FFytWtlZGMVKpMVIOMMCQ+ex+ExGQaJrQF5QEqPq1L/BvXgTZkv5P6CS3YjBdVC2
-/ntfos3gMhsCAwEAAaM8MDowGQYDVR0RBBIwEIEObm9ib2R5QGV4YW1wbGUwHQYD
-VR0OBBYEFLEaVAlnRWACAtfO9B1gSonf51jZMA0GCSqGSIb3DQEBCwUAA4IBAQB2
-EjAxPVbDwoYehhEJEiMnMWk8GL6oo1uVwGJgCM76Yml69FVyWrre2GcSYiv+9f7K
-AzE9S2uREeJuGcSV0VR0MeXoHXwQpQyBV12gCL1eQH15oxFfTi9XbVLhh5CyTKc1
-J6lYtQVpZPlLRoJN3oBq3J8PN8hWBWuhb2VIrpHXNBXAMOZ+hJM2B+EYifH6tcI5
-YK/Bw5Tes81QU4stQTLKybJzQkct02Rm7bYIM3GX/FGMMEPZE4jhnQ5btSNYVBlY
-HXh6qfZVhZ8qpAy50yrlxROLa5zJSuTQ28QWh95XLzzHiHJ4Q4qZQzhcRGUQLfM3
-X6P8rtGWzXtB++CKKQIG
+ZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDI+wDC0tjK
+py6QvthKf7w+LZht1J7E+YK2lFl4y7+pCFKfG1M1UeyGkSktEFfZ7tMj71ohBdCm
+HYPUp1IVt3jcmKqm6s9l2QFlkC1Fc+gu1wBW9nj/kTnb5GaFh+y33S+e0Y5l5iQJ
+0Fs+7C6ODCBQ+v8a8GFukYetMwKQ7fllhuapcIQFBSmvG4Uauc5rLiLyNf2FS4Fi
+/3blOIR1qIKVdH2hiu3ARhK38UVeVGszzENBDg4okM5DpQ6d+wOXZLcN9WyUdPI7
+pxpqTBnLBdSWSMAUMClpe1ZHsyHSx3ZZezilFjAkuLk5mkBEN2KMurwWyK6CZTvf
+Xh92WPBsjlMCAwEAAaM8MDowGQYDVR0RBBIwEIEObm9ib2R5QGV4YW1wbGUwHQYD
+VR0OBBYEFIdQrNH1ebpR9I65ZJdbm/tXJ8oLMA0GCSqGSIb3DQEBCwUAA4IBAQB0
+0rfLEIYfAqxAalFSsnK6sd2VIu5Uz0LAKh8BF3PDGba7mM4d2W1Q+zHz7myMCJgL
+Zi6Zt1ZILStTHclPtCrG19pQdZ3eVWBSGsrcZ4xkIhIAsLV3WHsRG5uKcZP9o+EU
+oP3+r002cHBoLjLO4z4vDbpgbIX8yTiYf/SpR2FqgFnTHMagKdrynuMsM92YAAAt
+PKnqpF99o61Xg2H/dvkQnHDrAdem2mpANomGYBR6PLajfRBxd1j1fk7T2Ean1jX5
++oHtizUPMvlKS4ZkqKH+dKzgcsIdnbLyoU9iqGzih0qtscM1esLfy72T0ctDkWRo
+GjeXS0qx5hULIkmCSqce
-----END CERTIFICATE-----
diff --git a/test/rubygems/grandchild_cert.pem b/test/rubygems/grandchild_cert.pem
index c1d9887b60ab69..276f81368b668f 100644
--- a/test/rubygems/grandchild_cert.pem
+++ b/test/rubygems/grandchild_cert.pem
@@ -2,18 +2,18 @@
MIIDFDCCAfygAwIBAgIBDDANBgkqhkiG9w0BAQsFADApMQ4wDAYDVQQDDAVjaGls
ZDEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUwIBcNMTIwMTAxMDAwMDAwWhgPOTk5
OTEyMzEyMzU5NTlaMC4xEzARBgNVBAMMCmdyYW5kY2hpbGQxFzAVBgoJkiaJk/Is
-ZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyh7u
-lK+O7leQKBQzSSvhEur49Xu4sQJllkVbrVvkv2jSo68woESgljSS8jCSX0I9IJ5T
-0kHzNRpiuOpfWKZx7E4cKeqW6nmV7D/B+Iy1QnJbMzUdnxp1Y+CMCK0JrLIsFBnx
-ndVmiS/S817W3coqkmZqce4e33/O0qmCChGxGJZuAVQFGYI25SiYWPbysVEjwXoW
-6zO0D1m8QZLYYCeDSRpxKgItBoJK+Up+bm/nsrkFvUf4kAZNLgik5zvflM3/Mjyx
-zxgY2MO07YaULOlr0vZN6Wxnq2F3jkuZY8JbEOpQSDGSgU2wJ1iFH+GLvj7LsBuR
-ScjL0FJ4s1EjqjjP8QIDAQABo0AwPjAdBgNVHREEFjAUgRJncmFuZGNoaWxkQGV4
-YW1wbGUwHQYDVR0OBBYEFEuKocg9sisZIWu12gxzse+7/sHfMA0GCSqGSIb3DQEB
-CwUAA4IBAQAFaz3FUNzDYt/Cb++6U1PXsucAy3pKDj8bUW7slJFleNsSooIA9A5b
-axpnHst1Lt6i/bmvbi8F8q/0iq4PtsZvusmwVhJkCinEUZ9inddSJdxpWSyzOww5
-at8ragidzREd9Fx62flRr3GflzqIufkKN8TDjYrB+n45ijnSxDcwZhu7m/tmP/e2
-FxqODaIO9sVrPAU7YbXb0m3p3Em7RK22d0tqy1dHhcRIR5/yMQB4MSEvQ7ytRD2x
-aHAP7A4rDbkRwG+LQ/4L57RJ1kU3InqpOEQnCgpwu3xw/6Alti9TXS7sGhXL4Aav
-OLsFS/1BLSJx/DSSK58Vg6JFxFh6X2NK
+ZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjgsj
+aRimNm88bcLX6YGXH5fWqB7xzU82C6i2yVYpSc5LZ3pPkvKsYlBc0h5aCzYhqXa/
+96H7DMES3oBlPzh79b/qL91npSCIHd3IeGvw+g4GNndE/VCpOZjEUM5hXioo3Lep
+UUgmS2XY1JmfszCYox4HHqxpeQUvYWQKhVcJkyXG6c/MCJGnz9HF3EDby0ojD/nd
+HvoGHxB9KTsOVT+WScy5as2v+28fIUjQ2YK6FFMwA8QKh3WhGjRhN1thOl152TJ+
+ExGyXQguTrOtFNP/o3UbVEUiDtrp+3d0UI0GHlUDVr9ulvB+mzVSUmrc3wbrCHhJ
+GGGbpwst67WKjfSxNwIDAQABo0AwPjAdBgNVHREEFjAUgRJncmFuZGNoaWxkQGV4
+YW1wbGUwHQYDVR0OBBYEFMuHtyAfUjNghkd/FCz0NT7nB1uDMA0GCSqGSIb3DQEB
+CwUAA4IBAQAOYQRe/Mzrlx3D0DX8BtLPiUlcoT+Z+MNUPtmzDDm+JgCutl6HXSkt
+baLYEa3Ad2i1LzC499/Gwt/OL++pPBevX2uSGp7k2buZDaHn7/Uryt9fedg3IYpA
+R0njSYZxX4JZXbjdRZE7dx0t0hTJAlbW7/o2tIrCMgwrASDv5JJ4t+5wQHKjjl2j
+4NgAFryFDwfqzff2zj0FtErcaK5wVMaBA4woD73HB/4KXObWbGL6/lyC9pTixarc
+awppfN+IUbbOsPEPA6kph+1l0e4RPZwMdaqEnZqv4OrfaZCBQLh6tBKpjRGlvgSw
+QP9xUwqsB8NwuI1mGjtuTeRivyI+hqNU
-----END CERTIFICATE-----
diff --git a/test/rubygems/grandchild_cert_32.pem b/test/rubygems/grandchild_cert_32.pem
index 5d1ad45cb7b1c1..fc2f7ce7578190 100644
--- a/test/rubygems/grandchild_cert_32.pem
+++ b/test/rubygems/grandchild_cert_32.pem
@@ -2,18 +2,18 @@
MIIDEjCCAfqgAwIBAgIBDTANBgkqhkiG9w0BAQsFADApMQ4wDAYDVQQDDAVjaGls
ZDEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUwHhcNMTIwMTAxMDAwMDAwWhcNMzgw
MTE5MDMxNDA3WjAuMRMwEQYDVQQDDApncmFuZGNoaWxkMRcwFQYKCZImiZPyLGQB
-GRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMoe7pSv
-ju5XkCgUM0kr4RLq+PV7uLECZZZFW61b5L9o0qOvMKBEoJY0kvIwkl9CPSCeU9JB
-8zUaYrjqX1imcexOHCnqlup5lew/wfiMtUJyWzM1HZ8adWPgjAitCayyLBQZ8Z3V
-Zokv0vNe1t3KKpJmanHuHt9/ztKpggoRsRiWbgFUBRmCNuUomFj28rFRI8F6Fusz
-tA9ZvEGS2GAng0kacSoCLQaCSvlKfm5v57K5Bb1H+JAGTS4IpOc735TN/zI8sc8Y
-GNjDtO2GlCzpa9L2TelsZ6thd45LmWPCWxDqUEgxkoFNsCdYhR/hi74+y7AbkUnI
-y9BSeLNRI6o4z/ECAwEAAaNAMD4wHQYDVR0RBBYwFIESZ3JhbmRjaGlsZEBleGFt
-cGxlMB0GA1UdDgQWBBRLiqHIPbIrGSFrtdoMc7Hvu/7B3zANBgkqhkiG9w0BAQsF
-AAOCAQEAFW6StPxdeONHUmWXUAKXNncP66aaHPAk+rQ84IvuyJKqR3UrrKdCbQLQ
-LpL/lQZDkjGJSXdNHUhoB4MQsDJ8TQs2BdwDqOIvQLsZxTKZaXPfc1diFP+z/5f0
-9wbWezUateJwShDpp1RltCBmFCdibPZQUCpsgAsfqsgIWNpzhqy9dI/Upg3vECVc
-c4g+EsEtiNXSbjd0kWUXCGBAeTMu4paBLVtt81fuffKJfnAKRhzrfFy0PoL3Kt2T
-DkMr4MWfkMOyVlrSkvjPtW1oHVnxfZgqaE91J0Ht9qiHvekti3JDqxqcKaYuIgAL
-w9HK9z5uQA2KrMvqn/jiuD8lBFsnuA==
+GRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI4LI2kY
+pjZvPG3C1+mBlx+X1qge8c1PNguotslWKUnOS2d6T5LyrGJQXNIeWgs2Ial2v/eh
++wzBEt6AZT84e/W/6i/dZ6UgiB3dyHhr8PoOBjZ3RP1QqTmYxFDOYV4qKNy3qVFI
+Jktl2NSZn7MwmKMeBx6saXkFL2FkCoVXCZMlxunPzAiRp8/RxdxA28tKIw/53R76
+Bh8QfSk7DlU/lknMuWrNr/tvHyFI0NmCuhRTMAPECod1oRo0YTdbYTpdedkyfhMR
+sl0ILk6zrRTT/6N1G1RFIg7a6ft3dFCNBh5VA1a/bpbwfps1UlJq3N8G6wh4SRhh
+m6cLLeu1io30sTcCAwEAAaNAMD4wHQYDVR0RBBYwFIESZ3JhbmRjaGlsZEBleGFt
+cGxlMB0GA1UdDgQWBBTLh7cgH1IzYIZHfxQs9DU+5wdbgzANBgkqhkiG9w0BAQsF
+AAOCAQEArYO1ZeI10KQSc0mUiq++RRWj9w2wVE11ocld71DP6UyRLinOgSTM5jfJ
+LoNnMfswfEoRaUyUAGvr2EdBrQbPQafYf5ao5lrXF9vONT0OTyR7MfkJWxL7rci0
+fNKIHKJVxPtCkhyKPV2OKvNMkvuoNMTqsB2WSZY3fGr6TqJW23RSC2Dg1zvdbl0F
+L9icHjHF9cwZ4c5vAsi2iatvILHvmbT7s64fAIgwHlQHGE6/kCKyqJq3F4/htNJw
+EXFJIHwgkgZpoktQC6cY4CRaONkOCqwYLQsZ846M0ha3Ouq06YOKSRo+uGTm7yyU
+ccdnYZ0InEXVbbAA2r/4315/IVtviA==
-----END CERTIFICATE-----
diff --git a/test/rubygems/grandchild_key.pem b/test/rubygems/grandchild_key.pem
index 63635844b0d3d9..c60cfdd133e5d1 100644
--- a/test/rubygems/grandchild_key.pem
+++ b/test/rubygems/grandchild_key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAyh7ulK+O7leQKBQzSSvhEur49Xu4sQJllkVbrVvkv2jSo68w
-oESgljSS8jCSX0I9IJ5T0kHzNRpiuOpfWKZx7E4cKeqW6nmV7D/B+Iy1QnJbMzUd
-nxp1Y+CMCK0JrLIsFBnxndVmiS/S817W3coqkmZqce4e33/O0qmCChGxGJZuAVQF
-GYI25SiYWPbysVEjwXoW6zO0D1m8QZLYYCeDSRpxKgItBoJK+Up+bm/nsrkFvUf4
-kAZNLgik5zvflM3/MjyxzxgY2MO07YaULOlr0vZN6Wxnq2F3jkuZY8JbEOpQSDGS
-gU2wJ1iFH+GLvj7LsBuRScjL0FJ4s1EjqjjP8QIDAQABAoIBACI/cwQxKiojHqtX
-3ufNXlYfB//Kjr05j36SsonRqhUv3Q88umPRtRc2gda1Wbv35JUwFrpoD96F4cf8
-+Jp0G5YjlxyYIinJX9i35fVoXDdN2ru2ypXgvRbnH7tBnMPNLfBbBAiPNhBVUOyJ
-e6V5odSMM4mqBEOxK5mg/MaZgFVOrNf/DEI5oFSny7duEEQAuGJadJHUJOh7al0b
-lByNVNAYNkdZMgvOdoAoyEzg5tvY9ykIwXUKdMwBgSlldolLYXyAjluXOVEj32m4
-p3rEV/vs+RQFTLLWXfyVyWoMIPYaK6nNaYpB8fMHnIjga8MzBgC6Hso3HqymRdg2
-Gttp4PUCgYEA2LQL72tzhUb+a0wo7dWJ4MY0ekyA7JxrqZRTWSNuqKMoAb6IxaXe
-quZcpht/430szpOOz52pEwEEKUsCMuqwHiqmO2ZiZqYJpDQet466GFnhYhmAqV/x
-bOaZLVbhGjiMQCD5YbpAmXjxF8SFbkqSKlSnpjxJKD2tGNX5FFWpN4UCgYEA7sXt
-Xsf0XaPbISe2gYdXMO3exHplayt7C/wqjcxMePwtSwAJD+/JrFvFSiPBKT6Ajl+M
-dcJIb9+WHhjk5GJI7KU4AVpf4feu5o1QnpnSAzCUlXpldYwSUS/7LZALvABm68Iy
-2gHU1Aj5DYB/4nesWVhExKrMZDAICVojS5jCJH0CgYEA10SsIo9cN4ZZ0J7cfb7F
-88sRcHg1DlcowFG/JmqDT/ScFnd/CNCITL8ARGZG+eZsL1333RiiT2WQC7EeoxPu
-FlmJvrIriAriwwKfjPq0tOH8eeYZoKfVfbfpbFfEz7Zi5IWdFk7eQ1cYMOMhJXng
-jzp/PCzhA5+ZJ3XPtDqQGb0CgYEA1AuwPuECUfqHSw1yldt0gj5s/D3aPW+SydT6
-kYziSPti2d1BLwb7Kfch4TKZgyA/mLCgE6AjJj8AmN/wviXOr2IWt5Tj29BTYeoT
-s5XVHQISoiDdY6OuTK14ukDXOvF8dVi0QkkoEdmaG/SHHb67r2ilQaaQ91R0fqGv
-AJ67ox0CgYBxkRfXPCnljxrJN7Fb1fS/DE1yVNWNkLiANOlUnPwzaD+jV0miCwEG
-mR1PoRBG0j4sYTp9RyVCwR1RASNPStDTF/VcSllDqI45IHToKqgfeIlApmnCu291
-km1gAveM0Ayg5mLsIfIHyOlPZRL0iuewDDkwFNtwOiR87o9BurhRow==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCOCyNpGKY2bzxt
+wtfpgZcfl9aoHvHNTzYLqLbJVilJzktnek+S8qxiUFzSHloLNiGpdr/3ofsMwRLe
+gGU/OHv1v+ov3WelIIgd3ch4a/D6DgY2d0T9UKk5mMRQzmFeKijct6lRSCZLZdjU
+mZ+zMJijHgcerGl5BS9hZAqFVwmTJcbpz8wIkafP0cXcQNvLSiMP+d0e+gYfEH0p
+Ow5VP5ZJzLlqza/7bx8hSNDZgroUUzADxAqHdaEaNGE3W2E6XXnZMn4TEbJdCC5O
+s60U0/+jdRtURSIO2un7d3RQjQYeVQNWv26W8H6bNVJSatzfBusIeEkYYZunCy3r
+tYqN9LE3AgMBAAECggEAApUaQjVkBDZWg2pY8ZJdFIJ2sRzK6aAoi+K33AY4fvKE
+tW9oVfQahTkPzvQlT/Hef828ZLypq0wxUyFDdfhJbKjeEZu1YC+sudpH5ESWH320
+yDW35+EZCoaH/y4ZYBRlJMokBmnI5HMIE6ltWV0nUUPg/kJFMqGRAHTIqi7wah/t
+REhocuCOA6wgSeQYegNw+fg2NjLT9VnNCk04NmMtZti/4VOvWdKRTro4OSjEJCnx
+RXuaq7m2R6Pda2ZnXcCSUyUoZOiZ3QBo5GpEVUFLS2dMhcb5ZYx6Gh0KfUymX6Wd
+lVkykHJD/7sbTp8o72TLhuuOMyidfKObUnyNGwzcWQKBgQC/tKaasrd32vHKlUSF
+y1//XIquc+30QtNOB1fIEN0vNXI1PbATc8gZpa1ce1Lej7ioiNclDeSTTfs1jOyO
+u7rgOSmnnKNEcnaQdbkJRg6EVOLCvEkAAK/1nagvvbB7dCSnRzrWO3hfWJqtRnWT
+9DSF/rQZoXgRevdbMqQBZI2tTwKBgQC9rp++OBgWxQoZ/3a5dEa+hfO1glLUshJY
+Ck4pdBsds4dfT+iBBt0+kilFBLO2yvNiwYg0JgNbEempTJRB3RPP79tjLbQy6p4Z
+207q0AiBfsldaVysT0vLhkd1Ds2ScXgt393+YfORdNuF1/hjVTuw1ffwksaYMMi9
+UyWa3ZDTmQKBgQC6E+KHVCOrjfSWW+7oI3Ep0Cy4isSVDGxIV+5Hvr7C/RC/RwJq
+zz6STnOIyhe0+jIWPMUALY0Jwm6tGv3eya/pxvJ8xBjh7mzRacNSkhKzNiXpOZNu
+Ejy5nu9Kb8gm/KQ7TnN40L7VZY611Cd6llaJHaK5IjcGWKJSfkQdKfovFwKBgFhi
+qFjwtnjVs9FNcrsT7WsV6+vmIEav+1A+7RDv4zrBzxCgoYyN8EYZwVVBzaQdia+4
+0ojKNcIX5LNY1bSjGXpJIAdk4pTfMnCF+o38BhqhQ59dWyuHf6AEoANxtGTKrt9h
+c4X3ipF6zFffvQQ8USYjbfcRzaxY/xEJT3qMR9HxAoGBAIca5JRtMf54CgGojV7H
+w/fgjuWOkDjze2nSxM7U6C6oDPRO82iIC9bBTFKdGTTinyYipwV4SWJDtAEMuqlY
+ZgAzbBn2MZJu4C2SLVVfknfyb60CDGqGmVhmtuMUOKnwD5fXFOFirujg8ojadPib
++EKkAurP5JgEo6afXdXsRUuQ
+-----END PRIVATE KEY-----
diff --git a/test/rubygems/invalid_issuer_cert.pem b/test/rubygems/invalid_issuer_cert.pem
index 5cb9d22a87b947..9ec91669933bea 100644
--- a/test/rubygems/invalid_issuer_cert.pem
+++ b/test/rubygems/invalid_issuer_cert.pem
@@ -2,19 +2,19 @@
MIIDMDCCAhigAwIBAgIBCjANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoYDzk5
OTkxMjMxMjM1OTU5WjArMRAwDgYDVQQDDAdpbnZhbGlkMRcwFQYKCZImiZPyLGQB
-GRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPEZZzId
-y0m1jSbcHBwUc0MLpq/+JJdwLpGrjD35CuI7DNP0MiH+mNHblyTqMadB3font26k
-QFIjDZtc1es1Zvt4mNo1lScQsvbVGRFDQK2/xdZ0O0GbK31C7IJ2Boa93F+74f7N
-eD6LKn++SWCxHNCKV83RumQ6diG/WdUZQu8k9xjpRywI2u2EwNDETkbhGamj5zNj
-7a8pcPyifBxzTiZ9FZvWVaCEODvdIrF4NdIteXyYEQwDRLWD/nQ9Z9wbw4KQCtA/
-UUd+rObocjveau1wLiZryumhZRwwIKZU4+aaANYTFb3tbmUKnoR9aLavKvxEnlF0
-5kHo9xcHoS5ftw8CAwEAAaNeMFwwGgYDVR0RBBMwEYEPaW52YWxpZEBleGFtcGxl
-MB0GA1UdDgQWBBR17dM2zZQQPor/k6N4/JXerWXhSDAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQsFAAOCAQEALrT6pmN79vdBA80a
-f8C1DnWAYNyXskmskWPVMnTtgrDGQkqz0Uqq7nBdWK75FiBjk3XAOiDonZegvho+
-NZUnotUFyTpkkn95q1qpkMwgTufamQlxsBxkDZLPiWqvZS4guSucVgZeEtEOy0R0
-AKXA1SZmhC7472z+pwXprGj86K4SX7w15LxsQ0wDP5qduKFItNo/CnBEP5w87/Eq
-nxSbUN3dt7Glqt0iIp/I4mZlA4OnvtKfqTitATKOnBvHxIzvm9/6BVItjET8DRXv
-2ZEVvEcnkNNRKwNbqtI3V7AzB3lf3E4nb86gFh/GLI2XRN4LlWZQ4PmyE22B8IaZ
-vpqxaQ==
+GRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjlBB9x
+sP8at27AlFVnNBg5ZBYRVAnJXLhCLWrrUgIHxMyXq9A1Ma8P9gWI85RXfzK3yuX6
+xPKiR5srMOM3a2iG5yV92naF2pBIPFJhO3u4paEsDJBQyhP/CWYX7pr/t9X4wMQc
+9kdgGxPkncI3MKaYxqEbl23XmPv2xenPDwLPpA3E1J/fHIHPE5i5NHu+iuLdm8S+
+7a6060DlxrgCCH7m7J70P2W/q2yyHdL5r/39ibS9SxXtlM+cnASbArC8OuJrP6Hk
+5DLIH6IUjdVFKl9THHjcHCMi6c6n/2NqGu/LT2fk16oAniMPxNuSOZfyMCxCIKFM
+5wYy8MLFSl5d5cUCAwEAAaNeMFwwGgYDVR0RBBMwEYEPaW52YWxpZEBleGFtcGxl
+MB0GA1UdDgQWBBRdW9quj4EwnYnDmXL1DcksLKHLZjAPBgNVHRMBAf8EBTADAQH/
+MA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQsFAAOCAQEAjq2OZKVK1t2NxHsE
+haWGtgJoJ3E6vaLoCPkyJt5Fq4KJOZ3exjw2fpyJSmDz59TGn4bPDj7HXUpwGysa
+PvTRAivWk8i/qrMDY/fkYvyWUiXdLWMX5Hr9yrAp96OVbpG9teDKlbD8cprReJC7
+/6dRWKIYxpiraCRUxMtEKZJZekNgyqneJeSKr8tLxWi5AAuUA9aKRwXGCUkRjZP9
+UWBbGZ32gN2UCVL09yniRLpsj4ufPdFevOCX8wUEO8xm4LOOUzU4MNt4pteySipb
+rNTXvorbnPydIMMZtW+kmUxFbPVZV45Qjnd7SWdl1DENeT1OgbF5HGsFe6QduP0S
+UmN9Rw==
-----END CERTIFICATE-----
diff --git a/test/rubygems/invalid_issuer_cert_32.pem b/test/rubygems/invalid_issuer_cert_32.pem
index 2b71179270653b..26f4d20102658f 100644
--- a/test/rubygems/invalid_issuer_cert_32.pem
+++ b/test/rubygems/invalid_issuer_cert_32.pem
@@ -2,19 +2,19 @@
MIIDLjCCAhagAwIBAgIBCzANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTEyMDEwMTAwMDAwMFoXDTM4
MDExOTAzMTQwN1owKzEQMA4GA1UEAwwHaW52YWxpZDEXMBUGCgmSJomT8ixkARkW
-B2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDxGWcyHctJ
-tY0m3BwcFHNDC6av/iSXcC6Rq4w9+QriOwzT9DIh/pjR25ck6jGnQd36J7dupEBS
-Iw2bXNXrNWb7eJjaNZUnELL21RkRQ0Ctv8XWdDtBmyt9QuyCdgaGvdxfu+H+zXg+
-iyp/vklgsRzQilfN0bpkOnYhv1nVGULvJPcY6UcsCNrthMDQxE5G4Rmpo+czY+2v
-KXD8onwcc04mfRWb1lWghDg73SKxeDXSLXl8mBEMA0S1g/50PWfcG8OCkArQP1FH
-fqzm6HI73mrtcC4ma8rpoWUcMCCmVOPmmgDWExW97W5lCp6EfWi2ryr8RJ5RdOZB
-6PcXB6EuX7cPAgMBAAGjXjBcMBoGA1UdEQQTMBGBD2ludmFsaWRAZXhhbXBsZTAd
-BgNVHQ4EFgQUde3TNs2UED6K/5OjePyV3q1l4UgwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADggEBAGolEDY9meTGpP7j3Meb
-pxtLX/JYPiTMqQR+FOOdGJlXg4V9syMBYUMmUj3yEPnpBFmDgDtBaH+OQcFuvf43
-mQYOQoTJD6OpC08fkPdVw56Em+cuUCXtDDYY4gc+nVRKk4+tJqkizHNAazqKkZoQ
-PaHaCfXsrMGPLXxh/kbk14ESU9pL0LShh/bNn68hlAKwN2ctTSlfm81QgbNX83d1
-6kLSckj/9B1ksi6ks/eHkHWeMaiJe8H3vAU6PE6NeU3WRZY1ulSGOPleYfJA99fq
-z9yks8IxwMzubJStq2sQ0n6gu3XS4Qu0sn3ih0TwRyUOSQkWa2Bf5SwUZ3/YJ25S
-Wkw=
+B2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo5QQfcbD/
+GrduwJRVZzQYOWQWEVQJyVy4Qi1q61ICB8TMl6vQNTGvD/YFiPOUV38yt8rl+sTy
+okebKzDjN2tohuclfdp2hdqQSDxSYTt7uKWhLAyQUMoT/wlmF+6a/7fV+MDEHPZH
+YBsT5J3CNzCmmMahG5dt15j79sXpzw8Cz6QNxNSf3xyBzxOYuTR7vori3ZvEvu2u
+tOtA5ca4Agh+5uye9D9lv6tssh3S+a/9/Ym0vUsV7ZTPnJwEmwKwvDriaz+h5OQy
+yB+iFI3VRSpfUxx43BwjIunOp/9jahrvy09n5NeqAJ4jD8TbkjmX8jAsQiChTOcG
+MvDCxUpeXeXFAgMBAAGjXjBcMBoGA1UdEQQTMBGBD2ludmFsaWRAZXhhbXBsZTAd
+BgNVHQ4EFgQUXVvaro+BMJ2Jw5ly9Q3JLCyhy2YwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADggEBAJ4MDT8l9U3ruOkSzHxx
+1OyCHajDIl7w4ZihOBbYguhEqqCZheOPL37Alfg8nbZZX2CAxQO5PDSEbSccYbzn
+l8nieNEZP32HeDoG5JoVuIrzMAvs4317++D3rVtu5kztNXu1EDM/xUUdLHrL3M1V
+HhtqIl2R0/1IW+0KKxL737m6Ljw39QamXzHePIFGt/PkOw9mPneD0dk5fIJNR4gP
+EvliRwK+HBApQzzyhj00AwiAv31ofKMMPjF69sE4AkXIW3kYsOmkb5VNSOc/BXRO
+vfzQ+1nokg5j+8iEUIyWpoNo+bV5A2yn70g9sM/Xm+DVWsl72LmN3M4VnIrRYTPK
+aIE=
-----END CERTIFICATE-----
diff --git a/test/rubygems/invalid_key.pem b/test/rubygems/invalid_key.pem
index bc02147403cddc..b3abcda9122b68 100644
--- a/test/rubygems/invalid_key.pem
+++ b/test/rubygems/invalid_key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA8RlnMh3LSbWNJtwcHBRzQwumr/4kl3AukauMPfkK4jsM0/Qy
-If6Y0duXJOoxp0Hd+ie3bqRAUiMNm1zV6zVm+3iY2jWVJxCy9tUZEUNArb/F1nQ7
-QZsrfULsgnYGhr3cX7vh/s14Posqf75JYLEc0IpXzdG6ZDp2Ib9Z1RlC7yT3GOlH
-LAja7YTA0MRORuEZqaPnM2Ptrylw/KJ8HHNOJn0Vm9ZVoIQ4O90isXg10i15fJgR
-DANEtYP+dD1n3BvDgpAK0D9RR36s5uhyO95q7XAuJmvK6aFlHDAgplTj5poA1hMV
-ve1uZQqehH1otq8q/ESeUXTmQej3FwehLl+3DwIDAQABAoIBAAQ1PSEES8XZESzH
-nwakcBCQValGW8LNi+/cmSGEb7qxbNC5jIhzBkgfYjIcPkqc3TAeXQFlhNPfgGog
-7YDh7o60Ck2WAtOVjdy+AmZ+kH9Cf271719+mFHi3E2N8XY3k8Q9+2dJlHAvA0pg
-eq0L2k9kzWcuYmeZF50Q1xNfkf9U0qkb6tbx15NOGFhQMUZ/mMcbYifW/bQnU2YO
-2vgxWFDItk0c82gpi/uo22gu0TjhcBp/ByKMgXV8xrLCW7Lsh1DvJ3LtigD0Zp5s
-XtdXcF4KOo81VeUijDbByIQQJTxBlfmgdcyarAb7kV107wvDh55Xd8m68lZUrkj5
-tc3dRf0CgYEA+crRUXgtdeiHqN5gZRg6MF6S5yxFiAaKgeeKm/x/2xpMmoiyWhFv
-tK1DLxRHEGiFuWc9IGgrWu2udEg8VE4j2EExvtFi/w3lSHxBArjeq7oCabnDk261
-lRCNzYb0HU5UZL3vBsHW8pCdnDfaOxlrT2+cDVN7LHd20DsIZROG7T0CgYEA9xdH
-wSNsHqxcB44A7iNNvHxhU3Vi6QCIpzp8sfjc/fd7Ghe/MIn67gs5XPtT+DvQME0N
-4hNEy2GmbHjVJQXqlf4VSWdFJ1RnKwL+4rnOiWq5sNrxmlXuTvOTRLimpjOsLKCR
-G3dgKXiH7/qU9zjLljKOWgo7gqv3cPrPIL8H0jsCgYEAp99SRTpK8w7O/QJWLhrW
-IGOuvoXWRNCAjUUatjI/ivRlvwVXN4i4VeiLWjx6deCI3k0vm3PmjzllIOjbAp1x
-IYjO8bqumVKxYMGAv1+W5jogHQWnFpI0nnV9lz63GGrn9Lxgw13KI0JlafNvSoCO
-ydfsPFh6UywGQXMq9SLmbtECgYAHWC3N09u23bCumM32Rh5dZ+UMsgSKoHVvYxGp
-yJfpBJ4oHGSWcMOAp9zAosfQLRb3GJM9EQ2ObgygVMchHpfmdXL0h5lKnfujD6e7
-3YICG6YBV8CusbcvqZXLCSIK9qY7fVpS0q2NDgQcYfpjjtCeWkpY6szyCWKFfS8C
-7iqxWQKBgBIwdnksccXP01svXJ0tMhiAKx1jKY/aJBPIpcSqxTFNe2WpgzynRpUg
-+MKAO2Ed6Rec3TTefGRNKDPb5OUsYZUMHeNbIJ1Y1S2pORRffrE3TFWBUM0LkOTj
-r4Dl5bcnDRL93Phbx7MAmjMO3TZWbQGfEgDuqk3sS1QzKMJnBLAO
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCo5QQfcbD/Grdu
+wJRVZzQYOWQWEVQJyVy4Qi1q61ICB8TMl6vQNTGvD/YFiPOUV38yt8rl+sTyokeb
+KzDjN2tohuclfdp2hdqQSDxSYTt7uKWhLAyQUMoT/wlmF+6a/7fV+MDEHPZHYBsT
+5J3CNzCmmMahG5dt15j79sXpzw8Cz6QNxNSf3xyBzxOYuTR7vori3ZvEvu2utOtA
+5ca4Agh+5uye9D9lv6tssh3S+a/9/Ym0vUsV7ZTPnJwEmwKwvDriaz+h5OQyyB+i
+FI3VRSpfUxx43BwjIunOp/9jahrvy09n5NeqAJ4jD8TbkjmX8jAsQiChTOcGMvDC
+xUpeXeXFAgMBAAECggEAEHZiNH5sdjEweAclbj2lAkd1zgDaZCnQc9Vff/B4CeKf
++CFAigblVN8FZ/y1YVw19ceca1ZKJCxVNna7SSp5ubKMjUb7KFpbt3yTBKSdm62f
+11nnz5lQWSqey+jBRTJvxNd+Up9QEhz4BrRd/DRM9bAmjEWYOQiuzMB9AhFAsVFL
+YPU+vxOuc74aloJGzfP+bWFpckOjtSXZJn7nLGswKcMkQVtcwtE17rSZDSH/Lrq1
+LbL5VBxt5WliPeCmmKpffCaD5VynwxT++1jXlNEqOtrK7qPYhH3FnYyj6tVROAf6
+JJh86JlQYJ9y/sebIRUk1Ipi+sDZ90knkw5qQ9nycQKBgQDbE7YFrlgweEwAtIrC
+RN+FNSUte0AWuyl8ghdnfzzzbiE54/pZno0zZUtO0wVGuc3AGm1CLKmNdaex+13a
+hjiwhYMRHoC+IoWatSE3N96n5GctTITUx4X7Anz+crWja3dBkuGUvt9vBnZ2PUHD
+xJcuwXcIobXnU4zTlyFKe5nq6wKBgQDFXCMEoZmdrFrnvvUBg4sCauGs0Tn933Ha
+SxEmgKZxCjpQ7VNrs7jFTBGy4Lv5BuBIOVMelqP344YABuD3D7RtFktn5+CoPPQM
+r7kIKVAbFeQrEXWb+6laENi18NDWhWcK7HizkPOemnEWQ3rdCBVbwllMsQyhb4So
+JIH2f17mDwKBgQCrXzXqJ8Gw2MmLW6+X3EyFZVdZxqoRngML9K/eNDg3rJStNlsm
+M9L8u2Y3mPbtpnb+qS2CsHFJyRmPLrTyNkCuRSKMB7JqCZM9vCbpjPjNmOvlEZBu
+6k0yV3XzjUPtPCmj0ARKWS1rKkEMqUqCm4wv9QLqa6Vh+YeWFQjjvOBgVQKBgDpu
+Q+PcIEnhPGy+SXVwR5ioojXzH/M8001oyiQXFLAE8i0BhqAtbnfjRJ4sERryYTag
+2i4FNXhvwT2Cy9n5qVZesmaJ7SaCHVMgN2zmJlROj+X8XlCXGpWSxUZgjMPmbRJ7
+3mRzdt0vJmoMAnUsLn6jNKMTDAVDqgfJ/zxGi4cbAoGBALXq5834Bjs1jQfPzpNs
+66wwz8qGoqr5BwOMJVexJE36Et5MClibt2yLzCksqGWN+mKyMyMaF8z/59b4Vlyx
+Y9nTNNVJzaU1LWutAw3b8Sm8r/GqZh4L6CdvW8uhl01fsjpKcpHkLLXBzI9emzF8
+6f12dS6rEvyh/uef5Ve8AvsU
+-----END PRIVATE KEY-----
diff --git a/test/rubygems/invalid_signer_cert.pem b/test/rubygems/invalid_signer_cert.pem
index 59364ee51b5930..43acb47d4d4241 100644
--- a/test/rubygems/invalid_signer_cert.pem
+++ b/test/rubygems/invalid_signer_cert.pem
@@ -2,18 +2,18 @@
MIIDEDCCAfigAwIBAgIBDjANBgkqhkiG9w0BAQsFADArMRAwDgYDVQQDDAdpbnZh
bGlkMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTAgFw0xMjAxMDEwMDAwMDBaGA85
OTk5MTIzMTIzNTk1OVowKzEQMA4GA1UEAwwHaW52YWxpZDEXMBUGCgmSJomT8ixk
-ARkWB2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDxGWcy
-HctJtY0m3BwcFHNDC6av/iSXcC6Rq4w9+QriOwzT9DIh/pjR25ck6jGnQd36J7du
-pEBSIw2bXNXrNWb7eJjaNZUnELL21RkRQ0Ctv8XWdDtBmyt9QuyCdgaGvdxfu+H+
-zXg+iyp/vklgsRzQilfN0bpkOnYhv1nVGULvJPcY6UcsCNrthMDQxE5G4Rmpo+cz
-Y+2vKXD8onwcc04mfRWb1lWghDg73SKxeDXSLXl8mBEMA0S1g/50PWfcG8OCkArQ
-P1FHfqzm6HI73mrtcC4ma8rpoWUcMCCmVOPmmgDWExW97W5lCp6EfWi2ryr8RJ5R
-dOZB6PcXB6EuX7cPAgMBAAGjPTA7MBoGA1UdEQQTMBGBD2ludmFsaWRAZXhhbXBs
-ZTAdBgNVHQ4EFgQUde3TNs2UED6K/5OjePyV3q1l4UgwDQYJKoZIhvcNAQELBQAD
-ggEBACbQA7m+zqdAE1/GrJKcXnC/Ujr1tu6rGpe0uExTwySptgVieUGAOvzlLLrY
-r2b/nGmK4bgHkeDPSVuC3F8NhgESvPTuXFSw+DU+1m+mhHxdpW30uSbbebgqV5Ea
-GpckCZj1SEdsn/1SDauXCmkrs/MBuK49mYXv3jejX0Rp0STu1NxnU13yrKF0MtrL
-fzZ/QF8bOZdg5DwtqMwhDPp72x58KpqAPN9GgdlsTiwOMGy4avds1g5KMGmkK8pK
-6I58NEMCOuN4CxFK4oWD9xuD4j+wtHy/UYxqor4rn+UKYHfr5fWtAyRJ3gD8vMUu
-C+Nl2vB8t4OVwS5FCcn0ZK18bPU=
+ARkWB2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo5QQf
+cbD/GrduwJRVZzQYOWQWEVQJyVy4Qi1q61ICB8TMl6vQNTGvD/YFiPOUV38yt8rl
++sTyokebKzDjN2tohuclfdp2hdqQSDxSYTt7uKWhLAyQUMoT/wlmF+6a/7fV+MDE
+HPZHYBsT5J3CNzCmmMahG5dt15j79sXpzw8Cz6QNxNSf3xyBzxOYuTR7vori3ZvE
+vu2utOtA5ca4Agh+5uye9D9lv6tssh3S+a/9/Ym0vUsV7ZTPnJwEmwKwvDriaz+h
+5OQyyB+iFI3VRSpfUxx43BwjIunOp/9jahrvy09n5NeqAJ4jD8TbkjmX8jAsQiCh
+TOcGMvDCxUpeXeXFAgMBAAGjPTA7MBoGA1UdEQQTMBGBD2ludmFsaWRAZXhhbXBs
+ZTAdBgNVHQ4EFgQUXVvaro+BMJ2Jw5ly9Q3JLCyhy2YwDQYJKoZIhvcNAQELBQAD
+ggEBAH2PJ2IxJAfk5o5PL2Z0jLNVyHGDxyiII/lMnWG/yChB5R/+/nLWqnSIho7C
+sd2SrZSF4iY7PcjjgwqNog9qeGCh915HbZjm5YPHVVd7Q8t2Bi1Y18T4874rO2LH
+cKciX2hsUSnOJwOG5PaYFmZZjSjNkPQWUanaKzvdEhbPeoBUdGjtlv6sdE8BPShD
+/Ca12DlKp++5TNWakBbfMsemrZA1ELsQcZ/PtzemiYeZPi0aLWUqepau1f5QPcQR
+/buCy8E12FN33sXFZPaS7D4owUjIInBnSjREximqaZE2dyXHKZ4d133+NLJw8NJF
+/14DAw/EE3cmyHJngmg+2q/rSw8=
-----END CERTIFICATE-----
diff --git a/test/rubygems/invalid_signer_cert_32.pem b/test/rubygems/invalid_signer_cert_32.pem
index 97feb8fd0a9cf9..a2120c352da308 100644
--- a/test/rubygems/invalid_signer_cert_32.pem
+++ b/test/rubygems/invalid_signer_cert_32.pem
@@ -2,18 +2,18 @@
MIIDDjCCAfagAwIBAgIBDzANBgkqhkiG9w0BAQsFADArMRAwDgYDVQQDDAdpbnZh
bGlkMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTAeFw0xMjAxMDEwMDAwMDBaFw0z
ODAxMTkwMzE0MDdaMCsxEDAOBgNVBAMMB2ludmFsaWQxFzAVBgoJkiaJk/IsZAEZ
-FgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8RlnMh3L
-SbWNJtwcHBRzQwumr/4kl3AukauMPfkK4jsM0/QyIf6Y0duXJOoxp0Hd+ie3bqRA
-UiMNm1zV6zVm+3iY2jWVJxCy9tUZEUNArb/F1nQ7QZsrfULsgnYGhr3cX7vh/s14
-Posqf75JYLEc0IpXzdG6ZDp2Ib9Z1RlC7yT3GOlHLAja7YTA0MRORuEZqaPnM2Pt
-rylw/KJ8HHNOJn0Vm9ZVoIQ4O90isXg10i15fJgRDANEtYP+dD1n3BvDgpAK0D9R
-R36s5uhyO95q7XAuJmvK6aFlHDAgplTj5poA1hMVve1uZQqehH1otq8q/ESeUXTm
-Qej3FwehLl+3DwIDAQABoz0wOzAaBgNVHREEEzARgQ9pbnZhbGlkQGV4YW1wbGUw
-HQYDVR0OBBYEFHXt0zbNlBA+iv+To3j8ld6tZeFIMA0GCSqGSIb3DQEBCwUAA4IB
-AQBM/EjV791vKu2KQQAhd03eUXfMlvObwEj9nGtEEnSFH5i16V1m8Y5ZY7Aw+VR5
-/xJ9J2AvFG6EXclDVmkDQpo1fUVhWM/SPKD6HJWuB/eyjA30xSj+UeLmBYjdKzHt
-kK+HeEaGVQaT5j8OPOW6meGriucdBWtwbhTdyZgqvwpuZwbtPpElYXwGgSijKqHI
-GG6RWzeANdG/4AIChrp8CIgFfW4sbmlIZK3BAXuSvZ9A/deYqC2DAadJIoTJ9H6w
-0TgYlyTidaWtCkqRBXc3qrwpc/r3wJwpgan0kJAQ2kGc5W7gYUylpoS56sFq23YX
-Fmm0pRq5UZj9jKZUIwcqAoGo
+FgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqOUEH3Gw
+/xq3bsCUVWc0GDlkFhFUCclcuEItautSAgfEzJer0DUxrw/2BYjzlFd/MrfK5frE
+8qJHmysw4zdraIbnJX3adoXakEg8UmE7e7iloSwMkFDKE/8JZhfumv+31fjAxBz2
+R2AbE+SdwjcwppjGoRuXbdeY+/bF6c8PAs+kDcTUn98cgc8TmLk0e76K4t2bxL7t
+rrTrQOXGuAIIfubsnvQ/Zb+rbLId0vmv/f2JtL1LFe2Uz5ycBJsCsLw64ms/oeTk
+MsgfohSN1UUqX1MceNwcIyLpzqf/Y2oa78tPZ+TXqgCeIw/E25I5l/IwLEIgoUzn
+BjLwwsVKXl3lxQIDAQABoz0wOzAaBgNVHREEEzARgQ9pbnZhbGlkQGV4YW1wbGUw
+HQYDVR0OBBYEFF1b2q6PgTCdicOZcvUNySwsoctmMA0GCSqGSIb3DQEBCwUAA4IB
+AQC6hEFVjbTTjJDP7t/DgG89NebkpQuVuXSiKJW/qVpSsY8XPWHA1/xrl/Uyxdre
+TmqtUAfmOVYs2GhtjcdFwszicIk07RwIDMUKIf+puXbmgMLHDpyzmHq8wnPvaPjA
+5S9S9CSewPooeeL95BgFfGl489HrQ0T/5MGnwAnTegfOJMRFNIJbaNXvFtNJ7V1u
+52TQM61F6YVxxvIiDs056CKDBKRldT3pAfcRmxejHUl2p9avJL2jbvnzW9vPh0Ol
+4keEVV7dJGTOXrGVplJZyMvCZM2pHghxm423uKPAhx9A5BQLpAgBUi9u589G7wSq
+saBIHP3Rr1qr5FoYCNTBdXaC
-----END CERTIFICATE-----
diff --git a/test/rubygems/invalidchild_cert.pem b/test/rubygems/invalidchild_cert.pem
index 281dcce655cf41..b9de586e162bf2 100644
--- a/test/rubygems/invalidchild_cert.pem
+++ b/test/rubygems/invalidchild_cert.pem
@@ -2,18 +2,18 @@
MIIDGDCCAgCgAwIBAgIBEDANBgkqhkiG9w0BAQsFADApMQ4wDAYDVQQDDAVjaGls
ZDEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUwIBcNMTIwMTAxMDAwMDAwWhgPOTk5
OTEyMzEyMzU5NTlaMDAxFTATBgNVBAMMDGludmFsaWRjaGlsZDEXMBUGCgmSJomT
-8ixkARkWB2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDs
-dqLesclj2/6HnJLw4al4swiDFBA4W0KeOS3DXOa2k5+rNfGacKOQ/AkciUnzqLiC
-9D49x/YLlnlJYeSMG57C7gixhLHHDviCneQwy8TlCpuhUXnfcpmHQO+X/c+lrVB7
-wHTPjl5yZYzLFtPa8QAEtJa83E2GrUd+JEOwTRErOcBucIRP5HbeR2aD7BVP1V+F
-gaUhOZb/n2e53diQF7BZurB45DTWQ2L1R/m8VldQiWoTZluWqnCGeEwtpZJXt9kU
-8y5rQcxI3p8Qx4q0ilLKsE7c/sw2wzEFWoZ4BeURnjxdvPgYeOPk4K3a34pFg7lZ
-u1s9XvjChJVsD8HRnbQtAgMBAAGjQjBAMB8GA1UdEQQYMBaBFGludmFsaWRjaGls
-ZEBleGFtcGxlMB0GA1UdDgQWBBS3tDKiI1oVuEkKtGux8TsEy/8iuDANBgkqhkiG
-9w0BAQsFAAOCAQEAQsgdq4NZBnQRk+eNbwS4go3S+m5cPPWY7kG94kpQ3aC3nwR4
-wnICb/hd+kRCB2azTTBY8PA0SkHxIXWgRFjdEpIAekm3Xtag+lCC1q7jtDTNoHw4
-KOdfeBEF621FHL5vBvJmnRMH8f4sCjVZZE8RJcaWAK7uJJXi6gzUm3xz0UnylZNr
-vA+Z+cM5pFnCfxxqXUyT0MRb47O/wqH4f5SybKpOxO3+vnzpSeN++zgdMVjA/Pl0
-0SB8VKNKXGLQrvY2S3GuRoh7OD1DhRPzUTQ8gwwBAlhw2i3i5t9ib0ujw9MUO3GR
-dqn4Yco98R0+wFpY8feGhr5uJNDuIC10l5LHLQ==
+8ixkARkWB2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw
+K9EjfLPR6YGBR7bDDWh+83/VbRdXQB6n1q4Cu3RsXSF/wJ3ggCvyWgkv+ZtB+ZbJ
+iosTbmDPe4k94ibta/dShnbj424OeTrIm4mvILMcIz+hOk23oPE8QRAQrpE/VILb
+FyWA8wES5P4qLXUDhQqtmTAuziJ2+ge+IYQDUY3PyOXDJZcvjBrrxod1+kiHNN+X
+YbeNEoicZhQJAIsymhpTYCFctj1akwASonERPmzgHvM+0OlhLGmUyFVK/k65UnHF
+l5biPSNrNdrLvCzReCmj5iqrjktt5AkI6TUVzCLUE21Skw0yiu/vdh0guOM9cVpb
+Yc0U5Blx6yhY9RXT0V7pAgMBAAGjQjBAMB8GA1UdEQQYMBaBFGludmFsaWRjaGls
+ZEBleGFtcGxlMB0GA1UdDgQWBBSHzS0IZ+65l0CyPxFAyiuJ0kptvzANBgkqhkiG
+9w0BAQsFAAOCAQEAU0gZfLKxZMOm16aW+QyQQUAx8CGCcE9GVW86N3VrrU1+y/+/
+/GLu9uVHlmKv8Mf+WtPWFfi719LEflj8TBWumkzIdQfkt0mGM7KOG5DeShQk8tE/
+6Jupw78LXCQs0YNxT8pFnz6adpfzLVclNimK/VPJWo9a3n8HKB/k5/eJM6QWBkov
+VzvycSvqx+mtC8dghmsyQGK2HJwlrM+YsKi06nKNlF2mawkvOpN9EC7zx8uVTCkX
+bLbEeGQop7FRYZUSwgaCNwxx5Ahq9kD9llrqKs3PVR/NGDW2pS79R475c9fhYAPu
+0qRM0RTPeb4V7biDzY8PzR1bWkMP9HSWxBB46g==
-----END CERTIFICATE-----
diff --git a/test/rubygems/invalidchild_cert_32.pem b/test/rubygems/invalidchild_cert_32.pem
index 87885157f8dacb..19dbd252cdce28 100644
--- a/test/rubygems/invalidchild_cert_32.pem
+++ b/test/rubygems/invalidchild_cert_32.pem
@@ -2,18 +2,18 @@
MIIDFjCCAf6gAwIBAgIBETANBgkqhkiG9w0BAQsFADApMQ4wDAYDVQQDDAVjaGls
ZDEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUwHhcNMTIwMTAxMDAwMDAwWhcNMzgw
MTE5MDMxNDA3WjAwMRUwEwYDVQQDDAxpbnZhbGlkY2hpbGQxFzAVBgoJkiaJk/Is
-ZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7Hai
-3rHJY9v+h5yS8OGpeLMIgxQQOFtCnjktw1zmtpOfqzXxmnCjkPwJHIlJ86i4gvQ+
-Pcf2C5Z5SWHkjBuewu4IsYSxxw74gp3kMMvE5QqboVF533KZh0Dvl/3Ppa1Qe8B0
-z45ecmWMyxbT2vEABLSWvNxNhq1HfiRDsE0RKznAbnCET+R23kdmg+wVT9VfhYGl
-ITmW/59nud3YkBewWbqweOQ01kNi9Uf5vFZXUIlqE2ZblqpwhnhMLaWSV7fZFPMu
-a0HMSN6fEMeKtIpSyrBO3P7MNsMxBVqGeAXlEZ48Xbz4GHjj5OCt2t+KRYO5Wbtb
-PV74woSVbA/B0Z20LQIDAQABo0IwQDAfBgNVHREEGDAWgRRpbnZhbGlkY2hpbGRA
-ZXhhbXBsZTAdBgNVHQ4EFgQUt7QyoiNaFbhJCrRrsfE7BMv/IrgwDQYJKoZIhvcN
-AQELBQADggEBAFPyjOoghY6Iba9+psCWC//rwLtDfZPQ3kO9hFtd4CGvalPtR103
-Oc1Dk5pxHSWDTdeQfOb75mqWuqs4ET7IUyw8yY+bKkOOhY1ldwaJhTyP/fkElnrL
-prsLSpB3AdQceS1Ob2wpMaaGIPDzJlW0LG8cQNeU3SRTTdBjX5zjG6imHKG2yuJd
-76PM0tl8ooslPABlYSPSLpd1PAARqxG2ekfrxZioCLknyhBtcRsl1aMWWBiG4BH9
-xZoJvEHwpOMTxMaAFXSkyMjZAoOzAn9qP6eLbwwzeuckIrZXxYBfGcC29VOPPAN4
-IPX0IUZ7/LlzzOE5iuVS/RIBRcD+qpEzSXs=
+ZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsCvR
+I3yz0emBgUe2ww1ofvN/1W0XV0Aep9auArt0bF0hf8Cd4IAr8loJL/mbQfmWyYqL
+E25gz3uJPeIm7Wv3UoZ24+NuDnk6yJuJryCzHCM/oTpNt6DxPEEQEK6RP1SC2xcl
+gPMBEuT+Ki11A4UKrZkwLs4idvoHviGEA1GNz8jlwyWXL4wa68aHdfpIhzTfl2G3
+jRKInGYUCQCLMpoaU2AhXLY9WpMAEqJxET5s4B7zPtDpYSxplMhVSv5OuVJxxZeW
+4j0jazXay7ws0Xgpo+Yqq45LbeQJCOk1Fcwi1BNtUpMNMorv73YdILjjPXFaW2HN
+FOQZcesoWPUV09Fe6QIDAQABo0IwQDAfBgNVHREEGDAWgRRpbnZhbGlkY2hpbGRA
+ZXhhbXBsZTAdBgNVHQ4EFgQUh80tCGfuuZdAsj8RQMoridJKbb8wDQYJKoZIhvcN
+AQELBQADggEBAI0N4hruuCtl7isldZ8xDLYiy4PjN0i2fIPc8c+e28Ru2xpr9Ns0
+l9xlzbDnYasEqAVFLnMZGRwU+pyNWCvOo4LmAVh+4+fI4mBMvVyzDHKZCVJQ4toe
+rWKPgX06euiHXic0tsmgJbyhtEg1sS5YMwaJ3gOUw3q9aJAzTkbudzuOOGcyfgqD
++j8g0VBBBJawarFvn3G390l/dEuFP8UC/LtaLbdT4b9t54iwAldTjo8HvjyeCqah
+QJd4TWo7FM9gVHwBwBKcHQHdJfbW8FpkNaQU1/1/QvqE3En7Q99xFBur/9bP6vFB
+UCc5lyBe7gTTWa9A6+GT4uZD5AkFfjyMqB0=
-----END CERTIFICATE-----
diff --git a/test/rubygems/invalidchild_key.pem b/test/rubygems/invalidchild_key.pem
index 1c9997150d8b30..83e2875dbe8ea6 100644
--- a/test/rubygems/invalidchild_key.pem
+++ b/test/rubygems/invalidchild_key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA7Hai3rHJY9v+h5yS8OGpeLMIgxQQOFtCnjktw1zmtpOfqzXx
-mnCjkPwJHIlJ86i4gvQ+Pcf2C5Z5SWHkjBuewu4IsYSxxw74gp3kMMvE5QqboVF5
-33KZh0Dvl/3Ppa1Qe8B0z45ecmWMyxbT2vEABLSWvNxNhq1HfiRDsE0RKznAbnCE
-T+R23kdmg+wVT9VfhYGlITmW/59nud3YkBewWbqweOQ01kNi9Uf5vFZXUIlqE2Zb
-lqpwhnhMLaWSV7fZFPMua0HMSN6fEMeKtIpSyrBO3P7MNsMxBVqGeAXlEZ48Xbz4
-GHjj5OCt2t+KRYO5WbtbPV74woSVbA/B0Z20LQIDAQABAoIBAF/yuZ60NDwVWb/s
-LAGbB3mm58bMPtKnUS5DlEqn6SPfXdQKhPj+SJh9dDMEkCHS7d+RPKoz96X3DkrU
-8nhZgr+k95kUd1CGxha1+5BDNqcbeU/pcBLXfO2RT0b0oauf2j8EtkE8Cx3PD+Se
-ZCN8U94U6u9CUyDZMd/A1kh01Qkc08mCJQ0UtPbt5iRFp9nGQaN3ZOXG6taPQVOB
-M91DUUPKny74ptMrqlyRRBylTpUlSjsjo3T5LRNSVXMNubfNG2+sf1Vn/Os/3KAL
-PTqc9LLNaHpR/z/oFC/wUiMdJzHB1vBFUcwHvTmahVfqwaffqLj/zJa12ztMcZ/W
-efRFBb8CgYEA9c6JvqB0gR14Q6Shj7Yg6JM/dO3e8yllvGRsJm0S6IHHlblWeUEA
-OeY099wD0y0oK56XvgfZyd2k+hK/FKf5/otgCyzr1i64sx+hpHE6MZ/s08VLYZvt
-+N9fdk7Z5crZImo8vne+7AfBhY1UNk6QjwSUMe8U/zQ6BBGbNhKtgCcCgYEA9kTo
-6xyt836PGSXFSnup3wdjlbpMlXMnvZG2V0Aw3ILdTg2iGGf37UUBzDjnZFxVRPqm
-PqHJwzjd8PZesDFvaZQ1Sn4nRLKZj0aLLOGuaUOoTAP04fQkYltWR+j8w+d4JxX6
-CDNbNtf4EYRVhfNO02WCNyE4xHya7s6u4tnySYsCgYBNlRPay/AZtIB58SNhJZ37
-akZUFKQS4ZUPwi50bmbSZevlsOq/OKnmnGdJd/LpG06bfeHtA7NUyJVCrNoMnfwE
-wF7fCB2jq3l2Z9xv96DjetOX/6SMOVgB/ha2U6rooX6pIxjrEQZ8nvIQwgu7XE66
-JTrVC933srdBA4GWrox+bwKBgQCRZLWuuUvpyfpp+ma0RrZPumkM6OR2B3qa7QAe
-GwO97HUDtADTL+6r4mXhUGcsVWbyRpkHuTUJUPWXYZ0doNIKHzonNLuyT09hy2A3
-qzXxZ8RgvKVDEYS5nPsfkWpJrsq9KLhpRwi/JFqM3PgxESiknfV23uJI/tfpzZRq
-0gm9aQKBgBuxr0xIXZpUuXwOnLIyp0qTPltXPentl71qV3tQvkqlBU+nCKnaa0ur
-7PuEGuFC0jiPiBuRbcO81kq9QTPX6poEYSEFhHphuj9o5/G8MqnC9GzHqVwjc+fI
-JPiixH1Dx9YWsCbnCw72lEdpnxMgk1efnzbV00tl63JgMjkyHBJz
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCwK9EjfLPR6YGB
+R7bDDWh+83/VbRdXQB6n1q4Cu3RsXSF/wJ3ggCvyWgkv+ZtB+ZbJiosTbmDPe4k9
+4ibta/dShnbj424OeTrIm4mvILMcIz+hOk23oPE8QRAQrpE/VILbFyWA8wES5P4q
+LXUDhQqtmTAuziJ2+ge+IYQDUY3PyOXDJZcvjBrrxod1+kiHNN+XYbeNEoicZhQJ
+AIsymhpTYCFctj1akwASonERPmzgHvM+0OlhLGmUyFVK/k65UnHFl5biPSNrNdrL
+vCzReCmj5iqrjktt5AkI6TUVzCLUE21Skw0yiu/vdh0guOM9cVpbYc0U5Blx6yhY
+9RXT0V7pAgMBAAECggEABbsRKTA86bzIsI/IhVEN94Y8f/D158nPTXqla7OVGpLP
+fIhDonpM46vz3U6Hc0aXFfyGoGXQaqNsQBn3lfTThWjYHHrpGTmulLjBinO7+9P2
+NYyP22O2ATWlHAPPuAGL5axbtRWCkQ6nqW/T3P7SjXncmEMumhPxVUkiEhkQrcP/
+hXytisaYU/7GgYZUC/ZSzWUcK+tPhPWQ5/iOMVXSsGcARLMr2SzWWt7LNY19zib3
+Xzp0H0uFHSPemZ70R7Ssk6MrVTQbLYYmXxI+fXp8TcBdcd2TvU1hwiswfU3Qglgp
+bD3dXa9wB+SChRTNTRE+KEBcDTcfyUm6Zn8YjuzHgQKBgQDg8mHZ8Gk0Oi0GMnbt
+xdz+1aPEt+lfgdHBN4GEuntWrQERPL2iazMVxtoPZBqfv+6aP6DRau8afluWP7Ka
+MpFhn8jHgHF6gigOZoYTO5NU1qgXn0of+n3laoCKb+SFs4iJ+CNV6kgXnXM8yZdN
+IFlx3EWPnu7GS+/bQtpy7W8KgQKBgQDIfbQzO5uC2YO1u8uTR242I5MKj3SMqhy8
+6AvU9qef+TSEtyll1QoVOv+YQc6x9HYcyEVw7YgOVEEJncJjYHA+cmuzbuROTsyT
+jhIF3YaXzTULcKb8E+8lP7NLKyjLtwPPBqUE/ACnYJTRDIldz5M8TKx/URodYIzJ
+uDcehZ4QaQKBgCuD+BX3AgMOdgNK4+Lfcf8CSSoXAdht/qvIFxAcGxwLX7d77ptq
+7Xj6/NgZX2Uj9f507KFWdGbFpuYL8HsP6TvfczHU0R8H6sPOZYV28utokx/uuqIx
+DQXCcpdVSfnrXzCBhiRqrAOVe+N4hAJxjZwPJo3ACyTlL8NUzXmKIP8BAoGAFIYx
+zVDb0aBcyFzqMTCNysMHiXw4DTJY8Mm8dFevv0OuqatqdH9DofrBMaAC/dqtwLKL
+0Uyvse/UHJzmym+T7gCen+bJPm74qF5R4AHWhnG+bWZh4cpUn/aObzKC4Z/hpu7i
+M8lsc7YCZggng8/9HZ4nxnzR9JHut7PBCMHa9YkCgYAwzwX8vgUiHErkybNVWwwF
+v2UnbI7W+bEvkxebyQKIX63lj1l7H3KlPVS8c0sI9WmBH76o7NTisCnRa6eMFtjr
+2JDyHi1UgJWYVKoRO8+MwOXX7LhWK7T4V80C4ZsvusdDQgYuqSi/GNcflYg3EWsy
+1WKCdly+Nv4hsHMEuptaMw==
+-----END PRIVATE KEY-----
diff --git a/test/rubygems/private_key.pem b/test/rubygems/private_key.pem
index 4e6ce13e65baf1..97f34197e67ed6 100644
--- a/test/rubygems/private_key.pem
+++ b/test/rubygems/private_key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA0ULcfpDboY5uWVdOIkF4AtRui7PPFoaKfBl5hiGFcpYRx8DQ
-PyT7bbD8nKd14Rhzb0nHCMU3DEz8PLJCmWm3NszVDkEJws1BpCGak6vKiyNa5hZb
-UlQMZMbecSDSpEKu2PBWgBT74qg2RBugzTAVAnGQGezQnWyv47kyXvdjMoq11VZa
-+Dz2izHJvjBHGQShr1r9v39qIrtah5CEXTRxEqhr96gg3y6xOPMqxi50dS0RBaJs
-PsjFZ1jecye0Z/WPItiLjSVVRssUXK1a2VkYxUqkxUg4wwJD57H4TEZBomtAXlAS
-o+rUv8G9eBNmS/k/oJLdiMF1ULb+e1+izeAyGwIDAQABAoIBABS+vR8q+ysD9LqU
-piFNPjmBl8fvtmr0QYxV9i8u6YzXhcG4wqxP3UEdl51sGIqNIvx4YuviqTdl9meK
-AII28bvUCJcWKYKPWJ+N2UYkdLrgcWV39+use2IOOQUcDOXN2omVIe4mpmXs6RxN
-ZN6SkrKgUXnQeUnx+Wno9S5m9gWPfrAMTr8iwBquo5JMFqJmAlfq1cIActU7SE6M
-7LJZ8rbVGuGmZAyqJw/I5xvxts6NlTFBm2AyGq74wtbUD4OlFDtOTA57LmtRswmr
-MK+JG5LIJIyc6qKQwmHU8vLstJEcVUyCJDbpjDkApd6GQ2FwXXode+S9C40DZKvi
-hnaGfKECgYEA1ArI5tt3GdNR4CbY4e4yDHEuSdSkMVsRa9a7gdtrrjyNitBMbZNE
-HZNqswijBCPZnXPtBxeytMUmlU7uFc7xx3QQvuBSJ6HOb9j0qtWVL+jl8R9XLogH
-sE/m0yMPs2IowevJoQ95KRZIirLywZ8QgTsySEv9U4hx2CdKpn7IeRECgYEA/KR9
-WI1n6pxDbxcjWMaOdziIcgDBk7v05Qssb1OePiz+y+zfrBVqDjsvsokRLoElSAkR
-TAV+/9hRgAu4cZJpP0FMdFe+sVkr1UfcDqvJdgumBL+xUNxRV/QFvuprLa6XbiQO
-jUclJR6BPdXeVQPDUHuQBgnwXrJdRtMl9Fj8GGsCgYAhZKVo/e0OyyHczCFhy1Jk
-dTqV8//7qdzff8y90aFuqiicUNuIciXLBplKIrURhNfTnRsZ/9hr8ZR29Rw3oQSg
-pZ2xgcBOb4QER0WY1dQN3H7B726abF/Rm3O9kor5dB75EzoIvFgXaWP5O99RMMy3
-nWv4yMbXbeiH4wA1okfOEQKBgQDkaAnyrxUN5GyK2M5aCljurCufddOMrtb+5BUu
-KNjduWw6DVNCjrGtYBEFRipEcvmzoI8EvctNntJAA1ijRQzl5TEr1dBPIiEg17C5
-itG+aVWU4YF7a1QXQkSXj/OJ/1hkeTC2xWVto6CQuPQixB4mey+AZifsVTFDQM4F
-lRWFNQKBgQDQWRXaJgc4Jeur1/I1iMAcihN/o4Lra4baM07FdpFWrePJ4IimXHG+
-buws6BuytnQP56hqIQYLQSWCF192dcnHNbodXz48Ug6rKLSBalxH3pvThYLpkBSk
-7OrfHzO4TTVaCH1mcPjzj9vmRog2tvrF/m6/8UAZQIBGDv2+cHk4rA==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAyPsAwtLYyqcu
+kL7YSn+8Pi2YbdSexPmCtpRZeMu/qQhSnxtTNVHshpEpLRBX2e7TI+9aIQXQph2D
+1KdSFbd43JiqpurPZdkBZZAtRXPoLtcAVvZ4/5E52+RmhYfst90vntGOZeYkCdBb
+PuwujgwgUPr/GvBhbpGHrTMCkO35ZYbmqXCEBQUprxuFGrnOay4i8jX9hUuBYv92
+5TiEdaiClXR9oYrtwEYSt/FFXlRrM8xDQQ4OKJDOQ6UOnfsDl2S3DfVslHTyO6ca
+akwZywXUlkjAFDApaXtWR7Mh0sd2WXs4pRYwJLi5OZpARDdijLq8FsiugmU7314f
+dljwbI5TAgMBAAECggEAESuVV3sCpnZeL4KKzN7Nw6lSDEpz7nQiuOakDdf5Zaeb
+ayhqmZ2dH1DY6u7tjrWFVN7VeZSJXQz+gfhVsrTmc2hKXKCjNzed/UbbcXzHFv3c
+/lXAfARfHeUc0ZjBA29Yzt35UhJ3Texl10qiZH8YS2SLBl+S20qqwYfGjEr2NwkR
+SAnUvRX8/BNGsl+HKoYcqw9qGagWNOeshWmXMraf/UVu9F8UvXP56Jjhv5PnTfov
+XQ5NuaDCJLStL/ohRS13cM+q9AGXSGG66E9GUQhfOBRbuodrCLoymdyxHYRltHk9
+zzq2AYOsxItQNHw5YwJGBoj6I/FaZUD5tDyhoadzSQKBgQDheVGyl/Upjx219cjY
+d8xQ5Y/Fth/UVo30lHbT7Zht7UMlCvce87/sZ2JLFWqTxNFKiWXjGjjMWWa2oaCl
+8dTKRhNGVJYz0PNAblCJCyb2FkXWd9ozvmJSWhv79mVecsodkPspRk5esStgTeVu
+yqpJTgDG0boCuWb0gU8+BmN9DQKBgQDa4rPEHBk9iUbCmS2V/N/lvZ9DRv5RL7/i
+WxSANOSQ8czAnEkYfbhGhaAxX3c+kmhpoyb22jbqVF89FB56bEuAVWNAiqiK/QL1
+/7rpxTxp5V3U4VQwQITuTNteTcopEwtXJK42ldGwurroKP+pLj7DUlLaTk9STKPg
+uinUgmUg3wKBgCmL3U33Sil6QZNB0txwVqmhYzifMoZB3K5wnOS4Jxo6WeD9gEOn
+znmVIzuKmrTX02jUoH2UW1rsLk0Aw0VQplEPUIXpGDQ8EFaS/SwDbg5yVDQMqZxX
+PG7IQ9fNsygQJsYD7QPR/KbeJov8ToZ3uaEASoxYINpXp2zuVteq/bIRAoGADOwH
+StOR1eUtzT03yLwGB80bAuDFEMvt2xIfcrYsrDXqLZDMa+q4H0myPFfzdTk1es8L
+9NTLGyhh+vweFIIiLvBbjKri6lmnfBhd04E2YNYOpQusabDVaDAXX0jeX3BlYf6j
+XkuX9oP/lscc2MMHJ4bLp2GqIyStJA45e/c6uycCgYBt9fjD8qLYVA2BZ8FALiXz
+oTRaMbKKENtIS4jYpEFJs95M6AeYUF6itwkawKZG3Uoa+1Iqz11JZqRTsmby/RYP
+vdly8yYIhg039yKWpOOJrD3BuulZKGwoWKjkEHY+GZjT/L6/pH/OEiTPYaFUqDik
+mc5PGGx13AoyVw9N5G4VhA==
+-----END PRIVATE KEY-----
diff --git a/test/rubygems/public_cert.pem b/test/rubygems/public_cert.pem
index 7481c26b794697..e640a9132395aa 100644
--- a/test/rubygems/public_cert.pem
+++ b/test/rubygems/public_cert.pem
@@ -2,19 +2,19 @@
MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoYDzk5
OTkxMjMxMjM1OTU5WjAqMQ8wDQYDVQQDDAZub2JvZHkxFzAVBgoJkiaJk/IsZAEZ
-FgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ULcfpDb
-oY5uWVdOIkF4AtRui7PPFoaKfBl5hiGFcpYRx8DQPyT7bbD8nKd14Rhzb0nHCMU3
-DEz8PLJCmWm3NszVDkEJws1BpCGak6vKiyNa5hZbUlQMZMbecSDSpEKu2PBWgBT7
-4qg2RBugzTAVAnGQGezQnWyv47kyXvdjMoq11VZa+Dz2izHJvjBHGQShr1r9v39q
-Irtah5CEXTRxEqhr96gg3y6xOPMqxi50dS0RBaJsPsjFZ1jecye0Z/WPItiLjSVV
-RssUXK1a2VkYxUqkxUg4wwJD57H4TEZBomtAXlASo+rUv8G9eBNmS/k/oJLdiMF1
-ULb+e1+izeAyGwIDAQABo10wWzAZBgNVHREEEjAQgQ5ub2JvZHlAZXhhbXBsZTAd
-BgNVHQ4EFgQUsRpUCWdFYAIC1870HWBKid/nWNkwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADggEBAAYrbeZLQujvqrzAa6NN
-QsiGLSVoF+ZcySQH+rpoqcvbd8zLKz/vH+SoMM6db4OUgD8BKaeBb8dGhzz/lE8m
-YUqW/La4xvf/ffW5yze51Rtr1bPw1Tjrk92nE630Unjf0ZZO0h8shTmq/WlXiEqg
-cXxfbZiPP0KZkhn4ulf+RBbKKQGrLYvaVrCZcowSjLWzcfredYxElOpcgHCrL2pl
-2ZAjCySqAUpYo8HTZwgY/DeeGS3V4fZ06ZDoG20cxi7t8R+AcNbEfaTMzG3oe5qN
-A8+a3Qcf5M4yiJtXRNusMKeoRwLDkYRX9u76iOI5LfKTSqnUyhrUQcSYCTFO4y/V
-P48=
+FgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwMj7AMLS
+2MqnLpC+2Ep/vD4tmG3UnsT5graUWXjLv6kIUp8bUzVR7IaRKS0QV9nu0yPvWiEF
+0KYdg9SnUhW3eNyYqqbqz2XZAWWQLUVz6C7XAFb2eP+ROdvkZoWH7LfdL57RjmXm
+JAnQWz7sLo4MIFD6/xrwYW6Rh60zApDt+WWG5qlwhAUFKa8bhRq5zmsuIvI1/YVL
+gWL/duU4hHWogpV0faGK7cBGErfxRV5UazPMQ0EODiiQzkOlDp37A5dktw31bJR0
+8junGmpMGcsF1JZIwBQwKWl7VkezIdLHdll7OKUWMCS4uTmaQEQ3Yoy6vBbIroJl
+O99eH3ZY8GyOUwIDAQABo10wWzAZBgNVHREEEjAQgQ5ub2JvZHlAZXhhbXBsZTAd
+BgNVHQ4EFgQUh1Cs0fV5ulH0jrlkl1ub+1cnygswDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADggEBAA0Rjn/N9gj5/Q/NGie0
+KOSHHh8/ecp2NaX7E0u88kN6tMxkGYyJo+7otMkWvjOi5vAtuX/LXNFNev1ei8j1
+hjlBQu4skVlzYeZxTRDujnN+lqvdToxo587A0xKhw76joTlQy/2X2xxqNRcfKfY3
+3KipFf6SymJ8WN72miFi2vz5e386Kum5TdWHRIk+8xg6EbV56RRatVKxXpkKJOl7
+hoTrXg7sraUqaYCwf8Pqx5lruHmRIayaUgzn+Kwv2mWG0urCiugirC9jRzebF+Z6
+pwUyM/uNXiWrQHIhZK+S9wV5g1Jw4L/+c5SNKEYQfWsTuFYGiKxuvf+tQHt8ddWM
+ULQ=
-----END CERTIFICATE-----
diff --git a/test/rubygems/public_cert_32.pem b/test/rubygems/public_cert_32.pem
index efcf7c0ed7437c..3b0b7efcdef227 100644
--- a/test/rubygems/public_cert_32.pem
+++ b/test/rubygems/public_cert_32.pem
@@ -2,18 +2,18 @@
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
-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
+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
-----END CERTIFICATE-----
diff --git a/test/rubygems/public_key.pem b/test/rubygems/public_key.pem
index c233b35e7c8242..f7cfda4bb56b55 100644
--- a/test/rubygems/public_key.pem
+++ b/test/rubygems/public_key.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ULcfpDboY5uWVdOIkF4
-AtRui7PPFoaKfBl5hiGFcpYRx8DQPyT7bbD8nKd14Rhzb0nHCMU3DEz8PLJCmWm3
-NszVDkEJws1BpCGak6vKiyNa5hZbUlQMZMbecSDSpEKu2PBWgBT74qg2RBugzTAV
-AnGQGezQnWyv47kyXvdjMoq11VZa+Dz2izHJvjBHGQShr1r9v39qIrtah5CEXTRx
-Eqhr96gg3y6xOPMqxi50dS0RBaJsPsjFZ1jecye0Z/WPItiLjSVVRssUXK1a2VkY
-xUqkxUg4wwJD57H4TEZBomtAXlASo+rUv8G9eBNmS/k/oJLdiMF1ULb+e1+izeAy
-GwIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwMj7AMLS2MqnLpC+2Ep/
+vD4tmG3UnsT5graUWXjLv6kIUp8bUzVR7IaRKS0QV9nu0yPvWiEF0KYdg9SnUhW3
+eNyYqqbqz2XZAWWQLUVz6C7XAFb2eP+ROdvkZoWH7LfdL57RjmXmJAnQWz7sLo4M
+IFD6/xrwYW6Rh60zApDt+WWG5qlwhAUFKa8bhRq5zmsuIvI1/YVLgWL/duU4hHWo
+gpV0faGK7cBGErfxRV5UazPMQ0EODiiQzkOlDp37A5dktw31bJR08junGmpMGcsF
+1JZIwBQwKWl7VkezIdLHdll7OKUWMCS4uTmaQEQ3Yoy6vBbIroJlO99eH3ZY8GyO
+UwIDAQAB
-----END PUBLIC KEY-----
diff --git a/test/rubygems/test_gem_commands_cert_command.rb b/test/rubygems/test_gem_commands_cert_command.rb
index ed1a1c8627bfbf..b9207cdcbcd39a 100644
--- a/test/rubygems/test_gem_commands_cert_command.rb
+++ b/test/rubygems/test_gem_commands_cert_command.rb
@@ -329,6 +329,21 @@ def test_execute_build_ec_key
assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
end
+ def test_execute_build_bad_key
+ @cmd.handle_options %W[
+ --build nobody@example.com
+ --private-key #{PUBLIC_KEY_FILE}
+ ]
+
+ e = assert_raise Gem::Security::Exception do
+ use_ui @ui do
+ @cmd.execute
+ end
+ end
+
+ assert_equal "incorrect signing key for signing", e.message
+ end
+
def test_execute_certificate
use_ui @ui do
@cmd.handle_options %W[--certificate #{PUBLIC_CERT_FILE}]
@@ -377,7 +392,7 @@ def test_execute_private_key
assert_equal "", @ui.output
assert_equal "", @ui.error
- assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
+ assert_equal PRIVATE_KEY.private_to_pem, @cmd.options[:key].private_to_pem
end
def test_execute_encrypted_private_key
@@ -388,7 +403,7 @@ def test_execute_encrypted_private_key
assert_equal "", @ui.output
assert_equal "", @ui.error
- assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
+ assert_equal ENCRYPTED_PRIVATE_KEY.private_to_pem, @cmd.options[:key].private_to_pem
end
def test_execute_remove
@@ -468,7 +483,7 @@ def test_execute_remove_twice
def test_execute_sign
path = File.join @tempdir, "cert.pem"
- Gem::Security.write ALTERNATE_CERT, path, 0o600
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
@@ -497,7 +512,7 @@ def test_execute_sign
def test_execute_sign_encrypted_key
path = File.join @tempdir, "cert.pem"
- Gem::Security.write ALTERNATE_CERT, path, 0o600
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
@@ -528,13 +543,13 @@ def test_execute_sign_default
FileUtils.mkdir_p File.join Gem.user_home, ".gem"
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
- Gem::Security.write PRIVATE_KEY, private_key_path
+ Gem::Security.write_private_key PRIVATE_KEY, private_key_path
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
- Gem::Security.write PUBLIC_CERT, public_cert_path
+ Gem::Security.write_certificate PUBLIC_CERT, public_cert_path
path = File.join @tempdir, "cert.pem"
- Gem::Security.write ALTERNATE_CERT, path, 0o600
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
@@ -560,13 +575,13 @@ def test_execute_sign_default_encrypted_key
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
- Gem::Security.write ENCRYPTED_PRIVATE_KEY, private_key_path, 0o600, PRIVATE_KEY_PASSPHRASE
+ Gem::Security.write_private_key ENCRYPTED_PRIVATE_KEY, private_key_path, 0o600, PRIVATE_KEY_PASSPHRASE
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
- Gem::Security.write PUBLIC_CERT, public_cert_path
+ Gem::Security.write_certificate PUBLIC_CERT, public_cert_path
path = File.join @tempdir, "cert.pem"
- Gem::Security.write ALTERNATE_CERT, path, 0o600
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
@@ -592,10 +607,10 @@ def test_execute_sign_no_cert
FileUtils.mkdir_p File.join Gem.user_home, ".gem"
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
- Gem::Security.write PRIVATE_KEY, private_key_path
+ Gem::Security.write_private_key PRIVATE_KEY, private_key_path
path = File.join @tempdir, "cert.pem"
- Gem::Security.write ALTERNATE_CERT, path, 0o600
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
@@ -620,10 +635,10 @@ def test_execute_sign_no_key
FileUtils.mkdir_p File.join Gem.user_home, ".gem"
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
- Gem::Security.write PUBLIC_CERT, public_cert_path
+ Gem::Security.write_certificate PUBLIC_CERT, public_cert_path
path = File.join @tempdir, "cert.pem"
- Gem::Security.write ALTERNATE_CERT, path, 0o600
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
@@ -644,12 +659,32 @@ def test_execute_sign_no_key
assert_equal expected, @ui.error
end
+ def test_execute_sign_bad_key
+ path = File.join @tempdir, "cert.pem"
+ Gem::Security.write_certificate ALTERNATE_CERT, path, 0o600
+
+ @cmd.handle_options %W[
+ --private-key #{PUBLIC_KEY_FILE}
+ --certificate #{PUBLIC_CERT_FILE}
+
+ --sign #{path}
+ ]
+
+ e = assert_raise Gem::Security::Exception do
+ use_ui @ui do
+ @cmd.execute
+ end
+ end
+
+ assert_equal "incorrect signing key for signing", e.message
+ end
+
def test_execute_re_sign
gem_path = File.join Gem.user_home, ".gem"
Dir.mkdir gem_path
path = File.join @tempdir, "cert.pem"
- Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0o600
+ Gem::Security.write_certificate EXPIRED_PUBLIC_CERT, path, 0o600
assert_equal "/CN=nobody/DC=example", EXPIRED_PUBLIC_CERT.issuer.to_s
@@ -681,7 +716,7 @@ def test_execute_re_sign_with_cert_expiration_length_days
Dir.mkdir gem_path
path = File.join @tempdir, "cert.pem"
- Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0o600
+ Gem::Security.write_certificate EXPIRED_PUBLIC_CERT, path, 0o600
assert_equal "/CN=nobody/DC=example", EXPIRED_PUBLIC_CERT.issuer.to_s
@@ -793,14 +828,6 @@ def test_handle_options_key_bad
assert_equal "invalid argument: --private-key #{bad}: invalid RSA, DSA, or EC key",
e.message
-
- e = assert_raise Gem::OptionParser::InvalidArgument do
- @cmd.handle_options %W[--private-key #{PUBLIC_KEY_FILE}]
- end
-
- assert_equal "invalid argument: " \
- "--private-key #{PUBLIC_KEY_FILE}: private key not found",
- e.message
end
def test_handle_options_sign
@@ -815,7 +842,7 @@ def test_handle_options_sign
--sign #{CHILD_CERT_FILE}
]
- assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
+ assert_equal PRIVATE_KEY.private_to_pem, @cmd.options[:key].private_to_pem
assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
assert_equal [ALTERNATE_CERT_FILE, CHILD_CERT_FILE], @cmd.options[:sign]
@@ -833,7 +860,7 @@ def test_handle_options_sign_encrypted_key
--sign #{CHILD_CERT_FILE}
]
- assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
+ assert_equal ENCRYPTED_PRIVATE_KEY.private_to_pem, @cmd.options[:key].private_to_pem
assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
assert_equal [ALTERNATE_CERT_FILE, CHILD_CERT_FILE], @cmd.options[:sign]
diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb
index be7cfd2843f588..99763f4df19ec2 100644
--- a/test/rubygems/test_gem_package.rb
+++ b/test/rubygems/test_gem_package.rb
@@ -272,7 +272,7 @@ def test_build_auto_signed
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
- Gem::Security.write PRIVATE_KEY, private_key_path
+ Gem::Security.write_private_key PRIVATE_KEY, private_key_path
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
FileUtils.cp PUBLIC_CERT_PATH, public_cert_path
@@ -318,7 +318,7 @@ def test_build_auto_signed_encrypted_key
FileUtils.cp ENCRYPTED_PRIVATE_KEY_PATH, private_key_path
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
- Gem::Security.write PUBLIC_CERT, public_cert_path
+ Gem::Security.write_certificate PUBLIC_CERT, public_cert_path
spec = Gem::Specification.new "build", "1"
spec.summary = "build"
diff --git a/test/rubygems/test_gem_safe_yaml.rb b/test/rubygems/test_gem_safe_yaml.rb
index 15c8f84d21be38..5ecf263c49ee0f 100644
--- a/test/rubygems/test_gem_safe_yaml.rb
+++ b/test/rubygems/test_gem_safe_yaml.rb
@@ -950,6 +950,45 @@ def test_roundtrip_empty_collections
assert_equal({}, loaded["hash"])
end
+ def test_load_url_key_and_value
+ # Bundler mirror settings use URLs both as mapping key and value
+ yaml = "BUNDLE_MIRROR__HTTPS://RUBYGEMS__ORG/: http://example-mirror.rubygems.org\n"
+
+ expected = { "BUNDLE_MIRROR__HTTPS://RUBYGEMS__ORG/" => "http://example-mirror.rubygems.org" }
+ assert_equal expected, yaml_load(yaml)
+ end
+
+ def test_psych_interop_roundtrip
+ require "yaml"
+
+ hash = {
+ "a_joke" => {
+ "my-stand" => "I can totally keep secrets",
+ "but" => "The people I tell them to can't :P",
+ "wouldn't it be funny if this string were empty?" => "",
+ },
+ "more" => {
+ "first" => [
+ "Can a kangaroo jump higher than a house?",
+ "Of course, a house doesn't jump at all.",
+ ],
+ "second" => [
+ "What did the sea say to the sand?",
+ "Nothing, it simply waved.",
+ ],
+ "array with empty string" => [""],
+ },
+ "sales" => {
+ "item" => "A Parachute",
+ "description" => "Only used once, never opened.",
+ },
+ "one-more" => "I'd tell you a chemistry joke but I know I wouldn't get a reaction.",
+ }
+
+ assert_equal hash, Gem::YAMLSerializer.load(Psych.dump(hash))
+ assert_equal hash, Psych.load(Gem::YAMLSerializer.dump(hash))
+ end
+
def test_load_double_quoted_escape_sequences
result = yaml_load("newline: \"hello\\nworld\"")
assert_equal "hello\nworld", result["newline"]
diff --git a/test/rubygems/test_gem_security.rb b/test/rubygems/test_gem_security.rb
index 82449a862617fe..e97af3b959e95c 100644
--- a/test/rubygems/test_gem_security.rb
+++ b/test/rubygems/test_gem_security.rb
@@ -29,7 +29,7 @@ def test_class_create_cert
assert_equal 2, cert.version
assert_equal 5, cert.serial
- assert_equal key.public_key.to_pem, cert.public_key.to_pem
+ assert_equal key.public_key.public_to_pem, cert.public_key.public_to_pem
assert_in_delta Time.now, cert.not_before, 10
assert_in_delta Time.now + 60, cert.not_after, 10
assert_equal name.to_s, cert.subject.to_s
@@ -46,8 +46,6 @@ def test_class_create_cert
key_ident = cert.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
assert_equal 59, key_ident.value.length
- assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
- key_ident.value
assert_equal "", cert.issuer.to_s
assert_equal name.to_s, cert.subject.to_s
@@ -73,7 +71,7 @@ def test_class_create_cert_email
assert_equal 2, cert.version
assert_equal 1, cert.serial
- assert_equal key.public_key.to_pem, cert.public_key.to_pem
+ assert_equal key.public_key.public_to_pem, cert.public_key.public_to_pem
assert_in_delta Time.now, cert.not_before, 10
assert_in_delta Time.now + 60, cert.not_after, 10
assert_equal name.to_s, cert.subject.to_s
@@ -94,8 +92,6 @@ def test_class_create_cert_email
key_ident = cert.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
assert_equal 59, key_ident.value.length
- assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
- key_ident.value
end
def test_class_create_key
@@ -120,15 +116,15 @@ def test_class_create_key_raises_unknown_algorithm
end
def test_class_get_public_key_rsa
- pkey_pem = PRIVATE_KEY.public_key.to_pem
+ pkey_pem = PRIVATE_KEY.public_key.public_to_pem
- assert_equal pkey_pem, Gem::Security.get_public_key(PRIVATE_KEY).to_pem
+ assert_equal pkey_pem, Gem::Security.get_public_key(PRIVATE_KEY).public_to_pem
end
def test_class_get_public_key_ec
pkey = Gem::Security.get_public_key(EC_KEY)
- assert_respond_to pkey, :to_pem
+ assert_respond_to pkey, :public_to_pem
end
def test_class_email_to_name
@@ -202,7 +198,7 @@ def test_class_sign
signed = Gem::Security.sign cert, key, PUBLIC_CERT, 60
- assert_equal key.public_key.to_pem, signed.public_key.to_pem
+ assert_equal key.public_key.public_to_pem, signed.public_key.public_to_pem
assert_equal signee.to_s, signed.subject.to_s
assert_equal issuer.to_s, signed.issuer.to_s
@@ -225,8 +221,6 @@ def test_class_sign
key_ident =
signed.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
assert_equal 59, key_ident.value.length
- assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
- key_ident.value
assert signed.verify key
end
@@ -239,7 +233,7 @@ def test_class_sign_AltName
signed = Gem::Security.sign cert, PRIVATE_KEY, PUBLIC_CERT, 60
- assert_equal PUBLIC_KEY.to_pem, signed.public_key.to_pem
+ assert_equal PUBLIC_KEY.public_to_pem, signed.public_key.public_to_pem
assert_equal signee.to_s, signed.subject.to_s
assert_equal issuer.to_s, signed.issuer.to_s
@@ -267,8 +261,6 @@ def test_class_sign_AltName
key_ident =
signed.extensions.find {|ext| ext.oid == "subjectKeyIdentifier" }
assert_equal 59, key_ident.value.length
- assert_equal "B1:1A:54:09:67:45:60:02:02:D7:CE:F4:1D:60:4A:89:DF:E7:58:D9",
- key_ident.value
assert signed.verify PUBLIC_KEY
end
@@ -281,37 +273,37 @@ def test_class_trust_dir
assert_equal expected, trust_dir.dir
end
- def test_class_write
+ def test_class_write_private_key
key = Gem::Security.create_key "rsa"
path = File.join @tempdir, "test-private_key.pem"
- Gem::Security.write key, path
+ Gem::Security.write_private_key key, path
assert_path_exist path
key_from_file = File.read path
- assert_equal key.to_pem, key_from_file
+ assert_equal key.private_to_pem, key_from_file
end
- def test_class_write_encrypted
+ def test_class_write_private_key_encrypted
key = Gem::Security.create_key "rsa"
path = File.join @tempdir, "test-private_encrypted_key.pem"
passphrase = "It should be long."
- Gem::Security.write key, path, 0o600, passphrase
+ Gem::Security.write_private_key key, path, 0o600, passphrase
assert_path_exist path
key_from_file = OpenSSL::PKey::RSA.new File.read(path), passphrase
- assert_equal key.to_pem, key_from_file.to_pem
+ assert_equal key.private_to_pem, key_from_file.private_to_pem
end
- def test_class_write_encrypted_cipher
+ def test_class_write_private_key_encrypted_cipher
key = Gem::Security.create_key "rsa"
path = File.join @tempdir, "test-private_encrypted__with_non_default_cipher_key.pem"
@@ -320,16 +312,27 @@ def test_class_write_encrypted_cipher
cipher = OpenSSL::Cipher.new "AES-192-CBC"
- Gem::Security.write key, path, 0o600, passphrase, cipher
+ Gem::Security.write_private_key key, path, 0o600, passphrase, cipher
assert_path_exist path
- key_file_contents = File.read(path)
+ # Gem::Security.write_private_key outputs PKCS #8 format which doesn't have
+ # DEK-Info header to assert cipher name unlike PKCS #1 RSAPrivateKey.
+ # We cannot assert the cipher name in the PEM text.
+ key_from_file = OpenSSL::PKey.read File.read(path), passphrase
- assert key_file_contents.split("\n")[2].match(cipher.name)
+ assert_equal key.private_to_pem, key_from_file.private_to_pem
+ end
+
+ def test_class_write_certificate
+ path = File.join @tempdir, "test-public_cert.pem"
+
+ Gem::Security.write_certificate PUBLIC_CERT, path
+
+ assert_path_exist path
- key_from_file = OpenSSL::PKey::RSA.new key_file_contents, passphrase
+ cert_from_file = File.read path
- assert_equal key.to_pem, key_from_file.to_pem
+ assert_equal PUBLIC_CERT.to_pem, cert_from_file
end
end if Gem::HAVE_OPENSSL && !Gem.java_platform?
diff --git a/test/rubygems/test_gem_security_signer.rb b/test/rubygems/test_gem_security_signer.rb
index f4799cbd46867e..d0541b0a341f80 100644
--- a/test/rubygems/test_gem_security_signer.rb
+++ b/test/rubygems/test_gem_security_signer.rb
@@ -58,14 +58,14 @@ def test_initialize_default
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
- Gem::Security.write PRIVATE_KEY, private_key_path
+ Gem::Security.write_private_key PRIVATE_KEY, private_key_path
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
- Gem::Security.write PUBLIC_CERT, public_cert_path
+ Gem::Security.write_certificate PUBLIC_CERT, public_cert_path
signer = Gem::Security::Signer.new nil, nil
- assert_equal PRIVATE_KEY.to_pem, signer.key.to_pem
+ assert_equal PRIVATE_KEY.private_to_pem, signer.key.private_to_pem
assert_equal [PUBLIC_CERT.to_pem], signer.cert_chain.map(&:to_pem)
end
@@ -120,16 +120,8 @@ def test_sign
signature = signer.sign "hello"
- expected = <<-EXPECTED
-FmrCYxEXW3dgYYNMxPdS16VrdXT+d5nyXTVlRm64ZHSgMxMAaPtQJsVYv73m
-DWHTzNnLhhINSpgBMLh5a4atM52yxVdkPUTgqIH+LeIPBXn8xaP5JLmfDcmI
-tBpc/9DhS3v9iKCX40igAArFu7Gg3swbgQ61SP+U22LvG5nDQZQz3sudtsw3
-qKPykFVaYjrRwzvBdSdJ1PwlAsanSwcwS/GKPtmE/ykZ6X5XOx7wvCDL/zGy
-B8khkB8hDKC6moCzebmUxCBmTmXD0Wjzon+bf4MOriVE3a0ySGRvpr1mKR2+
-9EaVo7pDJLEM487+xg1CAZHRhwshd6II00XEzG/jBQ==
- EXPECTED
-
- assert_equal expected, [signature].pack("m")
+ digest = OpenSSL::Digest.new(Gem::Security::DIGEST_NAME)
+ assert PRIVATE_KEY.verify(digest, signature, "hello")
end
def test_sign_expired
@@ -147,10 +139,10 @@ def test_sign_expired_auto_update
FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), mode: 0o700
private_key_path = File.join(Gem.user_home, ".gem", "gem-private_key.pem")
- Gem::Security.write PRIVATE_KEY, private_key_path
+ Gem::Security.write_private_key PRIVATE_KEY, private_key_path
cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
- Gem::Security.write EXPIRED_CERT, cert_path
+ Gem::Security.write_certificate EXPIRED_CERT, cert_path
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
@@ -177,13 +169,13 @@ def test_sign_expired_auto_update_exists
expired_path =
File.join Gem.user_home, "gem-public_cert.pem.expired.#{expiry}"
- Gem::Security.write EXPIRED_CERT, expired_path
+ Gem::Security.write_certificate EXPIRED_CERT, expired_path
private_key_path = File.join(Gem.user_home, "gem-private_key.pem")
- Gem::Security.write PRIVATE_KEY, private_key_path
+ Gem::Security.write_private_key PRIVATE_KEY, private_key_path
cert_path = File.join Gem.user_home, "gem-public_cert.pem"
- Gem::Security.write EXPIRED_CERT, cert_path
+ Gem::Security.write_certificate EXPIRED_CERT, cert_path
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
diff --git a/test/rubygems/wrong_key_cert.pem b/test/rubygems/wrong_key_cert.pem
index 2f2cffbc61c864..47a9f5a5c1ac39 100644
--- a/test/rubygems/wrong_key_cert.pem
+++ b/test/rubygems/wrong_key_cert.pem
@@ -2,18 +2,18 @@
MIIDDTCCAfWgAwIBAgIBEjANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoYDzk5
OTkxMjMxMjM1OTU5WjAqMQ8wDQYDVQQDDAZub2JvZHkxFzAVBgoJkiaJk/IsZAEZ
-FgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApebGm7NO
-nx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0AnYNiDZAG3J/gFQmYZ9gJ98rzE
-wfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SFC+1f8KVuH4tLXORW30DwayPh
-NxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMKqaTTPjxoXJIcgacyprkNgIq4
-8cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RRftEwktFo8vQgDBo9NT/EqoE7
-2tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgOQSXCGPsM/AEdFrh/LKQQv2M/
-M7WNevnEUgsEIwIDAQABozwwOjAZBgNVHREEEjAQgQ5ub2JvZHlAZXhhbXBsZTAd
-BgNVHQ4EFgQUYPwS8g98+4Tq/8gcEK1iilkGXH4wDQYJKoZIhvcNAQELBQADggEB
-AJacpAT2GQQn5Rmb/LYaPhguWFHEdjHBO6rU0p7tE8QJW5pwMgim0mFtQlbuXE2L
-mbHrYCyRgVyaPV9gNiFg1sLzQMmmG4Afg1N4cpdg8zLZFZho+eyYGRkH+EtrAN0Q
-l8l603zovMXj8q8Q1eeurxkDHA6mDgwwMGiBQgAiPixQVOjvL+5M5PkwNw/kVzjA
-0EXumGQkeZ1jUAkVjp7uWbyoVatamUcpYvo51NQQQeuqwzdo2oDYLa27axWxaqj2
-m4TKsz2WnnrSnrpq3NnflXfWcOrnXI3odNlhQoPmtZQVt6P8pNbGrx4XD/WTGkGw
-i/6jlkwwjK7A7dSepfnTI4Y=
+FgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1JNbNmB
+LCW7Cw6lZePL9d3gOi7ZoNSXEu4v3d1b0oMLuG1k1KPbB3GcXn/4T2wZciuItuVl
+PFAvboxXIa+Ym9K2prhG94VTAUX26l9/ZO6dqZACfOMK6ZM8ObY7QX9GE/DYHtRk
+l6DFFY1NlFBqrsWvCDFmmO94XeKC+ANQDMgg3Hx/UO/OVRoczcZncE0g6kcyxKlN
+2Sb0eu7LPeX6QbQhUqbhj9Vf2wom3uvy0eSyESS7YFOQSotkgdFCUk7zr17aHco1
+tnyh9S1sxNNaG9II1/uET2Xer/JierXrXbui1vIKelfrWUqGWvZQqJVliG/WAy/8
+Mqf/zUqFDNKjSQIDAQABozwwOjAZBgNVHREEEjAQgQ5ub2JvZHlAZXhhbXBsZTAd
+BgNVHQ4EFgQUPHEhRMt/+2vNQzsJIr1VfuRD8yIwDQYJKoZIhvcNAQELBQADggEB
+AAqsefM42X5UotNval4JuZtp3yrRpyuM+v/rYmw099+9t57QRg7KJOG7MRgIM0cR
+zorVgxifGyQwYkKBqrKULxMDPuvJf4jWcIq601Tduado6i6S5YNUVaEBFH+qUt71
+mRdD5YIzipJv7xJEyimDu7pN0cvBegIbXXC+BkHy/4artOLgttrglOHp9uzlDBO4
+pX5e8mBlg/5T9qq2aZ5Mj0VMQTJ9q14FQ6bgLwGuYq1q4klgt8FqtyIyofmQ5O/m
+gAUYkHdFym+bhOcqMh3/5BdCM8O10jSbEBUhlqWU2C44E+yqoQqVKxPVoPhwbgqP
+suC+3lvYdWE7TxiJSwvqHl0=
-----END CERTIFICATE-----
diff --git a/test/rubygems/wrong_key_cert_32.pem b/test/rubygems/wrong_key_cert_32.pem
index aca829ab4487b0..a17ecd46f228b5 100644
--- a/test/rubygems/wrong_key_cert_32.pem
+++ b/test/rubygems/wrong_key_cert_32.pem
@@ -2,18 +2,18 @@
MIIDCzCCAfOgAwIBAgIBEzANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTEyMDEwMTAwMDAwMFoXDTM4
MDExOTAzMTQwN1owKjEPMA0GA1UEAwwGbm9ib2R5MRcwFQYKCZImiZPyLGQBGRYH
-ZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXmxpuzTp8f
-g7VhtcULCQX038DZWb382OtZ5WXHK4VOr8dAJ2DYg2QBtyf4BUJmGfYCffK8xMHy
-zAhqvUf02TPpQBGi4c2GQrt1+EHYSsa9cWf0hQvtX/Clbh+LS1zkVt9A8Gsj4TcZ
-6zr7qeKVi4mLl1EmaVfQhjLz0lAltqHYTJATCqmk0z48aFySHIGnMqa5DYCKuPHE
-r6lhv3vx6zEbZKrxWw+bWtNLjtZpaWo2GMNUUX7RMJLRaPL0IAwaPTU/xKqBO9rX
-32g5y6uq0K1bcOCq/X8u++Q4zQFl8oggY5yYDkElwhj7DPwBHRa4fyykEL9jPzO1
-jXr5xFILBCMCAwEAAaM8MDowGQYDVR0RBBIwEIEObm9ib2R5QGV4YW1wbGUwHQYD
-VR0OBBYEFGD8EvIPfPuE6v/IHBCtYopZBlx+MA0GCSqGSIb3DQEBCwUAA4IBAQBE
-lq/rPaPT+5uui42u4BTFayrQU9EFik9xPG6WJw+IJ/5CprECj6h90FC+GaMNeu2Z
-R0l+iEfgx4xBM4DERiRVLZIlHbZzuPp0YRYH9gyJot/+0piaAcnUEvjz2Z8axoFq
-lE3/q4s6Yw8xdqwxvc5kiwymv2nEm4+v5w6Pb3K/fP/QQLvDUBWrBUMHPgdYXYk2
-zvc58BBwgGDSpFRO0tw+lnqMTM1y+fbpfuvP9TY1m4y13nuw/g7KxVxYolAWVQs3
-TptnJqqzEwdFa2S9BidUIlDRRY8cuhY6R3DM6THNLjR3c1oyf04nhT3sd/ilAJdD
-YjnEtcLlkjxZyLLoWjn2
+ZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMNSTWzZgSwl
+uwsOpWXjy/Xd4Dou2aDUlxLuL93dW9KDC7htZNSj2wdxnF5/+E9sGXIriLblZTxQ
+L26MVyGvmJvStqa4RveFUwFF9upff2TunamQAnzjCumTPDm2O0F/RhPw2B7UZJeg
+xRWNTZRQaq7FrwgxZpjveF3igvgDUAzIINx8f1DvzlUaHM3GZ3BNIOpHMsSpTdkm
+9Hruyz3l+kG0IVKm4Y/VX9sKJt7r8tHkshEku2BTkEqLZIHRQlJO869e2h3KNbZ8
+ofUtbMTTWhvSCNf7hE9l3q/yYnq16127otbyCnpX61lKhlr2UKiVZYhv1gMv/DKn
+/81KhQzSo0kCAwEAAaM8MDowGQYDVR0RBBIwEIEObm9ib2R5QGV4YW1wbGUwHQYD
+VR0OBBYEFDxxIUTLf/trzUM7CSK9VX7kQ/MiMA0GCSqGSIb3DQEBCwUAA4IBAQAn
+kCwy1TuV5Cyxtsvm5jAQIjGngVM1DBSvAE+cQDesRs1IUC9KWZ/89JukfKkhBITf
+4jtdi3gCvNcfQzEJcwFx7K8ab3zB4Vl32qGfd4o0eox7d/yUs34NUk2Lk8LBZYZr
+ujBepMXFkHnyHeS4p5jiAGBUfpqqs0Mes5d2rOTwy1ig/tH7kl1B1cnNhe5xlVrn
+RqaxNqznWS+fInOFqeQGUPhB3d/Z54b6YogORutFltxEnosKgLg2tS8yDC5JmZX2
+RQEYHQRIv8AAcsenAb9tg84CGrfVspKcI4T2UV5yiyB5neqnPS10X59+PQoOia8D
+OIPIYHOciBfZVHQjQ/UB
-----END CERTIFICATE-----
diff --git a/vcpkg.json b/vcpkg.json
index 2c30ac0fdd3713..29c5a243a632b0 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -7,5 +7,5 @@
"openssl",
"zlib"
],
- "builtin-baseline": "cd61e1e26a038e82d6550a3ebbe0fbbfe7da78e3"
+ "builtin-baseline": "9e593bb18ea69cc5095e012465dcd675a822ed0d"
}
\ No newline at end of file
diff --git a/vm_trace.c b/vm_trace.c
index 73be08b05f8bd4..f2c3727e4e9708 100644
--- a/vm_trace.c
+++ b/vm_trace.c
@@ -166,7 +166,7 @@ update_global_event_hooks(rb_hook_list_t *list, rb_event_flag_t prev_events, rb_
}
ruby_vm_iseq_events_enabled += change_iseq_events;
if (change_c_events < 0) {
- RUBY_ASSERT(ruby_vm_c_events_enabled >= (unsigned int)(-change_iseq_events));
+ RUBY_ASSERT(ruby_vm_c_events_enabled >= (unsigned int)(-change_c_events));
}
ruby_vm_c_events_enabled += change_c_events;