172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/secure_hash.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/logging.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/third_party/nss/blapi.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/third_party/nss/sha256.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace crypto { 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace { 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass SecureHashSHA256NSS : public SecureHash { 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SecureHashSHA256NSS() { 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SHA256_Begin(&ctx_); 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~SecureHashSHA256NSS() { 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Update(const void* input, size_t len) { 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SHA256_Update(&ctx_, static_cast<const unsigned char*>(input), len); 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Finish(void* output, size_t len) { 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SHA256_End(&ctx_, static_cast<unsigned char*>(output), NULL, 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static_cast<unsigned int>(len)); 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SHA256Context ctx_; 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSecureHash* SecureHash::Create(Algorithm algorithm) { 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen switch (algorithm) { 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case SHA256: 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return new SecureHashSHA256NSS(); 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default: 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTIMPLEMENTED(); 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return NULL; 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace crypto 50