summaryrefslogtreecommitdiff
path: root/Libraries/LibCrypto/Cipher/Cipher.h
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibCrypto/Cipher/Cipher.h')
-rw-r--r--Libraries/LibCrypto/Cipher/Cipher.h151
1 files changed, 76 insertions, 75 deletions
diff --git a/Libraries/LibCrypto/Cipher/Cipher.h b/Libraries/LibCrypto/Cipher/Cipher.h
index b2e56adace..8ef496d589 100644
--- a/Libraries/LibCrypto/Cipher/Cipher.h
+++ b/Libraries/LibCrypto/Cipher/Cipher.h
@@ -28,109 +28,110 @@
#include <AK/ByteBuffer.h>
#include <AK/Optional.h>
-#include <AK/RefPtr.h>
#include <AK/Types.h>
namespace Crypto {
+namespace Cipher {
-enum class Intent {
- Encryption,
- Decryption,
-};
+ enum class Intent {
+ Encryption,
+ Decryption,
+ };
-enum class PaddingMode {
- CMS, // RFC 1423
- Null,
- // FIXME: We do not implement these yet
- Bit,
- Random,
- Space,
- ZeroLength,
-};
+ enum class PaddingMode {
+ CMS, // RFC 1423
+ Null,
+ // FIXME: We do not implement these yet
+ Bit,
+ Random,
+ Space,
+ ZeroLength,
+ };
-template <typename B, typename T>
-class Cipher;
+ template <typename B, typename T>
+ class Cipher;
-struct CipherBlock {
-public:
- explicit CipherBlock(PaddingMode mode)
- : m_padding_mode(mode)
- {
- }
+ struct CipherBlock {
+ public:
+ explicit CipherBlock(PaddingMode mode)
+ : m_padding_mode(mode)
+ {
+ }
- static size_t block_size() { ASSERT_NOT_REACHED(); }
+ static size_t block_size() { ASSERT_NOT_REACHED(); }
- virtual ByteBuffer get() const = 0;
- virtual const ByteBuffer& data() const = 0;
+ virtual ByteBuffer get() const = 0;
+ virtual const ByteBuffer& data() const = 0;
- virtual void overwrite(const ByteBuffer&) = 0;
- virtual void overwrite(const u8*, size_t) = 0;
+ virtual void overwrite(const ByteBuffer&) = 0;
+ virtual void overwrite(const u8*, size_t) = 0;
- virtual void apply_initialization_vector(const u8* ivec) = 0;
+ virtual void apply_initialization_vector(const u8* ivec) = 0;
- PaddingMode padding_mode() const { return m_padding_mode; }
+ PaddingMode padding_mode() const { return m_padding_mode; }
- template <typename T>
- void put(size_t offset, T value)
- {
- ASSERT(offset + sizeof(T) <= data().size());
- auto* ptr = data().data() + offset;
- auto index { 0 };
+ template <typename T>
+ void put(size_t offset, T value)
+ {
+ ASSERT(offset + sizeof(T) <= data().size());
+ auto* ptr = data().data() + offset;
+ auto index { 0 };
- ASSERT(sizeof(T) <= 4);
+ ASSERT(sizeof(T) <= 4);
- if constexpr (sizeof(T) > 3)
- ptr[index++] = (u8)(value >> 24);
+ if constexpr (sizeof(T) > 3)
+ ptr[index++] = (u8)(value >> 24);
- if constexpr (sizeof(T) > 2)
- ptr[index++] = (u8)(value >> 16);
+ if constexpr (sizeof(T) > 2)
+ ptr[index++] = (u8)(value >> 16);
- if constexpr (sizeof(T) > 1)
- ptr[index++] = (u8)(value >> 8);
+ if constexpr (sizeof(T) > 1)
+ ptr[index++] = (u8)(value >> 8);
- ptr[index] = (u8)value;
- }
+ ptr[index] = (u8)value;
+ }
-private:
- virtual ByteBuffer& data() = 0;
- PaddingMode m_padding_mode;
-};
+ private:
+ virtual ByteBuffer& data() = 0;
+ PaddingMode m_padding_mode;
+ };
-struct CipherKey {
- virtual ByteBuffer data() const = 0;
- static bool is_valid_key_size(size_t) { return false; };
+ struct CipherKey {
+ virtual ByteBuffer data() const = 0;
+ static bool is_valid_key_size(size_t) { return false; };
- virtual ~CipherKey() { }
+ virtual ~CipherKey() { }
-protected:
- virtual void expand_encrypt_key(const ByteBuffer& user_key, size_t bits) = 0;
- virtual void expand_decrypt_key(const ByteBuffer& user_key, size_t bits) = 0;
- size_t bits { 0 };
-};
+ protected:
+ virtual void expand_encrypt_key(const ByteBuffer& user_key, size_t bits) = 0;
+ virtual void expand_decrypt_key(const ByteBuffer& user_key, size_t bits) = 0;
+ size_t bits { 0 };
+ };
-template <typename KeyT = CipherKey, typename BlockT = CipherBlock>
-class Cipher {
-public:
- using KeyType = KeyT;
- using BlockType = BlockT;
+ template <typename KeyT = CipherKey, typename BlockT = CipherBlock>
+ class Cipher {
+ public:
+ using KeyType = KeyT;
+ using BlockType = BlockT;
- explicit Cipher<KeyT, BlockT>(PaddingMode mode)
- : m_padding_mode(mode)
- {
- }
+ explicit Cipher<KeyT, BlockT>(PaddingMode mode)
+ : m_padding_mode(mode)
+ {
+ }
- virtual const KeyType& key() const = 0;
- virtual KeyType& key() = 0;
+ virtual const KeyType& key() const = 0;
+ virtual KeyType& key() = 0;
- static size_t block_size() { return BlockType::block_size(); }
+ static size_t block_size() { return BlockType::block_size(); }
- PaddingMode padding_mode() const { return m_padding_mode; }
+ PaddingMode padding_mode() const { return m_padding_mode; }
- virtual void encrypt_block(const BlockType& in, BlockType& out) = 0;
- virtual void decrypt_block(const BlockType& in, BlockType& out) = 0;
+ virtual void encrypt_block(const BlockType& in, BlockType& out) = 0;
+ virtual void decrypt_block(const BlockType& in, BlockType& out) = 0;
-private:
- PaddingMode m_padding_mode { PaddingMode::CMS };
-};
+ private:
+ PaddingMode m_padding_mode;
+ };
}
}
+