Botan 3.11.0
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 // Encryption and Decryption round keys.
51 secure_vector<uint32_t> m_ERK, m_DRK;
52};
53
54/**
55* ARIA-192
56*/
57class ARIA_192 final : public Block_Cipher_Fixed_Params<16, 24> {
58 public:
59 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
60 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
61
62 void clear() override;
63
64 std::string name() const override { return "ARIA-192"; }
65
66 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_192>(); }
67
68 std::string provider() const override;
69 size_t parallelism() const override;
70 bool has_keying_material() const override;
71
72 private:
73 void key_schedule(std::span<const uint8_t> key) override;
74
75#if defined(BOTAN_HAS_ARIA_AVX512_GFNI)
76 void aria_avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
77 void aria_avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
78#endif
79
80 // Encryption and Decryption round keys.
81 secure_vector<uint32_t> m_ERK, m_DRK;
82};
83
84/**
85* ARIA-256
86*/
87class ARIA_256 final : public Block_Cipher_Fixed_Params<16, 32> {
88 public:
89 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
90 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
91
92 void clear() override;
93
94 std::string name() const override { return "ARIA-256"; }
95
96 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<ARIA_256>(); }
97
98 std::string provider() const override;
99 size_t parallelism() const override;
100 bool has_keying_material() const override;
101
102 private:
103 void key_schedule(std::span<const uint8_t> key) override;
104
105#if defined(BOTAN_HAS_ARIA_AVX512_GFNI)
106 void aria_avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
107 void aria_avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks) const;
108#endif
109
110 // Encryption and Decryption round keys.
111 secure_vector<uint32_t> m_ERK, m_DRK;
112};
113
114} // namespace Botan
115
116#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:406
std::string name() const override
Definition aria.h:34
std::string provider() const override
Definition aria.cpp:480
size_t parallelism() const override
Definition aria.cpp:476
void clear() override
Definition aria.cpp:512
bool has_keying_material() const override
Definition aria.cpp:442
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:382
void clear() override
Definition aria.cpp:517
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:66
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:418
std::string provider() const override
Definition aria.cpp:488
std::string name() const override
Definition aria.h:64
size_t parallelism() const override
Definition aria.cpp:484
bool has_keying_material() const override
Definition aria.cpp:446
void clear() override
Definition aria.cpp:522
size_t parallelism() const override
Definition aria.cpp:492
std::unique_ptr< BlockCipher > new_object() const override
Definition aria.h:96
bool has_keying_material() const override
Definition aria.cpp:450
std::string provider() const override
Definition aria.cpp:496
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:394
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition aria.cpp:430
std::string name() const override
Definition aria.h:94
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:68