Sync pki to chromium 8049b24a3fa617e66c5d3fc0e9322bb07c500f49

Change-Id: Ib65febca30ce312f2c8fd6d6dbc85f24987b50d8
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/62245
Auto-Submit: Bob Beck <bbe@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/pki/cert_net_fetcher.h b/pki/cert_net_fetcher.h
deleted file mode 100644
index 27341ae..0000000
--- a/pki/cert_net_fetcher.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2015 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BSSL_PKI_CERT_NET_FETCHER_H_
-#define BSSL_PKI_CERT_NET_FETCHER_H_
-
-#include "webutil/url/url.h"
-#include "fillins/openssl_util.h"
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-#include <memory>
-#include "fillins/log.h"
-#include "fillins/net_errors.h"
-
-
-
-class URL;
-
-namespace bssl {
-
-// CertNetFetcher is a synchronous interface for fetching AIA URLs and CRL
-// URLs. It is shared between a caller thread (which starts and waits for
-// fetches), and a network thread (which does the actual fetches). It can be
-// shutdown from the network thread to cancel outstanding requests.
-//
-// A Request object is returned when starting a fetch. The consumer can
-// use this as a handle for aborting the request (by freeing it), or reading
-// the result of the request (WaitForResult)
-class OPENSSL_EXPORT CertNetFetcher
-     {
- public:
-  class Request {
-   public:
-    virtual ~Request() = default;
-
-    // WaitForResult() can be called at most once.
-    //
-    // It will block and wait for the (network) request to complete, and
-    // then write the result into the provided out-parameters.
-    virtual void WaitForResult(Error* error, std::vector<uint8_t>* bytes) = 0;
-  };
-
-  // This value can be used in place of timeout or max size limits.
-  enum { DEFAULT = -1 };
-
-  CertNetFetcher() = default;
-
-  CertNetFetcher(const CertNetFetcher&) = delete;
-  CertNetFetcher& operator=(const CertNetFetcher&) = delete;
-
-  // Shuts down the CertNetFetcher and cancels outstanding network requests. It
-  // is not guaranteed that any outstanding or subsequent
-  // Request::WaitForResult() calls will be completed. Shutdown() must be called
-  // from the network thread. It can be called more than once, but must be
-  // called before the CertNetFetcher is destroyed.
-  virtual void Shutdown() = 0;
-
-  // The Fetch*() methods start a request which can be cancelled by
-  // deleting the returned Request. Here is the meaning of the common
-  // parameters:
-  //
-  //   * url -- The http:// URL to fetch.
-  //   * timeout_seconds -- The maximum allowed duration for the fetch job. If
-  //         this delay is exceeded then the request will fail. To use a default
-  //         timeout pass DEFAULT.
-  //   * max_response_bytes -- The maximum size of the response body. If this
-  //     size is exceeded then the request will fail. To use a default timeout
-  //     pass DEFAULT.
-
-  [[nodiscard]] virtual std::unique_ptr<Request> FetchCaIssuers(
-      const URL& url,
-      int timeout_milliseconds,
-      int max_response_bytes) = 0;
-
-  [[nodiscard]] virtual std::unique_ptr<Request> FetchCrl(
-      const URL& url,
-      int timeout_milliseconds,
-      int max_response_bytes) = 0;
-
-  [[nodiscard]] virtual std::unique_ptr<Request> FetchOcsp(
-      const URL& url,
-      int timeout_milliseconds,
-      int max_response_bytes) = 0;
-
- protected:
-  virtual ~CertNetFetcher() = default;
-
- private:
-  
-};
-
-}  // namespace net
-
-#endif  // BSSL_PKI_CERT_NET_FETCHER_H_
diff --git a/pki/certificate_policies_unittest.cc b/pki/certificate_policies_unittest.cc
index af9332c..fcf10b8 100644
--- a/pki/certificate_policies_unittest.cc
+++ b/pki/certificate_policies_unittest.cc
@@ -44,7 +44,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -54,7 +54,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -64,7 +64,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_TRUE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
   ASSERT_EQ(1U, policies.size());
   EXPECT_EQ(der::Input(kAnyPolicyOid), policies[0]);
@@ -76,7 +76,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_TRUE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
   ASSERT_EQ(1U, policies.size());
   EXPECT_EQ(der::Input(kAnyPolicyOid), policies[0]);
@@ -90,7 +90,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -100,7 +100,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_TRUE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
   ASSERT_EQ(1U, policies.size());
   EXPECT_EQ(der::Input(policy_1_2_3_der), policies[0]);
@@ -112,7 +112,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_TRUE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
   ASSERT_EQ(1U, policies.size());
   EXPECT_EQ(der::Input(policy_1_2_3_der), policies[0]);
@@ -125,7 +125,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   bool result = ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors);
 
   if (fail_parsing_unknown_qualifier_oids()) {
@@ -144,7 +144,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -156,7 +156,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -168,7 +168,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -180,7 +180,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_FALSE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
 }
 
@@ -190,7 +190,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_TRUE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
   ASSERT_EQ(2U, policies.size());
   EXPECT_EQ(der::Input(policy_1_2_3_der), policies[0]);
@@ -203,7 +203,7 @@
   std::vector<der::Input> policies;
   CertErrors errors;
   EXPECT_TRUE(ParseCertificatePoliciesExtensionOids(
-      der::Input(&der), fail_parsing_unknown_qualifier_oids(), &policies,
+      der::Input(der), fail_parsing_unknown_qualifier_oids(), &policies,
       &errors));
   ASSERT_EQ(2U, policies.size());
   EXPECT_EQ(der::Input(policy_1_2_3_der), policies[0]);
@@ -216,7 +216,7 @@
   std::vector<PolicyInformation> policies;
   CertErrors errors;
   EXPECT_FALSE(
-      ParseCertificatePoliciesExtension(der::Input(&der), &policies, &errors));
+      ParseCertificatePoliciesExtension(der::Input(der), &policies, &errors));
 }
 
 TEST(ParseCertificatePoliciesExtensionTest,
@@ -226,7 +226,7 @@
   std::vector<PolicyInformation> policies;
   CertErrors errors;
   EXPECT_FALSE(
-      ParseCertificatePoliciesExtension(der::Input(&der), &policies, &errors));
+      ParseCertificatePoliciesExtension(der::Input(der), &policies, &errors));
 }
 
 TEST(ParseCertificatePoliciesExtensionTest, OnePolicyWithCustomQualifier) {
@@ -235,7 +235,7 @@
   std::vector<PolicyInformation> policies;
   CertErrors errors;
   EXPECT_TRUE(
-      ParseCertificatePoliciesExtension(der::Input(&der), &policies, &errors));
+      ParseCertificatePoliciesExtension(der::Input(der), &policies, &errors));
   ASSERT_EQ(1U, policies.size());
   PolicyInformation& policy = policies[0];
   EXPECT_EQ(der::Input(policy_1_2_3_der), policy.policy_oid);
@@ -256,7 +256,7 @@
   std::vector<PolicyInformation> policies;
   CertErrors errors;
   EXPECT_TRUE(
-      ParseCertificatePoliciesExtension(der::Input(&der), &policies, &errors));
+      ParseCertificatePoliciesExtension(der::Input(der), &policies, &errors));
   ASSERT_EQ(2U, policies.size());
   {
     PolicyInformation& policy = policies[0];
@@ -276,7 +276,7 @@
   std::vector<PolicyInformation> policies;
   CertErrors errors;
   EXPECT_TRUE(
-      ParseCertificatePoliciesExtension(der::Input(&der), &policies, &errors));
+      ParseCertificatePoliciesExtension(der::Input(der), &policies, &errors));
   ASSERT_EQ(2U, policies.size());
   {
     PolicyInformation& policy = policies[0];
diff --git a/pki/crl.cc b/pki/crl.cc
index ff3e704..99eb359 100644
--- a/pki/crl.cc
+++ b/pki/crl.cc
@@ -467,8 +467,9 @@
   std::string normalized_crl_issuer;
   if (!NormalizeNameTLV(tbs_cert_list.issuer_tlv, &normalized_crl_issuer))
     return CRLRevocationStatus::UNKNOWN;
-  if (der::Input(&normalized_crl_issuer) != target_cert->normalized_issuer())
+  if (der::Input(normalized_crl_issuer) != target_cert->normalized_issuer()) {
     return CRLRevocationStatus::UNKNOWN;
+  }
 
   if (tbs_cert_list.crl_extensions_tlv.has_value()) {
     std::map<der::Input, ParsedExtension> extensions;
@@ -584,8 +585,10 @@
     //
     // As the |issuer_cert| is from the already validated chain, it is already
     // known to chain to the same trust anchor as the target certificate.
-    if (der::Input(&normalized_crl_issuer) != issuer_cert->normalized_subject())
+    if (der::Input(normalized_crl_issuer) !=
+        issuer_cert->normalized_subject()) {
       continue;
+    }
 
     // 6.3.3 (f) If a key usage extension is present in the CRL issuer's
     //           certificate, verify that the cRLSign bit is set.
diff --git a/pki/fillins/log.h b/pki/fillins/log.h
index 74007ec..f0bbe61 100644
--- a/pki/fillins/log.h
+++ b/pki/fillins/log.h
@@ -17,8 +17,10 @@
 
 #if defined(_BORINGSSL_LIBPKI_VERBOSE_)
 #define DVLOG(l) std::cerr
+#define LOG(l) std::cerr
 #else
 #define DVLOG(l) 0 && std::cerr
+#define LOG(l) 0 && std::cerr
 #endif  // _BORINGSSL_LIBPKI_VERBOSE_
 
 #endif  // BSSL_FILLINS_LOG_H_
diff --git a/pki/general_names_unittest.cc b/pki/general_names_unittest.cc
index 0f7754d..2c04e7b 100644
--- a/pki/general_names_unittest.cc
+++ b/pki/general_names_unittest.cc
@@ -44,7 +44,7 @@
   ASSERT_TRUE(
       LoadTestSubjectAltNameData("san-invalid-empty.pem", &invalid_san_der));
   CertErrors errors;
-  EXPECT_FALSE(GeneralNames::Create(der::Input(&invalid_san_der), &errors));
+  EXPECT_FALSE(GeneralNames::Create(der::Input(invalid_san_der), &errors));
 }
 
 TEST(GeneralNames, OtherName) {
@@ -53,7 +53,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_OTHER_NAME, general_names->present_name_types);
   const uint8_t expected_der[] = {0x06, 0x04, 0x2a, 0x03, 0x04, 0x05,
@@ -68,7 +68,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->rfc822_names.size());
@@ -80,7 +80,7 @@
   ASSERT_TRUE(LoadTestSubjectAltNameData("san-rfc822name.pem", &san_der));
   ReplaceFirstSubstring(&san_der, "foo@example.com", "f\xF6\xF6@example.com");
   CertErrors errors;
-  EXPECT_FALSE(GeneralNames::Create(der::Input(&san_der), &errors));
+  EXPECT_FALSE(GeneralNames::Create(der::Input(san_der), &errors));
 }
 
 TEST(GeneralNames, DnsName) {
@@ -89,7 +89,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_DNS_NAME, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->dns_names.size());
@@ -101,7 +101,7 @@
   ASSERT_TRUE(LoadTestSubjectAltNameData("san-dnsname.pem", &san_der));
   ReplaceFirstSubstring(&san_der, "foo.example.com", "f\xF6\xF6.example.com");
   CertErrors errors;
-  EXPECT_FALSE(GeneralNames::Create(der::Input(&san_der), &errors));
+  EXPECT_FALSE(GeneralNames::Create(der::Input(san_der), &errors));
 }
 
 TEST(GeneralNames, X400Address) {
@@ -110,7 +110,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_X400_ADDRESS, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->x400_addresses.size());
@@ -125,7 +125,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_DIRECTORY_NAME, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->directory_names.size());
@@ -140,7 +140,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_EDI_PARTY_NAME, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->edi_party_names.size());
@@ -154,7 +154,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_UNIFORM_RESOURCE_IDENTIFIER,
             general_names->present_name_types);
@@ -169,7 +169,7 @@
   ReplaceFirstSubstring(&san_der, "http://example.com",
                         "http://ex\xE4mple.com");
   CertErrors errors;
-  EXPECT_FALSE(GeneralNames::Create(der::Input(&san_der), &errors));
+  EXPECT_FALSE(GeneralNames::Create(der::Input(san_der), &errors));
 }
 
 TEST(GeneralNames, IPAddress_v4) {
@@ -178,7 +178,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_IP_ADDRESS, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->ip_addresses.size());
@@ -192,7 +192,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_IP_ADDRESS, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->ip_addresses.size());
@@ -207,7 +207,7 @@
   ASSERT_TRUE(LoadTestSubjectAltNameData("san-invalid-ipaddress.pem",
                                          &invalid_san_der));
   CertErrors errors;
-  EXPECT_FALSE(GeneralNames::Create(der::Input(&invalid_san_der), &errors));
+  EXPECT_FALSE(GeneralNames::Create(der::Input(invalid_san_der), &errors));
 }
 
 TEST(GeneralNames, RegisteredIDs) {
@@ -216,7 +216,7 @@
 
   CertErrors errors;
   std::unique_ptr<GeneralNames> general_names =
-      GeneralNames::Create(der::Input(&san_der), &errors);
+      GeneralNames::Create(der::Input(san_der), &errors);
   ASSERT_TRUE(general_names);
   EXPECT_EQ(GENERAL_NAME_REGISTERED_ID, general_names->present_name_types);
   ASSERT_EQ(1U, general_names->registered_ids.size());
diff --git a/pki/import_spec.json b/pki/import_spec.json
index f81c87a..f6617cd 100644
--- a/pki/import_spec.json
+++ b/pki/import_spec.json
@@ -244,7 +244,6 @@
     "files": [
     "net/cert/asn1_util.h",
     "net/cert/asn1_util.cc",
-    "net/cert/cert_net_fetcher.h",
     "net/cert/cert_status_flags.h",
     "net/cert/cert_status_flags_list.h",
     "net/cert/cert_verify_proc_blocklist.inc",
diff --git a/pki/input.cc b/pki/input.cc
index cf83201..d8e9391 100644
--- a/pki/input.cc
+++ b/pki/input.cc
@@ -10,21 +10,17 @@
 
 namespace bssl::der {
 
-Input::Input(std::string_view in)
-    : data_(reinterpret_cast<const uint8_t*>(in.data())), len_(in.length()) {}
-
-Input::Input(const std::string* s) : Input(std::string_view(*s)) {}
-
 std::string Input::AsString() const {
-  return std::string(reinterpret_cast<const char*>(data_), len_);
+  return std::string(reinterpret_cast<const char*>(data_.data()), data_.size());
 }
 
 std::string_view Input::AsStringView() const {
-  return std::string_view(reinterpret_cast<const char*>(data_), len_);
+  return std::string_view(reinterpret_cast<const char*>(data_.data()),
+                          data_.size());
 }
 
 bssl::Span<const uint8_t> Input::AsSpan() const {
-  return bssl::MakeSpan(data_, len_);
+  return data_;
 }
 
 bool operator==(const Input& lhs, const Input& rhs) {
diff --git a/pki/input.h b/pki/input.h
index 14a1fef..e0dff1f 100644
--- a/pki/input.h
+++ b/pki/input.h
@@ -10,10 +10,11 @@
 #include <stdint.h>
 
 #include <string>
+#include <string_view>
+
 
 #include <openssl/span.h>
 
-
 namespace bssl::der {
 
 // An opaque class that represents a fixed buffer of data of a fixed length,
@@ -31,30 +32,30 @@
   // Creates an empty Input, one from which no data can be read.
   constexpr Input() = default;
 
-  // Creates an Input from a constant array |data|.
-  template <size_t N>
-  constexpr explicit Input(const uint8_t (&data)[N]) : data_(data), len_(N) {}
+  // Creates an Input from a span. The constructed Input is only valid as long
+  // as |data| points to live memory. If constructed from, say, a
+  // |std::vector<uint8_t>|, mutating the vector will invalidate the Input.
+  constexpr explicit Input(bssl::Span<const uint8_t> data) : data_(data) {}
 
   // Creates an Input from the given |data| and |len|.
   constexpr explicit Input(const uint8_t* data, size_t len)
-      : data_(data), len_(len) {}
+      : data_(bssl::MakeConstSpan(data, len)) {}
 
-  // Creates an Input from a std::string_view
-  explicit Input(std::string_view sp);
-
-  // Creates an Input from a std::string. The lifetimes are a bit subtle when
-  // using this function: The constructed Input is only valid so long as |s| is
-  // still alive and not mutated.
-  explicit Input(const std::string* s);
+  // Creates an Input from a std::string_view. The constructed Input is only
+  // valid as long as |data| points to live memory. If constructed from, say, a
+  // |std::string|, mutating the vector will invalidate the Input.
+  explicit Input(std::string_view str)
+      : data_(bssl::MakeConstSpan(reinterpret_cast<const uint8_t*>(str.data()),
+                                  str.size())) {}
 
   // Returns the length in bytes of an Input's data.
-  constexpr size_t Length() const { return len_; }
+  constexpr size_t Length() const { return data_.size(); }
 
   // Returns a pointer to the Input's data. This method is marked as "unsafe"
   // because access to the Input's data should be done through ByteReader
   // instead. This method should only be used where using a ByteReader truly
   // is not an option.
-  constexpr const uint8_t* UnsafeData() const { return data_; }
+  constexpr const uint8_t* UnsafeData() const { return data_.data(); }
 
   // Returns a copy of the data represented by this object as a std::string.
   std::string AsString() const;
@@ -64,21 +65,13 @@
   // this Input.
   std::string_view AsStringView() const;
 
-  // Returns a bssl::Span pointing to the same data as the Input. The resulting
-  // bssl::Span must not outlive the data that was used to construct this
-  // Input.
+  // Returns a span pointing to the same data as the Input. The resulting span
+  // must not outlive the data that was used to construct this Input.
   bssl::Span<const uint8_t> AsSpan() const;
 
  private:
-  // This constructor is deleted to prevent constructing an Input from a
-  // std::string r-value. Since the Input points to memory owned by another
-  // object, such an Input would point to invalid memory. Without this deleted
-  // constructor, a std::string could be passed in to the std::string_view
-  // constructor because of std::string_view's implicit constructor.
-  Input(std::string) = delete;
-
-  const uint8_t* data_ = nullptr;
-  size_t len_ = 0;
+  // TODO(crbug.com/770501): Replace this type with span altogether.
+  bssl::Span<const uint8_t> data_;
 };
 
 // Return true if |lhs|'s data and |rhs|'s data are byte-wise equal.
diff --git a/pki/name_constraints.cc b/pki/name_constraints.cc
index 6dbe2fb..eba142d 100644
--- a/pki/name_constraints.cc
+++ b/pki/name_constraints.cc
@@ -653,19 +653,26 @@
 }
 
 bool NameConstraints::IsPermittedIP(const fillins::IPAddress& ip) const {
+  // fillins::IPAddressMatchesPrefix internally maps v4 addresses to/from v6 on type
+  // mismatch. We don't wish to do this, so check the sizes match first.
   for (const auto& excluded_ip : excluded_subtrees_.ip_address_ranges) {
-    if (fillins::IPAddressMatchesPrefix(ip, excluded_ip.first, excluded_ip.second))
+    if (ip.size() == excluded_ip.first.size() &&
+        fillins::IPAddressMatchesPrefix(ip, excluded_ip.first, excluded_ip.second)) {
       return false;
+    }
   }
 
   // If permitted subtrees are not constrained, any name that is not excluded is
   // allowed.
-  if (!(permitted_subtrees_.present_name_types & GENERAL_NAME_IP_ADDRESS))
+  if (!(permitted_subtrees_.present_name_types & GENERAL_NAME_IP_ADDRESS)) {
     return true;
+  }
 
   for (const auto& permitted_ip : permitted_subtrees_.ip_address_ranges) {
-    if (fillins::IPAddressMatchesPrefix(ip, permitted_ip.first, permitted_ip.second))
+    if (ip.size() == permitted_ip.first.size() &&
+        fillins::IPAddressMatchesPrefix(ip, permitted_ip.first, permitted_ip.second)) {
       return true;
+    }
   }
 
   return false;
diff --git a/pki/name_constraints_unittest.cc b/pki/name_constraints_unittest.cc
index 6d6a121..1fe58ed 100644
--- a/pki/name_constraints_unittest.cc
+++ b/pki/name_constraints_unittest.cc
@@ -10,7 +10,6 @@
 #include "common_cert_errors.h"
 #include "test_helpers.h"
 #include <gtest/gtest.h>
-#include <gtest/gtest.h>
 
 namespace bssl {
 namespace {
@@ -49,12 +48,14 @@
     std::string* result_der) {
   ::testing::AssertionResult load_result =
       LoadTestSubjectAltNameData(basename, result_der);
-  if (!load_result)
+  if (!load_result) {
     return load_result;
+  }
   CertErrors errors;
-  *result = GeneralNames::Create(der::Input(result_der), &errors);
-  if (!*result)
+  *result = GeneralNames::Create(der::Input(*result_der), &errors);
+  if (!*result) {
     return ::testing::AssertionFailure() << "Create failed";
+  }
   return ::testing::AssertionSuccess();
 }
 
@@ -92,7 +93,7 @@
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_TRUE(name_constraints->IsPermittedDNSName("permitted.example.com"));
@@ -181,7 +182,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("dnsname2.pem", &a));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // Matches permitted exactly.
@@ -212,7 +213,7 @@
       LoadTestNameConstraint("dnsname-permitted_with_leading_dot.pem", &a));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // A permitted dNSName constraint of ".bar.com" should only match subdomains
@@ -230,7 +231,7 @@
       LoadTestNameConstraint("dnsname-excluded_with_leading_dot.pem", &a));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // An excluded dNSName constraint of ".bar.com" should only match subdomains
@@ -247,7 +248,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("dnsname-permitted_two_dot.pem", &a));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // A dNSName constraint of ".." isn't meaningful. Shouldn't match anything.
@@ -263,7 +264,7 @@
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // Only "excluded.permitted.example.com" is excluded, and since permitted is
@@ -283,7 +284,7 @@
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // "permitted.example.com" is in the permitted section, but since "" is
@@ -301,7 +302,7 @@
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // "." is excluded, which should match nothing.
@@ -320,7 +321,7 @@
   a.replace(replace_location, 1, 1, -1);
 
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+  EXPECT_FALSE(NameConstraints::Create(der::Input(a), is_critical(), &errors));
 }
 
 TEST_P(ParseNameConstraints, DirectoryNames) {
@@ -347,49 +348,49 @@
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // Not in any permitted subtree.
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_ca)));
+      SequenceValueFromString(name_ca)));
   // Within the permitted C=US subtree.
   EXPECT_TRUE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us)));
