Botan 3.11.0
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
49};
50
51/**
52* Camellia-192
53*/
54class Camellia_192 final : public Block_Cipher_Fixed_Params<16, 24> {
55 public:
56 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
57 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
58
59 void clear() override;
60
61 std::string name() const override { return "Camellia-192"; }
62
63 std::string provider() const override;
64 size_t parallelism() const override;
65
66 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<Camellia_192>(); }
67
68 bool has_keying_material() const override;
69
70 private:
71 void key_schedule(std::span<const uint8_t> key) override;
72
73#if defined(BOTAN_HAS_CAMELLIA_AVX2_GFNI)
74 static void avx2_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
75 static void avx2_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
76#endif
77
78#if defined(BOTAN_HAS_CAMELLIA_AVX512_GFNI)
79 static void avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
80 static void avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
81#endif
82
84};
85
86/**
87* Camellia-256
88*/
89class Camellia_256 final : public Block_Cipher_Fixed_Params<16, 32> {
90 public:
91 void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
92 void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
93
94 void clear() override;
95
96 std::string name() const override { return "Camellia-256"; }
97
98 std::string provider() const override;
99 size_t parallelism() const override;
100
101 std::unique_ptr<BlockCipher> new_object() const override { return std::make_unique<Camellia_256>(); }
102
103 bool has_keying_material() const override;
104
105 private:
106 void key_schedule(std::span<const uint8_t> key) override;
107
108#if defined(BOTAN_HAS_CAMELLIA_AVX2_GFNI)
109 static void avx2_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
110 static void avx2_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
111#endif
112
113#if defined(BOTAN_HAS_CAMELLIA_AVX512_GFNI)
114 static void avx512_gfni_encrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
115 static void avx512_gfni_decrypt(const uint8_t in[], uint8_t out[], size_t blocks, std::span<const uint64_t> SK);
116#endif
117
119};
120
121} // namespace Botan
122
123#endif
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:442
void clear() override
Definition camellia.cpp:520
bool has_keying_material() const override
Definition camellia.cpp:496
std::unique_ptr< BlockCipher > new_object() const override
Definition camellia.h:31
size_t parallelism() const override
Definition camellia.cpp:544
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:388
std::string provider() const override
Definition camellia.cpp:532
std::unique_ptr< BlockCipher > new_object() const override
Definition camellia.h:66
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:406
bool has_keying_material() const override
Definition camellia.cpp:500
std::string provider() const override
Definition camellia.cpp:536
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:460
size_t parallelism() const override
Definition camellia.cpp:548
void clear() override
Definition camellia.cpp:524
std::string name() const override
Definition camellia.h:61
void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:478
bool has_keying_material() const override
Definition camellia.cpp:504
std::unique_ptr< BlockCipher > new_object() const override
Definition camellia.h:101
std::string provider() const override
Definition camellia.cpp:540
size_t parallelism() const override
Definition camellia.cpp:552
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override
Definition camellia.cpp:424
void clear() override
Definition camellia.cpp:528
std::string name() const override
Definition camellia.h:96
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:68