CCF
Loading...
Searching...
No Matches
secret_broadcast.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#include "ledger_secrets.h"
9
10#include <optional>
11
12namespace ccf
13{
15 {
16 public:
18
19 static void broadcast_some(
20 std::map<NodeId, NodeInfo>&& nodes,
21 SecretsWriteHandle* secrets,
22 const LedgerSecretsMap& some_ledger_secrets)
23 {
24 LedgerSecretsForNodes secrets_for_nodes;
25
26 for (auto [nid, ni] : nodes)
27 {
28 std::vector<EncryptedLedgerSecret> ledger_secrets_for_node;
29
30 for (auto s : some_ledger_secrets)
31 {
32 ledger_secrets_for_node.push_back(
33 {s.first,
35 ccf::crypto::make_rsa_public_key(ni.encryption_pub_key),
36 s.second->raw_key),
37 s.second->previous_secret_stored_version});
38 }
39
40 secrets_for_nodes.emplace(nid, std::move(ledger_secrets_for_node));
41 }
42
43 secrets->put(secrets_for_nodes);
44 }
45
46 static void broadcast_new(
47 std::map<NodeId, NodeInfo>&& nodes,
48 SecretsWriteHandle* secrets,
49 LedgerSecretPtr&& new_ledger_secret)
50 {
51 LedgerSecretsForNodes secrets_for_nodes;
52
53 for (auto [nid, ni] : nodes)
54 {
55 std::vector<EncryptedLedgerSecret> ledger_secrets_for_node;
56
57 ledger_secrets_for_node.push_back(
58 {std::nullopt,
60 ccf::crypto::make_rsa_public_key(ni.encryption_pub_key),
61 new_ledger_secret->raw_key),
62 new_ledger_secret->previous_secret_stored_version});
63
64 secrets_for_nodes.emplace(nid, std::move(ledger_secrets_for_node));
65 }
66
67 secrets->put(secrets_for_nodes);
68 }
69
70 static std::vector<uint8_t> decrypt(
71 const ccf::crypto::RSAKeyPairPtr& encryption_key,
72 const std::vector<uint8_t>& cipher)
73 {
74 return ccf::crypto::ckm_rsa_pkcs_oaep_unwrap(encryption_key, cipher);
75 }
76 };
77}
Definition secret_broadcast.h:15
static void broadcast_some(std::map< NodeId, NodeInfo > &&nodes, SecretsWriteHandle *secrets, const LedgerSecretsMap &some_ledger_secrets)
Definition secret_broadcast.h:19
static void broadcast_new(std::map< NodeId, NodeInfo > &&nodes, SecretsWriteHandle *secrets, LedgerSecretPtr &&new_ledger_secret)
Definition secret_broadcast.h:46
static std::vector< uint8_t > decrypt(const ccf::crypto::RSAKeyPairPtr &encryption_key, const std::vector< uint8_t > &cipher)
Definition secret_broadcast.h:70
ccf::kv::WriteableValueHandle< V, VSerialiser, Unit > WriteOnlyHandle
Definition value.h:35
Definition value_handle.h:91
void put(const V &value)
Definition value_handle.h:106
std::vector< uint8_t > ckm_rsa_pkcs_oaep_unwrap(RSAKeyPairPtr wrapping_key, const std::vector< uint8_t > &wrapped, const std::optional< std::vector< uint8_t > > &label={})
Definition key_wrap.cpp:39
std::shared_ptr< RSAKeyPair > RSAKeyPairPtr
Definition rsa_key_pair.h:90
RSAPublicKeyPtr make_rsa_public_key(const Pem &pem)
Definition rsa_key_pair.cpp:13
std::vector< uint8_t > ckm_rsa_pkcs_oaep_wrap(RSAPublicKeyPtr wrapping_key, const std::vector< uint8_t > &unwrapped, const std::optional< std::vector< uint8_t > > &label={})
Definition key_wrap.cpp:22
Definition app_interface.h:14
std::map< NodeId, EncryptedLedgerSecrets > LedgerSecretsForNodes
Definition secrets.h:32
std::map< ccf::kv::Version, LedgerSecretPtr > LedgerSecretsMap
Definition ledger_secrets.h:20
std::shared_ptr< LedgerSecret > LedgerSecretPtr
Definition ledger_secret.h:75