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
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 = nullptr;
48
49 std::optional<MemberRecoveryRole> recovery_role = std::nullopt;
50
52
54 const ccf::crypto::Pem& cert_,
55 const std::optional<ccf::crypto::Pem>& encryption_pub_key_ = std::nullopt,
56 const nlohmann::json& member_data_ = nullptr,
57 const std::optional<MemberRecoveryRole>& recovery_role_ = std::nullopt) :
58 cert(cert_),
59 encryption_pub_key(encryption_pub_key_),
60 member_data(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
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
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:702
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:714
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:663
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:690
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:786
#define DECLARE_JSON_ENUM(TYPE,...)
Definition json.h:837
Definition app_interface.h:14
MemberRecoveryRole
Definition members.h:26
MemberStatus
Definition members.h:17
Definition members.h:128
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
MemberAck()
Definition members.h:135
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
std::optional< ccf::crypto::Pem > encryption_pub_key
Definition members.h:46
NewMember()
Definition members.h:51
ccf::crypto::Pem cert
Definition members.h:43
NewMember(const ccf::crypto::Pem &cert_, const std::optional< ccf::crypto::Pem > &encryption_pub_key_=std::nullopt, const nlohmann::json &member_data_=nullptr, 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()
Definition members.h:118