-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinterface.proto
executable file
·292 lines (234 loc) · 5.8 KB
/
interface.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
syntax = "proto3";
package grpcint;
message EncryptionKey {
bytes ek = 1;
}
message MasterKey {
bytes mk = 1;
}
message Hash {
bytes hash = 1;
}
// TODO: how to index in the KT?
message Username {
bytes username = 1;
}
message OrganizationName {
Hash hash_name = 1;
}
message Position {
uint64 pos = 1;
}
message IndexedEK {
EncryptionKey public_key = 1;
Position pos = 2;
}
message IndexedMK {
MasterKey master_key = 1;
Position pos = 2;
}
message MerklePath {
repeated Hash nodes = 1;
}
message MerkleProof {
MerklePath copath = 1;
enum MerkleProofType {
Membership = 0;
NonMembership = 1;
}
MerkleProofType proof_type = 2;
//NOTE: This can be removed if we want to further reduce the proof size.
// Indicate the interval of the CT if needed.
Position start_pos = 3;
Position end_pos = 4;
}
message RegisterProof {
repeated MerkleProof kt_path = 1;
}
message LookUpProof {
repeated MerkleProof kt_path = 1;
repeated IndexedEK ek_list = 2;
}
message AppendProof {
// Used to verify each KT root is included in the CT tree.
MerkleProof ct_path = 1;
repeated MerkleProof kt_path = 2;
//NOTE: This can be removed if we want to reduce append proof size.
uint64 height = 3;
}
message RootHash {
Hash root_hash = 1;
//NOTE: This can be removed if we want to further reduce the proof size.
Position start_pos = 3;
Position end_pos = 4;
}
message CheckPoint {
bytes marshaled_digest = 1;
uint64 num_leaves = 2;
uint64 epoch = 3;
}
message ExtensionProof {
MerkleProof ct_path = 1;
repeated RootHash root_list = 2;
}
service MerkleSquare {
// Client-Server API
rpc Register(RegisterRequest) returns (RegisterResponse) {}
rpc Append(stream AppendRequest) returns (stream AppendResponse) {}
rpc LookUpMK(LookUpMKRequest) returns (LookUpMKResponse) {}
rpc LookUpPK(LookUpPKRequest) returns (LookUpPKResponse) {}
rpc LookUpMKVerify(LookUpMKVerifyRequest) returns (LookUpMKVerifyResponse) {}
rpc LookUpPKVerify(LookUpPKVerifyRequest) returns (LookUpPKVerifyResponse) {}
rpc GetMonitoringProofForTest(GetMonitoringProofForTestRequest) returns (GetMonitoringProofForTestResponse) {}
// Verifier-Server API
rpc GetMasterKeyProof(GetMasterKeyProofRequest) returns (GetMasterKeyProofResponse) {}
rpc GetPublicKeyProof(GetPublicKeyProofRequest) returns (GetPublicKeyProofResponse) {}
rpc GetLookUpProof(GetLookUpProofRequest) returns (GetLookUpProofResponse) {}
// Auditor Interface
rpc GetNewCheckPoint(GetNewCheckPointRequest) returns (GetNewCheckPointResponse) {}
}
message GetMonitoringProofForTestRequest {
Username usr = 1;
Position pos = 2;
uint32 height = 3;
uint64 size = 4;
}
message GetMonitoringProofForTestResponse {
bytes proof = 1;
}
service Auditor {
// Auditor-Client-Server API
rpc GetEpochUpdate(GetEpochUpdateRequest) returns (GetEpochUpdateResponse) {}
}
service Verifier {
rpc VerifyRegisterAsync(VerifyRegisterRequest) returns (VerifyRegisterResponse) {}
rpc VerifyAppendAsync(VerifyAppendRequest) returns (VerifyAppendResponse) {}
rpc VerifyLookUpAsync(VerifyLookUpRequest) returns (VerifyLookUpResponse) {}
}
message RegisterRequest {
Username usr = 1;
MasterKey key = 2;
bytes signature = 3;
}
message RegisterResponse {
bytes vrf_key = 1;
Position pos = 2;
}
message AppendRequest {
Username usr = 1;
EncryptionKey ek = 2;
bytes signature = 3;
}
message AppendResponse {
Position pos = 1;
bytes vrf_key = 2;
bool completed = 3;
}
message LookUpMKRequest {
Username usr = 1;
}
message LookUpMKResponse {
IndexedMK imk = 1;
bytes signature = 2;
bytes vrf_key = 3;
}
message LookUpMKVerifyRequest {
Username usr = 1;
uint64 size = 2;
}
message LookUpMKVerifyResponse {
IndexedMK imk = 1;
bytes signature = 2;
bytes vrf_key = 3;
bytes proof = 4;
}
message LookUpPKRequest {
Username usr = 1;
Position pos = 2;
}
message LookUpPKResponse {
IndexedEK iek = 1;
bytes signature = 2;
bytes vrf_key = 3;
}
message LookUpPKVerifyRequest {
Username usr = 1;
uint64 size = 2;
}
message LookUpPKVerifyResponse {
IndexedEK iek = 1;
bytes signature = 2;
bytes vrf_key = 3;
bytes proof = 4;
}
message GetMasterKeyProofRequest {
Username usr = 1;
MasterKey key = 2;
Position pos = 3;
uint64 size = 4;
}
message GetMasterKeyProofResponse {
bytes proof = 1;
}
message GetPublicKeyProofRequest {
Username usr = 1;
EncryptionKey key = 2;
Position pos = 3;
uint32 height = 4;
uint64 size = 5;
}
message GetPublicKeyProofResponse {
bytes proof = 1;
}
message GetLookUpProofRequest {
bool is_master_key = 1;
Username usr = 2;
MasterKey master_key = 3;
EncryptionKey encryption_key = 4;
Position pos = 5;
uint64 size = 6;
}
message GetLookUpProofResponse {
bytes proof = 1;
}
message VerifyRegisterRequest {
Username usr = 1;
bytes vrf_key = 2;
MasterKey key = 3;
bytes signature = 4;
Position pos = 5;
}
message VerifyRegisterResponse {
}
message VerifyAppendRequest {
Username usr = 1;
bytes vrf_key = 2;
EncryptionKey key = 3;
bytes signature = 4;
Position pos = 5;
}
message VerifyAppendResponse {
}
message VerifyLookUpRequest {
bool is_master_key = 1;
Username usr = 2;
bytes vrf = 3;
MasterKey master_key = 4;
EncryptionKey encryption_key = 5;
bytes signature = 6;
Position pos = 7;
}
message VerifyLookUpResponse {
}
message GetNewCheckPointRequest {
uint64 old_size = 1;
}
message GetNewCheckPointResponse {
CheckPoint ck_point = 1;
bytes proof = 2;
}
message GetEpochUpdateRequest {
}
message GetEpochUpdateResponse {
CheckPoint ck_point = 1;
}