CCF
Loading...
Searching...
No Matches
members.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
5#include "ccf/crypto/pem.h"
7#include "ccf/entity_id.h"
9#include "ccf/service/map.h"
11
12#include <vector>
13
14namespace ccf
15{
16 enum class MemberStatus
17 {
18 ACCEPTED = 0,
19 ACTIVE = 1,
20 };
23 {{MemberStatus::ACCEPTED, "Accepted"}, {MemberStatus::ACTIVE, "Active"}});
24}
25
26namespace ccf
27{
28 // Current limitations of secret sharing library (sss).
29 static constexpr size_t max_active_recovery_members = 255;
30
31 struct NewMember
32 {
34
35 // If encryption public key is set, the member is a recovery member
36 std::optional<ccf::crypto::Pem> encryption_pub_key = std::nullopt;
37 nlohmann::json member_data = nullptr;
38
40
42 const ccf::crypto::Pem& cert_,
43 const std::optional<ccf::crypto::Pem>& encryption_pub_key_ = std::nullopt,
44 const nlohmann::json& member_data_ = nullptr) :
45 cert(cert_),
46 encryption_pub_key(encryption_pub_key_),
47 member_data(member_data_)
48 {}
49
50 bool operator==(const NewMember& rhs) const
51 {
52 return cert == rhs.cert && encryption_pub_key == rhs.encryption_pub_key &&
54 }
55 };
57 DECLARE_JSON_REQUIRED_FIELDS(NewMember, cert)
58 DECLARE_JSON_OPTIONAL_FIELDS(NewMember, encryption_pub_key, member_data)
59
61 {
66 nlohmann::json member_data = nullptr;
67
68 bool operator==(const MemberDetails& rhs) const
69 {
70 return status == rhs.status && member_data == rhs.member_data;
71 }
72 };
74 DECLARE_JSON_REQUIRED_FIELDS(MemberDetails, status)
75 DECLARE_JSON_OPTIONAL_FIELDS(MemberDetails, member_data)
76
78
79 using MemberCerts = ccf::kv::RawCopySerialisedMap<MemberId, ccf::crypto::Pem>;
81 ccf::kv::RawCopySerialisedMap<MemberId, ccf::crypto::Pem>;
82
83 namespace Tables
84 {
85 static constexpr auto MEMBER_INFO = "public:ccf.gov.members.info";
86 static constexpr auto MEMBER_CERTS = "public:ccf.gov.members.certs";
87 static constexpr auto MEMBER_ENCRYPTION_PUBLIC_KEYS =
88 "public:ccf.gov.members.encryption_public_keys";
89 }
90
95 {
97 std::string state_digest;
98
100
102 state_digest(root.hex_str())
103 {}
104 };
105 DECLARE_JSON_TYPE(StateDigest)
106 DECLARE_JSON_REQUIRED_FIELDS(StateDigest, state_digest)
107
108 struct MemberAck : public StateDigest
109 {
111 std::optional<SignedReq> signed_req = std::nullopt;
112
114 std::optional<std::vector<uint8_t>> cose_sign1_req = std::nullopt;
115
117
119
121 const ccf::crypto::Sha256Hash& root, const SignedReq& signed_req_) :
122 StateDigest(root),
123 signed_req(signed_req_)
124 {}
125
127 const ccf::crypto::Sha256Hash& root,
128 const std::vector<uint8_t>& cose_sign1_req_) :
129 StateDigest(root),
130 cose_sign1_req(cose_sign1_req_)
131 {}
132 };
134#pragma clang diagnostic push
135#pragma clang diagnostic ignored "-Wunused-parameter"
136#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
138#pragma clang diagnostic pop
139 DECLARE_JSON_OPTIONAL_FIELDS(MemberAck, signed_req, cose_sign1_req)
141 namespace Tables
142 {
143 static constexpr auto MEMBER_ACKS = "public:ccf.gov.members.acks";
144 }
145}
Definition pem.h:18
Definition sha256_hash.h:16
Definition map.h:30
#define DECLARE_JSON_TYPE_WITH_BASE_AND_OPTIONAL_FIELDS(TYPE, BASE)
Definition json.h:700
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:712
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:661
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:688
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:784
#define DECLARE_JSON_ENUM(TYPE,...)
Definition json.h:835
TypedMap< K, V, ccf::kv::serialisers::BlitSerialiser< K >, ccf::kv::serialisers::BlitSerialiser< V > > RawCopySerialisedMap
Definition map.h:105
Definition app_interface.h:15
ccf::kv::RawCopySerialisedMap< MemberId, ccf::crypto::Pem > MemberCerts
Definition members.h:79
ServiceMap< MemberId, MemberDetails > MemberInfo
Definition members.h:77
ServiceMap< MemberId, MemberAck > MemberAcks
Definition members.h:140
ccf::kv::RawCopySerialisedMap< MemberId, ccf::crypto::Pem > MemberPublicEncryptionKeys
Definition members.h:81
MemberStatus
Definition members.h:17
Definition members.h:109
MemberAck(const ccf::crypto::Sha256Hash &root, const std::vector< uint8_t > &cose_sign1_req_)
Definition members.h:126
MemberAck(const ccf::crypto::Sha256Hash &root, const SignedReq &signed_req_)
Definition members.h:120
MemberAck(const ccf::crypto::Sha256Hash &root)
Definition members.h:118
MemberAck()
Definition members.h:116
Definition members.h:61
nlohmann::json member_data
Definition members.h:66
MemberStatus status
Status of the member in the consortium.
Definition members.h:63
bool operator==(const MemberDetails &rhs) const
Definition members.h:68
Definition members.h:32
NewMember(const ccf::crypto::Pem &cert_, const std::optional< ccf::crypto::Pem > &encryption_pub_key_=std::nullopt, const nlohmann::json &member_data_=nullptr)
Definition members.h:41
std::optional< ccf::crypto::Pem > encryption_pub_key
Definition members.h:36
NewMember()
Definition members.h:39
ccf::crypto::Pem cert
Definition members.h:33
nlohmann::json member_data
Definition members.h:37
bool operator==(const NewMember &rhs) const
Definition members.h:50
Definition signed_req.h:13
Definition members.h:95
StateDigest(const ccf::crypto::Sha256Hash &root)
Definition members.h:101
std::string state_digest
Next state digest the member is expected to sign.
Definition members.h:97
StateDigest()
Definition members.h:99