+      SequenceValueFromString(name_us)));
   // Within the permitted C=US subtree.
   EXPECT_TRUE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us_az)));
+      SequenceValueFromString(name_us_az)));
   // Within the permitted C=US subtree, however the excluded C=US,ST=California
   // subtree takes priority.
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us_ca)));
+      SequenceValueFromString(name_us_ca)));
   // Within the permitted C=US subtree as well as the permitted
   // C=US,ST=California,L=Mountain View subtree, however the excluded
   // C=US,ST=California subtree still takes priority.
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us_ca_mountain_view)));
+      SequenceValueFromString(name_us_ca_mountain_view)));
   // Not in any permitted subtree, and also inside the extraneous excluded C=DE
   // subtree.
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_de)));
+      SequenceValueFromString(name_de)));
   // Not in any permitted subtree.
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_jp)));
+      SequenceValueFromString(name_jp)));
   // Within the permitted C=JP,ST=Tokyo subtree.
   EXPECT_TRUE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_jp_tokyo)));
+      SequenceValueFromString(name_jp_tokyo)));
 
   EXPECT_EQ(GENERAL_NAME_DIRECTORY_NAME,
             name_constraints->constrained_name_types());
 
   // Within the permitted C=US subtree.
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name_us),
+                              SequenceValueFromString(name_us),
                               nullptr /* subject_alt_names */));
   // Within the permitted C=US subtree, however the excluded C=US,ST=California
   // subtree takes priority.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name_us_ca),
+                               SequenceValueFromString(name_us_ca),
                                nullptr /* subject_alt_names */));
 
   std::string san_der;
@@ -417,7 +418,7 @@
       LoadTestNameConstraint("directoryname-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name_empty;
@@ -433,13 +434,13 @@
   // Only "C=US,ST=California" is excluded, and since permitted is empty,
   // any directoryName outside that is allowed.
   EXPECT_TRUE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_empty)));
+      SequenceValueFromString(name_empty)));
   EXPECT_TRUE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us)));
+      SequenceValueFromString(name_us)));
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us_ca)));
+      SequenceValueFromString(name_us_ca)));
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us_ca_mountain_view)));
+      SequenceValueFromString(name_us_ca_mountain_view)));
 }
 
 TEST_P(ParseNameConstraints, DirectoryNamesExcludeAll) {
@@ -448,7 +449,7 @@
       LoadTestNameConstraint("directoryname-excludeall.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name_empty;
@@ -466,22 +467,22 @@
   // "C=US" is in the permitted section, but since an empty
   // directoryName is excluded, nothing is permitted.
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_empty)));
+      SequenceValueFromString(name_empty)));
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us)));
+      SequenceValueFromString(name_us)));
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_us_ca)));
+      SequenceValueFromString(name_us_ca)));
   EXPECT_FALSE(name_constraints->IsPermittedDirectoryName(
-      SequenceValueFromString(&name_jp)));
+      SequenceValueFromString(name_jp)));
 }
 
-TEST_P(ParseNameConstraints, IPAdresses) {
+TEST_P(ParseNameConstraints, IPAddresses) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // IPv4 tests:
@@ -597,13 +598,13 @@
       IsPermittedCert(name_constraints.get(), der::Input(), san.get()));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesExcludeOnly) {
+TEST_P(ParseNameConstraints, IPAddressesExcludeOnly) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-excluded.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // Only 192.168.5.0/255.255.255.0 is excluded, and since permitted is empty,
@@ -614,13 +615,13 @@
       fillins::IPAddress(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 0, 0, 0, 1)));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesExcludeAll) {
+TEST_P(ParseNameConstraints, IPAddressesExcludeAll) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-excludeall.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   // 192.168.0.0/255.255.0.0 and
@@ -634,13 +635,13 @@
       fillins::IPAddress(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 0, 0, 0, 1)));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesNetmaskPermitSingleHost) {
+TEST_P(ParseNameConstraints, IPAddressesNetmaskPermitSingleHost) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-permit_singlehost.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress::IPv4AllZeros()));
@@ -651,13 +652,13 @@
   EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress(255, 255, 255, 255)));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesNetmaskPermitPrefixLen31) {
+TEST_P(ParseNameConstraints, IPAddressesNetmaskPermitPrefixLen31) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-permit_prefix31.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress::IPv4AllZeros()));
@@ -669,13 +670,13 @@
   EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress(255, 255, 255, 255)));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesNetmaskPermitPrefixLen1) {
+TEST_P(ParseNameConstraints, IPAddressesNetmaskPermitPrefixLen1) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-permit_prefix1.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress::IPv4AllZeros()));
@@ -686,13 +687,13 @@
       name_constraints->IsPermittedIP(fillins::IPAddress(0xFF, 0xFF, 0xFF, 0xFF)));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesNetmaskPermitAll) {
+TEST_P(ParseNameConstraints, IPAddressesNetmaskPermitAll) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-permit_all.pem", &a));
 
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(
-      NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_TRUE(name_constraints->IsPermittedIP(fillins::IPAddress::IPv4AllZeros()));
@@ -700,32 +701,65 @@
   EXPECT_TRUE(name_constraints->IsPermittedIP(fillins::IPAddress(255, 255, 255, 255)));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesFailOnInvalidAddr) {
+TEST_P(ParseNameConstraints, IPAddressesFailOnInvalidAddr) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint("ipaddress-invalid_addr.pem", &a));
 
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+  EXPECT_FALSE(NameConstraints::Create(der::Input(a), is_critical(), &errors));
 }
 
-TEST_P(ParseNameConstraints, IPAdressesFailOnInvalidMaskNotContiguous) {
+TEST_P(ParseNameConstraints, IPAddressesFailOnInvalidMaskNotContiguous) {
   std::string a;
   ASSERT_TRUE(LoadTestNameConstraint(
       "ipaddress-invalid_mask_not_contiguous_1.pem", &a));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+  EXPECT_FALSE(NameConstraints::Create(der::Input(a), is_critical(), &errors));
 
   ASSERT_TRUE(LoadTestNameConstraint(
       "ipaddress-invalid_mask_not_contiguous_2.pem", &a));
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+  EXPECT_FALSE(NameConstraints::Create(der::Input(a), is_critical(), &errors));
 
   ASSERT_TRUE(LoadTestNameConstraint(
       "ipaddress-invalid_mask_not_contiguous_3.pem", &a));
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+  EXPECT_FALSE(NameConstraints::Create(der::Input(a), is_critical(), &errors));
 
   ASSERT_TRUE(LoadTestNameConstraint(
       "ipaddress-invalid_mask_not_contiguous_4.pem", &a));
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&a), is_critical(), &errors));
+  EXPECT_FALSE(NameConstraints::Create(der::Input(a), is_critical(), &errors));
+}
+
+// Test that v4/v6 mapping is not applied when evaluating name constraints.
+TEST_P(ParseNameConstraints, IPAddressesMapped) {
+  std::string a;
+  ASSERT_TRUE(LoadTestNameConstraint("ipaddress-mapped_addrs.pem", &a));
+
+  CertErrors errors;
+  std::unique_ptr<NameConstraints> name_constraints(
+      NameConstraints::Create(der::Input(a), is_critical(), &errors));
+  ASSERT_TRUE(name_constraints);
+
+  // 192.168.1.0/24 is a permitted subtree.
+  EXPECT_TRUE(name_constraints->IsPermittedIP(fillins::IPAddress(192, 168, 1, 0)));
+  // This does not cover ::ffff:192.168.1.0.
+  EXPECT_FALSE(name_constraints->IsPermittedIP(
+      fillins::IPAddress(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 192, 168, 1, 0)));
+  // 192.168.1.1 is excluded.
+  EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress(192, 168, 1, 1)));
+  // ::ffff:192.168.1.2 is excluded, but that does not exclude 192.168.1.2.
+  EXPECT_TRUE(name_constraints->IsPermittedIP(fillins::IPAddress(192, 168, 1, 2)));
+
+  // ::ffff:192.168.2.0/120 is a permitted subtree.
+  EXPECT_TRUE(name_constraints->IsPermittedIP(
+      fillins::IPAddress(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 192, 168, 2, 0)));
+  // This does not cover 192.168.2.0.
+  EXPECT_FALSE(name_constraints->IsPermittedIP(fillins::IPAddress(192, 168, 2, 0)));
+  // ::ffff:192.168.2.1 is excluded.
+  EXPECT_FALSE(name_constraints->IsPermittedIP(
+      fillins::IPAddress(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 192, 168, 2, 1)));
+  // 192.168.2.2 is excluded, but that does not exclude ::ffff:192.168.2.2.
+  EXPECT_TRUE(name_constraints->IsPermittedIP(
+      fillins::IPAddress(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 192, 168, 2, 2)));
 }
 
 TEST_P(ParseNameConstraints, OtherNamesInPermitted) {
@@ -734,7 +768,7 @@
       LoadTestNameConstraint("othername-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -757,7 +791,7 @@
       LoadTestNameConstraint("othername-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -780,7 +814,7 @@
       LoadTestNameConstraint("rfc822name-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -842,7 +876,7 @@
       LoadTestNameConstraint("rfc822name-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -892,7 +926,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -951,7 +985,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1000,7 +1034,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1050,7 +1084,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1100,7 +1134,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1138,7 +1172,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1177,7 +1211,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1202,7 +1236,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1227,7 +1261,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1257,7 +1291,7 @@
       LoadTestNameConstraint("rfc822name-excluded-ipv4.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   EXPECT_EQ(GENERAL_NAME_RFC822_NAME,
@@ -1288,7 +1322,7 @@
       LoadTestNameConstraint("othername-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string san_der;
@@ -1306,7 +1340,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string san_der;
@@ -1325,7 +1359,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string san_der;
@@ -1345,7 +1379,7 @@
       LoadTestNameConstraint("x400address-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1368,7 +1402,7 @@
       LoadTestNameConstraint("x400address-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1391,7 +1425,7 @@
       LoadTestNameConstraint("edipartyname-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1414,7 +1448,7 @@
       LoadTestNameConstraint("edipartyname-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1436,7 +1470,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("uri-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1458,7 +1492,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("uri-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1481,7 +1515,7 @@
       LoadTestNameConstraint("registeredid-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1504,7 +1538,7 @@
       LoadTestNameConstraint("registeredid-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   if (is_critical()) {
@@ -1530,7 +1564,7 @@
   // could be changed to allowed if there are buggy encoders out there that
   // include it anyway.
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1539,7 +1573,7 @@
   ASSERT_TRUE(
       LoadTestNameConstraint("dnsname-with_min_1.pem", &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1549,7 +1583,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("dnsname-with_min_0_and_max.pem",
                                      &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1558,7 +1592,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("dnsname-with_min_1_and_max.pem",
                                      &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1566,14 +1600,14 @@
   std::string constraints_der;
   ASSERT_TRUE(LoadTestNameConstraint("dnsname-with_max.pem", &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
 TEST_P(ParseNameConstraints, FailsOnEmptyExtensionValue) {
   std::string constraints_der = "";
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1582,7 +1616,7 @@
   ASSERT_TRUE(
       LoadTestNameConstraint("invalid-no_subtrees.pem", &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1591,7 +1625,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("invalid-empty_permitted_subtree.pem",
                                      &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1600,7 +1634,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("invalid-empty_excluded_subtree.pem",
                                      &constraints_der));
   CertErrors errors;
-  EXPECT_FALSE(NameConstraints::Create(der::Input(&constraints_der),
+  EXPECT_FALSE(NameConstraints::Create(der::Input(constraints_der),
                                        is_critical(), &errors));
 }
 
@@ -1610,7 +1644,7 @@
   ASSERT_TRUE(LoadTestNameConstraint("directoryname.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name;
@@ -1618,14 +1652,14 @@
   // Name constraints don't contain rfc822Name, so emailAddress in subject is
   // allowed regardless.
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name),
+                              SequenceValueFromString(name),
                               /*subject_alt_names=*/nullptr));
 
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-invalidstring.pem", &name));
   // Name constraints don't contain rfc822Name, so emailAddress in subject is
   // allowed regardless.
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name),
+                              SequenceValueFromString(name),
                               /*subject_alt_names=*/nullptr));
 }
 
@@ -1635,7 +1669,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name;
@@ -1644,21 +1678,21 @@
   // Name constraints contain rfc822Name, and the address matches the
   // constraint (which is all addresses on the hostname.)
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name),
+                              SequenceValueFromString(name),
                               /*subject_alt_names=*/nullptr));
 
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-invalidstring.pem", &name));
   // The bytes of the name string match, but the string type is VISIBLESTRING
   // which is not supported, so this should fail.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name),
+                               SequenceValueFromString(name),
                                /*subject_alt_names=*/nullptr));
 
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-multiple.pem", &name));
   // Subject contains multiple rfc822Names, and they all match the constraint
   // (which is all addresses on the hostname.)
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name),
+                              SequenceValueFromString(name),
                               /*subject_alt_names=*/nullptr));
 }
 
@@ -1668,7 +1702,7 @@
       LoadTestNameConstraint("rfc822name-permitted.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name;
@@ -1677,21 +1711,21 @@
   // Name constraints contain rfc822Name, and the address does not match the
   // constraint.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name),
+                               SequenceValueFromString(name),
                                /*subject_alt_names=*/nullptr));
 
   // Address is a case-insensitive match, but name constraints (permitted) are
   // case-sensitive, so this fails.
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-localpartcase.pem", &name));
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name),
+                               SequenceValueFromString(name),
                                /*subject_alt_names=*/nullptr));
 
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-multiple.pem", &name));
   // Subject contains multiple rfc822Names, and only the first one matches the
   // constraint.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name),
+                               SequenceValueFromString(name),
                                /*subject_alt_names=*/nullptr));
 }
 
@@ -1701,7 +1735,7 @@
       LoadTestNameConstraint("rfc822name-excluded.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name;
@@ -1710,21 +1744,21 @@
   // Name constraints contain excluded rfc822Name, and the address does not
   // match the constraint.
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name),
+                              SequenceValueFromString(name),
                               /*subject_alt_names=*/nullptr));
 
   // Name constraints for excluded are done case-insensitive in the local part,
   // so this is not allowed.
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-localpartcase.pem", &name));
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name),
+                               SequenceValueFromString(name),
                                /*subject_alt_names=*/nullptr));
 
   ASSERT_TRUE(LoadTestName("name-us-arizona-email-multiple.pem", &name));
   // Subject contains multiple rfc822Names, and one of them is excluded by the
   // constraint.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name),
+                               SequenceValueFromString(name),
                                /*subject_alt_names=*/nullptr));
 }
 
@@ -1737,7 +1771,7 @@
                                      &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name_us_az_foocom;
@@ -1746,7 +1780,7 @@
   // (The commonName hostname is not within permitted dNSName constraints, so
   // this would not be permitted if hostnames in commonName were checked.)
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name_us_az_foocom),
+                              SequenceValueFromString(name_us_az_foocom),
                               nullptr /* subject_alt_names */));
 
   std::string name_us_az_permitted;
@@ -1756,7 +1790,7 @@
   // permitted dNSName constraints, so this should be permitted regardless if
   // hostnames in commonName are checked or not.
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name_us_az_permitted),
+                              SequenceValueFromString(name_us_az_permitted),
                               nullptr /* subject_alt_names */));
 
   std::string name_us_ca_permitted;
@@ -1766,7 +1800,7 @@
   // this should not be allowed, regardless of checking the
   // permitted.example.com in commonName.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name_us_ca_permitted),
+                               SequenceValueFromString(name_us_ca_permitted),
                                nullptr /* subject_alt_names */));
 }
 
@@ -1779,7 +1813,7 @@
       "directoryname_and_dnsname_and_ipaddress.pem", &constraints_der));
   CertErrors errors;
   std::unique_ptr<NameConstraints> name_constraints(NameConstraints::Create(
-      der::Input(&constraints_der), is_critical(), &errors));
+      der::Input(constraints_der), is_critical(), &errors));
   ASSERT_TRUE(name_constraints);
 
   std::string name_us_az_1_1_1_1;
@@ -1788,7 +1822,7 @@
   // (The commonName IP address is not within permitted iPAddresses constraints,
   // so this would not be permitted if IP addresses in commonName were checked.)
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name_us_az_1_1_1_1),
+                              SequenceValueFromString(name_us_az_1_1_1_1),
                               nullptr /* subject_alt_names */));
 
   std::string name_us_az_192_168_1_1;
@@ -1798,7 +1832,7 @@
   // permitted iPAddress constraints, so this should be permitted regardless if
   // IP addresses in commonName are checked or not.
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name_us_az_192_168_1_1),
+                              SequenceValueFromString(name_us_az_192_168_1_1),
                               nullptr /* subject_alt_names */));
 
   std::string name_us_ca_192_168_1_1;
@@ -1808,7 +1842,7 @@
   // this should not be allowed, regardless of checking the
   // IP address in commonName.
   EXPECT_FALSE(IsPermittedCert(name_constraints.get(),
-                               SequenceValueFromString(&name_us_ca_192_168_1_1),
+                               SequenceValueFromString(name_us_ca_192_168_1_1),
                                nullptr /* subject_alt_names */));
 
   std::string name_us_az_ipv6;
@@ -1817,7 +1851,7 @@
   // (The commonName is an ipv6 address which wasn't supported in the past, but
   // since commonName checking is ignored entirely, this is permitted.)
   EXPECT_TRUE(IsPermittedCert(name_constraints.get(),
-                              SequenceValueFromString(&name_us_az_ipv6),
+                              SequenceValueFromString(name_us_az_ipv6),
                               nullptr /* subject_alt_names */));
 }
 
diff --git a/pki/ocsp.h b/pki/ocsp.h
index c5bbd89..496378b 100644
--- a/pki/ocsp.h
+++ b/pki/ocsp.h
@@ -5,8 +5,8 @@
 #ifndef BSSL_PKI_OCSP_H_
 #define BSSL_PKI_OCSP_H_
 
-#include "webutil/url/url.h"
 #include "fillins/openssl_util.h"
+#include "webutil/url/url.h"
 #include <memory>
 #include <vector>
 
diff --git a/pki/ocsp_unittest.cc b/pki/ocsp_unittest.cc
index 80137ff..32fc1f3 100644
--- a/pki/ocsp_unittest.cc
+++ b/pki/ocsp_unittest.cc
@@ -175,8 +175,7 @@
   std::vector<uint8_t> encoded_request;
   ASSERT_TRUE(CreateOCSPRequest(cert.get(), issuer.get(), &encoded_request));
 
