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 shard_public_key_sec1: Vec<u8>,
101 #[serde(default)]
102 pub metadata: Option<RootRequestMetadata>,
103}
104
105#[derive(CandidType, Clone, Debug, Deserialize)]
110pub struct RoleAttestationRequest {
111 pub subject: Principal,
112 pub role: CanisterRole,
113 #[serde(default)]
114 pub subnet_id: Option<Principal>,
115 #[serde(default)]
116 pub audience: Option<Principal>,
117 pub ttl_secs: u64,
118 pub epoch: u64,
119 #[serde(default)]
120 pub metadata: Option<RootRequestMetadata>,
121}
122
123#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
128pub struct RoleAttestation {
129 pub subject: Principal,
130 pub role: CanisterRole,
131 #[serde(default)]
132 pub subnet_id: Option<Principal>,
133 #[serde(default)]
134 pub audience: Option<Principal>,
135 pub issued_at: u64,
136 pub expires_at: u64,
137 pub epoch: u64,
138}
139
140#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
145pub struct SignedRoleAttestation {
146 pub payload: RoleAttestation,
147 pub signature: Vec<u8>,
148 pub key_id: u32,
149}
150
151#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
156pub enum AttestationKeyStatus {
157 Current,
158 Previous,
159}
160
161#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
166pub struct AttestationKey {
167 pub key_id: u32,
168 pub public_key: Vec<u8>,
169 pub status: AttestationKeyStatus,
170 #[serde(default)]
171 pub valid_from: Option<u64>,
172 #[serde(default)]
173 pub valid_until: Option<u64>,
174}
175
176#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
181pub struct AttestationKeySet {
182 pub root_pid: Principal,
183 pub generated_at: u64,
184 pub keys: Vec<AttestationKey>,
185}
186
187#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
194pub struct DelegationProvisionResponse {
195 pub proof: DelegationProof,
196 pub results: Vec<DelegationProvisionTargetResponse>,
197}
198
199#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
204pub struct DelegationVerifierProofPushRequest {
205 pub proof: DelegationProof,
206 pub verifier_targets: Vec<Principal>,
207}
208
209#[derive(CandidType, Clone, Debug, Deserialize)]
214pub struct DelegationVerifierProofPushResponse {
215 pub results: Vec<DelegationProvisionTargetResponse>,
216}
217
218#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
223pub struct DelegationProofStatus {
224 pub shard_pid: Principal,
225 pub issued_at: u64,
226 pub expires_at: u64,
227}
228
229#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
230pub enum DelegationProvisionTargetKind {
231 Signer,
232 Verifier,
233}
234
235#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
236pub enum DelegationProvisionStatus {
237 Ok,
238 Failed,
239}
240
241#[derive(CandidType, Clone, Debug, Deserialize)]
246pub enum DelegationAdminCommand {
247 PrewarmVerifiers(DelegationVerifierProofPushRequest),
248 RepairVerifiers(DelegationVerifierProofPushRequest),
249}
250
251#[derive(CandidType, Clone, Debug, Deserialize)]
256pub enum DelegationAdminResponse {
257 PrewarmedVerifiers {
258 result: DelegationVerifierProofPushResponse,
259 },
260 RepairedVerifiers {
261 result: DelegationVerifierProofPushResponse,
262 },
263}
264
265#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
270pub struct DelegationProvisionTargetResponse {
271 pub target: Principal,
272 pub kind: DelegationProvisionTargetKind,
273 pub status: DelegationProvisionStatus,
274 pub error: Option<Error>,
275}