12#include <openssl/crypto.h>
21 static constexpr uint8_t commit_secret_label_[] = {
22 'C',
'o',
'm',
'm',
'i',
't',
' ',
'S'};
23 static std::span<const uint8_t> commit_secret_label{
24 commit_secret_label_,
sizeof(commit_secret_label_)};
28 std::shared_ptr<ccf::crypto::KeyAesGcm>
key;
34 std::span<const uint8_t>
raw_key)
70 std::vector<uint8_t>&& raw_key_,
71 std::optional<ccf::kv::Version> previous_secret_stored_version_ =
74 key(
ccf::crypto::make_key_aes_gcm(
std::move(raw_key_))),
88 return std::make_shared<LedgerSecret>(
94 const std::vector<uint8_t>& encrypted_previous_secret_raw)
97 encrypted_ls.
deserialise(encrypted_previous_secret_raw);
98 std::vector<uint8_t> decrypted_ls_raw;
100 if (!ledger_secret->key->decrypt(
107 throw std::logic_error(
"Decryption of previous ledger secret failed");
110 return decrypted_ls_raw;
117 struct adl_serializer<
ccf::LedgerSecretPtr>
121 if (s.get() !=
nullptr)
140 s = std::make_shared<ccf::LedgerSecret>(ls);
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:736
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:712
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:811
HashBytes hmac(MDType type, const std::span< const uint8_t > &key, const std::span< const uint8_t > &data)
Definition hmac.cpp:43
std::vector< uint8_t > HashBytes
Definition hash_bytes.h:10
EntropyPtr get_entropy()
Definition entropy.cpp:10
constexpr size_t GCM_DEFAULT_KEY_SIZE
Definition symmetric_key.h:12
Definition app_interface.h:13
LedgerSecretPtr make_ledger_secret()
Definition ledger_secret.h:86
std::shared_ptr< LedgerSecret > LedgerSecretPtr
Definition ledger_secret.h:84
std::vector< uint8_t > decrypt_previous_ledger_secret_raw(const LedgerSecretPtr &ledger_secret, const std::vector< uint8_t > &encrypted_previous_secret_raw)
Definition ledger_secret.h:92
Definition json_schema.h:15
Definition ledger_secret.h:115
Definition ledger_secret.h:26
LedgerSecret(const LedgerSecret &other)
Definition ledger_secret.h:62
LedgerSecret(std::vector< uint8_t > &&raw_key_, std::optional< ccf::kv::Version > previous_secret_stored_version_=std::nullopt)
Definition ledger_secret.h:69
std::optional< ccf::kv::Version > previous_secret_stored_version
Definition ledger_secret.h:29
const ccf::crypto::HashBytes & get_commit_secret() const
Definition ledger_secret.h:40
std::shared_ptr< ccf::crypto::KeyAesGcm > key
Definition ledger_secret.h:28
LedgerSecret()
Definition ledger_secret.h:51
~LedgerSecret()
Definition ledger_secret.h:53
bool operator==(const LedgerSecret &other) const
Definition ledger_secret.h:45
std::vector< uint8_t > raw_key
Definition ledger_secret.h:27
ccf::crypto::HashBytes commit_secret
Definition ledger_secret.h:31
static ccf::crypto::HashBytes derive_commit_secret(std::span< const uint8_t > raw_key)
Definition ledger_secret.h:33
Definition symmetric_key.h:58
void deserialise(const std::vector< uint8_t > &serial)
Definition symmetric_key.cpp:91
StandardGcmHeader hdr
Definition symmetric_key.h:59
std::vector< uint8_t > cipher
Definition symmetric_key.h:60
static void to_json(json &j, const ccf::LedgerSecretPtr &s)
Definition ledger_secret.h:119
static void from_json(const json &j, ccf::LedgerSecretPtr &s)
Definition ledger_secret.h:131