-  EXPECT_EQ(der::Input(encoded_request.data(), encoded_request.size()),
-            der::Input(&request_data));
+  EXPECT_EQ(der::Input(encoded_request), der::Input(request_data));
 }
 
 std::string_view kGetURLTestParams[] = {
diff --git a/pki/parse_certificate_unittest.cc b/pki/parse_certificate_unittest.cc
index 196d401..fc79ca3 100644
--- a/pki/parse_certificate_unittest.cc
+++ b/pki/parse_certificate_unittest.cc
@@ -63,7 +63,7 @@
   der::BitString signature_value;
   CertErrors errors;
   bool actual_result =
-      ParseCertificate(der::Input(&data), &tbs_certificate_tlv,
+      ParseCertificate(der::Input(data), &tbs_certificate_tlv,
                        &signature_algorithm_tlv, &signature_value, &errors);
 
   EXPECT_EQ(expected_result, actual_result);
@@ -72,10 +72,10 @@
   // Ensure that the parsed certificate matches expectations.
   if (expected_result && actual_result) {
     EXPECT_EQ(0, signature_value.unused_bits());
-    EXPECT_EQ(der::Input(&expected_signature), signature_value.bytes());
-    EXPECT_EQ(der::Input(&expected_signature_algorithm),
+    EXPECT_EQ(der::Input(expected_signature), signature_value.bytes());
+    EXPECT_EQ(der::Input(expected_signature_algorithm),
               signature_algorithm_tlv);
-    EXPECT_EQ(der::Input(&expected_tbs_certificate), tbs_certificate_tlv);
+    EXPECT_EQ(der::Input(expected_tbs_certificate), tbs_certificate_tlv);
   }
 }
 
@@ -167,7 +167,7 @@
   ParsedTbsCertificate parsed;
   CertErrors errors;
   bool actual_result =
-      ParseTbsCertificate(der::Input(&data), {}, &parsed, &errors);
+      ParseTbsCertificate(der::Input(data), {}, &parsed, &errors);
 
   EXPECT_EQ(expected_result, actual_result);
   VerifyCertErrors(expected_errors, errors, test_file_path);
@@ -178,36 +178,36 @@
   // Ensure that the ParsedTbsCertificate matches expectations.
   EXPECT_EQ(expected_version, parsed.version);
 
-  EXPECT_EQ(der::Input(&expected_serial_number), parsed.serial_number);
-  EXPECT_EQ(der::Input(&expected_signature_algorithm),
+  EXPECT_EQ(der::Input(expected_serial_number), parsed.serial_number);
+  EXPECT_EQ(der::Input(expected_signature_algorithm),
             parsed.signature_algorithm_tlv);
 
-  EXPECT_EQ(der::Input(&expected_issuer), parsed.issuer_tlv);
+  EXPECT_EQ(der::Input(expected_issuer), parsed.issuer_tlv);
 
   // In the test expectations PEM file, validity is described as a
   // textual string of the parsed value (rather than as DER).
   EXPECT_EQ(expected_validity_not_before, ToString(parsed.validity_not_before));
   EXPECT_EQ(expected_validity_not_after, ToString(parsed.validity_not_after));
 
-  EXPECT_EQ(der::Input(&expected_subject), parsed.subject_tlv);
-  EXPECT_EQ(der::Input(&expected_spki), parsed.spki_tlv);
+  EXPECT_EQ(der::Input(expected_subject), parsed.subject_tlv);
+  EXPECT_EQ(der::Input(expected_spki), parsed.spki_tlv);
 
   EXPECT_EQ(!expected_issuer_unique_id.empty(),
             parsed.issuer_unique_id.has_value());
   if (parsed.issuer_unique_id.has_value()) {
-    EXPECT_EQ(der::Input(&expected_issuer_unique_id),
+    EXPECT_EQ(der::Input(expected_issuer_unique_id),
               parsed.issuer_unique_id->bytes());
   }
   EXPECT_EQ(!expected_subject_unique_id.empty(),
             parsed.subject_unique_id.has_value());
   if (parsed.subject_unique_id.has_value()) {
-    EXPECT_EQ(der::Input(&expected_subject_unique_id),
+    EXPECT_EQ(der::Input(expected_subject_unique_id),
               parsed.subject_unique_id->bytes());
   }
 
   EXPECT_EQ(!expected_extensions.empty(), parsed.extensions_tlv.has_value());
   if (parsed.extensions_tlv) {
-    EXPECT_EQ(der::Input(&expected_extensions), parsed.extensions_tlv.value());
+    EXPECT_EQ(der::Input(expected_extensions), parsed.extensions_tlv.value());
   }
 }
 
@@ -1008,7 +1008,7 @@
       file_name;
   EXPECT_TRUE(ReadTestDataFromPemFile(test_file_path, mappings));
 
-  return ParseAuthorityKeyIdentifier(der::Input(backing_bytes),
+  return ParseAuthorityKeyIdentifier(der::Input(*backing_bytes),
                                      authority_key_identifier);
 }
 
diff --git a/pki/parse_name_unittest.cc b/pki/parse_name_unittest.cc
index a3585bb..fec2e07 100644
--- a/pki/parse_name_unittest.cc
+++ b/pki/parse_name_unittest.cc
@@ -201,7 +201,7 @@
   ASSERT_TRUE(
       LoadTestData("invalid", "AttributeTypeAndValue", "extradata", &invalid));
   RDNSequence atv;
-  ASSERT_FALSE(ParseName(SequenceValueFromString(&invalid), &atv));
+  ASSERT_FALSE(ParseName(SequenceValueFromString(invalid), &atv));
 }
 
 TEST(ParseNameTest, InvalidNameEmpty) {
@@ -209,7 +209,7 @@
   ASSERT_TRUE(
       LoadTestData("invalid", "AttributeTypeAndValue", "empty", &invalid));
   RDNSequence atv;
-  ASSERT_FALSE(ParseName(SequenceValueFromString(&invalid), &atv));
+  ASSERT_FALSE(ParseName(SequenceValueFromString(invalid), &atv));
 }
 
 TEST(ParseNameTest, InvalidNameBadType) {
@@ -217,7 +217,7 @@
   ASSERT_TRUE(LoadTestData("invalid", "AttributeTypeAndValue",
                            "badAttributeType", &invalid));
   RDNSequence atv;
-  ASSERT_FALSE(ParseName(SequenceValueFromString(&invalid), &atv));
+  ASSERT_FALSE(ParseName(SequenceValueFromString(invalid), &atv));
 }
 
 TEST(ParseNameTest, InvalidNameNotSequence) {
@@ -225,21 +225,21 @@
   ASSERT_TRUE(LoadTestData("invalid", "AttributeTypeAndValue", "setNotSequence",
                            &invalid));
   RDNSequence atv;
-  ASSERT_FALSE(ParseName(SequenceValueFromString(&invalid), &atv));
+  ASSERT_FALSE(ParseName(SequenceValueFromString(invalid), &atv));
 }
 
 TEST(ParseNameTest, InvalidNameNotSet) {
   std::string invalid;
   ASSERT_TRUE(LoadTestData("invalid", "RDN", "sequenceInsteadOfSet", &invalid));
   RDNSequence atv;
-  ASSERT_FALSE(ParseName(SequenceValueFromString(&invalid), &atv));
+  ASSERT_FALSE(ParseName(SequenceValueFromString(invalid), &atv));
 }
 
 TEST(ParseNameTest, InvalidNameEmptyRdn) {
   std::string invalid;
   ASSERT_TRUE(LoadTestData("invalid", "RDN", "empty", &invalid));
   RDNSequence atv;
-  ASSERT_FALSE(ParseName(SequenceValueFromString(&invalid), &atv));
+  ASSERT_FALSE(ParseName(SequenceValueFromString(invalid), &atv));
 }
 
 TEST(ParseNameTest, RFC2253FormatBasic) {
diff --git a/pki/parsed_certificate.h b/pki/parsed_certificate.h
index 20fd895..5fbef82 100644
--- a/pki/parsed_certificate.h
+++ b/pki/parsed_certificate.h
@@ -110,7 +110,7 @@
   // Sequence tag). This is guaranteed to be valid DER, though the contents of
   // unhandled string types are treated as raw bytes.
   der::Input normalized_subject() const {
-    return der::Input(&normalized_subject_);
+    return der::Input(normalized_subject_);
   }
   // Returns the DER-encoded raw issuer value (including the outer sequence
   // tag). This is guaranteed to be valid DER, though the contents of unhandled
@@ -120,7 +120,7 @@
   // Sequence tag). This is guaranteed to be valid DER, though the contents of
   // unhandled string types are treated as raw bytes.
   der::Input normalized_issuer() const {
-    return der::Input(&normalized_issuer_);
+    return der::Input(normalized_issuer_);
   }
 
   // Returns true if the certificate has a BasicConstraints extension.
diff --git a/pki/path_builder_pkits_unittest.cc b/pki/path_builder_pkits_unittest.cc
index b49a34d..620205c 100644
--- a/pki/path_builder_pkits_unittest.cc
+++ b/pki/path_builder_pkits_unittest.cc
@@ -5,7 +5,6 @@
 #include "path_builder.h"
 
 #include <cstdint>
-#include <iostream>
 
 #include "fillins/log.h"
 #include "fillins/net_errors.h"
@@ -237,7 +236,7 @@
       for (size_t i = 0; i < result.paths.size(); ++i) {
         const CertPathBuilderResultPath* result_path =
             result.paths[i].get();
-        std::cerr << "path " << i << " errors:\n"
+        LOG(ERROR) << "path " << i << " errors:\n"
                    << result_path->errors.ToDebugString(result_path->certs);
       }
     }
diff --git a/pki/signature_algorithm_unittest.cc b/pki/signature_algorithm_unittest.cc
index 1c420a3..9673ab2 100644
--- a/pki/signature_algorithm_unittest.cc
+++ b/pki/signature_algorithm_unittest.cc
@@ -1155,8 +1155,7 @@
         0x04, 0x02, 0x03, 0xa2, 0x03, 0x02, 0x01, 0x40},
        SignatureAlgorithm::kRsaPssSha512}};
   for (const auto& t : kValidTests) {
-    EXPECT_EQ(ParseSignatureAlgorithm(der::Input(t.data.data(), t.data.size())),
-              t.expected);
+    EXPECT_EQ(ParseSignatureAlgorithm(der::Input(t.data)), t.expected);
   }
 
   struct {
@@ -1346,8 +1345,7 @@
         0x05, 0x00, 0xa2, 0x03, 0x02, 0x01, 0x41}},
   };
   for (const auto& t : kInvalidTests) {
-    EXPECT_FALSE(
-        ParseSignatureAlgorithm(der::Input(t.data.data(), t.data.size())));
+    EXPECT_FALSE(ParseSignatureAlgorithm(der::Input(t.data)));
   }
 }
 
diff --git a/pki/simple_path_builder_delegate_unittest.cc b/pki/simple_path_builder_delegate_unittest.cc
index 7d47406..7b6206c 100644
--- a/pki/simple_path_builder_delegate_unittest.cc
+++ b/pki/simple_path_builder_delegate_unittest.cc
@@ -38,11 +38,11 @@
   ASSERT_TRUE(ReadTestDataFromPemFile(path, mappings));
 
   std::optional<SignatureAlgorithm> sigalg_opt =
-      ParseSignatureAlgorithm(der::Input(&algorithm_str));
+      ParseSignatureAlgorithm(der::Input(algorithm_str));
   ASSERT_TRUE(sigalg_opt);
   *signature_algorithm = *sigalg_opt;
 
-  ASSERT_TRUE(ParsePublicKey(der::Input(&public_key_str), public_key));
+  ASSERT_TRUE(ParsePublicKey(der::Input(public_key_str), public_key));
 }
 
 class SimplePathBuilderDelegate1024SuccessTest
diff --git a/pki/test_helpers.cc b/pki/test_helpers.cc
index 98487d7..36f0ffb 100644
--- a/pki/test_helpers.cc
+++ b/pki/test_helpers.cc
@@ -110,7 +110,7 @@
 
 }  // namespace der
 
