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
38 if (!node->cert.has_value())
39 {
41 "No certificate recorded in nodes table for {} (1.x ledger)",
42 node_id);
43 return false;
44 }
45
46 node_cert = node->cert.value();
47 }
48 else
49 {
50 node_cert = node_endorsed_cert.value();
51 }
52
54 return from_cert->verify_hash(
55 expected_root,
56 expected_root_size,
57 expected_sig,
58 expected_sig_size,
60 }
61
62 static bool verify_node_signature(
64 const NodeId& node_id,
65 const std::vector<uint8_t>& expected_sig,
66 const ccf::crypto::Sha256Hash& expected_root)
67 {
68 return verify_node_signature(
69 tx,
70 node_id,
71 expected_sig.data(),
72 expected_sig.size(),
73 expected_root.h.data(),
74 expected_root.h.size());
75 }
76}
Definition pem.h:18
Definition sha256_hash.h:16
Representation h
Definition sha256_hash.h:20
Definition tx.h:159
#define LOG_FAIL_FMT
Definition internal_logger.h:16
std::shared_ptr< Verifier > VerifierPtr
Definition verifier.h:167
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:164