hmac_sha256.h raw

   1  // Copyright (c) 2014-present The Bitcoin Core developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #ifndef BITCOIN_CRYPTO_HMAC_SHA256_H
   6  #define BITCOIN_CRYPTO_HMAC_SHA256_H
   7  
   8  #include <crypto/sha256.h>
   9  
  10  #include <cstddef>
  11  
  12  /** A hasher class for HMAC-SHA-256. */
  13  class CHMAC_SHA256
  14  {
  15  private:
  16      CSHA256 outer;
  17      CSHA256 inner;
  18  
  19  public:
  20      static const size_t OUTPUT_SIZE = 32;
  21  
  22      CHMAC_SHA256(const unsigned char* key, size_t keylen);
  23      CHMAC_SHA256& Write(const unsigned char* data, size_t len)
  24      {
  25          inner.Write(data, len);
  26          return *this;
  27      }
  28      void Finalize(unsigned char hash[OUTPUT_SIZE]);
  29  };
  30  
  31  #endif // BITCOIN_CRYPTO_HMAC_SHA256_H
  32