Botan 3.11.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 std::string provider() const override;
39 size_t parallelism() const override;
40 bool has_keying_material() const override;
41
42 private:
43 void key_schedule(std::span<const uint8_t> key) override;
44
45#if defined(BOTAN_HAS_ARIA_AVX512_GFNI)
46 void aria_avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
47 void aria_avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
48#endif
49
50#if defined(BOTAN_HAS_ARIA_HWAES)
51 void aria_hwaes_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
52 void aria_hwaes_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
53#endif
54
55 // Encryption and Decryption round keys.
56 secure_vector<uint32_t> m_ERK, m_DRK;
57};
58
59/**
60* ARIA-192
61*/
62class ARIA_192 final : public Block_Cipher_Fixed_Params<16, 24> {
63 public:
64 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
65 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
66
67 void clear() override;
68
69 std::string name() const override { return "ARIA-192"; }
70
71 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_192>(); }
72
73 std::string provider() const override;
74 size_t parallelism() const override;
75 bool has_keying_material() const override;
76
77 private:
78 void key_schedule(std::span<const uint8_t> key) override;
79
80#if defined(BOTAN_HAS_ARIA_AVX512_GFNI)
81 void aria_avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
82 void aria_avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
83#endif
84
85#if defined(BOTAN_HAS_ARIA_HWAES)
86 void aria_hwaes_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
87 void aria_hwaes_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
88#endif
89
90 // Encryption and Decryption round keys.
91 secure_vector<uint32_t> m_ERK, m_DRK;
92};
93
94/**
95* ARIA-256
96*/
97class ARIA_256 final : public Block_Cipher_Fixed_Params<16, 32> {
98 public:
99 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
100 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
101
102 void clear() override;
103
104 std::string name() const override { return "ARIA-256"; }
105
106 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_256>(); }
107
108 std::string provider() const override;
109 size_t parallelism() const override;
110 bool has_keying_material() const override;
111
112 private:
113 void key_schedule(std::span<const uint8_t> key) override;
114
115#if defined(BOTAN_HAS_ARIA_AVX512_GFNI)
116 void aria_avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
117 void aria_avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
118#endif
119
120#if defined(BOTAN_HAS_ARIA_HWAES)
121 void aria_hwaes_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
122 void aria_hwaes_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
123#endif
124
125 // Encryption and Decryption round keys.
126 secure_vector<uint32_t> m_ERK, m_DRK;
127};
128
129} // namespace Botan
130
131#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:370
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:424
std::string name() const override
Definition aria.h:34
std::string provider() const override
Definition aria.cpp:530
size_t parallelism() const override
Definition aria.cpp:526
void clear() override
Definition aria.cpp:562
bool has_keying_material() const override
Definition aria.cpp:478
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:388
void clear() override
Definition aria.cpp:567
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:71
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:442
std::string provider() const override
Definition aria.cpp:538
std::string name() const override
Definition aria.h:69
size_t parallelism() const override
Definition aria.cpp:534
bool has_keying_material() const override
Definition aria.cpp:482
void clear() override
Definition aria.cpp:572
size_t parallelism() const override
Definition aria.cpp:542
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:106
bool has_keying_material() const override
Definition aria.cpp:486
std::string provider() const override
Definition aria.cpp:546
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:406
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:460
std::string name() const override
Definition aria.h:104
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:68