/* * ARIA * (C) 2017 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) * * This 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. * RFC 5794, A Description of the ARIA Encryption Algorithm, * Korea * Internet & Security Agency homepage */ #ifndef BOTAN_ARIA_H_ #define BOTAN_ARIA_H_ #include namespace Botan { /** * ARIA-128 */ class ARIA_128 final : public Block_Cipher_Fixed_Params<16, 16> { public: void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override; void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override; void clear() override; std::string name() const override { return "ARIA-128"; } std::unique_ptr new_object() const override { return std::make_unique(); } private: void key_schedule(const uint8_t key[], size_t length) override; // Encryption and Decryption round keys. secure_vector m_ERK, m_DRK; }; /** * ARIA-192 */ class ARIA_192 final : public Block_Cipher_Fixed_Params<16, 24> { public: void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override; void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override; void clear() override; std::string name() const override { return "ARIA-192"; } std::unique_ptr new_object() const override { return std::make_unique(); } private: void key_schedule(const uint8_t key[], size_t length) override; // Encryption and Decryption round keys. secure_vector m_ERK, m_DRK; }; /** * ARIA-256 */ class ARIA_256 final : public Block_Cipher_Fixed_Params<16, 32> { public: void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override; void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override; void clear() override; std::string name() const override { return "ARIA-256"; } std::unique_ptr new_object() const override { return std::make_unique(); } private: void key_schedule(const uint8_t key[], size_t length) override; // Encryption and Decryption round keys. secure_vector m_ERK, m_DRK; }; } #endif