-der::Input SequenceValueFromString(const std::string* s) {
+der::Input SequenceValueFromString(std::string_view s) {
   der::Parser parser((der::Input(s)));
   der::Input data;
   if (!parser.ReadTag(der::kSequence, &data)) {
@@ -284,7 +284,7 @@
       if (value == "DEFAULT") {
         value = "211005120000Z";
       }
-      if (!der::ParseUTCTime(der::Input(&value), &test->time)) {
+      if (!der::ParseUTCTime(der::Input(value), &test->time)) {
         ADD_FAILURE() << "Failed parsing UTC time";
         return false;
       }
diff --git a/pki/test_helpers.h b/pki/test_helpers.h
index 73e8afd..6857dd3 100644
--- a/pki/test_helpers.h
+++ b/pki/test_helpers.h
@@ -9,6 +9,7 @@
 
 #include <ostream>
 #include <string>
+#include <string_view>
 #include <vector>
 
 #include "parsed_certificate.h"
@@ -33,7 +34,7 @@
 //
 // The returned der::Input() is only valid so long as the input string is alive
 // and is not mutated.
-der::Input SequenceValueFromString(const std::string* s);
+der::Input SequenceValueFromString(std::string_view s);
 
 // Helper structure that maps a PEM block header (for instance "CERTIFICATE") to
 // the destination where the value for that block should be written.
diff --git a/pki/testdata/name_constraints_unittest/generate_name_constraints.py b/pki/testdata/name_constraints_unittest/generate_name_constraints.py
index bf7e89b..0c474a7 100755
--- a/pki/testdata/name_constraints_unittest/generate_name_constraints.py
+++ b/pki/testdata/name_constraints_unittest/generate_name_constraints.py
@@ -317,6 +317,23 @@
                                  enforce_length=False))
   generate(c, "ipaddress-invalid_addr.pem")
 
+  v4_mapped_prefix = (0, ) * 10 + (255, ) * 2
+  v4_mapped_mask = (255, ) * 12
+  c = NameConstraintsGenerator()
+  c.add_permitted(ip_address_range((192, 168, 1, 0), (255, 255, 255, 0)))
+  c.add_excluded(ip_address_range((192, 168, 1, 1), (255, 255, 255, 255)))
+  c.add_excluded(
+      ip_address_range(v4_mapped_prefix + (192, 168, 1, 2),
+                       v4_mapped_mask + (255, 255, 255, 255)))
+  c.add_permitted(
+      ip_address_range(v4_mapped_prefix + (192, 168, 2, 0),
+                       v4_mapped_mask + (255, 255, 255, 0)))
+  c.add_excluded(
+      ip_address_range(v4_mapped_prefix + (192, 168, 2, 1),
+                       v4_mapped_mask + (255, 255, 255, 255)))
+  c.add_excluded(ip_address_range((192, 168, 2, 2), (255, 255, 255, 255)))
+  generate(c, "ipaddress-mapped_addrs.pem")
+
   n_us = generate_names.NameGenerator()
   n_us.add_rdn().add_attr('countryName', 'PRINTABLESTRING', 'US')
   generate(n_us, "name-us.pem")
diff --git a/pki/testdata/name_constraints_unittest/ipaddress-mapped_addrs.pem b/pki/testdata/name_constraints_unittest/ipaddress-mapped_addrs.pem
new file mode 100644
index 0000000..62dc085
--- /dev/null
+++ b/pki/testdata/name_constraints_unittest/ipaddress-mapped_addrs.pem
@@ -0,0 +1,29 @@
+SEQUENCE {
+  [0] {
+    SEQUENCE {
+      [7 PRIMITIVE] { `c0a80100ffffff00` }
+    }
+    SEQUENCE {
+      [7 PRIMITIVE] { `00000000000000000000ffffc0a80200ffffffffffffffffffffffffffffff00` }
+    }
+  }
+  [1] {
+    SEQUENCE {
+      [7 PRIMITIVE] { `c0a80101ffffffff` }
+    }
+    SEQUENCE {
+      [7 PRIMITIVE] { `00000000000000000000ffffc0a80102ffffffffffffffffffffffffffffffff` }
+    }
+    SEQUENCE {
+      [7 PRIMITIVE] { `00000000000000000000ffffc0a80201ffffffffffffffffffffffffffffffff` }
+    }
+    SEQUENCE {
+      [7 PRIMITIVE] { `c0a80202ffffffff` }
+    }
+  }
+}
+-----BEGIN NAME CONSTRAINTS-----
+MIGUoDAwCocIwKgBAP///wAwIocgAAAAAAAAAAAAAP//wKgCAP///////////////////wChYDAK
+hwjAqAEB/////zAihyAAAAAAAAAAAAAA///AqAEC/////////////////////zAihyAAAAAAAAAA
+AAAA///AqAIB/////////////////////zAKhwjAqAIC/////w==
+-----END NAME CONSTRAINTS-----
diff --git a/pki/testdata/ssl/certificates/README b/pki/testdata/ssl/certificates/README
index c56b7e1..6e3db64 100644
--- a/pki/testdata/ssl/certificates/README
+++ b/pki/testdata/ssl/certificates/README
@@ -46,10 +46,6 @@
      purposes is not recommended. This needs to be updated periodically so the
      server name the cert is valid for may change.
 
-- treadclimber.pem: A chain where the leaf does not contain embedded SCTs,
-  and which has a notBefore date after 2018/10/15. Expires 2020/02/07.
-- treadclimber.sctlist: The TLS encoded SignedCertificateTimestampList for the
-  treadclimber.pem leaf certificate.
 - lets-encrypt-dst-x3-root.pem: A chain that ends in the Lets encrypt DST X3
   root (https://crt.sh/?id=8395). Has the same leaf as
   lets-encrypt-isrg-x1-root.pem.
@@ -193,18 +189,15 @@
      Certificates for testing EV display (including regression test for
      https://crbug.com/1069113).
 
-===== From net/data/ssl/scripts/generate-weak-test-chains.sh
-- 2048-rsa-root.pem
-- {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-intermediate.pem
-- {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-ee-by-
-      {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-intermediate.pem
-      Test certificates used to ensure that weak keys are detected and rejected
-
-===== From net/data/ssl/scripts/generate-cross-signed-certs.sh
-- cross-signed-leaf.pem
-- cross-signed-root-md5.pem
-- cross-signed-root-sha256.pem
-     A certificate chain for regression testing http://crbug.com/108514
+===== From net/data/ssl/scripts/generate-test-keys.sh
+- rsa-{768,1024,2048}-{1..3}.key
+- ec-prime256v1-{1..3}.key
+     Pre-generated keys of various types/sizes.
+     Useful for tests that generate RSA certificates with CertBuilder without
+     having to pay the cost of generating RSA keys at runtime. Multiple keys
+     of each size are provided. (EC keys are cheap to generate at runtime, but
+     having some as files simplifies test logic in cases where the test is
+     reading both RSA and EC keys from files.)
 
 ===== From net/data/ssl/scripts/generate-redundant-test-chains.sh
 - redundant-validated-chain.pem
diff --git a/pki/testdata/ssl/certificates/ec-prime256v1-1.key b/pki/testdata/ssl/certificates/ec-prime256v1-1.key
new file mode 100644
index 0000000..43ba034
--- /dev/null
+++ b/pki/testdata/ssl/certificates/ec-prime256v1-1.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8YeFfq6kLtUZziTV
+eBxKf4sdzWhBIrmoa7R6IQ/L0g2hRANCAATwrGqIPnPdqDreHFlZqECUQ0AjHbyi
+NWFYmGc3FkPsCS1MWu2WhMYdw7UuLDdMKge7Q6IWMsHum/4G04hRdTYL
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/ec-prime256v1-2.key b/pki/testdata/ssl/certificates/ec-prime256v1-2.key
new file mode 100644
index 0000000..bfdcc94
--- /dev/null
+++ b/pki/testdata/ssl/certificates/ec-prime256v1-2.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgSCf4GodSLqPExkQ0
+Ik8+89ysmrauzOM+YOw7a6XXxpOhRANCAASTFjEdz9MMLzVvqiKJ6hiEmG7+tfn1
+6r5Odwu8dkIr69J5RljzPLAbHXN4kXF/ohZbBvKnX+1cEUDO+kBtAHMB
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/ec-prime256v1-3.key b/pki/testdata/ssl/certificates/ec-prime256v1-3.key
new file mode 100644
index 0000000..de0b671
--- /dev/null
+++ b/pki/testdata/ssl/certificates/ec-prime256v1-3.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgSFwCrUE0q+J8WdaB
+wuQtvtQuvSVy4xrVUVKbg/b8qmShRANCAAQ0MQNe+C3m+ZxRjUC2VHut66EhAqDQ
+EXOCJ3se7ctMpdmVa2ml/4cjz3lnrfbSYe/mM5v3hDN8u8dYmk7zDoL3
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/leaf_from_known_root.pem b/pki/testdata/ssl/certificates/leaf_from_known_root.pem
index 0594ff8..a3d6120 100644
--- a/pki/testdata/ssl/certificates/leaf_from_known_root.pem
+++ b/pki/testdata/ssl/certificates/leaf_from_known_root.pem
@@ -1,274 +1,666 @@
 ===========================================
-Certificate0: c74f724a594ff8156228aa8d5b06c2335c45bcc0381cf16deb7ec0330cb454a0
+Certificate0: 43a7c7f7b28f92beac4b5e7e002c69801fd82c8656d9cb2993dba2bab0c4ec1e
 ===========================================
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            13:00:0f:ee:63:1b:df:c3:25:02:e3:e0:7e:a6:39:50
+        Serial Number: 5475531677529648189 (0x4bfcff0cd38dac3d)
         Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
+        Issuer: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
         Validity
-            Not Before: Apr 10 00:00:00 2023 GMT
-            Not After : May 10 23:59:59 2024 GMT
-        Subject: CN = horseweather.com
+            Not Before: Jul 25 02:05:05 2023 GMT
+            Not After : Aug 24 00:14:22 2024 GMT
+        Subject: CN = tntpowerwashservices.com
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b5:4f:7d:c0:1a:22:1c:a6:88:a0:85:01:3e:4a:
-                    56:e3:3e:2a:f9:9c:f8:15:ce:6f:f7:44:74:00:41:
-                    0f:d9:54:ce:7b:51:70:95:0c:9b:35:b1:68:b9:a6:
-                    75:1a:28:93:4b:c9:64:9c:7e:ea:30:d4:4b:73:44:
-                    62:fa:97:0d:5b:19:f6:6e:a3:44:b1:ea:67:7b:c6:
-                    86:c6:1f:b8:1b:9b:ce:b1:9d:f7:f1:63:f4:63:03:
-                    6b:07:72:f8:9c:f7:62:89:5d:15:2f:eb:ea:f8:18:
-                    8f:55:1d:33:e7:2c:76:fd:3e:1a:16:fb:42:c1:02:
-                    3a:03:82:f8:92:9a:a2:de:f1:8b:06:8e:cc:f9:ca:
-                    1e:29:1c:48:7e:dc:0f:c1:5e:81:91:5c:36:eb:41:
-                    1f:55:23:67:f2:b3:3b:10:73:fc:f0:48:2c:9e:8e:
-                    1b:66:1e:52:38:09:0b:53:10:47:96:39:47:bb:81:
-                    67:c4:4f:33:f2:74:19:c8:b5:16:0b:27:1e:d2:0e:
-                    09:c7:4e:c5:e3:a8:8f:aa:00:1a:3c:9a:19:45:09:
-                    c8:aa:74:e0:7e:a0:7f:e2:46:8e:27:42:d4:ee:80:
-                    60:5d:e1:b4:fc:23:9d:cb:70:be:d6:5b:88:ee:15:
-                    61:1d:f5:4b:8d:02:ae:2f:19:5c:20:fc:17:9f:fc:
-                    5d:b9
+                    00:af:a6:20:2e:e2:8f:f6:61:ba:78:bd:8c:c9:b4:
+                    84:6a:38:53:33:4a:28:e1:f6:9a:f8:be:45:14:18:
+                    ef:0c:57:6c:ae:89:7b:8d:06:89:58:b4:76:21:2c:
+                    43:1f:b9:5d:e0:8d:4b:83:ad:3d:04:fb:e1:bf:76:
+                    f2:e9:1a:80:42:f7:24:65:6d:c9:90:fc:fd:8e:82:
+                    0a:0e:5e:22:78:09:68:59:2a:4b:58:10:99:2d:f8:
+                    57:56:d9:92:a6:58:7e:89:c2:12:ea:c6:e2:43:86:
+                    07:6f:84:e2:c2:cd:1e:9d:4f:ee:62:58:35:a2:13:
+                    d5:bc:20:cf:69:65:c4:74:2a:4d:b1:c2:7b:03:85:
+                    b2:fc:dd:c7:36:30:c2:d6:59:02:e8:7c:41:26:ce:
+                    6b:f0:7a:55:1f:90:42:07:53:2e:a1:47:2e:53:42:
+                    a6:48:1c:d0:d2:bb:9c:76:bf:89:4b:39:9d:69:f5:
+                    80:a4:38:b3:bd:e7:cd:41:0c:69:d7:3d:c1:78:27:
+                    88:05:ee:c7:f3:87:9d:01:e1:fd:70:e4:be:4d:97:
+                    d3:2b:61:f3:0a:d3:2f:63:a9:ce:61:22:08:2e:a3:
+                    d6:ba:de:fe:6b:df:69:ed:2f:50:dd:b8:72:c4:d6:
+                    6b:00:5e:a4:8b:9b:58:c0:43:32:ab:cc:44:55:d7:
+                    70:2f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
-            X509v3 Authority Key Identifier: 
-                8D:8C:5E:C4:54:AD:8A:E1:77:E9:9B:F9:9B:05:E1:B8:01:8D:61:E1
-            X509v3 Subject Key Identifier: 
-                DE:B8:1F:8D:E5:9F:B7:B7:F7:B6:96:56:D3:F4:2F:58:30:4C:36:0D
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Key Usage: critical
+                Digital Signature, Key Encipherment
+            X509v3 CRL Distribution Points: 
+                Full Name:
+                  URI:http://crl.godaddy.com/gdig2s1-7257.crl
             X509v3 Certificate Policies: 
-                Policy: 1.3.6.1.4.1.6449.1.2.2.7
-                  CPS: https://sectigo.com/CPS
+                Policy: 2.16.840.1.114413.1.7.23.1
+                  CPS: http://certificates.godaddy.com/repository/
                 Policy: 2.23.140.1.2.1
             Authority Information Access: 
-                CA Issuers - URI:http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt
-                OCSP - URI:http://ocsp.sectigo.com
+                OCSP - URI:http://ocsp.godaddy.com/
+                CA Issuers - URI:http://certificates.godaddy.com/repository/gdig2.crt
+            X509v3 Authority Key Identifier: 
+                40:C2:BD:27:8E:CC:34:83:30:A2:33:D7:FB:6C:B3:F0:B4:2C:80:CE
             X509v3 Subject Alternative Name: 
-                DNS:horseweather.com, DNS:www.horseweather.com
+                DNS:tntpowerwashservices.com, DNS:www.tntpowerwashservices.com
+            X509v3 Subject Key Identifier: 
+                15:BE:40:63:3C:B1:6A:3C:27:52:B1:1E:43:06:A1:1C:0B:09:C7:C8
             CT Precertificate SCTs: 
                 Signed Certificate Timestamp:
                     Version   : v1 (0x0)
-                    Log ID    : 76:FF:88:3F:0A:B6:FB:95:51:C2:61:CC:F5:87:BA:34:
-                                B4:A4:CD:BB:29:DC:68:42:0A:9F:E6:67:4C:5A:3A:74
-                    Timestamp : Apr 10 14:57:58.554 2023 GMT
-                    Extensions: none
-                    Signature : ecdsa-with-SHA256
-                                30:44:02:20:2C:72:0F:4C:A5:E0:DE:BA:0F:50:D6:79:
-                                57:BB:1E:4C:57:63:08:41:3E:CE:92:04:AF:1D:8B:43:
-                                AC:D3:E0:A9:02:20:73:BD:5A:86:55:76:F4:84:E5:71:
-                                CE:D4:3B:D4:2F:7F:9F:7F:E9:DB:10:8B:97:0B:A5:EC:
-                                FB:B3:99:03:5A:DF
-                Signed Certificate Timestamp:
-                    Version   : v1 (0x0)
-                    Log ID    : DA:B6:BF:6B:3F:B5:B6:22:9F:9B:C2:BB:5C:6B:E8:70:
-                                91:71:6C:BB:51:84:85:34:BD:A4:3D:30:48:D7:FB:AB
-                    Timestamp : Apr 10 14:57:58.648 2023 GMT
-                    Extensions: none
-                    Signature : ecdsa-with-SHA256
-                                30:45:02:20:6A:FD:3F:78:6C:23:EE:5E:6D:6F:4C:67:
-                                D5:22:B0:9A:CB:78:01:D2:24:79:DF:56:44:40:23:4E:
-                                8B:CE:B9:10:02:21:00:E7:15:11:84:48:04:FC:2C:CD:
-                                F1:88:4E:79:31:19:4B:DC:E0:B3:74:12:49:3C:DD:4E:
-                                DB:E5:6D:D9:1B:B9:60
-                Signed Certificate Timestamp:
-                    Version   : v1 (0x0)
                     Log ID    : EE:CD:D0:64:D5:DB:1A:CE:C5:5C:B7:9D:B4:CD:13:A2:
                                 32:87:46:7C:BC:EC:DE:C3:51:48:59:46:71:1F:B5:9B
-                    Timestamp : Apr 10 14:57:58.679 2023 GMT
+                    Timestamp : Jul 25 02:05:06.473 2023 GMT
                     Extensions: none
                     Signature : ecdsa-with-SHA256
-                                30:46:02:21:00:AF:8C:27:AC:66:5E:08:AC:BA:19:1D:
-                                5A:CF:9A:F5:B8:28:A6:CC:9F:C4:99:45:59:10:2E:80:
-                                17:BA:BA:B0:5E:02:21:00:CD:4E:51:2B:C6:12:73:4D:
-                                7E:23:61:15:22:CB:08:CA:19:62:81:95:7E:31:08:B9:
-                                64:F7:96:71:B0:1E:D2:A8
+                                30:45:02:21:00:B6:D5:26:94:10:7C:69:75:D5:83:A6:
+                                4A:7F:4D:87:A3:86:3D:C6:AD:47:17:B7:04:9F:83:0B:
+                                51:7E:41:C5:06:02:20:1E:2C:1C:2F:03:D1:1B:AB:E2:
+                                F5:A0:65:BC:EC:BE:15:D2:05:ED:CC:AC:1A:44:70:DC:
+                                19:B6:87:58:4E:DF:EA
+                Signed Certificate Timestamp:
+                    Version   : v1 (0x0)
+                    Log ID    : 48:B0:E3:6B:DA:A6:47:34:0F:E5:6A:02:FA:9D:30:EB:
+                                1C:52:01:CB:56:DD:2C:81:D9:BB:BF:AB:39:D8:84:73
+                    Timestamp : Jul 25 02:05:06.771 2023 GMT
+                    Extensions: none
+                    Signature : ecdsa-with-SHA256
+                                30:45:02:20:6F:76:37:49:56:F0:9D:7F:F7:94:58:C9:
+                                9E:D3:D6:36:7D:BD:56:F4:92:41:0B:3E:97:0B:95:84:
+                                53:C6:68:24:02:21:00:87:45:7A:45:89:8E:C0:D9:44:
+                                82:56:24:C1:0D:A3:C4:FC:F8:C8:8E:1D:71:CC:0C:B5:
+                                6E:03:40:8D:3C:34:3A
+                Signed Certificate Timestamp:
+                    Version   : v1 (0x0)
+                    Log ID    : DA:B6:BF:6B:3F:B5:B6:22:9F:9B:C2:BB:5C:6B:E8:70:
+                                91:71:6C:BB:51:84:85:34:BD:A4:3D:30:48:D7:FB:AB
+                    Timestamp : Jul 25 02:05:06.882 2023 GMT
+                    Extensions: none
+                    Signature : ecdsa-with-SHA256
+                                30:46:02:21:00:A1:1F:15:0A:5A:5A:E7:ED:6D:61:5F:
+                                9C:13:0B:66:70:62:95:31:C8:ED:D0:8A:B9:58:B1:90:
+                                97:63:21:C8:2B:02:21:00:F9:67:A5:79:88:32:96:48:
+                                CB:6C:B9:27:76:0D:B6:7C:3A:AE:CB:65:40:87:E3:A5:
+                                A9:FA:03:CA:61:F3:C7:9D
     Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        3b:67:4e:46:c0:7f:d6:2f:4e:64:63:80:21:e4:ea:af:46:06:
-        e3:83:47:99:88:73:27:6c:96:ae:5e:eb:d3:36:60:4a:1d:b4:
-        28:57:7d:07:df:40:e2:87:54:d3:dd:bc:5a:e4:e7:9b:f7:72:
-        4b:c7:5f:5d:50:da:c6:c0:6a:0d:36:c3:f9:ff:db:b5:d2:71:
-        84:b6:66:0a:15:31:46:79:39:0f:b2:bc:c0:91:8f:d6:03:ab:
-        10:7d:ea:7e:59:16:13:6c:3a:47:55:12:8b:c5:4a:1f:21:bc:
-        00:f1:a1:0a:0e:e5:e8:b5:af:38:47:78:44:e9:ab:d9:0c:94:
-        a1:af:a1:2c:18:5a:15:00:e1:4e:9f:c5:06:88:87:41:25:e7:
-        92:bf:9e:ee:66:93:88:4d:15:ae:c5:d8:1b:c4:58:e1:3c:fd:
-        12:bc:8e:44:fa:74:4b:a3:37:bd:7d:49:f9:3e:90:a7:bd:2e:
-        dc:3d:24:5d:5b:9f:47:3e:6c:3a:7d:17:ab:dc:3b:3c:53:f1:
-        ac:39:1b:74:51:a9:47:08:d2:af:c1:0c:5b:d3:4c:ed:85:97:
-        5a:d6:75:1e:d7:d5:69:50:e3:1e:bd:26:cf:b9:94:1a:fb:74:
-        0b:ac:18:48:6b:61:10:6a:4e:89:6e:b5:c6:eb:c3:90:64:ee:
-        38:5d:18:17
+        26:c1:ee:ce:fb:7c:3d:bd:15:19:f7:6e:bc:f2:b0:d3:8b:a0:
+        d0:26:84:83:2c:06:65:50:68:0e:9a:1e:96:9e:2b:64:ae:7a:
+        0a:05:e9:78:0a:cc:d5:0d:44:7a:d5:ae:4b:25:0c:a1:5d:a0:
+        b4:3a:1b:60:6c:6a:e2:30:7e:30:23:2e:eb:74:85:80:84:0f:
+        e6:cb:89:ee:b8:a9:9d:79:8a:da:dc:13:e1:6d:77:4f:81:7e:
+        55:b4:0f:4f:41:6d:02:89:bf:73:95:7c:7f:b2:d8:9b:50:4a:
+        f8:60:36:11:e2:13:32:1f:e5:0f:3a:7d:0e:42:1e:b0:90:eb:
+        dd:41:57:0c:52:72:28:31:87:13:cb:39:9a:2f:23:66:9f:ca:
+        a9:4a:d3:26:30:71:ad:72:e2:83:b7:00:29:92:2c:b9:9f:c9:
+        a2:85:b2:90:29:c0:10:41:e4:6f:6e:d7:3c:ad:96:06:81:75:
+        09:ff:7e:47:ff:3d:93:18:f5:e8:62:44:f9:8a:6c:37:db:5a:
+        a6:66:78:ae:3a:84:9b:7c:d0:f0:c9:9d:99:ce:8d:4a:9f:ab:
+        d6:e1:bd:7c:bc:9c:9d:f2:00:c9:17:aa:7d:97:9f:3f:27:9c:
+        6c:91:16:a6:8e:39:c8:86:db:0c:14:ea:20:3d:f7:aa:7d:a3:
+        e2:67:9d:9a
+
+SEQUENCE {
+  SEQUENCE {
+    [0] {
+      INTEGER { 2 }
+    }
+    INTEGER { `4bfcff0cd38dac3d` }
+    SEQUENCE {
+      # sha256WithRSAEncryption
+      OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
+      NULL {}
+    }
+    SEQUENCE {
+      SET {
+        SEQUENCE {
+          # countryName
+          OBJECT_IDENTIFIER { 2.5.4.6 }
+          PrintableString { "US" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # stateOrProvinceName
+          OBJECT_IDENTIFIER { 2.5.4.8 }
+          PrintableString { "Arizona" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # localityName
+          OBJECT_IDENTIFIER { 2.5.4.7 }
+          PrintableString { "Scottsdale" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # organizationName
+          OBJECT_IDENTIFIER { 2.5.4.10 }
+          PrintableString { "GoDaddy.com, Inc." }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # organizationUnitName
+          OBJECT_IDENTIFIER { 2.5.4.11 }
+          PrintableString { "http://certs.godaddy.com/repository/" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # commonName
+          OBJECT_IDENTIFIER { 2.5.4.3 }
+          PrintableString { "Go Daddy Secure Certificate Authority - G2" }
+        }
+      }
+    }
+    SEQUENCE {
+      UTCTime { "230725020505Z" }
+      UTCTime { "240824001422Z" }
+    }
+    SEQUENCE {
+      SET {
+        SEQUENCE {
+          # commonName
+          OBJECT_IDENTIFIER { 2.5.4.3 }
+          PrintableString { "tntpowerwashservices.com" }
+        }
+      }
+    }
+    SEQUENCE {
+      SEQUENCE {
+        # rsaEncryption
+        OBJECT_IDENTIFIER { 1.2.840.113549.1.1.1 }
+        NULL {}
+      }
+      BIT_STRING {
+        `00`
+        SEQUENCE {
+          INTEGER { `00afa6202ee28ff661ba78bd8cc9b4846a3853334a28e1f69af8be451418ef0c576cae897b8d068958b476212c431fb95de08d4b83ad3d04fbe1bf76f2e91a8042f724656dc990fcfd8e820a0e5e22780968592a4b5810992df85756d992a6587e89c212eac6e24386076f84e2c2cd1e9d4fee625835a213d5bc20cf6965c4742a4db1c27b0385b2fcddc73630c2d65902e87c4126ce6bf07a551f904207532ea1472e5342a6481cd0d2bb9c76bf894b399d69f580a438b3bde7cd410c69d73dc178278805eec7f3879d01e1fd70e4be4d97d32b61f30ad32f63a9ce6122082ea3d6badefe6bdf69ed2f50ddb872c4d66b005ea48b9b58c04332abcc4455d7702f` }
+          INTEGER { 65537 }
+        }
+      }
+    }
+    [3] {
+      SEQUENCE {
+        SEQUENCE {
+          # basicConstraints
+          OBJECT_IDENTIFIER { 2.5.29.19 }
+          BOOLEAN { TRUE }
+          OCTET_STRING {
+            SEQUENCE {}
+          }
+        }
+        SEQUENCE {
+          # extKeyUsage
+          OBJECT_IDENTIFIER { 2.5.29.37 }
+          OCTET_STRING {
+            SEQUENCE {
+              # serverAuth
+              OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.3.1 }
+              # clientAuth
+              OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.3.2 }
+            }
+          }
+        }
+        SEQUENCE {
+          # keyUsage
+          OBJECT_IDENTIFIER { 2.5.29.15 }
+          BOOLEAN { TRUE }
+          OCTET_STRING {
+            BIT_STRING { b`101` }
+          }
+        }
+        SEQUENCE {
+          # cRLDistributionPoints
+          OBJECT_IDENTIFIER { 2.5.29.31 }
+          OCTET_STRING {
+            SEQUENCE {
+              SEQUENCE {
+                [0] {
+                  [0] {
+                    [6 PRIMITIVE] { "http://crl.godaddy.com/gdig2s1-7257.crl" }
+                  }
+                }
+              }
+            }
+          }
+        }
+        SEQUENCE {
+          # certificatePolicies
+          OBJECT_IDENTIFIER { 2.5.29.32 }
+          OCTET_STRING {
+            SEQUENCE {
+              SEQUENCE {
+                OBJECT_IDENTIFIER { 2.16.840.1.114413.1.7.23.1 }
+                SEQUENCE {
+                  SEQUENCE {
+                    OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.2.1 }
+                    IA5String { "http://certificates.godaddy.com/repository/" }
+                  }
+                }
+              }
+              SEQUENCE {
+                # domain-validated
+                OBJECT_IDENTIFIER { 2.23.140.1.2.1 }
+              }
+            }
+          }
+        }
+        SEQUENCE {
+          # authorityInfoAccess
+          OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.1.1 }
+          OCTET_STRING {
+            SEQUENCE {
+              SEQUENCE {
+                # ocsp
+                OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.48.1 }
+                [6 PRIMITIVE] { "http://ocsp.godaddy.com/" }
+              }
+              SEQUENCE {
+                # caIssuers
+                OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.48.2 }
+                [6 PRIMITIVE] { "http://certificates.godaddy.com/repository/gdig2.crt" }
+              }
+            }
+          }
+        }
+        SEQUENCE {
+          # authorityKeyIdentifier
+          OBJECT_IDENTIFIER { 2.5.29.35 }
+          OCTET_STRING {
+            SEQUENCE {
+              [0 PRIMITIVE] { `40c2bd278ecc348330a233d7fb6cb3f0b42c80ce` }
+            }
+          }
+        }
+        SEQUENCE {
+          # subjectAltName
+          OBJECT_IDENTIFIER { 2.5.29.17 }
+          OCTET_STRING {
+            SEQUENCE {
+              [2 PRIMITIVE] { "tntpowerwashservices.com" }
+              [2 PRIMITIVE] { "www.tntpowerwashservices.com" }
+            }
+          }
+        }
+        SEQUENCE {
+          # subjectKeyIdentifier
+          OBJECT_IDENTIFIER { 2.5.29.14 }
+          OCTET_STRING {
+            OCTET_STRING { `15be40633cb16a3c2752b11e4306a11c0b09c7c8` }
+          }
+        }
+        SEQUENCE {
+          # embeddedSCTList
+          OBJECT_IDENTIFIER { 1.3.6.1.4.1.11129.2.4.2 }
+          OCTET_STRING {
+            OCTET_STRING { `0169007600eecdd064d5db1acec55cb79db4cd13a23287467cbcecdec351485946711fb59b000001898acafe290000040300473045022100b6d52694107c6975d583a64a7f4d87a3863dc6ad4717b7049f830b517e41c50602201e2c1c2f03d11babe2f5a065bcecbe15d205edccac1a4470dc19b687584edfea00760048b0e36bdaa647340fe56a02fa9d30eb1c5201cb56dd2c81d9bbbfab39d88473000001898acaff53000004030047304502206f76374956f09d7ff79458c99ed3d6367dbd56f492410b3e970b958453c6682402210087457a45898ec0d944825624c10da3c4fcf8c88e1d71cc0cb56e03408d3c343a007700dab6bf6b3fb5b6229f9bc2bb5c6be87091716cbb51848534bda43d3048d7fbab000001898acaffc20000040300483046022100a11f150a5a5ae7ed6d615f9c130b6670629531c8edd08ab958b190976321c82b022100f967a57988329648cb6cb927760db67c3aaecb654087e3a5a9fa03ca61f3c79d` }
+          }
+        }
+      }
+    }
+  }
+  SEQUENCE {
+    # sha256WithRSAEncryption
+    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
+    NULL {}
+  }
+  BIT_STRING { `00` `26c1eecefb7c3dbd1519f76ebcf2b0d38ba0d02684832c066550680e9a1e969e2b64ae7a0a05e9780accd50d447ad5ae4b250ca15da0b43a1b606c6ae2307e30232eeb748580840fe6cb89eeb8a99d798adadc13e16d774f817e55b40f4f416d0289bf73957c7fb2d89b504af8603611e213321fe50f3a7d0e421eb090ebdd41570c527228318713cb399a2f23669fcaa94ad3263071ad72e283b70029922cb99fc9a285b29029c01041e46f6ed73cad9606817509ff7e47ff3d9318f5e86244f98a6c37db5aa66678ae3a849b7cd0f0c99d99ce8d4a9fabd6e1bd7cbc9c9df200c917aa7d979f3f279c6c9116a68e39c886db0c14ea203df7aa7da3e2679d9a` }
+}
 
 -----BEGIN CERTIFICATE-----
-MIIGPzCCBSegAwIBAgIQEwAP7mMb38MlAuPgfqY5UDANBgkqhkiG9w0BAQsFADCB
-jzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQD
-Ey5TZWN0aWdvIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENB
-MB4XDTIzMDQxMDAwMDAwMFoXDTI0MDUxMDIzNTk1OVowGzEZMBcGA1UEAxMQaG9y
-c2V3ZWF0aGVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALVP
-fcAaIhymiKCFAT5KVuM+Kvmc+BXOb/dEdABBD9lUzntRcJUMmzWxaLmmdRook0vJ
-ZJx+6jDUS3NEYvqXDVsZ9m6jRLHqZ3vGhsYfuBubzrGd9/Fj9GMDawdy+Jz3Yold
-FS/r6vgYj1UdM+csdv0+Ghb7QsECOgOC+JKaot7xiwaOzPnKHikcSH7cD8FegZFc
-NutBH1UjZ/KzOxBz/PBILJ6OG2YeUjgJC1MQR5Y5R7uBZ8RPM/J0Gci1FgsnHtIO
-CcdOxeOoj6oAGjyaGUUJyKp04H6gf+JGjidC1O6AYF3htPwjnctwvtZbiO4VYR31
-S40Cri8ZXCD8F5/8XbkCAwEAAaOCAwgwggMEMB8GA1UdIwQYMBaAFI2MXsRUrYrh
-d+mb+ZsF4bgBjWHhMB0GA1UdDgQWBBTeuB+N5Z+3t/e2llbT9C9YMEw2DTAOBgNV
-HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
-KwYBBQUHAwIwSQYDVR0gBEIwQDA0BgsrBgEEAbIxAQICBzAlMCMGCCsGAQUFBwIB
-FhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBAgEwgYQGCCsGAQUFBwEB
-BHgwdjBPBggrBgEFBQcwAoZDaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdv
-UlNBRG9tYWluVmFsaWRhdGlvblNlY3VyZVNlcnZlckNBLmNydDAjBggrBgEFBQcw
-AYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wMQYDVR0RBCowKIIQaG9yc2V3ZWF0
-aGVyLmNvbYIUd3d3LmhvcnNld2VhdGhlci5jb20wggF+BgorBgEEAdZ5AgQCBIIB
-bgSCAWoBaAB1AHb/iD8KtvuVUcJhzPWHujS0pM27KdxoQgqf5mdMWjp0AAABh2us
-exoAAAQDAEYwRAIgLHIPTKXg3roPUNZ5V7seTFdjCEE+zpIErx2LQ6zT4KkCIHO9
-WoZVdvSE5XHO1DvUL3+ff+nbEIuXC6Xs+7OZA1rfAHYA2ra/az+1tiKfm8K7XGvo
-cJFxbLtRhIU0vaQ9MEjX+6sAAAGHa6x7eAAABAMARzBFAiBq/T94bCPuXm1vTGfV
-IrCay3gB0iR531ZEQCNOi865EAIhAOcVEYRIBPwszfGITnkxGUvc4LN0Ekk83U7b
-5W3ZG7lgAHcA7s3QZNXbGs7FXLedtM0TojKHRny87N7DUUhZRnEftZsAAAGHa6x7
-lwAABAMASDBGAiEAr4wnrGZeCKy6GR1az5r1uCimzJ/EmUVZEC6AF7q6sF4CIQDN
-TlErxhJzTX4jYRUiywjKGWKBlX4xCLlk95ZxsB7SqDANBgkqhkiG9w0BAQsFAAOC
-AQEAO2dORsB/1i9OZGOAIeTqr0YG44NHmYhzJ2yWrl7r0zZgSh20KFd9B99A4odU
-0928WuTnm/dyS8dfXVDaxsBqDTbD+f/btdJxhLZmChUxRnk5D7K8wJGP1gOrEH3q
-flkWE2w6R1USi8VKHyG8APGhCg7l6LWvOEd4ROmr2QyUoa+hLBhaFQDhTp/FBoiH
-QSXnkr+e7maTiE0VrsXYG8RY4Tz9EryORPp0S6M3vX1J+T6Qp70u3D0kXVufRz5s
-On0Xq9w7PFPxrDkbdFGpRwjSr8EMW9NM7YWXWtZ1HtfVaVDjHr0mz7mUGvt0C6wY
-SGthEGpOiW61xuvDkGTuOF0YFw==
+MIIGtDCCBZygAwIBAgIIS/z/DNONrD0wDQYJKoZIhvcNAQELBQAwgbQxCzAJBgNV
+BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRow
+GAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjEtMCsGA1UECxMkaHR0cDovL2NlcnRz
+LmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMTMwMQYDVQQDEypHbyBEYWRkeSBTZWN1
+cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwHhcNMjMwNzI1MDIwNTA1WhcN
+MjQwODI0MDAxNDIyWjAjMSEwHwYDVQQDExh0bnRwb3dlcndhc2hzZXJ2aWNlcy5j
+b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvpiAu4o/2Ybp4vYzJ
+tIRqOFMzSijh9pr4vkUUGO8MV2yuiXuNBolYtHYhLEMfuV3gjUuDrT0E++G/dvLp
+GoBC9yRlbcmQ/P2OggoOXiJ4CWhZKktYEJkt+FdW2ZKmWH6JwhLqxuJDhgdvhOLC
+zR6dT+5iWDWiE9W8IM9pZcR0Kk2xwnsDhbL83cc2MMLWWQLofEEmzmvwelUfkEIH
+Uy6hRy5TQqZIHNDSu5x2v4lLOZ1p9YCkOLO9581BDGnXPcF4J4gF7sfzh50B4f1w
+5L5Nl9MrYfMK0y9jqc5hIgguo9a63v5r32ntL1DduHLE1msAXqSLm1jAQzKrzERV
+13AvAgMBAAGjggNYMIIDVDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF
+BwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwOAYDVR0fBDEwLzAtoCugKYYn
+aHR0cDovL2NybC5nb2RhZGR5LmNvbS9nZGlnMnMxLTcyNTcuY3JsMF0GA1UdIARW
+MFQwSAYLYIZIAYb9bQEHFwEwOTA3BggrBgEFBQcCARYraHR0cDovL2NlcnRpZmlj
+YXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzAIBgZngQwBAgEwdgYIKwYBBQUH
+AQEEajBoMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5nb2RhZGR5LmNvbS8wQAYI
+KwYBBQUHMAKGNGh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3Np
+dG9yeS9nZGlnMi5jcnQwHwYDVR0jBBgwFoAUQMK9J47MNIMwojPX+2yz8LQsgM4w
+QQYDVR0RBDowOIIYdG50cG93ZXJ3YXNoc2VydmljZXMuY29tghx3d3cudG50cG93
+ZXJ3YXNoc2VydmljZXMuY29tMB0GA1UdDgQWBBQVvkBjPLFqPCdSsR5DBqEcCwnH
+yDCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHYA7s3QZNXbGs7FXLedtM0TojKH
+Rny87N7DUUhZRnEftZsAAAGJisr+KQAABAMARzBFAiEAttUmlBB8aXXVg6ZKf02H
+o4Y9xq1HF7cEn4MLUX5BxQYCIB4sHC8D0Rur4vWgZbzsvhXSBe3MrBpEcNwZtodY
+Tt/qAHYASLDja9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGJisr/UwAA
+BAMARzBFAiBvdjdJVvCdf/eUWMme09Y2fb1W9JJBCz6XC5WEU8ZoJAIhAIdFekWJ
+jsDZRIJWJMENo8T8+MiOHXHMDLVuA0CNPDQ6AHcA2ra/az+1tiKfm8K7XGvocJFx
+bLtRhIU0vaQ9MEjX+6sAAAGJisr/wgAABAMASDBGAiEAoR8VClpa5+1tYV+cEwtm
+cGKVMcjt0Iq5WLGQl2MhyCsCIQD5Z6V5iDKWSMtsuSd2DbZ8Oq7LZUCH46Wp+gPK
+YfPHnTANBgkqhkiG9w0BAQsFAAOCAQEAJsHuzvt8Pb0VGfduvPKw04ug0CaEgywG
+ZVBoDpoelp4rZK56CgXpeArM1Q1EetWuSyUMoV2gtDobYGxq4jB+MCMu63SFgIQP
+5suJ7ripnXmK2twT4W13T4F+VbQPT0FtAom/c5V8f7LYm1BK+GA2EeITMh/lDzp9
+DkIesJDr3UFXDFJyKDGHE8s5mi8jZp/KqUrTJjBxrXLig7cAKZIsuZ/JooWykCnA
+EEHkb27XPK2WBoF1Cf9+R/89kxj16GJE+YpsN9tapmZ4rjqEm3zQ8Mmdmc6NSp+r
+1uG9fLycnfIAyReqfZefPyecbJEWpo45yIbbDBTqID33qn2j4medmg==
 -----END CERTIFICATE-----
 
 ===========================================
-Certificate1: 7fa4ff68ec04a99d7528d5085f94907f4d1dd1c5381bacdc832ed5c960214676
+Certificate1: 973a41276ffd01e027a2aad49e34c37846d3e976ff6a620b6712e33832041aa6
 ===========================================
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            7d:5b:51:26:b4:76:ba:11:db:74:16:0b:bc:53:0d:a7
-        Signature Algorithm: sha384WithRSAEncryption
-        Issuer: C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
+        Serial Number: 7 (0x7)
+        Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
         Validity
-            Not Before: Nov  2 00:00:00 2018 GMT
-            Not After : Dec 31 23:59:59 2030 GMT
-        Subject: C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
+            Not Before: May  3 07:00:00 2011 GMT
+            Not After : May  3 07:00:00 2031 GMT
+        Subject: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d6:73:33:d6:d7:3c:20:d0:00:d2:17:45:b8:d6:
-                    3e:07:a2:3f:c7:41:ee:32:30:c9:b0:6c:fd:f4:9f:
-                    cb:12:98:0f:2d:3f:8d:4d:01:0c:82:0f:17:7f:62:
-                    2e:e9:b8:48:79:fb:16:83:4e:ad:d7:32:25:93:b7:
-                    07:bf:b9:50:3f:a9:4c:c3:40:2a:e9:39:ff:d9:81:
-                    ca:1f:16:32:41:da:80:26:b9:23:7a:87:20:1e:e3:
-                    ff:20:9a:3c:95:44:6f:87:75:06:90:40:b4:32:93:
-                    16:09:10:08:23:3e:d2:dd:87:0f:6f:5d:51:14:6a:
-                    0a:69:c5:4f:01:72:69:cf:d3:93:4c:6d:04:a0:a3:
-                    1b:82:7e:b1:9a:b9:ed:c5:9e:c5:37:78:9f:9a:08:
-                    34:fb:56:2e:58:c4:09:0e:06:64:5b:bc:37:dc:f1:
-                    9f:28:68:a8:56:b0:92:a3:5c:9f:bb:88:98:08:1b:
-                    24:1d:ab:30:85:ae:af:b0:2e:9e:7a:9d:c1:c0:42:
-                    1c:e2:02:f0:ea:e0:4a:d2:ef:90:0e:b4:c1:40:16:
-                    f0:6f:85:42:4a:64:f7:a4:30:a0:fe:bf:2e:a3:27:
-                    5a:8e:8b:58:b8:ad:c3:19:17:84:63:ed:6f:56:fd:
-                    83:cb:60:34:c4:74:be:e6:9d:db:e1:e4:e5:ca:0c:
-                    5f:15
+                    00:b9:e0:cb:10:d4:af:76:bd:d4:93:62:eb:30:64:
+                    b8:81:08:6c:c3:04:d9:62:17:8e:2f:ff:3e:65:cf:
+                    8f:ce:62:e6:3c:52:1c:da:16:45:4b:55:ab:78:6b:
+                    63:83:62:90:ce:0f:69:6c:99:c8:1a:14:8b:4c:cc:
+                    45:33:ea:88:dc:9e:a3:af:2b:fe:80:61:9d:79:57:
+                    c4:cf:2e:f4:3f:30:3c:5d:47:fc:9a:16:bc:c3:37:
+                    96:41:51:8e:11:4b:54:f8:28:be:d0:8c:be:f0:30:
+                    38:1e:f3:b0:26:f8:66:47:63:6d:de:71:26:47:8f:
+                    38:47:53:d1:46:1d:b4:e3:dc:00:ea:45:ac:bd:bc:
+                    71:d9:aa:6f:00:db:db:cd:30:3a:79:4f:5f:4c:47:
+                    f8:1d:ef:5b:c2:c4:9d:60:3b:b1:b2:43:91:d8:a4:
+                    33:4e:ea:b3:d6:27:4f:ad:25:8a:a5:c6:f4:d5:d0:
+                    a6:ae:74:05:64:57:88:b5:44:55:d4:2d:2a:3a:3e:
+                    f8:b8:bd:e9:32:0a:02:94:64:c4:16:3a:50:f1:4a:
+                    ae:e7:79:33:af:0c:20:07:7f:e8:df:04:39:c2:69:
+                    02:6c:63:52:fa:77:c1:1b:c8:74:87:c8:b9:93:18:
+                    50:54:35:4b:69:4e:bc:3b:d3:49:2e:1f:dc:c1:d2:
+                    52:fb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
-            X509v3 Authority Key Identifier: 
-                53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB
-            X509v3 Subject Key Identifier: 
-                8D:8C:5E:C4:54:AD:8A:E1:77:E9:9B:F9:9B:05:E1:B8:01:8D:61:E1
-            X509v3 Key Usage: critical
-                Digital Signature, Certificate Sign, CRL Sign
             X509v3 Basic Constraints: critical
-                CA:TRUE, pathlen:0
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Certificate Policies: 
-                Policy: X509v3 Any Policy
-                Policy: 2.23.140.1.2.1
+                CA:TRUE
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                40:C2:BD:27:8E:CC:34:83:30:A2:33:D7:FB:6C:B3:F0:B4:2C:80:CE
+            X509v3 Authority Key Identifier: 
+                3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
+            Authority Information Access: 
+                OCSP - URI:http://ocsp.godaddy.com/
             X509v3 CRL Distribution Points: 
                 Full Name:
-                  URI:http://crl.usertrust.com/USERTrustRSACertificationAuthority.crl
-            Authority Information Access: 
-                CA Issuers - URI:http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt
-                OCSP - URI:http://ocsp.usertrust.com
-    Signature Algorithm: sha384WithRSAEncryption
+                  URI:http://crl.godaddy.com/gdroot-g2.crl
+            X509v3 Certificate Policies: 
+                Policy: X509v3 Any Policy
+                  CPS: https://certs.godaddy.com/repository/
+    Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        32:bf:61:bd:0e:48:c3:4f:c7:ba:47:4d:f8:9c:78:19:01:dc:
-        13:1d:80:6f:fc:c3:70:b4:52:9a:31:33:9a:57:52:fb:31:9e:
-        6b:a4:ef:54:aa:89:8d:40:17:68:f8:11:10:7c:d2:ca:b1:f1:
-        55:86:c7:ee:b3:36:91:86:f6:39:51:bf:46:bf:0f:a0:ba:b4:
-        f7:7e:49:c4:2a:36:17:9e:e4:68:39:7a:af:94:4e:56:6f:b2:
-        7b:3b:bf:0a:86:bd:cd:c5:77:1c:03:b8:38:b1:a2:1f:5f:7e:
-        db:8a:dc:46:48:b6:68:0a:cf:b2:b5:b4:e2:34:e4:67:a9:38:
-        66:09:5e:d2:b8:fc:9d:28:3a:17:40:27:c2:72:4e:29:fd:21:
-        3c:7c:cf:13:fb:96:2c:c5:31:44:fd:13:ed:d5:9b:a9:69:68:
-        77:7c:ee:e1:ff:a4:f9:36:38:08:53:39:a2:84:34:9c:19:f3:
-        be:0e:ac:d5:24:37:eb:23:a8:78:d0:d3:e7:ef:92:47:64:62:
-        39:22:ef:c6:f7:11:be:22:85:c6:66:44:24:26:8e:10:32:8d:
-        c8:93:ae:07:9e:83:3e:2f:d9:f9:f5:46:8e:63:be:c1:e6:b4:
-        dc:a6:cd:21:a8:86:0a:95:d9:2e:85:26:1a:fd:fc:b1:b6:57:
-        42:6d:95:d1:33:f6:39:14:06:82:41:38:f5:8f:58:dc:80:5b:
-        a4:d5:7d:95:78:fd:a7:9b:ff:fd:c5:a8:69:ab:26:e7:a7:a4:
-        05:87:5b:a9:b7:b8:a3:20:0b:97:a9:45:85:dd:b3:8b:e5:89:
-        37:8e:29:0d:fc:06:17:f6:38:40:0e:42:e4:12:06:fb:7b:f3:
-        c6:11:68:62:df:e3:98:f4:13:d8:15:4f:8b:b1:69:d9:10:60:
-        bc:64:2a:ea:31:b7:e4:b5:a3:3a:14:9b:26:e3:0b:7b:fd:02:
-        8e:b6:99:c1:38:97:59:36:f6:a8:74:a2:86:b6:5e:eb:c6:64:
-        ea:cf:a0:a3:f9:6e:9e:ba:2d:11:b6:86:98:08:58:2d:c9:ac:
-        25:64:f2:5e:75:b4:38:c1:ae:7f:5a:46:83:ea:51:ca:b6:f1:
-        99:11:35:6b:a5:6a:7b:c6:00:b0:e7:f8:be:64:b2:ad:c8:c2:
-        f1:ac:e3:51:ea:a4:93:e0:79:c8:e1:81:40:c9:0a:5b:e1:12:
-        3c:c1:60:2a:e3:97:c0:89:42:ca:94:cf:46:98:12:69:bb:98:
-        d0:c2:d3:0d:72:4b:47:6e:e5:93:c4:32:28:63:87:43:e4:b0:
-        32:3e:0a:d3:4b:bf:23:9b:14:29:41:2b:9a:04:1f:93:2d:f1:
-        c7:39:48:3c:ad:5a:12:7f
+        08:7e:6c:93:10:c8:38:b8:96:a9:90:4b:ff:a1:5f:4f:04:ef:
+        6c:3e:9c:88:06:c9:50:8f:a6:73:f7:57:31:1b:be:bc:e4:2f:
+        db:f8:ba:d3:5b:e0:b4:e7:e6:79:62:0e:0c:a2:d7:6a:63:73:
+        31:b5:f5:a8:48:a4:3b:08:2d:a2:5d:90:d7:b4:7c:25:4f:11:
+        56:30:c4:b6:44:9d:7b:2c:9d:e5:5e:e6:ef:0c:61:aa:bf:e4:
+        2a:1b:ee:84:9e:b8:83:7d:c1:43:ce:44:a7:13:70:0d:91:1f:
+        f4:c8:13:ad:83:60:d9:d8:72:a8:73:24:1e:b5:ac:22:0e:ca:
+        17:89:62:58:44:1b:ab:89:25:01:00:0f:cd:c4:1b:62:db:51:
+        b4:d3:0f:51:2a:9b:f4:bc:73:fc:76:ce:36:a4:cd:d9:d8:2c:
+        ea:ae:9b:f5:2a:b2:90:d1:4d:75:18:8a:3f:8a:41:90:23:7d:
+        5b:4b:fe:a4:03:58:9b:46:b2:c3:60:60:83:f8:7d:50:41:ce:
+        c2:a1:90:c3:bb:ef:02:2f:d2:15:54:ee:44:15:d9:0a:ae:a7:
+        8a:33:ed:b1:2d:76:36:26:dc:04:eb:9f:f7:61:1f:15:dc:87:
+        6f:ee:46:96:28:ad:a1:26:7d:0a:09:a7:2e:04:a3:8d:bc:f8:
+        bc:04:30:01
+
+SEQUENCE {
+  SEQUENCE {
+    [0] {
+      INTEGER { 2 }
+    }
+    INTEGER { 7 }
+    SEQUENCE {
+      # sha256WithRSAEncryption
+      OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
+      NULL {}
+    }
+    SEQUENCE {
+      SET {
+        SEQUENCE {
+          # countryName
+          OBJECT_IDENTIFIER { 2.5.4.6 }
+          PrintableString { "US" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # stateOrProvinceName
+          OBJECT_IDENTIFIER { 2.5.4.8 }
+          PrintableString { "Arizona" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # localityName
+          OBJECT_IDENTIFIER { 2.5.4.7 }
+          PrintableString { "Scottsdale" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # organizationName
+          OBJECT_IDENTIFIER { 2.5.4.10 }
+          PrintableString { "GoDaddy.com, Inc." }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # commonName
+          OBJECT_IDENTIFIER { 2.5.4.3 }
+          PrintableString { "Go Daddy Root Certificate Authority - G2" }
+        }
+      }
+    }
+    SEQUENCE {
+      UTCTime { "110503070000Z" }
+      UTCTime { "310503070000Z" }
+    }
+    SEQUENCE {
+      SET {
+        SEQUENCE {
+          # countryName
+          OBJECT_IDENTIFIER { 2.5.4.6 }
+          PrintableString { "US" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # stateOrProvinceName
+          OBJECT_IDENTIFIER { 2.5.4.8 }
+          PrintableString { "Arizona" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # localityName
+          OBJECT_IDENTIFIER { 2.5.4.7 }
+          PrintableString { "Scottsdale" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # organizationName
+          OBJECT_IDENTIFIER { 2.5.4.10 }
+          PrintableString { "GoDaddy.com, Inc." }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # organizationUnitName
+          OBJECT_IDENTIFIER { 2.5.4.11 }
+          PrintableString { "http://certs.godaddy.com/repository/" }
+        }
+      }
+      SET {
+        SEQUENCE {
+          # commonName
+          OBJECT_IDENTIFIER { 2.5.4.3 }
+          PrintableString { "Go Daddy Secure Certificate Authority - G2" }
+        }
+      }
+    }
+    SEQUENCE {
+      SEQUENCE {
+        # rsaEncryption
+        OBJECT_IDENTIFIER { 1.2.840.113549.1.1.1 }
+        NULL {}
+      }
+      BIT_STRING {
+        `00`
+        SEQUENCE {
+          INTEGER { `00b9e0cb10d4af76bdd49362eb3064b881086cc304d962178e2fff3e65cf8fce62e63c521cda16454b55ab786b63836290ce0f696c99c81a148b4ccc4533ea88dc9ea3af2bfe80619d7957c4cf2ef43f303c5d47fc9a16bcc3379641518e114b54f828bed08cbef030381ef3b026f86647636dde7126478f384753d1461db4e3dc00ea45acbdbc71d9aa6f00dbdbcd303a794f5f4c47f81def5bc2c49d603bb1b24391d8a4334eeab3d6274fad258aa5c6f4d5d0a6ae7405645788b54455d42d2a3a3ef8b8bde9320a029464c4163a50f14aaee77933af0c20077fe8df0439c269026c6352fa77c11bc87487c8b993185054354b694ebc3bd3492e1fdcc1d252fb` }
+          INTEGER { 65537 }
+        }
+      }
+    }
+    [3] {
+      SEQUENCE {
+        SEQUENCE {
+          # basicConstraints
+          OBJECT_IDENTIFIER { 2.5.29.19 }
+          BOOLEAN { TRUE }
+          OCTET_STRING {
+            SEQUENCE {
+              BOOLEAN { TRUE }
+            }
+          }
+        }
+        SEQUENCE {
+          # keyUsage
+          OBJECT_IDENTIFIER { 2.5.29.15 }
+          BOOLEAN { TRUE }
+          OCTET_STRING {
+            BIT_STRING { b`0000011` }
+          }
+        }
+        SEQUENCE {
+          # subjectKeyIdentifier
+          OBJECT_IDENTIFIER { 2.5.29.14 }
+          OCTET_STRING {
+            OCTET_STRING { `40c2bd278ecc348330a233d7fb6cb3f0b42c80ce` }
+          }
+        }
+        SEQUENCE {
+          # authorityKeyIdentifier
+          OBJECT_IDENTIFIER { 2.5.29.35 }
+          OCTET_STRING {
+            SEQUENCE {
+              [0 PRIMITIVE] { `3a9a8507106728b6eff6bd05416e20c194da0fde` }
+            }
+          }
+        }
+        SEQUENCE {
+          # authorityInfoAccess
+          OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.1.1 }
+          OCTET_STRING {
+            SEQUENCE {
+              SEQUENCE {
+                # ocsp
+                OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.48.1 }
+                [6 PRIMITIVE] { "http://ocsp.godaddy.com/" }
+              }
+            }
+          }
+        }
+        SEQUENCE {
+          # cRLDistributionPoints
+          OBJECT_IDENTIFIER { 2.5.29.31 }
+          OCTET_STRING {
+            SEQUENCE {
+              SEQUENCE {
+                [0] {
+                  [0] {
+                    [6 PRIMITIVE] { "http://crl.godaddy.com/gdroot-g2.crl" }
+                  }
+                }
+              }
+            }
+          }
+        }
+        SEQUENCE {
+          # certificatePolicies
+          OBJECT_IDENTIFIER { 2.5.29.32 }
+          OCTET_STRING {
+            SEQUENCE {
+              SEQUENCE {
+                # anyPolicy
+                OBJECT_IDENTIFIER { 2.5.29.32.0 }
+                SEQUENCE {
+                  SEQUENCE {
+                    OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.2.1 }
+                    IA5String { "https://certs.godaddy.com/repository/" }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  SEQUENCE {
+    # sha256WithRSAEncryption
+    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
+    NULL {}
+  }
+  BIT_STRING { `00` `087e6c9310c838b896a9904bffa15f4f04ef6c3e9c8806c9508fa673f757311bbebce42fdbf8bad35be0b4e7e679620e0ca2d76a637331b5f5a848a43b082da25d90d7b47c254f115630c4b6449d7b2c9de55ee6ef0c61aabfe42a1bee849eb8837dc143ce44a713700d911ff4c813ad8360d9d872a873241eb5ac220eca17896258441bab892501000fcdc41b62db51b4d30f512a9bf4bc73fc76ce36a4cdd9d82ceaae9bf52ab290d14d75188a3f8a4190237d5b4bfea403589b46b2c3606083f87d5041cec2a190c3bbef022fd21554ee4415d90aaea78a33edb12d763626dc04eb9ff7611f15dc876fee469628ada1267d0a09a72e04a38dbcf8bc043001` }
+}
 
 -----BEGIN CERTIFICATE-----
-MIIGEzCCA/ugAwIBAgIQfVtRJrR2uhHbdBYLvFMNpzANBgkqhkiG9w0BAQwFADCB
-iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
-cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
-BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgx
-MTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5WjCBjzELMAkGA1UEBhMCR0IxGzAZBgNV
-BAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UE
-ChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFJTQSBEb21haW4g
-VmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+N
-TQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkj
-eocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0E
-oKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBsk
-Haswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotY
-uK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQIDAQABo4IBbjCCAWowHwYDVR0j
-BBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFI2MXsRUrYrhd+mb
-+ZsF4bgBjWHhMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0G
-A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAbBgNVHSAEFDASMAYGBFUdIAAw
-CAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0
-LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2Bggr
-BgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNv
-bS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDov
-L29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAMr9hvQ5Iw0/H
-ukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH
-7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGi
-H19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUx
-RP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLv
-xvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38
-sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyAL
-l6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq
-6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhY
-LcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5
-yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K
-00u/I5sUKUErmgQfky3xxzlIPK1aEn8=
+MIIE0DCCA7igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAwMFoXDTMxMDUwMzA3
+MDAwMFowgbQxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjEtMCsGA1UE
+CxMkaHR0cDovL2NlcnRzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMTMwMQYDVQQD
+EypHbyBEYWRkeSBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC54MsQ1K92vdSTYuswZLiBCGzD
+BNliF44v/z5lz4/OYuY8UhzaFkVLVat4a2ODYpDOD2lsmcgaFItMzEUz6ojcnqOv
+K/6AYZ15V8TPLvQ/MDxdR/yaFrzDN5ZBUY4RS1T4KL7QjL7wMDge87Am+GZHY23e
+cSZHjzhHU9FGHbTj3ADqRay9vHHZqm8A29vNMDp5T19MR/gd71vCxJ1gO7GyQ5HY
+pDNO6rPWJ0+tJYqlxvTV0KaudAVkV4i1RFXULSo6Pvi4vekyCgKUZMQWOlDxSq7n
+eTOvDCAHf+jfBDnCaQJsY1L6d8EbyHSHyLmTGFBUNUtpTrw700kuH9zB0lL7AgMB
+AAGjggEaMIIBFjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
+HQ4EFgQUQMK9J47MNIMwojPX+2yz8LQsgM4wHwYDVR0jBBgwFoAUOpqFBxBnKLbv
+9r0FQW4gwZTaD94wNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8v
+b2NzcC5nb2RhZGR5LmNvbS8wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5n
+b2RhZGR5LmNvbS9nZHJvb3QtZzIuY3JsMEYGA1UdIAQ/MD0wOwYEVR0gADAzMDEG
+CCsGAQUFBwIBFiVodHRwczovL2NlcnRzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkv
+MA0GCSqGSIb3DQEBCwUAA4IBAQAIfmyTEMg4uJapkEv/oV9PBO9sPpyIBslQj6Zz
+91cxG7685C/b+LrTW+C05+Z5Yg4MotdqY3MxtfWoSKQ7CC2iXZDXtHwlTxFWMMS2
+RJ17LJ3lXubvDGGqv+QqG+6EnriDfcFDzkSnE3ANkR/0yBOtg2DZ2HKocyQetawi
+DsoXiWJYRBuriSUBAA/NxBti21G00w9RKpv0vHP8ds42pM3Z2Czqrpv1KrKQ0U11
+GIo/ikGQI31bS/6kA1ibRrLDYGCD+H1QQc7CoZDDu+8CL9IVVO5EFdkKrqeKM+2x
+LXY2JtwE65/3YR8V3Idv7kaWKK2hJn0KCacuBKONvPi8BDAB
 -----END CERTIFICATE-----
 
diff --git a/pki/testdata/ssl/certificates/rsa-1024-1.key b/pki/testdata/ssl/certificates/rsa-1024-1.key
new file mode 100644
index 0000000..5355480
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-1024-1.key
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAL7mb78RnGZpGth3
+z5ilQTmz77Cc6YOqZPulE83+Vnjy39YzK0csTluvbWqVMUHtYGsRF8h+gYvywt8l
+zITocpE0UyeXlzsoOI8h7SgUCrYPAl9l6VydsUQ3F14uJ4LWaQcz/R601LhYrvQc
+XgpDr4U1rp108EAFG01BVFFiInCVAgMBAAECgYEAtGnxuCC7r+mrTmNE1d1wHEma
+wE47Po0d7NlhMzAopxvaQYSQZS5RS8MqZC1lpQnjMqyvznMImauvUddWR1GrWz6T
+jU7YJiq/NJZ26qzACKCJWj9UG37fzC3L7JDMz4Yz3K/iISH7iDLIrh4JWw8A6xQL
++cq8/u4ZhjtODbxYHu0CQQDuPMkrqPolGpy6mo18jP8QuNooZmpZ5z5C72GtqqRz
+AMcfIOtluBBcFef7iZoKa+YcEldjpdiCK0I3qy86G9JLAkEAzSIg3A8qta3o/U2d
+TwUq5BMGUotHmG/A1MwEK5GnRHj3L0nu/HpE3tjrKrkMC4i+zVTYBop90XFBPdy6
+d+v8nwJBAM6Qdf0dLoctY+eISlVMC3x8SuvsoRoCnsF6vb7OznfInN4otPIlfknZ
+1KMM1DtlAsgkPxFvoyJ6T5flHbXMmbECQQCaKR/QwYUzbDNAyeeCzztgk/uYZRu1
+L6cXRQuNQrUV/GKno0R7cdf4McTqIo8uy+G4ph6DK+lKUXbaatun7C25AkEAsr/A
+yOyChfU16iQMa45LhT9FoplbNbDvczJ3EUUsf8i1I/8FG/GM4AaUMUshdwCf7hdh
+ZBHFE6S2PIUV9iZVbA==
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-1024-2.key b/pki/testdata/ssl/certificates/rsa-1024-2.key
new file mode 100644
index 0000000..14feba2
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-1024-2.key
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM3oM+IGvDDamzE+
+5cZRkeoH8PBYH5HSChJOcRepGpPMxsOjR3aomPCi0eI3cR4IOqaakpxDJswp+ioA
+H4hEMDMoVZijvpXEto0QAy/2O7K7QzhQ1ylFNM8k6WD4xfM8W6PlrlxFHjH47QDq
+k/njjASgxTfj6zHCwauQG4FYTmZNAgMBAAECgYBuds82yDQ35V9yuPKeRW6JZj89
+QZmWKl+a2JhVgDQw7KAJntQc9XAvULpWqTW3TeThMnXK/T+YMkDyPWStPx+3q9PR
+AQS65Bz8BltepO5sdy2QWGnOss97fLG5DJgTHrAZYDKLxJah9hDOf5Tjq4d9GYka
+D6cOgWErS3wv+ERZhQJBAOuVmTnEywk0TIGjIOWud+Yv2TUIc3IqBZnyF1RN8y1y
+NFVGwpCb8aKLRawfDta/kNkQVOkYZCtZRdYb1NHqBJMCQQDfwDel33a3OnVdQNoB
+GbfEJYqmgY7JCzFfH9EVzqB45x6yYvwAHStp1r5dYmwMUSIVs5B8SFA4bUN6cAMr
+BJWfAkEA4xGOXuAP0w9Vrp5NVxSS/IuiEDvVCnT2cSum0NtRSLyLNKa/YiLtBH64
+6O4Gn3aFZrMXJJUd96pUZcrtlma5gQJAaUR0qdxNbPza1Km7JwNjequy5I1VkO5s
+JvXAF8Njqh4KSiDZsHAIyb2XSDYS4WSWZaFaW65l13ZIZeUnCGkavwJAMn0mC5e4
+idlSe3QqaOa3haxAXquQkImH6pSI4jRPzTJxPd8BlShlZeVC4IyCwfz/o6Azce+W
+w+5b/8VIMO2s9g==
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-1024-3.key b/pki/testdata/ssl/certificates/rsa-1024-3.key
new file mode 100644
index 0000000..4a8af8f
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-1024-3.key
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMqUxHtJfHQ6709j
+T1yMqY/JH/dg0Kl3DaddDScaVRiv2X+0mhxkFu4/rWEYslj1aSS8CgcdVxSdHsI0
+dXEsumoRFJl/EmfBAwQkukgpkjuE5uUORuxt2vzT1zGPutX0UlMiLINdZ1AB45D6
+c78SBTiIoXai7FZ+SayOf/3MQsYpAgMBAAECgYB7nbITpTD7X+cd43TO/cqOQeVu
+t7Y8YriDMyXOgaQBr3SiF9uejXjsoxCyWjaiUAZ78v6PftjfbE0Tpp0vlWKeNo0q
+iJ0rjbxf04bIpU7+Q+/I4hkXngu7WvmXS8ZjmamEvT1a9XN8bZ1QD+lglYAkZKj5
+iwlVpZfYokj+4sMIgQJBAOnkLBrmlaXhh3KbzLcKPMtmOlm8y2PuSziJN7JTdkb7
+gwaQAa1+5ToOEjAS64qP+BRp9uLTnPuVnbyd27nDElkCQQDduu9KbS2o9IazrVeR
+FMqAitIWb9v/k98IfOc7/LKeyA7oVCzqAsq0nlYM4unGYSiIdlJLLnQCtbVABB4D
+6rhRAkEApM49cbsWqWsQCObVSgixq9Tdusu4OTL4196AW2xKBFxHCAHC3OB0XwL5
+N9ytEda+RIwiBdR8Yh4bpoNJB0z4CQJBAI9yo+LztUmMQSU3LOK4n7X/maFYZuz3
+HqDgJb0iY/Djnvlhk9klSz0E/sjBeNqV+uImImFvQTCLnCI5R63jCbECQQDpeDiP
+DcKOL773vayJixOvvSqruHGvM87KMkpW2zsLbxrlN2gKyf3iMkQX1Kat945qPD98
+kpnDpyVRVRxIc6Sg
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-2048-1.key b/pki/testdata/ssl/certificates/rsa-2048-1.key
new file mode 100644
index 0000000..384bf68
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-2048-1.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCvBAyWDWogcaoH
+kjhp9fmm7OognM/SNfIuEKMiqmFLz4GsiNa1I4By8kPqcI8u0KRBvX0F/DDfBvDy
+8nm7gbfMliILkPTKlDqAKY51kV1qBkSQhhiQ7Tl3KXjB4tbdjJemv9TrXfwfr+k4
+9dP8oYLmVmyYRWMGybW7tA6MJewLYeAIBZpbcz0okrKD7izMEi7eCWvQ9O6PdVMG
+atBfUbGrZ0oX0XzsJQgI6iJNq88WQCbfybQLDvXleneem8NHVYO8fCmgVzgsiVw5
+fgaeYWBfCVOGUHsoVwxTDThAfoIGHX1ldQ+3YP+pyph43h5e9jWHHwAjg45SFqkI
+XRTu4I/HAgMBAAECggEASmt63J10qLocdl63TVtSXqg0QEzd1AGrauoZLGbtu3pP
+pimDvv+LIZWhyoE1aU8/4VJtZMuhjlyZvXzcxZ45pS2b6XYomTGhlJjXImf/JFPo
++NmEfa/Z9TE1z6AhBJFBdR7yL2lGCcVX8ygZDb4x9rb+M1uh6aOA+wFsBC0l64pt
+YNGaOtgR1DCqn6mtxFcUOMt6gWEbgu2gwieo4qSGPmGOwNxhEbMWPL+0CPemW+li
+K+fB2RrYpGdSD8kyWHWqZTUT7SegcT2mO3F+eNwwy69srb/R/MAUfbYXbQhTrPuI
+vavor2vT7++Ha2Z7FV+715Jsn2f8OkW0UyFzb7PQsQKBgQDUG5H0XR34wqAfNgaZ
+lzJqDeh6Tg0v991t4imNd/yFBJEa4PyonM9m9ka9o13ySPyIuUyqvUDm0/geVH1g
+dn7o3rTVCKbfeCeDWaU00elMjtCezeDUlnsTgcHpLEpb/5uxJhAL2/KcMlOvHzGv
+ima5zj2tB0dvUfkCtzLthb/etwKBgQDTO4hNrTcNQBTg/XUG2TSERo6WslVOZjJ5
+70AlE9PYgqmoNUONg8XxGwj8n7lx+AY2BB0kfM9ANVc+BNjI2fqFLba2DYDGMpsq
+XrxR2SiRe8UCjftFgHSElIx/mGplgAbElGrSd+pkONwnxtE3E0JD/+y+/dKQeg9z
+iVraymnHcQKBgQC8/9gdU3/qcpo1VXGqGGTuxXfay4PKs2WWjUkTatATQw99UO8x
+25CfoWFFh7Wlt812kw6ysTKMvGJBvG1/r/bDz/Z4QV5Yj/s9enrQRx9IfZV9e9wT
+8ga3Sg8ck7+qnGgCAPWZa6KR9fJFgFlInt2MQS8J6AuKMRPejJmPtndSnwKBgFPP
+dCZ1yrkMKvyWNB+ygL7XC+5I9cX0kKSGxCmx80UdmtktwQ7eMOSYOHmbmkXZBgXa
+ngGDL+wm/eWSoL0Yl+jNmYgkVWrOW3h1PD0xb4JB3IpF8WPDMvgDxLc/rz90i7rl
+tHirsalwUhHKNeqnToySd8nUBf7jH0xVPGJBG7VRAoGBAIty6nRYERJkdWgzrrU+
+TmSxTAFi4hqc/RXMa7kda40SBp3339+/KxaNCQ5YUJjDI/cggEc/Tnm2MjkheH5W
+nBC1iP1A1g9wlk6Ak/RQIq8FRiQFdVwGU2Xa+dRQAyEj8Xq2KudmKkj1M630/kSg
+3qCwc3kKPf2N5fjAtHUwLLHP
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-2048-2.key b/pki/testdata/ssl/certificates/rsa-2048-2.key
new file mode 100644
index 0000000..3336ce7
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-2048-2.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCncOKXlHiC4cH7
+YiXsOMc3Vh3OBN26dK/c9tiVG7zQU9EbXbUWz9NNI8+wUDwyBtrR54zH+5R9+cj/
+9QOPd2Vsv3wfaSIaR3qfsag/TK2rooYAis11F17lUHx02KZlZodagEuLCMgdlyIL
+F0RTW4+Nt9ZklEFMXHYxZW2odDiimaUl0tJ3//jGNEBQwHSS7BbA88vKBknjRP4d
+0lFZGJPM7VyEkYElp4qcTBvn4VY89lbgUdVcZjaMOtoUnK6DUZN7GAsWr222y7kc
+BEH5fFOWB2PrgKY//tb41fujm16u2r4jjHngZ8FSs5md3A7z1CP4ChpNF33k9z6s
+AzWb+GNhAgMBAAECggEAFFJdDeyVG71un6Xv2FWjyBGJmIF6r7CNz5GeA6rUJaym
+il27JsOeb5RTFqEGTUQLtsIVkgf0o713KamA/x6MjsBGvkEyRGI8fblAJD6YLWaS
+QOqXuQhXGhnEoSHSQChLcS50/LDaKM048oOmZT+NkrOnL5nWuv/V0HTw9Cr23LT6
+wMuefBrN9cr8ZMmlOMNvJaoTKbCxr6bg4bKjfGr40QX05GnLXaOhg74wWPWMCFZQ
+CfyFhCJvBcXk9Xifb2pMTk9GezfSd28JKy3XKjd2bUTD8KGStgnKvIB7FXVqaQb/
+QOTE0USkYn3l6g53fXWdgk9i87ZRHmMarTv4K8wvaQKBgQDbe6v0CS6ui5A4bliC
+z8EoZVmxxT+vgOf56ZOE65lGcPHOtTMDDL2u8MxqyjnWc7dXrw8FvfpurIe/TEU9
+Y5kCj9NUA08940RKX/5u5RDaW9X2cGVlv7yJSDbA1JxpUjSzc98VFWQJrFkhHBfI
+3eLdVLp+dHBBpGCgZuVQD2ymGwKBgQDDTJwspscuh9q9SWWgcyJv5ke+4MwosgkP
+g8IC2dFFHr3j3GoFnVrrVP6w8zzezNb2ba+9xGaohNgHjmwC203ZcdDCUxem3t/L
+GUM4+dCUC87nB/bGd772pu1jbZZ9bRUBvgf4x1zhlShQNnD+UL2/p/stzWl6SE47
+Yva2416kMwKBgCBZ7lKeN99KewuWWD2P2ezWY44sgOKhoY/YugHRqFoVs87ALrC4
+ZA0xOTBUdooBrHikORajlhJSJAAygdI2qAsUoBW2FywMH7jGxX4bDYziFHuqvYdt
+56BkoI1zyUpM76+z2KIG8SPr34dd2LOm4RW2s3aIOzOxwvxhrlNKsr0ZAoGBALTH
+4LUweKYo2aFoJKueiB0fBAC75CAzlVGIPHoZGK8r4sjfCkFCRJwcpFo1/n2bDc01
+AX3fJMwPlE2CV5dZW7nRslV/RyCPpIdDTkeab6nrOE4BwDw9MkbthEcKdUiLRevD
+9WsjWGX0hUmi63tuUAbuPwNJ5r5r2gb897WZyMyjAoGAYcNgSL1udQE7pEqrAl0t
+ffTbbTJQ487sZm3qhFNXtuitC3h6eXpJecsWRoB/Jnhi4cpSjWgYJzjV4rkZSF79
+es031jtdnPf6G94ZzjTKnkr4z34reDQusukuuD1SSsbURBGVacgZxkq0UaRAROfT
+BTPraf9GfA9BnUEIFdjeKwI=
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-2048-3.key b/pki/testdata/ssl/certificates/rsa-2048-3.key
new file mode 100644
index 0000000..9a6f499
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-2048-3.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDW8jowfwvUgEye
+CyzXw4rrlw1+liz+s9nWucRN5t8dia9L9dQhT0aBg7mUKOQ7L1wcRwzPMVoyFF3G
+KsJw829iMm65P4fy+L9/C1XFfJ9x4rMeya9bHZuKxr29Ieia9KFAaWtASSngF6Uc
+zwvGJ4AZQzUIiE6Ku/ZpGBjki9k36LsufQIeOaEaoHlSPS1K6pMh9Br40xQ+FkB4
+OwFt7zNQygiSJt6NHvET4ib2i+0lZXRa32yl/dEJyf3aWT3iMxm4wLslLOI7Bud+
+y04bVYi6hw+JFUFmFCLkrMW/iZ69S3lUPoUO9xz8fuCR64KjwjSR4FFawZ7ZQUKf
+OUOu3dcXAgMBAAECggEAMss1AwbSxdm3wVVEuIwmBPxCHRrh8SKRJNPrVrlrGjDS
+MvIZufFg6PQ245MyM+ZCLxB/L2srNFBpxI2QO17bgGoIjlA8ESfFIQGNuEh16VS4
+HVtty+tYOVgzuEEOFagffvgqdxuTALi1tPQchSwKcm3WV3jWjqRSW41tPHzrzPEM
+gNw6mlLIUxgaxJ31SytDPfLcCxhjyY1cLOseAtD37x8HZVw52cojmjn0Uy2+TeLu
+6e34KqWzTcO8U7w4mBu6KyQYS5Q2GxR4eMfrja2nmQEJjjtL/MjPCr1RavzRmeO8
+j2w0GbTZaM2otzI21VbNpM+OmX3OkGmKiPNIm0HVKQKBgQDufzscdRfcJSng9Wb/
+kB1mr+AYZubzhHIVgN50UWnzqiLsVBWRGT6+y49z7dN3+4aGHXKjmV0Ceimi/6uC
+nNsZ1kfJrHWXmTbTslQlBxOwyMuBsolWBSZdaqoX3dhDNu7EbUPgWqWjrv412EhH
+UIH/mpmu8TgyA/SPT7BiHjuDcwKBgQDmuIkAYWseZ5iEWXPX2rH1XTtvKAHuzjf7
+yPk5QX+ZeTZiPZPzvn4I6x4kMjnpn5wrVkm5QMQVK2NKpaQwMtdkQcevVybXVJ/u
+0SMRHgXiesF6pG4YgREEJjbHdwmRgAaLffOPVSOvEGPc8ha1tEE7ZwgpKfjnCStC
+2VkmWpcczQKBgQDsn3MIUuxvULfyJ8ge+t8QyKIv07iEFv4Rc6BCC5xxUnX/v5T+
+NuvX5KLZRDaxLe5UFddtlXWARbAVtlB18CY5xi3HW8H3vN12v9FYQ2M33KB8d6Rm
+oglkWbWUpFgyp8fRPw8/AvCgK7ivt3xOtQOlk7+yoEU+6kmz/j5jutcVHQKBgQDP
++ocdPbP3C4GzxIMlkHGc8fcyo0jiwSg8IxVuJHnmmhqJAmNNdGlelrtr+46y53s6
+oaUBhr17K8psrtZL0HjTWmyrxY8wyosFF6dZtcuuNeQVLwZDtozlRaFZuxd3/oVn
+1xjoGuJ42/h5Yg1QrHWlG6KCoOBLO7uwnga8CStw/QKBgQDSzUAJaak3XFAfdou3
+GxWLQJcOXB/WxrZA7gq6K2aWvkY80AOPMGLhVFXA8k1fLI7jn2f9x7Ff6PNrzclf
+mvvN6g6YH0vH9k+W6aHBnen8oGjW3XU4MHn7dPxfxPJ/MDT3toVAvD+6QnKFdd7o
+xCDad5+lKr6f0yyPije/ZDkSSA==
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-768-1.key b/pki/testdata/ssl/certificates/rsa-768-1.key
new file mode 100644
index 0000000..2ccd987
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-768-1.key
@@ -0,0 +1,13 @@
+-----BEGIN PRIVATE KEY-----
+MIIB5gIBADANBgkqhkiG9w0BAQEFAASCAdAwggHMAgEAAmEAn8Be4Q88Bif6duPK
+vG+iyt96BFtCTUgjuNEwhcWoeSO6BeZPeu1VRqOHI7/GE4jHO6iVRCnhw9DJg5eb
++p6zX1IWytyhke/psWBl3RNGXOvLucVWUJctS5pgKN1FNsILAgMBAAECYQCDjRaU
+nsb/CszmOo8ovYWBKqaAD+Z5XX6NIzah8jLaDuGRGic5Q1eF5APVHIcwbuDU2Fyv
+NIJqf768Gx/lUzmAlcGjF9hIRh5vrE4zfeCa2wSUjWNZPmqdTzjkM3r0NYECMQDM
+1ORCXgP/DYHQbCTRFvNA/jYaIXRjUs+HXefXe27jJD32W3Mf+lyIcBV/mR7lRkUC
+MQDHqJMkx3TiRsP2cYmG8citPrEjEA0TwPg181Kvi3N6aE5QzNHHLvl2nVJi7VPl
+VA8CMQCayYKY2J0if52K2D5WN4appbFSu9dNO4YSYJdT0jYwtfGRGvh7wOFuRW0p
+mJetYRUCMQCN9fiZoBAli3duVRAaGPQ86mR8r778mqphgd763kZ/dIaqwNcvruDF
+S9r2aBTM7FUCMD46f/dAx2EfxsAfn3lYQWVpuxFQpK+tIqYzjeKsu/zRaqEkcog5
+BOq06OV3qPYsVA==
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-768-2.key b/pki/testdata/ssl/certificates/rsa-768-2.key
new file mode 100644
index 0000000..6c834c4
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-768-2.key
@@ -0,0 +1,13 @@
+-----BEGIN PRIVATE KEY-----
+MIIB5wIBADANBgkqhkiG9w0BAQEFAASCAdEwggHNAgEAAmEA4SDrD2C751/n+lHQ
+UBn5YynSU9hrO9ttTcnvMgqiL0gv2lAsx0N9QM0dg8rHsQodUYZotUQ0qbzCxzEw
+pRVTHcEYHSnjaO7OfsqpGke+66jK0VhsQBkGbU2RznY3at3fAgMBAAECYQCRzs4v
+QYmxy03ltENk/c2lyhptL4gUVoOulBEVqgls8iX8EV1PGYjwBWkOSLGZGmC3u4KI
+le1z9L9iZxO5GGO0SJ/bLW/pGofgHCikBjLmhhyLuV0oFsY6te/q21fWu2ECMQD0
+nbX+qhNgXYsZ96cb71ZfD80yGtu7dCVEYL/iC30P3BEztLabEIdVwmoUyBFfCDkC
+MQDrmwnyqGx431YH3uyBrlwbJhRvAFfwACMy+6sY54BZdaPni9hHcQoKrAiQOe92
+ptcCMQDcS5AUefybQ4M7bpIbkU7aq7NjVVbgGbhaPTtximElwE3pn+z390m6TS0V
+7Bvg1tkCMQCDkPdUJ1MziFvtV0IxBKHwkyoz9jglEJ6XWMxpwtT8n+HgakpjUq9t
+2DWL/J5JXs8CMQDsP+WjN9GzsQtuUMXEUxc1wgMVRFwvQ55hmXfeWaT2bgX+jpAn
++SreMT1bErrH2M8=
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-768-3.key b/pki/testdata/ssl/certificates/rsa-768-3.key
new file mode 100644
index 0000000..fcf0680
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-768-3.key
@@ -0,0 +1,13 @@
+-----BEGIN PRIVATE KEY-----
+MIIB5AIBADANBgkqhkiG9w0BAQEFAASCAc4wggHKAgEAAmEAtngFrnpogJ4DAPMt
+Jvxxl3vSNFdnNMlpRGlHpPqhtOHTzYzXvRvSmSGzpYhvzVCFujjTvtszd86yehxr
++081ZtQbhHGhPKnudoPfqfYGUB6djJX4+I1pm2cWTOIXiGL7AgMBAAECYE7lbId5
+tA/Qwrm5a8+Mnc0DI+uv0xc280Y6Q1kpaZwdfQhGms3Q5umBcfzkFntvEfgMJstC
+KDWgH5Vo6v7oR/Hk8D0NzOyFNfEU10g72EG47PF2qFMlCZ3dTV5U3lPtOQIxAOfC
+NB/LuHFiMA5LeFlfbV0Fyj4Kr+lqtGdwClmX3+KgfTUj9RcEMs+34z+UpYXt3wIx
+AMmN/LkrZpwktp/iZuaKDvkA5foN660LguOt87/NdIN4l2hn8auEhwmh0Vno5gu2
+ZQIwf6kWFT2eh7ZSSk2AKZrLHyaFVM+GPsksPp4U1W03QhqtXYxFATyq0Ii2gNtc
+of15AjEAvCh2HnM61lebuYTE5UFLGv/QsfBe7GvLpDsXSx5FQBrK1ef7f1A4NDDB
+XLsETzjVAjAegTa8Fk65Qc3YODZhIcDRbJ195DLUaw7ETgpT0utLPH7Kkn1GNyZf
+wzlUtrz3r58=
+-----END PRIVATE KEY-----
diff --git a/pki/testdata/ssl/certificates/rsa-8200-1.key b/pki/testdata/ssl/certificates/rsa-8200-1.key
new file mode 100644
index 0000000..74cf0d9
--- /dev/null
+++ b/pki/testdata/ssl/certificates/rsa-8200-1.key
@@ -0,0 +1,100 @@
+-----BEGIN PRIVATE KEY-----
+MIISRQIBADANBgkqhkiG9w0BAQEFAASCEi8wghIrAgEAAoIEAgCryOGbBSSQ/E53
+duYJ8JpWms7zJk8+FpvZGW8CwGH2Qjs9UQmqMhGKTNySND6Gfk+tAGxd8zWGayyJ
+rVhi5Sigr3+lPieGLt3TLke8LKysm0sSJU+xUUdZUTRjE3eff9Qb2NmgJ0uQIYic
+jSUDznRiOpblzEhX4Rw1Kiw+fkqqsnXRg1+gonL9EmWl28zoeQFvcGRyknZCDpyR
+K4Z667TuPoLk6F8S1IxyIEQPZciFbUnUTABbZTHQWZ33y7HmB3vc/P98PFilXsXH
+41h4AdxzN/5pTI7flRP/bu+4NiVHE/rM1h+ag29R1McxzxoOi9ToYgVRenjSSkgs
+/kjOELvBtIyivHNCwJjRrSXZi9fpZjgGTCqOg2mebU3qWDe0zL97jt9wGG612oFu
+pqCBFnBSn6L/dc03K9Ckx9xuRYv3upc4xOMQnOXKLb9/k/TPpTmSQEk1qhEGOoKw
+NC769IiTo69IxhJbB67gBVQzgJ5CVHfEzFid2SM1g59N3gNezjPb3y44ESlPJSfm
+I/S9Yg/divrE7F4BvFGDP5TIaN3sYZf0IEN6140bz3gNhCP5vD64xFt+Mn3sUfWo
+pAmUpKWY7u7YCn2B3XWg65jHelgzC+itLKHRMt0nSlKCLmIKS/UC/PnmRdNIekBh
+46tS29d3vC9cbeTpeZwneOEP789KO0yqeckGmZyktw6VvF7bFKDyrFQONeYz85No
++dw3L54jnv4BV0bTwuv3CoU6MQI+DSfqaGxv5kmVxMDlLGpGJsezarUyrTseJBSE
+DxungNAGktEawqkyk7ZRWdAUSZlgX/qanVenJ3pwrWWagqkyW5BKmzh+EhnGXnoM
+t23+a2FjyoQRKYFhKL8pJ1QLBYJMNvqK+j2tUWHzgwwYV5YlOdDYz+U3+mQH7xOC
+d0Egg61ci0RmRBRTwLqHWvKhMpOD6JEFhuCEALSe6b73faNkaTvUFV6y7SDkkAea
+fLpBFosHCtGoC5ZwklD9rCKKxcdjJJESMi5RutOMYzA4Y9dayUBN7k1LVx0dw8ei
+ZbWBvETGT3qIbMI9hjvRnJ3x35KyoKbvFXDtbKCQ58HbfO5kk4BAEoFhete+UsFO
+KgMQoKue4Ps9sPNWVWwg7ZxrTKsHMje3dpklMNHdqtgHt69eio88z7zX4ZQPUEN6
+PVUPosX0qWtW/sHVet0iDt0BANKD9T8/iwrns9HbPd2d/LwAOyU0kywdNkplCFOP
+vNHaeSjbrIQq5/SEszLSmbh1kaNOimVBFwjie5Ju5q+4n2FahMtKkEqBajj1f4eT
+dR8hs4evuZaKkzs6jGvQyuI28lBfkz3M9cfumHAShfXoihZcwrb53CBmjN+UBe8l
+LaV0kGIknQIDAQABAoIEAR7kr337fMn+NfZSEaiz9m2gxZsAxrt5wWlXo5kxE+z/
+mDu8uSo8et8OV5SLhLsXOCj6rIJw3K1h1M6luAGBCL9tEF2dQeplv0rdRdVXi243
+N1b6Eszmuxga/Hrc42Rxzql7ZBfjOTmgbjsJPyDiHhgURVLqXBBB0ZrWDMLoX3E3
+Suz03Vu8G0Xb6x/a2YztRg7OfaIFKPNUQV/yHes5PH6kC1IzX/W499EGcHb8bQVh
+1Cczy9Sj7EN1+my32zRtIB9r+F5VU/PZiWQbRKvAWe72oPA67m7TFpeXUdElG6se
+srnnwCM/g+OJipEwl5UKHK32AtLWXagj57r/uAQnCj0ZxTj2/xuAG3uJ0ga/mYLF
++UlYpUaf53ywV5TPbKU9NSp5VUGJg099Dk3h9XeBm42gW+XpP5CudoVL1B6Yr0VL
+7yosblFshf7IH2pIJ3y4UBQ3L3NRNGKUXzBlEhXbqDw08a76wA5S4WY0TyI7/Toc
+irV/smggxq43D40nYh/IoZbnGh7HJ1Cuc/B1guwUGJpVBigoAff58AbUhmNMSKzc
+GEG1E62h2iSoOQTlQLsG2ZjM509YsUCwtKcxaO+sdIN+ZMHBkTSrqR3ZgM5O+FGl
+0KBkKG3A4fjQ6umygbssUdHJwP9ii067fZydHxB1rNhBpZrPwJ0kW6rVmFQPYo4M
++1ENsX0AIz8hLx+10G602hcWu8MVgqO+E1Yoo5n6eNxCbKootZwSRQSwcUXgE9m0
+Q1NHKHsK+pvjR/QyvoEr7SRmcox4PHcYID7EMfPMu2UtsIdRKi4NkIvmzE9a52s1
+MPoanT+t9a4Zte4nQ+htFFFQFt10ue8Vqm16wPJ97gnpEM8keQhVYrttIKDVr2vs
+QEcHJ/PgDeIihy44AbPTQKUYzZ4YEMAkDgoVsBq3Ktk8DTjxOZrZw7xq9xJPS9N3
+5oLaTcUX2670SZUpRAg4/wArQncuE2pfsYP+beaGnUATiYRd8GoDSYtPOSa7BcyN
+Eexo8tB5Kzmvgcypk5N5jefLaVdUdczroIlSDlUcdAQb35Yvnd7F3HLWXJtUIPbh
+LZTJwJWooQVJLDt2lzrg/HQnD+UaYNI1Z8/oMaZ+zUBvQ8gBzArO3SRGfRI7lzvk
+wcJM4LqBO0pIO67NzhVCyhJn7Ua3P++W9d7LULb5fqy/O64W2J2o2Xd9hZEdA47A
+6JidJ2yNsv0p3AUgtVebEhBRQs6bPX4/siYif3xgT1ZZb8fTtQBYWsW8LS4Itdf9
+WaJuUlfI7xdHpQnMVd5qiEjrDk02/x4JI4DmveO/pLyQAJ3qQpvGxXUZ70ecfSAk
+ASn2OADu76TclVlQ4hvZ5913jxx8PWHFykK3w7N82xGZAoICAQ4FzISY+EaKydn8
+jOfOirjfct+0x0PYeDZ3XFEq1CcW7nHARMxlGBe9IwEgoAn/RtLmHtSrscPLpN+8
+mXS8ucPZwxIrbg2tCTZ2FktxAHldz3Fr7aGGeT4F7jE3e0gwYgU1h+CIMyDZZY/H
+j/hANx1a+mAkDr7jafEuOe6nOfnWSuCaTPbyYcyGQ4pIe2Z5A0A6MFATT2Z2YOC6
+tW98BNtw9ucOFNo9ZNakB8ZZ4WOG4vpFSSoSO3xJ2STn5HwuO+j2UF0ptmt5H6Pc
+LzYnbbengq5H0dsnyw/sKbTO4jzXfORjxPhwpvrwNlNvs9hmLB6IKzfiN1PXKITS
+updr+Ts72zD1I95dF3F0TsefncBSY9qq8D0Nq08zF4yYanxPLOmqjc1iCoSWyx95
+RjNTiAoTWqmXvbtd4Z6OBU3M2m5QQYLu1mGcfKveRvW6KdueBhZwXEcY7Vb+pU3q
+1J+Omh4wCQiyuuwsGu6QXmfkcVBOhLDoKxzAQJlch1l3zJdAQoul3iCYnptz6weR
+47Ceg4cdP50KLvgboq4N1VJgI7ivMB9gfP+J/J7JogjUigoQNOLqb/X7Zwmv5ZIX
+ZaKIB39HtKFvo1b/zpZagnx4y1K39pUFY8Nm3v0xZNU+keT3FCjOk44L+sXhdu5F
+tbA81qb+7kBhZn9LMfz9sDTIUXq3OwKCAgEMQCGtq+7q0Scml0Ds5ORrymYX/zhh
+xrkc/jbEHefvq50cCE7Sxmvm+NdFDz3JEpenWR4zPR0+39j8lNCWUK6azUhvqSK/
+HYLLI2EDeUyeCQyULoNT4qva6wnJNuufjaNsOOmwwuBAIgurFKYaTEMD+m+1hYG9
+Pe4drKMm3e3Xdg9IlJdKmY7MY+chxeCuiPfGO/MAm0Rz8pcKo1/cd308HuDL+CnE
+LAFDYc7fa7oaj8i698m6QGeadltIPoggOTntoto659SK8ZLWOHsD3E2YC4Iq6dtQ
+U8p8qWqn2kdWbLPnRhy5BXFcxeVFAbJOvgFMlSw1cCpoOySczBDlSpRjZV3ZP0R3
+gCG6Hjh5N8S+N7aLtQQvurMa/9qz6e1p54LCkXqevDp52wwM2DnjC05J+FaevvWW
+FjIaE8SU+Que77xakQYu7Vk1T2MoTimDAjduqtSTIvDb4uX1WNjgkX66AWUCzbEt
+Gp67cMYh0DjwaLgos6t9XdRp5964m4YPewhAcpVppFV45MOKcBWD99d3nYgOGYs1
+D8+4wXHpEJoU7r0pdz0buljZ1+bPmOiViShWmQgxIrKOCpOMuLKQJl2zJyVam8MN
+dy8xYm3RZF3hCNyROeHp8lEt5dSOpw82LchW2f5ErVYatYzJu/opdu9ToczNuvdU
+/U0liMxSEBr3RgcCggIBBHQzEarEsSNEGcjtuHMR/MZ8ZjG1WQdYp3QiDmXcHM5b
+ziWTtJgnnuKkS6dhLcu3YyVUhZhDTj1QkQAGfd2z41E3dH325sEfO/0l97Bcxi/V
+w+DUCYn82IZpsZg9wCAeAimOjvKzyqtCZvir8d3zo49SF1dcl6UD8WcNX5AeCgzW
+m6Bm8cjq51t9+F4tU878CVpyHf0EKzdObhLfrhlmMY0f3yPJ28fET6iqD4Zc4I/n
+aDa5lnNUEZYjMmW1XPwSa1xRCkZFer1uH03AcSL05nB+QXzuWv24scYBOTy8/zYy
+pRhLZ93gK7RAjR/dr85EFS6LC6T+jdK5O/by7UWOVBIe/N3gFrDa0V5v51f7cyq4
+LKw+wiWlU/KWeEGxEOrVCSLzB1ksnhCHU+fhNExD2W9sTJG14d1f3EyfwqZeestj
+A4N49GgP8UcYotQOl4MJy/bEWJDCUe9v8d+0yTkyGoSHWgvq8zjPFRcl5TnaA/fs
+jYQwrWEjI5MQKoqyoRf4CwMUGqZfOmEHNdBQ0biHblML8YVahdPBSCd8qj1/GxoJ
+3u12xnO9mXHR1ZwsfCXJpolwJmFDyP/lmxFzZrxuJS9RYDVlXCzEIV1+NKrpacyk
+tZCQr2/tQ958eH73OBKChLOYinWjoVaLwALEQsYQJ9qxMiG9vJDVv9WUMi+uMZwh
+AoICAQeazA1OfPrBqWcYX9Ju6KlNNIFTCsIPpZws5vxpgDBUvSvIsH3BdPwlnySc
+qIMoioH1HX07Q+ti9AUfsDiPj0RDiOLgANTY0feeV7vbUceM4IUgNqAdRweX/jQt
+ZqleOIOW9OKopqLJP6sNH2uVycgvb6ckYHyEdEtxfrpC7EFjZWtt6lkB6BZTMgjS
+GH7gQceKMXg/6od7oW2WK4zllBV9KZkUzYCcvJACqHQjIJ0agsYlydFX57iIHnRD
+dSdjvuUYwhXtEhDKk5dt6ldkK7rl8gEHuQAtc7ZdSPs30i8BPdCkwnHMwimQI5np
+yrF827uZop7tqTWY+Upol1hvKpxlMZQJ5Uu1e7pYxj/hcb2PQj+JuDaU1Fg/WZlz
+7tBeSdrUimT9feNlKh7TH2QlAY2Dnuneqv9neeScPt0nmKIqOieSfV8mMcmZJXnA
+w54zAwws+db4ysIFITFj3QXS6/M1qGnMHF9edgjvod8drir3JtMFbcBePd0cdjLt
+QJRdkKrJNp0kyXZJtGU83O5WLShw3yO5kaP307/iPf8rMisqZLzX61RKIpvgncRj
+LIafZS4Uw3QVEPiB8kRZ52b6mhH7jAGqTbQPN3mVm4xvnKN0Z8+zOd2Lcf9m+8Mu
+S5AbbZEUs/YYECp2ZxZYHZwd28Vz3HodxSm6MGjLeeK7YrH7gwKCAgBm0zD2DvKK
+EfDQOk2DpnScdNkuYlRD7WADQfgKg6GheSWIvAi9Dh/Ks3ZIcVAcpQgWQoMlhTie
+ZudfSjWxfFwlTAYKfF1kUnlrOACz04ZqsFMzx7Ks1HkvG1KEBTenAetcDPcL1b79
+U01tql7T6NIkxwtOR/nr1CvxgJa2wuuLYiUIAyIQYY0c18FkyFii1nJuneGb/Zvf
+ctf+S5O+GuSOc+LjDSGIa8RZf5ScxRmKGj6OSrYRGrM7ZoS/psvGQSOJeITN5SNJ
+umAA89mfpz8V87HHn520Vo7G9vmm5pQr27Nu1RBQJBXgrhC5fWXBXk/zmnyqskDM
+Bcb1h3nppB6dr5263iy+HHMxS/L0m6kCUfxfj6A4d1/fTGbv1tRCtlR9Rq4EJxWr
+8n49pbluSvL5XZoJJH2PGjjxNurSpnXVRFFOjpvl73wE/X/bH/Gs8AMtIrpnBRmM
+viaX/AOym3DFU2RTgNIt8zmNtqq/NhAuQmYEhodODXtnzzquh4Z4EZmhfzq/do5e
+nGTfN4hN7a9ODtP9Gt+w2CBCnE+7OnWo6Asj+wK0H59c2wfSD68d5n+V7U+BHHkN
+E8uwIjFNZ+n3LRdH/iY7w4ujgIdZRcQuOMf00a3950mcJM0hz278FuDIipbMFCxG
+qrLjqBtCTH9vu/Df2F0JNICD6Ro21WM/YQ==
+-----END PRIVATE KEY-----
diff --git a/pki/verify_name_match_fuzzer.cc b/pki/verify_name_match_fuzzer.cc
index d76abc6..5b2b159 100644
--- a/pki/verify_name_match_fuzzer.cc
+++ b/pki/verify_name_match_fuzzer.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 #include <stdint.h>
+#include <stdlib.h>
 
 #include <fuzzer/FuzzedDataProvider.h>
 
@@ -24,11 +25,13 @@
   std::vector<uint8_t> second_part =
       fuzzed_data.ConsumeRemainingBytes<uint8_t>();
 
-  bssl::der::Input in1(first_part.data(), first_part.size());
-  bssl::der::Input in2(second_part.data(), second_part.size());
+  bssl::der::Input in1(first_part);
+  bssl::der::Input in2(second_part);
   bool match = net::VerifyNameMatch(in1, in2);
   bool reverse_order_match = net::VerifyNameMatch(in2, in1);
   // Result should be the same regardless of argument order.
-  CHECK_EQ(match, reverse_order_match);
+  if (match != reverse_order_match) {
+    abort();
+  }
   return 0;
 }
diff --git a/pki/verify_name_match_normalizename_fuzzer.cc b/pki/verify_name_match_normalizename_fuzzer.cc
index 96f4608..0bf31bb 100644
--- a/pki/verify_name_match_normalizename_fuzzer.cc
+++ b/pki/verify_name_match_normalizename_fuzzer.cc
@@ -18,9 +18,13 @@
     // produce the same output again.
     std::string renormalized_der;
     bool renormalize_success = net::NormalizeName(
-        bssl::der::Input(&normalized_der), &renormalized_der, &errors);
-    CHECK(renormalize_success);
-    CHECK_EQ(normalized_der, renormalized_der);
+        bssl::der::Input(normalized_der), &renormalized_der, &errors);
+    if (!renormalize_success) {
+      abort();
+    }
+    if (normalized_der != renormalized_der) {
+      abort();
+    }
   }
   return 0;
 }
diff --git a/pki/verify_name_match_unittest.cc b/pki/verify_name_match_unittest.cc
index 7bdacb2..4e57250 100644
--- a/pki/verify_name_match_unittest.cc
+++ b/pki/verify_name_match_unittest.cc
@@ -71,20 +71,20 @@
 TEST_P(VerifyNameMatchSimpleTest, ExactEquality) {
   std::string der;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), suffix(), &der));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&der),
-                              SequenceValueFromString(&der)));
+  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(der),
+                              SequenceValueFromString(der)));
 
   std::string der_extra_attr;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), suffix() + "-extra_attr",
                            &der_extra_attr));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&der_extra_attr),
-                              SequenceValueFromString(&der_extra_attr)));
+  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(der_extra_attr),
+                              SequenceValueFromString(der_extra_attr)));
 
   std::string der_extra_rdn;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), suffix() + "-extra_rdn",
                            &der_extra_rdn));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&der_extra_rdn),
