cert_verify_proc_mac.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef NET_CERT_CERT_VERIFY_PROC_MAC_H_
  5. #define NET_CERT_CERT_VERIFY_PROC_MAC_H_
  6. #include <vector>
  7. #include "base/supports_user_data.h"
  8. #include "net/base/net_export.h"
  9. #include "net/cert/cert_verify_proc.h"
  10. namespace net {
  11. // Performs certificate path construction and validation using OS X's
  12. // Security.framework.
  13. class NET_EXPORT CertVerifyProcMac : public CertVerifyProc {
  14. public:
  15. class NET_EXPORT ResultDebugData : public base::SupportsUserData::Data {
  16. public:
  17. struct NET_EXPORT CertEvidenceInfo {
  18. CertEvidenceInfo();
  19. ~CertEvidenceInfo();
  20. CertEvidenceInfo(const CertEvidenceInfo&);
  21. CertEvidenceInfo(CertEvidenceInfo&&);
  22. // A bitfield indicating various status of the cert, defined in
  23. // cssmapple.h
  24. uint32_t status_bits;
  25. // CSSM_RETURN status codes for the cert, defined in cssmtype.h, values in
  26. // cssmerr.h and cssmErrorStrings.h.
  27. std::vector<int32_t> status_codes;
  28. };
  29. ResultDebugData(uint32_t trust_result,
  30. int32_t result_code,
  31. std::vector<CertEvidenceInfo> status_chain);
  32. ~ResultDebugData() override;
  33. ResultDebugData(const ResultDebugData&);
  34. static const ResultDebugData* Get(const base::SupportsUserData* debug_data);
  35. static void Create(uint32_t trust_result,
  36. int32_t result_code,
  37. std::vector<CertEvidenceInfo> status_chain,
  38. base::SupportsUserData* debug_data);
  39. // base::SupportsUserData::Data implementation:
  40. std::unique_ptr<Data> Clone() override;
  41. uint32_t trust_result() const { return trust_result_; }
  42. int32_t result_code() const { return result_code_; }
  43. const std::vector<CertEvidenceInfo>& status_chain() const {
  44. return status_chain_;
  45. }
  46. private:
  47. // The SecTrustResultType result from SecTrustEvaluate.
  48. uint32_t trust_result_;
  49. // The OSStatus resultCode from SecTrustGetCssmResultCode.
  50. int32_t result_code_;
  51. // The CSSM_TP_APPLE_EVIDENCE_INFO statusChain from SecTrustGetResult. Each
  52. // entry corresponds to one of the certs in the verified chain (leaf first).
  53. std::vector<CertEvidenceInfo> status_chain_;
  54. };
  55. CertVerifyProcMac();
  56. bool SupportsAdditionalTrustAnchors() const override;
  57. protected:
  58. ~CertVerifyProcMac() override;
  59. private:
  60. int VerifyInternal(X509Certificate* cert,
  61. const std::string& hostname,
  62. const std::string& ocsp_response,
  63. const std::string& sct_list,
  64. int flags,
  65. CRLSet* crl_set,
  66. const CertificateList& additional_trust_anchors,
  67. CertVerifyResult* verify_result,
  68. const NetLogWithSource& net_log) override;
  69. };
  70. } // namespace net
  71. #endif // NET_CERT_CERT_VERIFY_PROC_MAC_H_