Home | History | Annotate | Download | only in crypto
      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:
     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 
     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