From 18225b553a0f794f09aff52237609bc2cab532e7 Mon Sep 17 00:00:00 2001 From: BurdetteLamar Date: Sun, 2 Aug 2026 17:57:06 -0500 Subject: [PATCH 01/23] [DOC] Doc for File::absolute_path? --- file.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) 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 From 60c82965eab814fa26c58eefbba1b353d4f47117 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Sun, 2 Aug 2026 15:28:04 -0400 Subject: [PATCH 02/23] [DOC] Improve docs for GC.start --- gc.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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. # From dcf8847461bed9f3cc5df9ce52a0e49c8eb52c2b Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 3 Aug 2026 10:36:44 +0900 Subject: [PATCH 03/23] [ruby/io-console] `IO#tty?` extension is unsupported on Cygwin `rb_w32_open_osfhandle` is defined only on mingw/mswin. https://github.com/ruby/io-console/commit/3043df5241 --- ext/io/console/console.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/io/console/console.c b/ext/io/console/console.c index ebd4c39089cc2b..54349aebe00a00 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; From 6a9a387b965418188e38b7c03a50b1b79455f6bb Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 3 Aug 2026 12:06:11 +0900 Subject: [PATCH 04/23] [ruby/io-console] [DOC] Prevent RDoc from referencing internal modules https://github.com/ruby/io-console/commit/04e3f33df6 --- ext/io/console/console.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ext/io/console/console.c b/ext/io/console/console.c index 54349aebe00a00..05a4d684d5873a 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -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); From f622e12503c44546f1c413974e5ca3fd76a9d3f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 02:06:30 +0000 Subject: [PATCH 05/23] Bump github.com/microsoft/vcpkg from 2026.06.24 to 2026.07.29 Bumps [github.com/microsoft/vcpkg](https://github.com/microsoft/vcpkg) from 2026.06.24 to 2026.07.29. - [Release notes](https://github.com/microsoft/vcpkg/releases) - [Commits](https://github.com/microsoft/vcpkg/compare/master...9e593bb18ea69cc5095e012465dcd675a822ed0d) --- updated-dependencies: - dependency-name: github.com/microsoft/vcpkg dependency-version: 2026.07.29 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- vcpkg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From e59558c4bc04b23d51b7692789a0b2ccccc09f40 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Fri, 31 Jul 2026 08:17:52 +0000 Subject: [PATCH 06/23] Fix operand in the update_global_event_hooks assertion The assertion for change_c_events < 0 compares ruby_vm_c_events_enabled against -change_iseq_events instead of -change_c_events, so it fires on a normal case where the iseq-event decrement happens to exceed the number of enabled C events. It trips flakily in irb's tracer test on RUBY_DEBUG builds. Use -change_c_events, mirroring the first assertion. Co-authored-by: Claude Fable 5 --- vm_trace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; From dca45c257c9326a9453a3450e39842e38c0d415f Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Sat, 1 Aug 2026 15:44:27 +0000 Subject: [PATCH 07/23] compile.c: pass the new operand ci to the write barrier, not the INSN The splat rebuild in compile_massign_lhs passes the arena-allocated INSN (iobj) to RB_OBJ_WRITTEN (since f2286925f0). iobj is not a heap object, so the barrier touches the page it happens to land on, which is undefined. It is harmless by luck today; with a GC that records an edge for shareable iseqs, GET_HEAP_PAGE(iobj) dereferences garbage and segfaults (deterministic in btest test_insns #358/#553 under --parser=parse.y). Pass the ci that actually became the operand, which is the edge being recorded. Co-authored-by: Claude Fable 5 --- compile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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, From 568dde7fd2ea67d4c62c3b73d03c30dc4bdf1145 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 12:14:48 +0900 Subject: [PATCH 08/23] Add NEWS entry for net-ftp and net-pop removal [Feature #21835] Co-Authored-By: Claude Fable 5 --- NEWS.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/NEWS.md b/NEWS.md index f01fffa3dac934..8aef64e04156eb 100644 --- a/NEWS.md +++ b/NEWS.md @@ -117,6 +117,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. @@ -254,6 +262,7 @@ 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 From bcddad76a7fc1ec8e0640d00f5f39672fd434a99 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 12:20:02 +0900 Subject: [PATCH 09/23] Add NEWS entry for lazy loading of error decoration gems [Feature #21951] Co-Authored-By: Claude Fable 5 --- NEWS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.md b/NEWS.md index 8aef64e04156eb..4ad398cd81c6fb 100644 --- a/NEWS.md +++ b/NEWS.md @@ -248,6 +248,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. @@ -266,6 +272,7 @@ A lot of work has gone into making Ractors more stable, performant, and usable. [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 From b5ae03c5b19a7968a57c5f97f8ec4271865bd25b Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 12:22:25 +0900 Subject: [PATCH 10/23] Add NEWS entry for removed EOL platform support Co-Authored-By: Claude Fable 5 --- NEWS.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/NEWS.md b/NEWS.md index 4ad398cd81c6fb..3d9eff0494adf8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -201,6 +201,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 From bc5ce159f48c308072c85d68e66c0a60a71a9370 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 12:37:58 +0900 Subject: [PATCH 11/23] Add NEWS entry for experimental libfyaml backend of psych Co-Authored-By: Claude Fable 5 --- NEWS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.md b/NEWS.md index 3d9eff0494adf8..3b302bedf2410b 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. + ### The following bundled gems are added. From f364e197dbcf2054f7847d882698ce39164f6126 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 12:43:33 +0900 Subject: [PATCH 12/23] Link the psych libfyaml NEWS entry to ruby/psych#805 Co-Authored-By: Claude Fable 5 --- NEWS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 3b302bedf2410b..b2e34e3025f8db 100644 --- a/NEWS.md +++ b/NEWS.md @@ -108,7 +108,7 @@ Note: We're only listing outstanding class updates. * 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. + supported on Windows. [[GH-psych #805]] ### The following bundled gems are added. @@ -296,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 From 863175bcfb68003a8ca0076b17f2659b8081b37f Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 17 Jul 2026 11:12:02 +0100 Subject: [PATCH 13/23] [ruby/rubygems] Split Gem::Security.write into write_private_key and write_certificate Gem::Security.write managed the following 2 cases. * pemmable is RSA/DSA/EC private key, an instance of OpenSSL::PKey::{RSA,DSA,EC} * pemmable is certificate, an instance of OpenSSL::X509::Certificate There was no case that pemmable was public RSA/DSA/EC key, an instance of OpenSSL::PKey::{RSA,DSA,EC}. This situation is not convenient in the case that pemmable is ML-DSA private key, an instance of OpenSSL::PKey::PKey which doesn't have #to_pem, and instead has #public_to_pem and #private_to_pem as alternative. The Gem::Security.write with optional passphrase and cipher in certificate case is not intuitive. So, refactored the code as follows: * Add Gem::Security.write_private_key for writing private keys, with optional passphrase and cipher for encryption * Add Gem::Security.write_certificate for writing certificates, without passphrase and cipher. Certificates are never encrypted. OpenSSL::X509::Certificate#to_pem doesn't have passphrase/cipher arguments https://github.com/ruby/openssl/blob/27c59a4cc8a652004184182f734de0161ba08b41/ext/openssl/ossl_x509cert.c#L169 * Remove Gem::Security.write * Update all callers to use the new methods * Rename test methods to test Gem::Security.write_private_key and add test_class_write_certificate Assisted-by: Claude:claude-opus-4-6[1m] https://github.com/ruby/rubygems/commit/f0073e29ce --- lib/rubygems/commands/cert_command.rb | 6 ++-- lib/rubygems/security.rb | 24 ++++++++++++---- lib/rubygems/security/signer.rb | 8 +++--- .../test_gem_commands_cert_command.rb | 28 +++++++++---------- test/rubygems/test_gem_package.rb | 4 +-- test/rubygems/test_gem_security.rb | 24 ++++++++++++---- test/rubygems/test_gem_security_signer.rb | 14 +++++----- 7 files changed, 66 insertions(+), 42 deletions(-) diff --git a/lib/rubygems/commands/cert_command.rb b/lib/rubygems/commands/cert_command.rb index fe03841ddb4451..aaeaf03c28cf96 100644 --- a/lib/rubygems/commands/cert_command.rb +++ b/lib/rubygems/commands/cert_command.rb @@ -161,7 +161,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 +178,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 +298,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..d44132ba809bd3 100644 --- a/lib/rubygems/security.rb +++ b/lib/rubygems/security.rb @@ -585,24 +585,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.to_pem cipher, passphrase else - io.write pemmable.to_pem + io.write key.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/signer.rb b/lib/rubygems/security/signer.rb index eeeeb52906cb48..335dc6242ec28a 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 @@ -196,11 +196,11 @@ def re_sign_key(expiration_length: Gem::Security::ONE_YEAR) # :nodoc: 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/test/rubygems/test_gem_commands_cert_command.rb b/test/rubygems/test_gem_commands_cert_command.rb index ed1a1c8627bfbf..aa58f797e2eca0 100644 --- a/test/rubygems/test_gem_commands_cert_command.rb +++ b/test/rubygems/test_gem_commands_cert_command.rb @@ -468,7 +468,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 +497,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 +528,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 +560,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 +592,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 +620,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 @@ -649,7 +649,7 @@ def test_execute_re_sign 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 +681,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 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_security.rb b/test/rubygems/test_gem_security.rb index 82449a862617fe..bd3850e4bfb858 100644 --- a/test/rubygems/test_gem_security.rb +++ b/test/rubygems/test_gem_security.rb @@ -281,12 +281,12 @@ 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 @@ -295,14 +295,14 @@ def test_class_write assert_equal key.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 @@ -311,7 +311,7 @@ def test_class_write_encrypted assert_equal key.to_pem, key_from_file.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,7 +320,7 @@ 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 @@ -332,4 +332,16 @@ def test_class_write_encrypted_cipher assert_equal key.to_pem, key_from_file.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 + + cert_from_file = File.read path + + 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..6bd9d32b110af9 100644 --- a/test/rubygems/test_gem_security_signer.rb +++ b/test/rubygems/test_gem_security_signer.rb @@ -58,10 +58,10 @@ 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 @@ -147,10 +147,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 +177,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] From f241c03d933decd34f1d4b65d9e693ce764f089a Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 17 Jul 2026 12:49:48 +0100 Subject: [PATCH 14/23] [ruby/rubygems] Replace OpenSSL::PKey::{RSA,DSA,EC}#to_pem Replace OpenSSL::PKey::{RSA,DSA,EC}#to_pem with OpenSSL::PKey::{RSA,DSA,EC}#private_to_pem or #public_to_pem. Continue to use OpenSSL::X509::Certificate#to_pem. This makes the code ML-DSA compatible since OpenSSL::PKey::PKey used for ML-DSA doesn't have #to_pem but has #private_to_pem and #public_to_pem. Note this changes the private key's output format from the following formats to more common PKCS #8 format.[1][2][3][4] * RSA: PKCS #1 RSAPrivateKey * DSA: traditional OpenSSL DSAPrivateKey * EC: SEC 1/RFC 5915 ECPrivateKey OpenSSL::PKey.read has supported PKCS #8 format as well as previous RSA/DSA/EC formats since the beginning. OpenSSL::PKey::{RSA,DSA,EC}#to_pem are not encouraged to use.[1][2][3] The public key is format is unchanged.[1][2][3][5] [1] OpenSSL::PKey::RSA#to_pem https://github.com/ruby/openssl/blob/27c59a4cc8a652004184182f734de0161ba08b41/ext/openssl/ossl_pkey_rsa.c#L223-L280 [2] OpenSSL::PKey::DSA#to_pem https://github.com/ruby/openssl/blob/27c59a4cc8a652004184182f734de0161ba08b41/ext/openssl/ossl_pkey_dsa.c#L213-L271 [3] OpenSSL::PKey::EC#to_pem https://github.com/ruby/openssl/blob/27c59a4cc8a652004184182f734de0161ba08b41/ext/openssl/ossl_pkey_ec.c#L402-L459 [4] OpenSSL::PKey::PKey#private_to_pem https://github.com/ruby/openssl/blob/27c59a4cc8a652004184182f734de0161ba08b41/ext/openssl/ossl_pkey.c#L991-L1010 [5] OpenSSL::PKey::PKey#public_to_pem https://github.com/ruby/openssl/blob/27c59a4cc8a652004184182f734de0161ba08b41/ext/openssl/ossl_pkey.c#L1082-L1093 Assisted-by: Claude:claude-opus-4-6[1m] https://github.com/ruby/rubygems/commit/785ed98c85 --- lib/rubygems/security.rb | 4 +-- lib/rubygems/security/policy.rb | 4 +-- lib/rubygems/security/signer.rb | 2 +- .../test_gem_commands_cert_command.rb | 8 ++--- test/rubygems/test_gem_security.rb | 29 +++++++++---------- test/rubygems/test_gem_security_signer.rb | 2 +- 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb index d44132ba809bd3..537bf1c625df0d 100644 --- a/lib/rubygems/security.rb +++ b/lib/rubygems/security.rb @@ -593,9 +593,9 @@ def self.write_private_key(key, path, permissions = 0o600, passphrase = nil, cip File.open path, "wb", permissions do |io| if passphrase && cipher - io.write key.to_pem cipher, passphrase + io.write key.private_to_pem cipher, passphrase else - io.write key.to_pem + io.write key.private_to_pem end 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 335dc6242ec28a..044562137cb856 100644 --- a/lib/rubygems/security/signer.rb +++ b/lib/rubygems/security/signer.rb @@ -190,7 +190,7 @@ 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) diff --git a/test/rubygems/test_gem_commands_cert_command.rb b/test/rubygems/test_gem_commands_cert_command.rb index aa58f797e2eca0..0234cfd349f78d 100644 --- a/test/rubygems/test_gem_commands_cert_command.rb +++ b/test/rubygems/test_gem_commands_cert_command.rb @@ -377,7 +377,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 +388,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 @@ -815,7 +815,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 +833,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_security.rb b/test/rubygems/test_gem_security.rb index bd3850e4bfb858..b5c07168e1de84 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 @@ -73,7 +73,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 @@ -120,15 +120,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 +202,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 @@ -239,7 +239,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 @@ -292,7 +292,7 @@ def test_class_write_private_key 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_private_key_encrypted @@ -308,7 +308,7 @@ def test_class_write_private_key_encrypted 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_private_key_encrypted_cipher @@ -324,13 +324,12 @@ def test_class_write_private_key_encrypted_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) - - key_from_file = OpenSSL::PKey::RSA.new key_file_contents, 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_certificate diff --git a/test/rubygems/test_gem_security_signer.rb b/test/rubygems/test_gem_security_signer.rb index 6bd9d32b110af9..7f428f9e8e00be 100644 --- a/test/rubygems/test_gem_security_signer.rb +++ b/test/rubygems/test_gem_security_signer.rb @@ -65,7 +65,7 @@ def test_initialize_default 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 From f2740146ec8a80af15d719d942d8e5e210f47290 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 17 Jul 2026 17:13:24 +0100 Subject: [PATCH 15/23] [ruby/rubygems] Recreated testing .pem files. As I modified logic related to output format in tool/create_certs.rb and tool/create_encrypted_key.rb at the last commit, I ran these scripts to recreate the testing .pem files as follows. Now the private .pem files are PKCS #8 format. ``` $ ruby tool/create_certs.rb $ ruby tool/create_encrypted_key.rb ``` https://github.com/ruby/rubygems/commit/99de0940d8 --- test/rubygems/alternate_cert.pem | 26 +++++----- test/rubygems/alternate_cert_32.pem | 28 +++++------ test/rubygems/alternate_key.pem | 55 +++++++++++----------- test/rubygems/child_cert.pem | 28 +++++------ test/rubygems/child_cert_32.pem | 28 +++++------ test/rubygems/child_key.pem | 55 +++++++++++----------- test/rubygems/encrypted_private_key.pem | 60 ++++++++++++------------ test/rubygems/expired_cert.pem | 28 +++++------ test/rubygems/future_cert.pem | 28 +++++------ test/rubygems/future_cert_32.pem | 28 +++++------ test/rubygems/grandchild_cert.pem | 28 +++++------ test/rubygems/grandchild_cert_32.pem | 28 +++++------ test/rubygems/grandchild_key.pem | 55 +++++++++++----------- test/rubygems/invalid_issuer_cert.pem | 30 ++++++------ test/rubygems/invalid_issuer_cert_32.pem | 30 ++++++------ test/rubygems/invalid_key.pem | 55 +++++++++++----------- test/rubygems/invalid_signer_cert.pem | 28 +++++------ test/rubygems/invalid_signer_cert_32.pem | 28 +++++------ test/rubygems/invalidchild_cert.pem | 28 +++++------ test/rubygems/invalidchild_cert_32.pem | 28 +++++------ test/rubygems/invalidchild_key.pem | 55 +++++++++++----------- test/rubygems/private_key.pem | 55 +++++++++++----------- test/rubygems/public_cert.pem | 30 ++++++------ test/rubygems/public_cert_32.pem | 28 +++++------ test/rubygems/public_key.pem | 14 +++--- test/rubygems/wrong_key_cert.pem | 28 +++++------ test/rubygems/wrong_key_cert_32.pem | 28 +++++------ 27 files changed, 473 insertions(+), 467 deletions(-) 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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 -----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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 -----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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 -----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/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----- From 01a05971fe0d3d5aa9907bfe5a3ff7567a8af3f6 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 17 Jul 2026 17:31:26 +0100 Subject: [PATCH 16/23] [ruby/rubygems] Remove hardcoded key-dependent values from tests Because these hardcoded values make the tests fail when recreating the keys. This is not convenient. * Remove hardcoded subjectKeyIdentifier value assertions. * In test_sign, replace assertion with hardcoded value with PRIVATE_KEY.verify (OpenSSL::PKey::RSA#verify) to assert signature Assisted-by: Claude:claude-opus-4-6[1m] https://github.com/ruby/rubygems/commit/873a5bd82c --- test/rubygems/test_gem_security.rb | 8 -------- test/rubygems/test_gem_security_signer.rb | 12 ++---------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/test/rubygems/test_gem_security.rb b/test/rubygems/test_gem_security.rb index b5c07168e1de84..e97af3b959e95c 100644 --- a/test/rubygems/test_gem_security.rb +++ b/test/rubygems/test_gem_security.rb @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/test/rubygems/test_gem_security_signer.rb b/test/rubygems/test_gem_security_signer.rb index 7f428f9e8e00be..d0541b0a341f80 100644 --- a/test/rubygems/test_gem_security_signer.rb +++ b/test/rubygems/test_gem_security_signer.rb @@ -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 From 53b708742e16ff73ff9bfc434684efb14335eb2a Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 17 Jul 2026 18:06:46 +0100 Subject: [PATCH 17/23] [ruby/rubygems] Remove #private? check from open_private_key and check in Gem::Security.sign Remove the OpenSSL::PKey::{RSA,DSA,EC}#private? check in open_private_key. This makes the code ML-DSA compatible since OpenSSL::PKey::PKey used for ML-DSA doesn't have #private?. According to the discussion on , there is no reliable way to check if key is private or not in OpenSSL::PKey::PKey for now. We shouldn't use OpenSSL::PKey::{RSA,DSA,EC}#private?. If a public key is passed, the subsequent signing operations will raise ArgumentError in Gem::Security.sign. Rescue the ArgumentError and OpenSSL::PKey::PKeyError too in a more reliable way, and raise Gem::Security::Exception in Gem::Security.sign. Add the following 2 bad key tests. * test_execute_build_bad_key to test --build with a public key (bad key) as --private-key * test_execute_sign_bad_key to test --sign with a public key (bad key) as --private-key Assisted-by: Claude:claude-opus-4-6[1m] https://github.com/ruby/rubygems/commit/cef0fe7b2b --- lib/rubygems/commands/cert_command.rb | 2 - lib/rubygems/security.rb | 7 ++- .../test_gem_commands_cert_command.rb | 43 +++++++++++++++---- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/lib/rubygems/commands/cert_command.rb b/lib/rubygems/commands/cert_command.rb index aaeaf03c28cf96..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" diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb index 537bf1c625df0d..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 ## diff --git a/test/rubygems/test_gem_commands_cert_command.rb b/test/rubygems/test_gem_commands_cert_command.rb index 0234cfd349f78d..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}] @@ -644,6 +659,26 @@ 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 @@ -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 From 8d75afff2643bd7733d7f7e71d9636d400d20dff Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 10:22:56 +0900 Subject: [PATCH 18/23] [ruby/rubygems] Guard RubyGems' YAML serializer against double loading When the same Gem::YAMLSerializer copy is shipped in two gems (RubyGems and Bundler) and required from different paths, the second load redefines its constants and emits "already initialized constant" warnings. Add an idempotent guard at the top of yaml_serializer.rb so a second load from any path short-circuits. This prepares Bundler to reuse RubyGems' copy. https://github.com/ruby/rubygems/commit/268da379ad Co-Authored-By: Claude Fable 5 --- lib/rubygems/yaml_serializer.rb | 4 ++++ 1 file changed, 4 insertions(+) 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 From 5f07e13d1e373e8afed98883708631ce7e66a9b0 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 10:23:17 +0900 Subject: [PATCH 19/23] [ruby/rubygems] Ship RubyGems' YAML serializer in the Bundler gem Add lib/rubygems/yaml_serializer.rb to the gem's file list so the Bundler gem carries its own copy of Gem::YAMLSerializer. This keeps Bundler self-contained on RubyGems versions that predate it, the same way the vendored URI and SecureRandom are shipped. https://github.com/ruby/rubygems/commit/50ea015c82 Co-Authored-By: Claude Fable 5 --- lib/bundler/bundler.gemspec | 7 ++++--- spec/bundler/support/path.rb | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) 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/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 From 9f7e05ceab9c4f180cdacd244b87642d8948f2ec Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 10:24:18 +0900 Subject: [PATCH 20/23] [ruby/rubygems] Use RubyGems' YAML serializer in Bundler Bundler now uses Gem::YAMLSerializer unconditionally for settings and the plugin index instead of falling back to its own stub serializer. The fallback is no longer reachable because the Bundler gem ships a copy of Gem::YAMLSerializer for RubyGems versions that predate it. https://github.com/ruby/rubygems/commit/60b7f819dc Co-Authored-By: Claude Fable 5 --- lib/bundler/plugin/index.rb | 8 ++++---- lib/bundler/settings.rb | 6 ++---- spec/bundler/bundler/plugin/index_spec.rb | 8 ++++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/bundler/plugin/index.rb b/lib/bundler/plugin/index.rb index 1dfb061304a466..d5b655c33f00ac 100644 --- a/lib/bundler/plugin/index.rb +++ b/lib/bundler/plugin/index.rb @@ -171,8 +171,8 @@ def load_index(index_file, global = false) data = index_f.read - require_relative "../yaml_serializer" - index = YAMLSerializer.load(data) + require "rubygems/yaml_serializer" + index = Gem::YAMLSerializer.load(data) @commands.merge!(index["commands"]) @hooks.merge!(index["hooks"]) @@ -196,10 +196,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/spec/bundler/bundler/plugin/index_spec.rb b/spec/bundler/bundler/plugin/index_spec.rb index a28934269bd24a..711b8382f11602 100644 --- a/spec/bundler/bundler/plugin/index_spec.rb +++ b/spec/bundler/bundler/plugin/index_spec.rb @@ -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)) From f71a863c2f4e1cb617ff01b40804f3e2a1c7028d Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 10:24:56 +0900 Subject: [PATCH 21/23] [ruby/rubygems] Port Bundler's YAML serializer specs to the RubyGems test suite The RubyGems test suite already covers almost all of the Bundler yaml_serializer spec through test_gem_safe_yaml.rb. Port the two missing cases (URL mapping keys as used by mirror settings, and Psych interoperability in both directions) and drop the Bundler spec. https://github.com/ruby/rubygems/commit/e24041cb5e Co-Authored-By: Claude Fable 5 --- spec/bundler/bundler/yaml_serializer_spec.rb | 235 ------------------- spec/bundler/support/shards.rb | 1 - test/rubygems/test_gem_safe_yaml.rb | 39 +++ 3 files changed, 39 insertions(+), 236 deletions(-) delete mode 100644 spec/bundler/bundler/yaml_serializer_spec.rb 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/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/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"] From 3ad19faca9e805a06bb6988e01ce5c1c1698c504 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 10:25:20 +0900 Subject: [PATCH 22/23] [ruby/rubygems] Drop Bundler's stub YAML serializer Bundler::YAMLSerializer is no longer referenced anywhere now that Bundler uses Gem::YAMLSerializer everywhere. https://github.com/ruby/rubygems/commit/b74a1987db Co-Authored-By: Claude Fable 5 --- lib/bundler/yaml_serializer.rb | 98 ---------------------------------- 1 file changed, 98 deletions(-) delete mode 100644 lib/bundler/yaml_serializer.rb 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 From 1f48cf8a4e90ff8d671b4ece298dcae980052e36 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 3 Aug 2026 10:29:35 +0900 Subject: [PATCH 23/23] [ruby/rubygems] Adapt the plugin index to Gem::YAMLSerializer semantics The stub serializer dumped an empty hash as a bare "key:" line and loaded such a line back as an empty hash. Gem::YAMLSerializer dumps it as "key: {}" and correctly loads a bare key as nil, so index files written by older Bundler versions would crash load_index with a TypeError. Treat nil sections as empty when loading, and update the index spec to the new dump format for hook arrays. https://github.com/ruby/rubygems/commit/720cc8ac56 Co-Authored-By: Claude Fable 5 --- lib/bundler/plugin/index.rb | 10 ++++++---- spec/bundler/bundler/plugin/index_spec.rb | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/bundler/plugin/index.rb b/lib/bundler/plugin/index.rb index d5b655c33f00ac..0e4be4c7f91f8c 100644 --- a/lib/bundler/plugin/index.rb +++ b/lib/bundler/plugin/index.rb @@ -172,13 +172,15 @@ def load_index(index_file, global = false) data = index_f.read require "rubygems/yaml_serializer" - index = Gem::YAMLSerializer.load(data) + # 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 diff --git a/spec/bundler/bundler/plugin/index_spec.rb b/spec/bundler/bundler/plugin/index_spec.rb index 711b8382f11602..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