summaryrefslogtreecommitdiff
path: root/hight.h
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2018-06-24 00:54:16 -0400
committerJeffrey Walton <noloader@gmail.com>2018-06-24 00:54:16 -0400
commit2f5b110b5272f45006cb9227dd0216a6c3b64a4b (patch)
tree3602141476de485d7f87cf33a9a709d31a2e9ea0 /hight.h
parent32e2be647a92bba97bb70d0c79bcfc2ff9de20fe (diff)
downloadcryptopp-git-2f5b110b5272f45006cb9227dd0216a6c3b64a4b.tar.gz
Add HIGHT lightweight block cipher (GH #672)
Diffstat (limited to 'hight.h')
-rw-r--r--hight.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/hight.h b/hight.h
new file mode 100644
index 00000000..2377638c
--- /dev/null
+++ b/hight.h
@@ -0,0 +1,80 @@
+// 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++ 7.1
+
+#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++ 7.1
+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++ 7.1
+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++ 7.1
+ 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 Provides implementation for encryption transformation
+ /// \details Enc provides implementation for encryption transformation.
+ /// \since Crypto++ 7.1
+ class CRYPTOPP_NO_VTABLE Enc : public Base
+ {
+ public:
+ void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
+ };
+
+ /// \brief Provides implementation for encryption transformation
+ /// \details Dec provides implementation for decryption transformation.
+ /// \since Crypto++ 7.1
+ 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