1// Copyright (c) 2011 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 5#include "crypto/secure_hash.h" 6 7#include "base/logging.h" 8#include "crypto/third_party/nss/blapi.h" 9#include "crypto/third_party/nss/sha256.h" 10 11namespace crypto { 12 13namespace { 14 15class SecureHashSHA256NSS : public SecureHash { 16 public: 17 SecureHashSHA256NSS() { 18 SHA256_Begin(&ctx_); 19 } 20 21 virtual ~SecureHashSHA256NSS() { 22 } 23 24 virtual void Update(const void* input, size_t len) { 25 SHA256_Update(&ctx_, static_cast<const unsigned char*>(input), len); 26 } 27 28 virtual void Finish(void* output, size_t len) { 29 SHA256_End(&ctx_, static_cast<unsigned char*>(output), NULL, 30 static_cast<unsigned int>(len)); 31 } 32 33 private: 34 SHA256Context ctx_; 35}; 36 37} // namespace 38 39SecureHash* SecureHash::Create(Algorithm algorithm) { 40 switch (algorithm) { 41 case SHA256: 42 return new SecureHashSHA256NSS(); 43 default: 44 NOTIMPLEMENTED(); 45 return NULL; 46 } 47} 48 49} // namespace crypto 50