CCF
Loading...
Searching...
No Matches
node_signature_verify.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 "ccf/tx.h"
8
9namespace ccf
10{
11 static bool verify_node_signature(
13 const NodeId& node_id,
14 const uint8_t* expected_sig,
15 size_t expected_sig_size,
16 const uint8_t* expected_root,
17 size_t expected_root_size)
18 {
19 ccf::crypto::Pem node_cert;
20 auto node_endorsed_certs = tx.template ro<ccf::NodeEndorsedCertificates>(
21 ccf::Tables::NODE_ENDORSED_CERTIFICATES);
22 auto node_endorsed_cert = node_endorsed_certs->get(node_id);
23 if (!node_endorsed_cert.has_value())
24 {
25 // No endorsed certificate for node. Its (self-signed) certificate
26 // must be stored in the nodes table (1.x ledger only)
27
28 auto nodes = tx.template ro<ccf::Nodes>(ccf::Tables::NODES);
29 auto node = nodes->get(node_id);
30 if (!node.has_value())
31 {
33 "Signature cannot be verified: no certificate found for node {}",
34 node_id);
35 return false;
36 }
37
39 node->cert.has_value(),
40 "No certificate recorded in nodes table for {} (1.x ledger)",
41 node_id);
42
43 node_cert = node->cert.value();
44 }
45 else
46 {
47 node_cert = node_endorsed_cert.value();
48 }
49
51 return from_cert->verify_hash(
52 expected_root,
53 expected_root_size,
54 expected_sig,
55 expected_sig_size,
57 }
58
59 static bool verify_node_signature(
61 const NodeId& node_id,
62 const std::vector<uint8_t>& expected_sig,
63 const ccf::crypto::Sha256Hash& expected_root)
64 {
65 return verify_node_signature(
66 tx,
67 node_id,
68 expected_sig.data(),
69 expected_sig.size(),
70 expected_root.h.data(),
71 expected_root.h.size());
72 }
73}
#define CCF_ASSERT_FMT(expr,...)
Definition ccf_assert.h:10
Definition pem.h:18
Definition sha256_hash.h:16
Representation h
Definition sha256_hash.h:20
Definition tx.h:160
#define LOG_FAIL_FMT
Definition logger.h:363
std::shared_ptr< Verifier > VerifierPtr
Definition verifier.h:228
VerifierPtr make_verifier(const std::vector< uint8_t > &cert)
Definition verifier.cpp:18
Definition app_interface.h:14
EntityId< NodeIdFormatter > NodeId
Definition entity_id.h:155