CCF
Loading...
Searching...
No Matches
symmetric_key.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
7
8#include <openssl/crypto.h>
9
10namespace ccf::crypto
11{
13 {
14 private:
15 const std::vector<uint8_t> key;
16 const EVP_CIPHER* evp_cipher;
17 const EVP_CIPHER* evp_cipher_wrap_pad;
18
19 public:
20 KeyAesGcm_OpenSSL(std::span<const uint8_t> rawKey);
21 KeyAesGcm_OpenSSL(const KeyAesGcm_OpenSSL& that) = delete;
24 {
25 OPENSSL_cleanse(const_cast<uint8_t*>(key.data()), key.size());
26 }
27
28 virtual size_t key_size() const override;
29
30 virtual void encrypt(
31 std::span<const uint8_t> iv,
32 std::span<const uint8_t> plain,
33 std::span<const uint8_t> aad,
34 std::vector<uint8_t>& cipher,
35 uint8_t tag[GCM_SIZE_TAG]) const override;
36
37 virtual bool decrypt(
38 std::span<const uint8_t> iv,
39 const uint8_t tag[GCM_SIZE_TAG],
40 std::span<const uint8_t> cipher,
41 std::span<const uint8_t> aad,
42 std::vector<uint8_t>& plain) const override;
43
44 // @brief RFC 5649 AES key wrap with padding (CKM_AES_KEY_WRAP_PAD)
45 // @param plain Plaintext key to wrap
46 std::vector<uint8_t> ckm_aes_key_wrap_pad(
47 std::span<const uint8_t> plain) const;
48
49 // @brief RFC 5649 AES key unwrap (with padding, CKM_AES_KEY_WRAP_PAD)
50 // @param cipher Wrapped key to unwrap
51 std::vector<uint8_t> ckm_aes_key_unwrap_pad(
52 std::span<const uint8_t> cipher) const;
53 };
54}
Definition symmetric_key.h:13
KeyAesGcm_OpenSSL(KeyAesGcm_OpenSSL &&that)
std::vector< uint8_t > ckm_aes_key_unwrap_pad(std::span< const uint8_t > cipher) const
Definition symmetric_key.cpp:184
virtual ~KeyAesGcm_OpenSSL()
Definition symmetric_key.h:23
KeyAesGcm_OpenSSL(const KeyAesGcm_OpenSSL &that)=delete
virtual size_t key_size() const override
Definition symmetric_key.cpp:50
virtual void encrypt(std::span< const uint8_t > iv, std::span< const uint8_t > plain, std::span< const uint8_t > aad, std::vector< uint8_t > &cipher, uint8_t tag[GCM_SIZE_TAG]) const override
Definition symmetric_key.cpp:55
virtual bool decrypt(std::span< const uint8_t > iv, const uint8_t tag[GCM_SIZE_TAG], std::span< const uint8_t > cipher, std::span< const uint8_t > aad, std::vector< uint8_t > &plain) const override
Definition symmetric_key.cpp:111
std::vector< uint8_t > ckm_aes_key_wrap_pad(std::span< const uint8_t > plain) const
Definition symmetric_key.cpp:167
Definition symmetric_key.h:70
Definition base64.h:10
constexpr size_t GCM_SIZE_TAG
Definition symmetric_key.h:14