-                              SequenceValueFromString(&der_extra_rdn)));
+  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(der_extra_rdn),
+                              SequenceValueFromString(der_extra_rdn)));
 }
 
 // Ensure that a Name does not match another Name which is exactly the same but
@@ -95,10 +95,10 @@
   std::string der_extra_attr;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), suffix() + "-extra_attr",
                            &der_extra_attr));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der),
-                               SequenceValueFromString(&der_extra_attr)));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der_extra_attr),
-                               SequenceValueFromString(&der)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der),
+                               SequenceValueFromString(der_extra_attr)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der_extra_attr),
+                               SequenceValueFromString(der)));
 }
 
 // Ensure that a Name does not match another Name which has the same number of
@@ -111,13 +111,13 @@
   std::string der_extra_attr;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), suffix() + "-extra_attr",
                            &der_extra_attr));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der_dupe_attr),
-                               SequenceValueFromString(&der_extra_attr)));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der_extra_attr),
-                               SequenceValueFromString(&der_dupe_attr)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der_dupe_attr),
+                               SequenceValueFromString(der_extra_attr)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der_extra_attr),
+                               SequenceValueFromString(der_dupe_attr)));
   // However, the name with a dupe attribute should match itself.
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&der_dupe_attr),
-                              SequenceValueFromString(&der_dupe_attr)));
+  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(der_dupe_attr),
+                              SequenceValueFromString(der_dupe_attr)));
 }
 
 // Ensure that a Name does not match another Name which is exactly the same but
