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 : uint8_t
17 {
18 ACCEPTED = 0,
19 ACTIVE = 1,
20 };
23 {{MemberStatus::ACCEPTED, "Accepted"}, {MemberStatus::ACTIVE, "Active"}});
24
25 enum class MemberRecoveryRole : uint8_t
26 {
29
33 Owner
34 };
37 {{MemberRecoveryRole::NonParticipant, "NonParticipant"},
38 {MemberRecoveryRole::Participant, "Participant"},
39 {MemberRecoveryRole::Owner, "Owner"}});
40
41 struct NewMember
42 {
44
45 // If encryption public key is set, the member is a recovery member
46 std::optional<ccf::crypto::Pem> encryption_pub_key = std::nullopt;
47 nlohmann::json member_data;
48
49 std::optional<MemberRecoveryRole> recovery_role = std::nullopt;
50
51 NewMember() = default;
52
54 ccf::crypto::Pem cert_,
55 const std::optional<ccf::crypto::Pem>& encryption_pub_key_ = std::nullopt,
56 nlohmann::json member_data_ = {},
57 const std::optional<MemberRecoveryRole>& recovery_role_ = std::nullopt) :
58 cert(std::move(cert_)),
59 encryption_pub_key(encryption_pub_key_),
60 member_data(std::move(member_data_)),
61 recovery_role(recovery_role_)
62 {}
63
64 bool operator==(const NewMember& rhs) const
65 {
66 return cert == rhs.cert && encryption_pub_key == rhs.encryption_pub_key &&
68 }
69 };
71 DECLARE_JSON_REQUIRED_FIELDS(NewMember, cert)
73 NewMember, encryption_pub_key, member_data, recovery_role);
74
76 {
81 nlohmann::json member_data = nullptr;
82
84 std::optional<MemberRecoveryRole> recovery_role = std::nullopt;
85
86 bool operator==(const MemberDetails& rhs) const
87 {
88 return status == rhs.status && member_data == rhs.member_data &&
89 recovery_role == rhs.recovery_role;
90 }
91 };
93 DECLARE_JSON_REQUIRED_FIELDS(MemberDetails, status)
94 DECLARE_JSON_OPTIONAL_FIELDS(MemberDetails, member_data, recovery_role)
95
97
98 using MemberCerts = ccf::kv::RawCopySerialisedMap<MemberId, ccf::crypto::Pem>;
100 ccf::kv::RawCopySerialisedMap<MemberId, ccf::crypto::Pem>;
101
102 namespace Tables
103 {
104 static constexpr auto MEMBER_INFO = "public:ccf.gov.members.info";
105 static constexpr auto MEMBER_CERTS = "public:ccf.gov.members.certs";
106 static constexpr auto MEMBER_ENCRYPTION_PUBLIC_KEYS =
107 "public:ccf.gov.members.encryption_public_keys";
108 }
109
114 {
116 std::string state_digest;
117
118 StateDigest() = default;
119
121 state_digest(root.hex_str())
122 {}
123 };
124 DECLARE_JSON_TYPE(StateDigest)
125 DECLARE_JSON_REQUIRED_FIELDS(StateDigest, state_digest)
126
127 struct MemberAck : public StateDigest
128 {
130 std::optional<SignedReq> signed_req = std::nullopt;
131
133 std::optional<std::vector<uint8_t>> cose_sign1_req = std::nullopt;
134
135 MemberAck() = default;
136
138
140 const ccf::crypto::Sha256Hash& root, const SignedReq& signed_req_) :
141 StateDigest(root),
142 signed_req(signed_req_)
143 {}
144
146 const ccf::crypto::Sha256Hash& root,
147 const std::vector<uint8_t>& cose_sign1_req_) :
148 StateDigest(root),
149 cose_sign1_req(cose_sign1_req_)
150 {}
151 };
153#pragma clang diagnostic push
154#pragma clang diagnostic ignored "-Wunused-parameter"
155#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
157#pragma clang diagnostic pop
158 DECLARE_JSON_OPTIONAL_FIELDS(MemberAck, signed_req, cose_sign1_req)
160 namespace Tables
161 {
162 static constexpr auto MEMBER_ACKS = "public:ccf.gov.members.acks";
163 }
164}
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:706
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:718
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:667
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:694
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:790
#define DECLARE_JSON_ENUM(TYPE,...)
Definition json.h:841
Definition app_interface.h:14
MemberRecoveryRole
Definition members.h:26
MemberStatus
Definition members.h:17
STL namespace.
Definition members.h:128
MemberAck()=default
MemberAck(const ccf::crypto::Sha256Hash &root, const std::vector< uint8_t > &cose_sign1_req_)
Definition members.h:145
MemberAck(const ccf::crypto::Sha256Hash &root, const SignedReq &signed_req_)
Definition members.h:139
MemberAck(const ccf::crypto::Sha256Hash &root)
Definition members.h:137
Definition members.h:76
nlohmann::json member_data
Definition members.h:81
std::optional< MemberRecoveryRole > recovery_role
Optional recovery role of the member.
Definition members.h:84
MemberStatus status
Status of the member in the consortium.
Definition members.h:78
bool operator==(const MemberDetails &rhs) const
Definition members.h:86
Definition members.h:42
std::optional< MemberRecoveryRole > recovery_role
Definition members.h:49
NewMember()=default
std::optional< ccf::crypto::Pem > encryption_pub_key
Definition members.h:46
ccf::crypto::Pem cert
Definition members.h:43
NewMember(ccf::crypto::Pem cert_, const std::optional< ccf::crypto::Pem > &encryption_pub_key_=std::nullopt, nlohmann::json member_data_={}, const std::optional< MemberRecoveryRole > &recovery_role_=std::nullopt)
Definition members.h:53
nlohmann::json member_data
Definition members.h:47
bool operator==(const NewMember &rhs) const
Definition members.h:64
Definition signed_req.h:13
Definition members.h:114
StateDigest(const ccf::crypto::Sha256Hash &root)
Definition members.h:120
std::string state_digest
Next state digest the member is expected to sign.
Definition members.h:116
StateDigest()=default