// aria.h - written and placed in the public domain by Jeffrey Walton //! \file aria.h //! \brief Classes for the ARIA block cipher //! \details The Crypto++ ARIA implementation is based on the 32-bit implementation by Aaram Yun //! from the National Security Research Institute, KOREA. Aaram Yun's implementation is based on //! the 8-bit implementation by Jin Hong. The source files are available in ARIA.zip from the Korea //! Internet & Security Agency website. //! \sa RFC 5794, A Description of the ARIA Encryption Algorithm, //! Korea //! Internet & Security Agency homepage #ifndef CRYPTOPP_ARIA_H #define CRYPTOPP_ARIA_H #include "config.h" #include "seckey.h" #include "secblock.h" NAMESPACE_BEGIN(CryptoPP) //! \class ARIA_Info //! \brief ARIA block cipher information //! \since Crypto++ 6.0 struct ARIA_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8> { CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "ARIA";} }; //! \class ARIA //! \brief ARIA block cipher //! \details The Crypto++ ARIA implementation is based on the 32-bit implementation by Aaram Yun //! from the National Security Research Institute, KOREA. Aaram Yun's implementation is based on //! the 8-bit implementation by Jin Hong. The source files are available in ARIA.zip from the Korea //! Internet & Security Agency website. //! \sa RFC 5794, A Description of the ARIA Encryption Algorithm, //! Korea //! Internet & Security Agency homepage //! \sa ARIA //! \since Crypto++ 6.0 class ARIA : public ARIA_Info, public BlockCipherDocumentation { public: class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl { public: Base() : m_rounds(0) {} protected: void UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs ¶ms); void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; private: // Reference implementation allocates a table of 17 round keys. FixedSizeAlignedSecBlock m_rk; // round keys FixedSizeAlignedSecBlock m_w; // w0, w1, w2, w3, t and u unsigned int m_rounds; }; public: typedef BlockCipherFinal Encryption; typedef BlockCipherFinal Decryption; }; typedef ARIA::Encryption ARIAEncryption; typedef ARIA::Decryption ARIADecryption; NAMESPACE_END #endif