@@ -128,10 +128,10 @@
   std::string der_extra_rdn;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), suffix() + "-extra_rdn",
                            &der_extra_rdn));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der),
-                               SequenceValueFromString(&der_extra_rdn)));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der_extra_rdn),
-                               SequenceValueFromString(&der)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der),
+                               SequenceValueFromString(der_extra_rdn)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der_extra_rdn),
+                               SequenceValueFromString(der)));
 }
 
 // Runs VerifyNameMatchSimpleTest for all combinations of value_type and and
@@ -156,11 +156,11 @@
   std::string case_swap;
   ASSERT_TRUE(LoadTestData("ascii", value_type(), "case_swap", &case_swap));
   EXPECT_EQ(expected_result(),
-            VerifyNameMatch(SequenceValueFromString(&normal),
-                            SequenceValueFromString(&case_swap)));
+            VerifyNameMatch(SequenceValueFromString(normal),
+                            SequenceValueFromString(case_swap)));
   EXPECT_EQ(expected_result(),
-            VerifyNameMatch(SequenceValueFromString(&case_swap),
-                            SequenceValueFromString(&normal)));
+            VerifyNameMatch(SequenceValueFromString(case_swap),
+                            SequenceValueFromString(normal)));
 }
 
 // Verify matching folds whitespace (for the types which currently support
