hmac_sha512.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_SHA512_H
   6  #define LIMENKA_CRYPTO_HMAC_SHA512_H
   7  
   8  #include <crypto/sha512.h>
   9  
  10  #include <cstdlib>
  11  #include <stdint.h>
  12  
  13  /** A hasher class for HMAC-SHA-512. */
  14  class CHMAC_SHA512
  15  {
  16  private:
  17      CSHA512 outer;
  18      CSHA512 inner;
  19  
  20  public:
  21      static const size_t OUTPUT_SIZE = 64;
  22  
  23      CHMAC_SHA512(const unsigned char* key, size_t keylen);
  24      CHMAC_SHA512& 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_SHA512_H
  33