Botan 3.8.1
Crypto and TLS for C&
aria.h
Go to the documentation of this file.
1/*
2* ARIA
3* (C) 2017 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*
7* This ARIA implementation is based on the 32-bit implementation by Aaram Yun from the
8* National Security Research Institute, KOREA. Aaram Yun's implementation is based on
9* the 8-bit implementation by Jin Hong. The source files are available in ARIA.zip from
10* the Korea Internet & Security Agency website.
11* <A HREF="https://tools.ietf.org/html/rfc5794">RFC 5794, A Description of the ARIA Encryption Algorithm</A>,
12* <A HREF="http://seed.kisa.or.kr/iwt/ko/bbs/EgovReferenceList.do?bbsId=BBSMSTR_000000000002">Korea
13* Internet & Security Agency homepage</A>
14*/
15
16#ifndef BOTAN_ARIA_H_
17#define BOTAN_ARIA_H_
18
19#include <botan/block_cipher.h>
20#include <botan/secmem.h>
21
22namespace Botan {
23
24/**
25* ARIA-128
26*/
27class ARIA_128 final : public Block_Cipher_Fixed_Params<16, 16> {
28 public:
29 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
30 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
31
32 void clear() override;
33
34 std::string name() const override { return "ARIA-128"; }
35
36 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_128>(); }
37
38 bool has_keying_material() const override;
39
40 private:
41 void key_schedule(std::span<const uint8_t> key) override;
42
43 // Encryption and Decryption round keys.
44 secure_vector<uint32_t> m_ERK, m_DRK;
45};
46
47/**
48* ARIA-192
49*/
50class ARIA_192 final : public Block_Cipher_Fixed_Params<16, 24> {
51 public:
52 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
53 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
54
55 void clear() override;
56
57 std::string name() const override { return "ARIA-192"; }
58
59 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_192>(); }
60
61 bool has_keying_material() const override;
62
63 private:
64 void key_schedule(std::span<const uint8_t> key) override;
65
66 // Encryption and Decryption round keys.
67 secure_vector<uint32_t> m_ERK, m_DRK;
68};
69
70/**
71* ARIA-256
72*/
73class ARIA_256 final : public Block_Cipher_Fixed_Params<16, 32> {
74 public:
75 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
76 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
77
78 void clear() override;
79
80 std::string name() const override { return "ARIA-256"; }
81
82 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_256>(); }
83
84 bool has_keying_material() const override;
85
86 private:
87 void key_schedule(std::span<const uint8_t> key) override;
88
89 // Encryption and Decryption round keys.
90 secure_vector<uint32_t> m_ERK, m_DRK;
91};
92
93} // namespace Botan
94
95#endif
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:36
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:363
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:378
std::string name() const override
Definition aria.h:34
void clear() override
Definition aria.cpp:417
bool has_keying_material() const override
Definition aria.cpp:393
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:368
void clear() override
Definition aria.cpp:422
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:59
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:383
std::string name() const override
Definition aria.h:57
bool has_keying_material() const override
Definition aria.cpp:397
void clear() override
Definition aria.cpp:427
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:82
bool has_keying_material() const override
Definition aria.cpp:401
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:373
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:388
std::string name() const override
Definition aria.h:80
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:65