// Copyright (c) 2011 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.

#include "net/cert/cert_verify_result.h"

#include <tuple>

#include "net/cert/x509_certificate.h"

namespace net {

CertVerifyResult::CertVerifyResult() {
  Reset();
}

CertVerifyResult::CertVerifyResult(const CertVerifyResult& other) = default;

CertVerifyResult::~CertVerifyResult() = default;

void CertVerifyResult::Reset() {
  verified_cert = NULL;
  cert_status = 0;
  has_md2 = false;
  has_md4 = false;
  has_md5 = false;
  has_sha1 = false;
  has_sha1_leaf = false;
  is_issued_by_known_root = false;
  is_issued_by_additional_trust_anchor = false;

  public_key_hashes.clear();
  ocsp_result = OCSPVerifyResult();
}

bool CertVerifyResult::operator==(const CertVerifyResult& other) const {
  return (!!verified_cert == !!other.verified_cert) &&
         (!verified_cert ||
          verified_cert->EqualsIncludingChain(other.verified_cert.get())) &&
         std::tie(cert_status, has_md2, has_md4, has_md5, has_sha1,
                  has_sha1_leaf, public_key_hashes, is_issued_by_known_root,
                  is_issued_by_additional_trust_anchor, ocsp_result) ==
             std::tie(other.cert_status, other.has_md2, other.has_md4,
                      other.has_md5, other.has_sha1, other.has_sha1_leaf,
                      other.public_key_hashes, other.is_issued_by_known_root,
                      other.is_issued_by_additional_trust_anchor,
                      other.ocsp_result);
}

}  // namespace net
