StormByte C++ Library: Crypto module 0.0.9999
StormByte-Crypto is a StormByte library module for handling cryptographic operations
Loading...
Searching...
No Matches
generic.hxx
1#pragma once
2
3#include <StormByte/buffer/consumer.hxx>
4#include <StormByte/clonable.hxx>
5#include <StormByte/crypto/typedefs.hxx>
6#include <StormByte/crypto/visibility.h>
7
12namespace StormByte::Crypto::Crypter {
17 enum class Type {
18 AES_GCM,
19 AES,
20 Camellia,
21 ChaChaPoly,
22 ECC,
23 Serpent,
24 RSA,
25 TwoFish,
26 };
27
32 class STORMBYTE_CRYPTO_PUBLIC Generic: public StormByte::Clonable<Generic> {
33 public:
38 Generic(const Generic& other) = default;
39
44 Generic(Generic&& other) noexcept = default;
45
49 virtual ~Generic() noexcept = default;
50
56 Generic& operator=(const Generic& other) = default;
57
63 Generic& operator=(Generic&& other) noexcept = default;
64
71 inline bool Encrypt(std::span<const std::byte> input, Buffer::WriteOnly& output) const noexcept {
72 return DoEncrypt(input, output);
73 }
74
81 inline bool Encrypt(const Buffer::ReadOnly& input, Buffer::WriteOnly& output) const noexcept {
82 return DoEncrypt(const_cast<Buffer::ReadOnly&>(input), output, ReadMode::Copy);
83 }
84
91 inline bool Encrypt(Buffer::ReadOnly& input, Buffer::WriteOnly& output) const noexcept {
92 return DoEncrypt(input, output, ReadMode::Move);
93 }
94
101 inline Buffer::Consumer Encrypt(Buffer::Consumer consumer, ReadMode mode = ReadMode::Move) const noexcept {
102 return DoEncrypt(consumer, mode);
103 }
104
111 inline bool Decrypt(std::span<const std::byte> input, Buffer::WriteOnly& output) const noexcept {
112 return DoDecrypt(input, output);
113 }
114
121 inline bool Decrypt(const Buffer::ReadOnly& input, Buffer::WriteOnly& output) const noexcept {
122 return DoDecrypt(const_cast<Buffer::ReadOnly&>(input), output, ReadMode::Copy);
123 }
124
131 inline bool Decrypt(Buffer::ReadOnly& input, Buffer::WriteOnly& output) const noexcept {
132 return DoDecrypt(input, output, ReadMode::Move);
133 }
134
141 inline Buffer::Consumer Decrypt(Buffer::Consumer consumer, ReadMode mode = ReadMode::Move) const noexcept {
142 return DoDecrypt(consumer, mode);
143 }
144
149 inline enum Type Type() const noexcept {
150 return m_type;
151 }
152
153 protected:
154 enum Type m_type;
155
160 inline Generic(enum Type type):
161 m_type(type) {}
162
163 private:
171 bool DoDecrypt(Buffer::ReadOnly& input, Buffer::WriteOnly& output, ReadMode mode) const noexcept;
172
180 virtual bool DoEncrypt(std::span<const std::byte> input, Buffer::WriteOnly& output) const noexcept = 0;
181
188 virtual Buffer::Consumer DoEncrypt(Buffer::Consumer consumer, ReadMode mode) const noexcept = 0;
189
197 bool DoEncrypt(Buffer::ReadOnly& input, Buffer::WriteOnly& output, ReadMode mode) const noexcept;
198
206 virtual bool DoDecrypt(std::span<const std::byte> input, Buffer::WriteOnly& output) const noexcept = 0;
207
214 virtual Buffer::Consumer DoDecrypt(Buffer::Consumer consumer, ReadMode mode) const noexcept = 0;
215 };
216}
A generic crypter class.
Definition generic.hxx:32
bool Decrypt(std::span< const std::byte > input, Buffer::WriteOnly &output) const noexcept
Decrypt data from input buffer to output buffer.
Definition generic.hxx:111
Buffer::Consumer Encrypt(Buffer::Consumer consumer, ReadMode mode=ReadMode::Move) const noexcept
Encrypt data from a Consumer buffer.
Definition generic.hxx:101
bool Encrypt(const Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Encrypt data from input buffer to output buffer.
Definition generic.hxx:81
bool Decrypt(Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Decrypt data from input buffer to output buffer, moving the input data.
Definition generic.hxx:131
bool Decrypt(const Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Decrypt data from input buffer to output buffer.
Definition generic.hxx:121
bool Encrypt(Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Encrypt data from input buffer to output buffer, moving the input data.
Definition generic.hxx:91
Generic(const Generic &other)=default
Copy constructor.
enum Type m_type
The type of crypter.
Definition generic.hxx:154
Generic(Generic &&other) noexcept=default
Move constructor.
enum Type Type() const noexcept
Gets the type of crypter.
Definition generic.hxx:149
Generic(enum Type type)
Constructor.
Definition generic.hxx:160
Buffer::Consumer Decrypt(Buffer::Consumer consumer, ReadMode mode=ReadMode::Move) const noexcept
Decrypt data from a Consumer buffer.
Definition generic.hxx:141
virtual ~Generic() noexcept=default
Virtual destructor.