1use crate::dto::{error::Error, prelude::*, rpc::RootRequestMetadata};
2
3#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
8pub enum DelegationAudience {
9 Any,
10 Roles(Vec<CanisterRole>),
11}
12
13#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
18pub struct DelegationCert {
19 pub root_pid: Principal,
20 pub shard_pid: Principal,
21 pub issued_at: u64,
22 pub expires_at: u64,
23 pub scopes: Vec<String>,
24 pub aud: DelegationAudience,
25}
26
27#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
32pub struct DelegationProof {
33 pub cert: DelegationCert,
34 pub cert_sig: Vec<u8>,
35}
36
37#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
42pub enum DelegationProofInstallIntent {
43 Provisioning,
44 Prewarm,
45 Repair,
46}
47
48#[derive(CandidType, Clone, Debug, Deserialize)]
53pub struct DelegationProofInstallRequest {
54 pub proof: DelegationProof,
55 pub intent: DelegationProofInstallIntent,
56 #[serde(default)]
57 pub root_public_key_sec1: Option<Vec<u8>>,
58 pub shard_public_key_sec1: Vec<u8>,
59}
60
61#[derive(CandidType, Clone, Debug, Deserialize)]
66pub struct DelegatedTokenClaims {
67 pub sub: Principal,
68 pub shard_pid: Principal,
69 pub scopes: Vec<String>,
70 pub aud: DelegationAudience,
71 pub iat: u64,
72 pub exp: u64,
73 #[serde(default)]
76 pub ext: Option<Vec<u8>>,
77}
78
79#[derive(CandidType, Clone, Debug, Deserialize)]
84pub struct DelegatedToken {
85 pub claims: DelegatedTokenClaims,
86 pub proof: DelegationProof,
87 pub token_sig: Vec<u8>,
88}
89
90#[derive(CandidType, Clone, Debug, Deserialize)]
95pub struct DelegationRequest {
96 pub shard_pid: Principal,
97 pub scopes: Vec<String>,
98 pub aud: DelegationAudience,
99 pub ttl_secs: u64,
100 pub verifier_targets: Vec<Principal>,
101 pub include_root_verifier: bool,
102 pub shard_public_key_sec1: Vec<u8>,
103 #[serde(default)]
104 pub metadata: Option<RootRequestMetadata>,
105}
106
107#[derive(CandidType, Clone, Debug, Deserialize)]
112pub struct RoleAttestationRequest {
113 pub subject: Principal,
114 pub role: CanisterRole,
115 #[serde(default)]
116 pub subnet_id: Option<Principal>,
117 #[serde(default)]
118 pub audience: Option<Principal>,
119 pub ttl_secs: u64,
120 pub epoch: u64,
121 #[serde(default)]
122 pub metadata: Option<RootRequestMetadata>,
123}
124
125#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
130pub struct RoleAttestation {
131 pub subject: Principal,
132 pub role: CanisterRole,
133 #[serde(default)]
134 pub subnet_id: Option<Principal>,
135 #[serde(default)]
136 pub audience: Option<Principal>,
137 pub issued_at: u64,
138 pub expires_at: u64,
139 pub epoch: u64,
140}
141
142#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
147pub struct SignedRoleAttestation {
148 pub payload: RoleAttestation,
149 pub signature: Vec<u8>,
150 pub key_id: u32,
151}
152
153#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
158pub enum AttestationKeyStatus {
159 Current,
160 Previous,
161}
162
163#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
168pub struct AttestationKey {
169 pub key_id: u32,
170 pub public_key: Vec<u8>,
171 pub status: AttestationKeyStatus,
172 #[serde(default)]
173 pub valid_from: Option<u64>,
174 #[serde(default)]
175 pub valid_until: Option<u64>,
176}
177
178#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
183pub struct AttestationKeySet {
184 pub root_pid: Principal,
185 pub generated_at: u64,
186 pub keys: Vec<AttestationKey>,
187}
188
189#[derive(CandidType, Clone, Debug, Deserialize)]
196pub struct DelegationProvisionRequest {
197 pub cert: DelegationCert,
198 pub signer_targets: Vec<Principal>,
199 pub verifier_targets: Vec<Principal>,
200 pub shard_public_key_sec1: Vec<u8>,
201}
202
203#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
210pub struct DelegationProvisionResponse {
211 pub proof: DelegationProof,
212 pub results: Vec<DelegationProvisionTargetResponse>,
213}
214
215#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
220pub struct DelegationVerifierProofPushRequest {
221 pub proof: DelegationProof,
222 pub verifier_targets: Vec<Principal>,
223}
224
225#[derive(CandidType, Clone, Debug, Deserialize)]
230pub struct DelegationVerifierProofPushResponse {
231 pub results: Vec<DelegationProvisionTargetResponse>,
232}
233
234#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
239pub struct DelegationProofStatus {
240 pub shard_pid: Principal,
241 pub issued_at: u64,
242 pub expires_at: u64,
243}
244
245#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
246pub enum DelegationProvisionTargetKind {
247 Signer,
248 Verifier,
249}
250
251#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
252pub enum DelegationProvisionStatus {
253 Ok,
254 Failed,
255}
256
257#[derive(CandidType, Clone, Debug, Deserialize)]
262pub enum DelegationAdminCommand {
263 PrewarmVerifiers(DelegationVerifierProofPushRequest),
264 RepairVerifiers(DelegationVerifierProofPushRequest),
265}
266
267#[derive(CandidType, Clone, Debug, Deserialize)]
272pub enum DelegationAdminResponse {
273 PrewarmedVerifiers {
274 result: DelegationVerifierProofPushResponse,
275 },
276 RepairedVerifiers {
277 result: DelegationVerifierProofPushResponse,
278 },
279}
280
281#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
286pub struct DelegationProvisionTargetResponse {
287 pub target: Principal,
288 pub kind: DelegationProvisionTargetKind,
289 pub status: DelegationProvisionStatus,
290 pub error: Option<Error>,
291}