Botan 3.11.1
Crypto and TLS for C&
camellia.h
Go to the documentation of this file.
1/*
2* Camellia
3* (C) 2012 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#ifndef BOTAN_CAMELLIA_H_
9#define BOTAN_CAMELLIA_H_
10
11#include <botan/block_cipher.h>
12#include <botan/secmem.h>
13
14namespace Botan {
15
16/**
17* Camellia-128
18*/
19class Camellia_128 final : public Block_Cipher_Fixed_Params<16, 16> {
20 public:
21 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
22 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
23
24 void clear() override;
25
26 std::string name() const override { return "Camellia-128"; }
27
28 std::string provider() const override;
29 size_t parallelism() const override;
30
31 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<Camellia_128>(); }
32
33 bool has_keying_material() const override;
34
35 private:
36 void key_schedule(std::span<const uint8_t> key) override;
37
38#if defined(BOTAN_HAS_CAMELLIA_AVX2_GFNI)
39 static void avx2_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
40 static void avx2_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
41#endif
42
43#if defined(BOTAN_HAS_CAMELLIA_AVX512_GFNI)
44 static void avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
45 static void avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
46#endif
47
48#if defined(BOTAN_HAS_CAMELLIA_HWAES)
49 static void hwaes_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
50 static void hwaes_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
51#endif
52
54};
55
56/**
57* Camellia-192
58*/
59class Camellia_192 final : public Block_Cipher_Fixed_Params<16, 24> {
60 public:
61 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
62 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
63
64 void clear() override;
65
66 std::string name() const override { return "Camellia-192"; }
67
68 std::string provider() const override;
69 size_t parallelism() const override;
70
71 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<Camellia_192>(); }
72
73 bool has_keying_material() const override;
74
75 private:
76 void key_schedule(std::span<const uint8_t> key) override;
77
78#if defined(BOTAN_HAS_CAMELLIA_AVX2_GFNI)
79 static void avx2_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
80 static void avx2_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
81#endif
82
83#if defined(BOTAN_HAS_CAMELLIA_AVX512_GFNI)
84 static void avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
85 static void avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
86#endif
87
88#if defined(BOTAN_HAS_CAMELLIA_HWAES)
89 static void hwaes_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
90 static void hwaes_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
91#endif
92
94};
95
96/**
97* Camellia-256
98*/
99class Camellia_256 final : public Block_Cipher_Fixed_Params<16, 32> {
100 public:
101 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
102 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
103
104 void clear() override;
105
106 std::string name() const override { return "Camellia-256"; }
107
108 std::string provider() const override;
109 size_t parallelism() const override;
110
111 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<Camellia_256>(); }
112
113 bool has_keying_material() const override;
114
115 private:
116 void key_schedule(std::span<const uint8_t> key) override;
117
118#if defined(BOTAN_HAS_CAMELLIA_AVX2_GFNI)
119 static void avx2_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
120 static void avx2_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
121#endif
122
123#if defined(BOTAN_HAS_CAMELLIA_AVX512_GFNI)
124 static void avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
125 static void avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
126#endif
127
128#if defined(BOTAN_HAS_CAMELLIA_HWAES)
129 static void hwaes_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
130 static void hwaes_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
131#endif
132
134};
135
136} // namespace Botan
137
138#endif
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:472
void clear() override
Definition camellia.cpp:568
bool has_keying_material() const override
Definition camellia.cpp:544
std::unique_ptr< BlockCipher > new_object() const override
Definition camellia.h:31
size_t parallelism() const override
Definition camellia.cpp:592
std::string name() const override
Definition camellia.h:26
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:400
std::string provider() const override
Definition camellia.cpp:580
std::unique_ptr< BlockCipher > new_object() const override
Definition camellia.h:71
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:424
bool has_keying_material() const override
Definition camellia.cpp:548
std::string provider() const override
Definition camellia.cpp:584
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:496
size_t parallelism() const override
Definition camellia.cpp:596
void clear() override
Definition camellia.cpp:572
std::string name() const override
Definition camellia.h:66
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:520
bool has_keying_material() const override
Definition camellia.cpp:552
std::unique_ptr< BlockCipher > new_object() const override
Definition camellia.h:111
std::string provider() const override
Definition camellia.cpp:588
size_t parallelism() const override
Definition camellia.cpp:600
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:448
void clear() override
Definition camellia.cpp:576
std::string name() const override
Definition camellia.h:106
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:68