// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_BASE_EV_ROOT_CA_METADATA_H_ #define NET_BASE_EV_ROOT_CA_METADATA_H_ #pragma once #include "build/build_config.h" #if defined(USE_NSS) #include #endif #include #include #include "net/base/x509_certificate.h" namespace base { template struct DefaultLazyInstanceTraits; } // namespace base namespace net { // A singleton. This class stores the meta data of the root CAs that issue // extended-validation (EV) certificates. class EVRootCAMetadata { public: #if defined(USE_NSS) typedef SECOidTag PolicyOID; #else typedef const char* PolicyOID; #endif static EVRootCAMetadata* GetInstance(); // If the root CA cert has an EV policy OID, returns true and stores the // policy OID in *policy_oid. Otherwise, returns false. bool GetPolicyOID(const SHA1Fingerprint& fingerprint, PolicyOID* policy_oid) const; const PolicyOID* GetPolicyOIDs() const { return &policy_oids_[0]; } #if defined(OS_WIN) int NumPolicyOIDs() const { return num_policy_oids_; } #else int NumPolicyOIDs() const { return policy_oids_.size(); } #endif // Returns true if policy_oid is an EV policy OID of some root CA. bool IsEVPolicyOID(PolicyOID policy_oid) const; // Returns true if the root CA with the given certificate fingerprint has // the EV policy OID policy_oid. bool HasEVPolicyOID(const SHA1Fingerprint& fingerprint, PolicyOID policy_oid) const; private: friend struct base::DefaultLazyInstanceTraits; typedef std::map PolicyOidMap; EVRootCAMetadata(); ~EVRootCAMetadata(); static bool PolicyOIDsAreEqual(PolicyOID a, PolicyOID b); // Maps an EV root CA cert's SHA-1 fingerprint to its EV policy OID. PolicyOidMap ev_policy_; #if defined(OS_WIN) static const PolicyOID policy_oids_[]; int num_policy_oids_; #else std::vector policy_oids_; #endif DISALLOW_COPY_AND_ASSIGN(EVRootCAMetadata); }; } // namespace net #endif // NET_BASE_EV_ROOT_CA_METADATA_H_