hkdf_sha256_32.h raw

   1  // Copyright (c) 2018-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_HKDF_SHA256_32_H
   6  #define LIMENKA_CRYPTO_HKDF_SHA256_32_H
   7  
   8  #include <crypto/hmac_sha256.h>
   9  
  10  #include <cstdlib>
  11  #include <stdint.h>
  12  
  13  /** A rfc5869 HKDF implementation with HMAC_SHA256 and fixed key output length of 32 bytes (L=32) */
  14  class CHKDF_HMAC_SHA256_L32
  15  {
  16  private:
  17      unsigned char m_prk[32];
  18      static const size_t OUTPUT_SIZE = 32;
  19  
  20  public:
  21      CHKDF_HMAC_SHA256_L32(const unsigned char* ikm, size_t ikmlen, const std::string& salt);
  22      void Expand32(const std::string& info, unsigned char hash[OUTPUT_SIZE]);
  23  };
  24  
  25  #endif // LIMENKA_CRYPTO_HKDF_SHA256_32_H
  26