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