// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_CERT_REQUIRE_CT_DELEGATE_H_
#define NET_CERT_REQUIRE_CT_DELEGATE_H_

#include <string>

#include "base/memory/ref_counted.h"
#include "net/base/hash_value.h"
#include "net/base/net_export.h"
#include "net/cert/ct_policy_status.h"

namespace net {

class X509Certificate;

class NET_EXPORT RequireCTDelegate
    : public base::RefCountedThreadSafe<RequireCTDelegate> {
 public:
  // Provides a capability for altering the default handling of Certificate
  // Transparency information, allowing it to be always required for some
  // hosts, for some hosts to be opted out of the default policy, or
  // allowing the TransportSecurityState to apply the default security
  // policies.
  enum class CTRequirementLevel {
    // The host is required to always supply Certificate Transparency
    // information that complies with the CT policy.
    REQUIRED,

    // The host is explicitly not required to supply Certificate
    // Transparency information that complies with the CT policy.
    NOT_REQUIRED,
  };

  // Called by the TransportSecurityState, allows the Delegate to override
  // the default handling of Certificate Transparency requirements, if
  // desired.
  // |hostname| contains the host being contacted, serving the certificate
  // |chain|, with the set of hashes |hashes|. Note that |hashes| and
  // |chain| are not guaranteed to be in the same order - that is, the first
  // hash in |hashes| is NOT guaranteed to be for the leaf cert in |chain|.
  virtual CTRequirementLevel IsCTRequiredForHost(
      std::string_view hostname,
      const X509Certificate* chain,
      const HashValueVector& hashes) const = 0;

  // Returns CT_REQUIREMENTS_NOT_MET if a connection violates CT policy
  // requirements: that is, if a connection to |host|, using the validated
  // certificate |validated_certificate_chain|, is expected to be accompanied
  // with valid Certificate Transparency information that complies with the
  // connection's CTPolicyEnforcer and |policy_compliance| indicates that
  // the connection does not comply.
  //
  // If |delegate| is null, CT will not be required.
  static ct::CTRequirementsStatus CheckCTRequirements(
      const RequireCTDelegate* delegate,
      std::string_view host,
      bool is_issued_by_known_root,
      const HashValueVector& public_key_hashes,
      const X509Certificate* validated_certificate_chain,
      ct::CTPolicyCompliance policy_compliance);

 protected:
  virtual ~RequireCTDelegate() = default;

 private:
  friend class base::RefCountedThreadSafe<RequireCTDelegate>;
};

}  // namespace net

#endif  // NET_CERT_REQUIRE_CT_DELEGATE_H_