@@ -172,11 +172,11 @@
   ASSERT_TRUE(
       LoadTestData("ascii", value_type(), "extra_whitespace", &whitespace));
   EXPECT_EQ(expected_result(),
-            VerifyNameMatch(SequenceValueFromString(&normal),
-                            SequenceValueFromString(&whitespace)));
+            VerifyNameMatch(SequenceValueFromString(normal),
+                            SequenceValueFromString(whitespace)));
   EXPECT_EQ(expected_result(),
-            VerifyNameMatch(SequenceValueFromString(&whitespace),
-                            SequenceValueFromString(&normal)));
+            VerifyNameMatch(SequenceValueFromString(whitespace),
+                            SequenceValueFromString(normal)));
 }
 
 // Runs VerifyNameMatchNormalizationTest for each (expected_result, value_type)
@@ -207,11 +207,11 @@
   std::string der_2;
   ASSERT_TRUE(LoadTestData("ascii", value_type_2(), "unmangled", &der_2));
   if (TypesAreComparable(value_type_1(), value_type_2())) {
-    EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&der_1),
-                                SequenceValueFromString(&der_2)));
+    EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(der_1),
+                                SequenceValueFromString(der_2)));
   } else {
-    EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der_1),
-                                 SequenceValueFromString(&der_2)));
+    EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der_1),
+                                 SequenceValueFromString(der_2)));
   }
 }
 
