hight.h
Go to the documentation of this file.
// hight.h - written and placed in the public domain by Kim Sung Hee and Jeffrey Walton
// Based on "HIGHT: A New Block Cipher Suitable for Low-Resource Device"
// by Deukjo Hong, Jaechul Sung, Seokhie Hong, Jongin Lim, Sangjin Lee,
// Bon-Seok Koo, Changhoon Lee, Donghoon Chang, Jesang Lee, Kitae Jeong,
// Hyun Kim, Jongsung Kim, and Seongtaek Chee
/// \file hight.h
/// \brief Classes for the HIGHT block cipher
/// \since Crypto++ 8.0
#ifndef CRYPTOPP_HIGHT_H
#define CRYPTOPP_HIGHT_H
#include "config.h"
#include "seckey.h"
#include "secblock.h"
#include "algparam.h"
NAMESPACE_BEGIN(CryptoPP)
/// \brief HIGHT block cipher information
/// \since Crypto++ 8.0
struct HIGHT_Info : public FixedBlockSize<8>, public FixedKeyLength<16>
{
static const std::string StaticAlgorithmName()
{
// Format is Cipher-Blocksize
return "HIGHT";
}
};
/// \brief HIGHT 64-bit block cipher
/// \details HIGHT provides 64-bit block size. The valid key size is 128-bits.
/// \note Crypto++ provides a byte oriented implementation
/// \sa <a href="http://www.cryptopp.com/wiki/HIGHT">HIGHT</a>,
/// <a href="https://seed.kisa.or.kr/">Korea Internet &amp; Security
/// Agency</a> website
/// \since Crypto++ 8.0
class CRYPTOPP_NO_VTABLE HIGHT : public HIGHT_Info, public BlockCipherDocumentation
{
public:
/// \brief HIGHT block cipher transformation functions
/// \details Provides implementation common to encryption and decryption
/// \since Crypto++ 8.0
class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<HIGHT_Info>
{
protected:
void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs &params);
FixedSizeSecBlock<byte, 136> m_rkey;
mutable FixedSizeSecBlock<word32, 8> m_xx;
};
/// \brief Encryption transformation
/// \details Enc provides implementation for encryption transformation.
/// \since Crypto++ 8.0
class CRYPTOPP_NO_VTABLE Enc : public Base
{
public:
void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
};
/// \brief Decryption transformation
/// \details Dec provides implementation for decryption transformation.
/// \since Crypto++ 8.0
class CRYPTOPP_NO_VTABLE Dec : public Base
{
public:
void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
};
typedef BlockCipherFinal<ENCRYPTION, Enc> Encryption;
typedef BlockCipherFinal<DECRYPTION, Dec> Decryption;
};
typedef HIGHT::Encryption HIGHTEncryption;
typedef HIGHT::Decryption HIGHTDecryption;
NAMESPACE_END
#endif // CRYPTOPP_HIGHT_H
algparam.h
Classes for working with NameValuePairs.
BlockCipherFinal
Provides class member functions to key a block cipher.
Definition seckey.h:318
BlockCipherImpl
Provides a base implementation of Algorithm and SimpleKeyingInterface for block ciphers.
Definition seckey.h:306
FixedBlockSize
Inherited by algorithms with fixed block size.
Definition seckey.h:41
FixedKeyLength
Inherited by keyed algorithms with fixed key length.
Definition seckey.h:125
FixedSizeSecBlock
Fixed size stack-based SecBlock.
Definition secblock.h:1246
HIGHT::Base
HIGHT block cipher transformation functions.
Definition hight.h:46
HIGHT::Dec
Decryption transformation.
Definition hight.h:67
HIGHT::Enc
Encryption transformation.
Definition hight.h:58
HIGHT
HIGHT 64-bit block cipher.
Definition hight.h:40
NameValuePairs
Interface for retrieving values given their names.
Definition cryptlib.h:327
config.h
Library configuration file.
CryptoPP
Crypto++ library namespace.
secblock.h
Classes and functions for secure memory allocations.
seckey.h
Classes and functions for implementing secret key algorithms.
BlockCipherDocumentation
Provides Encryption and Decryption typedefs used by derived classes to implement a block cipher.
Definition seckey.h:399
HIGHT_Info
HIGHT block cipher information.
Definition hight.h:24