hmac_sha256.h raw

   1  // Copyright (c) 2014-2022 The Limenka 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 LIMENKA_CRYPTO_HMAC_SHA256_H
   6  #define LIMENKA_CRYPTO_HMAC_SHA256_H
   7  
   8  #include <crypto/sha256.h>
   9  
  10  #include <cstdlib>
  11  #include <stdint.h>
  12  
  13  /** A hasher class for HMAC-SHA-256. */
  14  class CHMAC_SHA256
  15  {
  16  private:
  17      CSHA256 outer;
  18      CSHA256 inner;
  19  
  20  public:
  21      static const size_t OUTPUT_SIZE = 32;
  22  
  23      CHMAC_SHA256(const unsigned char* key, size_t keylen);
  24      CHMAC_SHA256& Write(const unsigned char* data, size_t len)
  25      {
  26          inner.Write(data, len);
  27          return *this;
  28      }
  29      void Finalize(unsigned char hash[OUTPUT_SIZE]);
  30  };
  31  
  32  #endif // LIMENKA_CRYPTO_HMAC_SHA256_H
  33