• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
11 namespace crypto {
12 
13 namespace {
14 
15 class SecureHashSHA256NSS : public SecureHash {
16  public:
SecureHashSHA256NSS()17   SecureHashSHA256NSS() {
18     SHA256_Begin(&ctx_);
19   }
20 
~SecureHashSHA256NSS()21   virtual ~SecureHashSHA256NSS() {
22   }
23 
Update(const void * input,size_t len)24   virtual void Update(const void* input, size_t len) {
25     SHA256_Update(&ctx_, static_cast<const unsigned char*>(input), len);
26   }
27 
Finish(void * output,size_t len)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 
Create(Algorithm algorithm)39 SecureHash* 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