@@ -234,37 +234,37 @@
                            &der_2_extra_attr));
 
   if (TypesAreComparable(value_type_1(), value_type_2())) {
-    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
-                                    SequenceValueFromString(&der_2)));
-    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
-                                    SequenceValueFromString(&der_1)));
-    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_1_extra_rdn),
-                                    SequenceValueFromString(&der_2)));
-    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_2_extra_rdn),
-                                    SequenceValueFromString(&der_1)));
+    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(der_1),
+                                    SequenceValueFromString(der_2)));
+    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(der_2),
+                                    SequenceValueFromString(der_1)));
+    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(der_1_extra_rdn),
+                                    SequenceValueFromString(der_2)));
+    EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(der_2_extra_rdn),
+                                    SequenceValueFromString(der_1)));
   } else {
-    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
-                                     SequenceValueFromString(&der_2)));
-    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
-                                     SequenceValueFromString(&der_1)));
-    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1_extra_rdn),
-                                     SequenceValueFromString(&der_2)));
-    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2_extra_rdn),
-                                     SequenceValueFromString(&der_1)));
+    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_1),
+                                     SequenceValueFromString(der_2)));
+    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_2),
+                                     SequenceValueFromString(der_1)));
+    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_1_extra_rdn),
+                                     SequenceValueFromString(der_2)));
+    EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_2_extra_rdn),
+                                     SequenceValueFromString(der_1)));
   }
 
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
-                                   SequenceValueFromString(&der_2_extra_rdn)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
-                                   SequenceValueFromString(&der_1_extra_rdn)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1_extra_attr),
-                                   SequenceValueFromString(&der_2)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2_extra_attr),
-                                   SequenceValueFromString(&der_1)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
-                                   SequenceValueFromString(&der_2_extra_attr)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
-                                   SequenceValueFromString(&der_1_extra_attr)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_1),
+                                   SequenceValueFromString(der_2_extra_rdn)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_2),
+                                   SequenceValueFromString(der_1_extra_rdn)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_1_extra_attr),
+                                   SequenceValueFromString(der_2)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_2_extra_attr),
+                                   SequenceValueFromString(der_1)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_1),
+                                   SequenceValueFromString(der_2_extra_attr)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(der_2),
+                                   SequenceValueFromString(der_1_extra_attr)));
 }
 
 // Runs VerifyNameMatchDifferingTypesTest for all combinations of value types in
@@ -293,8 +293,8 @@
   ASSERT_TRUE(LoadTestData(prefix(), value_type_1(), "unmangled", &der_1));
   std::string der_2;
   ASSERT_TRUE(LoadTestData(prefix(), value_type_2(), "unmangled", &der_2));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&der_1),
-                              SequenceValueFromString(&der_2)));
+  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(der_1),
+                              SequenceValueFromString(der_2)));
 }
 
 // Runs VerifyNameMatchUnicodeConversionTest with prefix="unicode_bmp" for all
@@ -351,12 +351,12 @@
     }
     der.replace(replace_location, 1, 1, c);
     // Verification should fail due to the invalid character.
-    EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&der),
-                                 SequenceValueFromString(&der)));
+    EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(der),
+                                 SequenceValueFromString(der)));
     std::string normalized_der;
     CertErrors errors;
     EXPECT_FALSE(
-        NormalizeName(SequenceValueFromString(&der), &normalized_der, &errors));
+        NormalizeName(SequenceValueFromString(der), &normalized_der, &errors));
   }
 }
 
@@ -371,11 +371,11 @@
     SCOPED_TRACE(c);
     der.replace(replace_location, 1, 1, c);
     bool expected_result = (c <= 127);
-    EXPECT_EQ(expected_result, VerifyNameMatch(SequenceValueFromString(&der),
-                                               SequenceValueFromString(&der)));
+    EXPECT_EQ(expected_result, VerifyNameMatch(SequenceValueFromString(der),
+                                               SequenceValueFromString(der)));
     std::string normalized_der;
     CertErrors errors;
-    EXPECT_EQ(expected_result, NormalizeName(SequenceValueFromString(&der),
+    EXPECT_EQ(expected_result, NormalizeName(SequenceValueFromString(der),
                                              &normalized_der, &errors));
   }
 }
@@ -386,11 +386,11 @@
       LoadTestData("invalid", "AttributeTypeAndValue", "extradata", &invalid));
   // Verification should fail due to extra element in AttributeTypeAndValue
   // sequence.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -400,11 +400,11 @@
                            &invalid));
   // Verification should fail due to AttributeTypeAndValue sequence having only
   // one element.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -413,11 +413,11 @@
   ASSERT_TRUE(
       LoadTestData("invalid", "AttributeTypeAndValue", "empty", &invalid));
   // Verification should fail due to empty AttributeTypeAndValue sequence.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -426,11 +426,11 @@
   ASSERT_TRUE(LoadTestData("invalid", "AttributeTypeAndValue",
                            "badAttributeType", &invalid));
   // Verification should fail due to Attribute Type not being an OID.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -440,11 +440,11 @@
                            &invalid));
   // Verification should fail due to AttributeTypeAndValue being a Set instead
   // of a Sequence.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -452,11 +452,11 @@
   std::string invalid;
   ASSERT_TRUE(LoadTestData("invalid", "RDN", "sequenceInsteadOfSet", &invalid));
   // Verification should fail due to RDN being a Sequence instead of a Set.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -464,11 +464,11 @@
   std::string invalid;
   ASSERT_TRUE(LoadTestData("invalid", "RDN", "empty", &invalid));
   // Verification should fail due to RDN having zero AttributeTypeAndValues.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -484,11 +484,11 @@
   std::string invalid =
       normal.replace(replace_location, 4, std::string("\xd8\x35\xdc\x00", 4));
   // Verification should fail due to the invalid codepoints.
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&invalid),
-                               SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(invalid),
+                               SequenceValueFromString(invalid)));
   std::string normalized_der;
   CertErrors errors;
-  EXPECT_FALSE(NormalizeName(SequenceValueFromString(&invalid), &normalized_der,
+  EXPECT_FALSE(NormalizeName(SequenceValueFromString(invalid), &normalized_der,
                              &errors));
 }
 
@@ -496,23 +496,23 @@
   std::string empty;
   ASSERT_TRUE(LoadTestData("valid", "Name", "empty", &empty));
   // Empty names are equal.
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&empty),
-                              SequenceValueFromString(&empty)));
+  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(empty),
+                              SequenceValueFromString(empty)));
   // An empty name normalized is unchanged.
   std::string normalized_empty_der;
   CertErrors errors;
-  EXPECT_TRUE(NormalizeName(SequenceValueFromString(&empty),
+  EXPECT_TRUE(NormalizeName(SequenceValueFromString(empty),
                             &normalized_empty_der, &errors));
-  EXPECT_EQ(SequenceValueFromString(&empty), der::Input(&normalized_empty_der));
+  EXPECT_EQ(SequenceValueFromString(empty), der::Input(normalized_empty_der));
 
   // An empty name is not equal to non-empty name.
   std::string non_empty;
   ASSERT_TRUE(
       LoadTestData("ascii", "PRINTABLESTRING", "unmangled", &non_empty));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&empty),
-                               SequenceValueFromString(&non_empty)));
-  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(&non_empty),
-                               SequenceValueFromString(&empty)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(empty),
+                               SequenceValueFromString(non_empty)));
+  EXPECT_FALSE(VerifyNameMatch(SequenceValueFromString(non_empty),
+                               SequenceValueFromString(empty)));
 }
 
 // Matching should succeed when the RDNs are sorted differently but are still
@@ -522,10 +522,10 @@
   ASSERT_TRUE(LoadTestData("ascii", "PRINTABLESTRING", "rdn_sorting_1", &a));
   std::string b;
   ASSERT_TRUE(LoadTestData("ascii", "PRINTABLESTRING", "rdn_sorting_2", &b));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&a),
-                              SequenceValueFromString(&b)));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&b),
-                              SequenceValueFromString(&a)));
+  EXPECT_TRUE(
+      VerifyNameMatch(SequenceValueFromString(a), SequenceValueFromString(b)));
+  EXPECT_TRUE(
+      VerifyNameMatch(SequenceValueFromString(b), SequenceValueFromString(a)));
 }
 
 // Matching should succeed when the RDNs are sorted differently but are still
@@ -536,10 +536,10 @@
   ASSERT_TRUE(LoadTestData("ascii", "mixed", "rdn_dupetype_sorting_1", &a));
   std::string b;
   ASSERT_TRUE(LoadTestData("ascii", "mixed", "rdn_dupetype_sorting_2", &b));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&a),
-                              SequenceValueFromString(&b)));
-  EXPECT_TRUE(VerifyNameMatch(SequenceValueFromString(&b),
-                              SequenceValueFromString(&a)));
+  EXPECT_TRUE(
+      VerifyNameMatch(SequenceValueFromString(a), SequenceValueFromString(b)));
+  EXPECT_TRUE(
+      VerifyNameMatch(SequenceValueFromString(b), SequenceValueFromString(a)));
 }
 
 TEST(VerifyNameInSubtreeInvalidDataTest, FailOnEmptyRdn) {
@@ -549,12 +549,12 @@
   ASSERT_TRUE(LoadTestData("invalid", "RDN", "empty", &invalid));
   // For both |name| and |parent|, a RelativeDistinguishedName must have at
   // least one AttributeTypeAndValue.
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&valid),
-                                   SequenceValueFromString(&invalid)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&invalid),
-                                   SequenceValueFromString(&valid)));
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&invalid),
-                                   SequenceValueFromString(&invalid)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(valid),
+                                   SequenceValueFromString(invalid)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(invalid),
+                                   SequenceValueFromString(valid)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(invalid),
+                                   SequenceValueFromString(invalid)));
 }
 
 TEST(VerifyNameInSubtreeTest, EmptyNameMatching) {
@@ -564,14 +564,14 @@
   ASSERT_TRUE(
       LoadTestData("ascii", "PRINTABLESTRING", "unmangled", &non_empty));
   // Empty name is in the subtree defined by empty name.
-  EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&empty),
-                                  SequenceValueFromString(&empty)));
+  EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(empty),
+                                  SequenceValueFromString(empty)));
   // Any non-empty name is in the subtree defined by empty name.
-  EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&non_empty),
-                                  SequenceValueFromString(&empty)));
+  EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(non_empty),
+                                  SequenceValueFromString(empty)));
   // Empty name is not in the subtree defined by non-empty name.
-  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&empty),
-                                   SequenceValueFromString(&non_empty)));
+  EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(empty),
+                                   SequenceValueFromString(non_empty)));
 }
 
 // Verify that the normalized output matches the pre-generated expected value
@@ -587,14 +587,14 @@
   ASSERT_TRUE(LoadTestData("unicode", "mixed", "unnormalized", &raw_der));
   std::string normalized_der;
   CertErrors errors;
-  ASSERT_TRUE(NormalizeName(SequenceValueFromString(&raw_der), &normalized_der,
+  ASSERT_TRUE(NormalizeName(SequenceValueFromString(raw_der), &normalized_der,
                             &errors));
-  EXPECT_EQ(SequenceValueFromString(&expected_normalized_der),
-            der::Input(&normalized_der));
+  EXPECT_EQ(SequenceValueFromString(expected_normalized_der),
+            der::Input(normalized_der));
   // Re-normalizing an already normalized Name should not change it.
   std::string renormalized_der;
   ASSERT_TRUE(
-      NormalizeName(der::Input(&normalized_der), &renormalized_der, &errors));
+      NormalizeName(der::Input(normalized_der), &renormalized_der, &errors));
   EXPECT_EQ(normalized_der, renormalized_der);
 }
 
@@ -605,9 +605,9 @@
 
   std::string normalized_der;
   CertErrors errors;
-  ASSERT_TRUE(NormalizeName(SequenceValueFromString(&raw_der), &normalized_der,
+  ASSERT_TRUE(NormalizeName(SequenceValueFromString(raw_der), &normalized_der,
                             &errors));
-  EXPECT_EQ(SequenceValueFromString(&raw_der), der::Input(&normalized_der));
+  EXPECT_EQ(SequenceValueFromString(raw_der), der::Input(normalized_der));
 }
 
 }  // namespace net
diff --git a/pki/verify_name_match_verifynameinsubtree_fuzzer.cc b/pki/verify_name_match_verifynameinsubtree_fuzzer.cc
index 94cc3bf..bfc70d3 100644
--- a/pki/verify_name_match_verifynameinsubtree_fuzzer.cc
+++ b/pki/verify_name_match_verifynameinsubtree_fuzzer.cc
@@ -24,12 +24,15 @@
   std::vector<uint8_t> second_part =
       fuzzed_data.ConsumeRemainingBytes<uint8_t>();
 
-  bssl::der::Input in1(first_part.data(), first_part.size());
-  bssl::der::Input in2(second_part.data(), second_part.size());
+  bssl::der::Input in1(first_part);
+  bssl::der::Input in2(second_part);
   bool match = net::VerifyNameInSubtree(in1, in2);
   bool reverse_order_match = net::VerifyNameInSubtree(in2, in1);
   // If both InSubtree matches are true, then in1 == in2 (modulo normalization).
-  if (match && reverse_order_match)
-    CHECK(net::VerifyNameMatch(in1, in2));
+  if (match && reverse_order_match) {
+    if (!net::VerifyNameMatch(in1, in2)) {
+      abort();
+    }
+  }
   return 0;
 }
diff --git a/pki/verify_signed_data_unittest.cc b/pki/verify_signed_data_unittest.cc
index 3dd5702..6ab0878 100644
--- a/pki/verify_signed_data_unittest.cc
+++ b/pki/verify_signed_data_unittest.cc
@@ -55,10 +55,10 @@
   ASSERT_TRUE(ReadTestDataFromPemFile(path, mappings));
 
   std::optional<SignatureAlgorithm> signature_algorithm =
-      ParseSignatureAlgorithm(der::Input(&algorithm));
+      ParseSignatureAlgorithm(der::Input(algorithm));
   ASSERT_TRUE(signature_algorithm);
 
-  der::Parser signature_value_parser((der::Input(&signature_value)));
+  der::Parser signature_value_parser((der::Input(signature_value)));
   std::optional<der::BitString> signature_value_bit_string =
       signature_value_parser.ReadBitString();
   ASSERT_TRUE(signature_value_bit_string.has_value())
@@ -66,9 +66,9 @@
 
   bool expected_result_bool = expected_result == SUCCESS;
 
-  bool result = VerifySignedData(*signature_algorithm, der::Input(&signed_data),
+  bool result = VerifySignedData(*signature_algorithm, der::Input(signed_data),
                                  signature_value_bit_string.value(),
-                                 der::Input(&public_key), cache);
+                                 der::Input(public_key), cache);
 
   EXPECT_EQ(expected_result_bool, result);
 }