| Index: net/cert/x509_certificate.cc
 | 
| diff --git a/net/cert/x509_certificate.cc b/net/cert/x509_certificate.cc
 | 
| index adfe9e55ccba5397601cf5f8f5eba3bea39c197f..73c02bb3463bf0ecf996701cb33da24819ab2a2c 100644
 | 
| --- a/net/cert/x509_certificate.cc
 | 
| +++ b/net/cert/x509_certificate.cc
 | 
| @@ -21,7 +21,6 @@
 | 
|  #include "base/metrics/histogram_macros.h"
 | 
|  #include "base/pickle.h"
 | 
|  #include "base/profiler/scoped_tracker.h"
 | 
| -#include "base/sha1.h"
 | 
|  #include "base/strings/string_piece.h"
 | 
|  #include "base/strings/string_util.h"
 | 
|  #include "base/synchronization/lock.h"
 | 
| @@ -83,7 +82,7 @@ class X509CertificateCache {
 | 
|    void Remove(X509Certificate::OSCertHandle cert_handle);
 | 
|  
 | 
|   private:
 | 
| -  // A single entry in the cache. Certificates will be keyed by their SHA1
 | 
| +  // A single entry in the cache. Certificates will be keyed by their SHA-256
 | 
|    // fingerprints, but will not be considered equivalent unless the entire
 | 
|    // certificate data matches.
 | 
|    struct Entry {
 | 
| @@ -97,7 +96,7 @@ class X509CertificateCache {
 | 
|      // the cached OS certificate handle will be freed.
 | 
|      int ref_count;
 | 
|    };
 | 
| -  typedef std::map<SHA1HashValue, Entry, SHA1HashValueLessThan> CertMap;
 | 
| +  typedef std::map<SHA256HashValue, Entry, SHA256HashValueLessThan> CertMap;
 | 
|  
 | 
|    // Obtain an instance of X509CertificateCache via a LazyInstance.
 | 
|    X509CertificateCache() {}
 | 
| @@ -120,8 +119,8 @@ base::LazyInstance<X509CertificateCache>::Leaky
 | 
|  void X509CertificateCache::InsertOrUpdate(
 | 
|      X509Certificate::OSCertHandle* cert_handle) {
 | 
|    DCHECK(cert_handle);
 | 
| -  SHA1HashValue fingerprint =
 | 
| -      X509Certificate::CalculateFingerprint(*cert_handle);
 | 
| +  SHA256HashValue fingerprint =
 | 
| +      X509Certificate::CalculateFingerprint256(*cert_handle);
 | 
|  
 | 
|    X509Certificate::OSCertHandle old_handle = NULL;
 | 
|    {
 | 
| @@ -139,7 +138,7 @@ void X509CertificateCache::InsertOrUpdate(
 | 
|        bool is_same_cert =
 | 
|            X509Certificate::IsSameOSCert(*cert_handle, pos->second.cert_handle);
 | 
|        if (!is_same_cert) {
 | 
| -        // Two certificates don't match, due to a SHA1 hash collision. Given
 | 
| +        // Two certificates don't match, due to a SHA-256 hash collision. Given
 | 
|          // the low probability, the simplest solution is to not cache the
 | 
|          // certificate, which should not affect performance too negatively.
 | 
|          return;
 | 
| @@ -168,8 +167,8 @@ void X509CertificateCache::InsertOrUpdate(
 | 
|  }
 | 
|  
 | 
|  void X509CertificateCache::Remove(X509Certificate::OSCertHandle cert_handle) {
 | 
| -  SHA1HashValue fingerprint =
 | 
| -      X509Certificate::CalculateFingerprint(cert_handle);
 | 
| +  SHA256HashValue fingerprint =
 | 
| +      X509Certificate::CalculateFingerprint256(cert_handle);
 | 
|    base::AutoLock lock(lock_);
 | 
|  
 | 
|    CertMap::iterator pos = cache_.find(fingerprint);
 | 
| @@ -225,22 +224,6 @@ void SplitOnChar(const base::StringPiece& src,
 | 
|  
 | 
|  }  // namespace
 | 
|  
 | 
| -bool X509Certificate::LessThan::operator()(
 | 
| -    const scoped_refptr<X509Certificate>& lhs,
 | 
| -    const scoped_refptr<X509Certificate>& rhs) const {
 | 
| -  if (lhs.get() == rhs.get())
 | 
| -    return false;
 | 
| -
 | 
| -  int rv = memcmp(lhs->fingerprint_.data, rhs->fingerprint_.data,
 | 
| -                  sizeof(lhs->fingerprint_.data));
 | 
| -  if (rv != 0)
 | 
| -    return rv < 0;
 | 
| -
 | 
| -  rv = memcmp(lhs->ca_fingerprint_.data, rhs->ca_fingerprint_.data,
 | 
| -              sizeof(lhs->ca_fingerprint_.data));
 | 
| -  return rv < 0;
 | 
| -}
 | 
| -
 | 
|  X509Certificate::X509Certificate(const std::string& subject,
 | 
|                                   const std::string& issuer,
 | 
|                                   base::Time start_date,
 | 
| @@ -250,8 +233,6 @@ X509Certificate::X509Certificate(const std::string& subject,
 | 
|        valid_start_(start_date),
 | 
|        valid_expiry_(expiration_date),
 | 
|        cert_handle_(NULL) {
 | 
| -  memset(fingerprint_.data, 0, sizeof(fingerprint_.data));
 | 
| -  memset(ca_fingerprint_.data, 0, sizeof(ca_fingerprint_.data));
 | 
|  }
 | 
|  
 | 
|  // static
 | 
| @@ -710,26 +691,6 @@ bool X509Certificate::GetPEMEncodedChain(
 | 
|  }
 | 
|  
 | 
|  // static
 | 
| -SHA256HashValue X509Certificate::CalculateCAFingerprint256(
 | 
| -    const OSCertHandles& intermediates) {
 | 
| -  SHA256HashValue sha256;
 | 
| -  memset(sha256.data, 0, sizeof(sha256.data));
 | 
| -
 | 
| -  std::unique_ptr<crypto::SecureHash> hash(
 | 
| -      crypto::SecureHash::Create(crypto::SecureHash::SHA256));
 | 
| -
 | 
| -  for (size_t i = 0; i < intermediates.size(); ++i) {
 | 
| -    std::string der_encoded;
 | 
| -    if (!GetDEREncoded(intermediates[i], &der_encoded))
 | 
| -      return sha256;
 | 
| -    hash->Update(der_encoded.data(), der_encoded.length());
 | 
| -  }
 | 
| -  hash->Finish(sha256.data, sizeof(sha256.data));
 | 
| -
 | 
| -  return sha256;
 | 
| -}
 | 
| -
 | 
| -// static
 | 
|  SHA256HashValue X509Certificate::CalculateChainFingerprint256(
 | 
|      OSCertHandle leaf,
 | 
|      const OSCertHandles& intermediates) {
 | 
| 
 |