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);
 }
