1use crate::dto::{error::Error, prelude::*, rpc::RootRequestMetadata};
2
3#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
8pub struct DelegationCert {
9 pub root_pid: Principal,
10 pub shard_pid: Principal,
11 pub issued_at: u64,
12 pub expires_at: u64,
13 pub scopes: Vec<String>,
14 pub aud: Vec<Principal>,
15}
16
17#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
22pub struct DelegationProof {
23 pub cert: DelegationCert,
24 pub cert_sig: Vec<u8>,
25}
26
27#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
32pub enum DelegationProofInstallIntent {
33 Provisioning,
34 Prewarm,
35 Repair,
36}
37
38#[derive(CandidType, Clone, Debug, Deserialize)]
43pub struct DelegationProofInstallRequest {
44 pub proof: DelegationProof,
45 pub intent: DelegationProofInstallIntent,
46 #[serde(default)]
47 pub root_public_key_sec1: Option<Vec<u8>>,
48 #[serde(default)]
49 pub shard_public_key_sec1: Option<Vec<u8>>,
50}
51
52#[derive(CandidType, Clone, Debug, Deserialize)]
57pub struct DelegatedTokenClaims {
58 pub sub: Principal,
59 pub shard_pid: Principal,
60 pub scopes: Vec<String>,
61 pub aud: Vec<Principal>,
62 pub iat: u64,
63 pub exp: u64,
64}
65
66#[derive(CandidType, Clone, Debug, Deserialize)]
71pub struct DelegatedToken {
72 pub claims: DelegatedTokenClaims,
73 pub proof: DelegationProof,
74 pub token_sig: Vec<u8>,
75}
76
77#[derive(CandidType, Clone, Debug, Deserialize)]
82pub struct DelegationRequest {
83 pub shard_pid: Principal,
84 pub scopes: Vec<String>,
85 pub aud: Vec<Principal>,
86 pub ttl_secs: u64,
87 pub verifier_targets: Vec<Principal>,
88 pub include_root_verifier: bool,
89 #[serde(default)]
90 pub shard_public_key_sec1: Option<Vec<u8>>,
91 #[serde(default)]
92 pub metadata: Option<RootRequestMetadata>,
93}
94
95#[derive(CandidType, Clone, Debug, Deserialize)]
100pub struct RoleAttestationRequest {
101 pub subject: Principal,
102 pub role: CanisterRole,
103 #[serde(default)]
104 pub subnet_id: Option<Principal>,
105 #[serde(default)]
106 pub audience: Option<Principal>,
107 pub ttl_secs: u64,
108 pub epoch: u64,
109 #[serde(default)]
110 pub metadata: Option<RootRequestMetadata>,
111}
112
113#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
118pub struct RoleAttestation {
119 pub subject: Principal,
120 pub role: CanisterRole,
121 #[serde(default)]
122 pub subnet_id: Option<Principal>,
123 #[serde(default)]
124 pub audience: Option<Principal>,
125 pub issued_at: u64,
126 pub expires_at: u64,
127 pub epoch: u64,
128}
129
130#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
135pub struct SignedRoleAttestation {
136 pub payload: RoleAttestation,
137 pub signature: Vec<u8>,
138 pub key_id: u32,
139}
140
141#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
146pub enum AttestationKeyStatus {
147 Current,
148 Previous,
149}
150
151#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
156pub struct AttestationKey {
157 pub key_id: u32,
158 pub public_key: Vec<u8>,
159 pub status: AttestationKeyStatus,
160 #[serde(default)]
161 pub valid_from: Option<u64>,
162 #[serde(default)]
163 pub valid_until: Option<u64>,
164}
165
166#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
171pub struct AttestationKeySet {
172 pub root_pid: Principal,
173 pub generated_at: u64,
174 pub keys: Vec<AttestationKey>,
175}
176
177#[derive(CandidType, Clone, Debug, Deserialize)]
184pub struct DelegationProvisionRequest {
185 pub cert: DelegationCert,
186 pub signer_targets: Vec<Principal>,
187 pub verifier_targets: Vec<Principal>,
188 #[serde(default)]
189 pub shard_public_key_sec1: Option<Vec<u8>>,
190}
191
192#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
199pub struct DelegationProvisionResponse {
200 pub proof: DelegationProof,
201 pub results: Vec<DelegationProvisionTargetResponse>,
202}
203
204#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
209pub struct DelegationVerifierProofPushRequest {
210 pub proof: DelegationProof,
211 pub verifier_targets: Vec<Principal>,
212}
213
214#[derive(CandidType, Clone, Debug, Deserialize)]
219pub struct DelegationVerifierProofPushResponse {
220 pub results: Vec<DelegationProvisionTargetResponse>,
221}
222
223#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
228pub struct DelegationProofStatus {
229 pub shard_pid: Principal,
230 pub issued_at: u64,
231 pub expires_at: u64,
232}
233
234#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
235pub enum DelegationProvisionTargetKind {
236 Signer,
237 Verifier,
238}
239
240#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
241pub enum DelegationProvisionStatus {
242 Ok,
243 Failed,
244}
245
246#[derive(CandidType, Clone, Debug, Deserialize)]
251pub enum DelegationAdminCommand {
252 PrewarmVerifiers(DelegationVerifierProofPushRequest),
253 RepairVerifiers(DelegationVerifierProofPushRequest),
254}
255
256#[derive(CandidType, Clone, Debug, Deserialize)]
261pub enum DelegationAdminResponse {
262 PrewarmedVerifiers {
263 result: DelegationVerifierProofPushResponse,
264 },
265 RepairedVerifiers {
266 result: DelegationVerifierProofPushResponse,
267 },
268}
269
270#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
275pub struct DelegationProvisionTargetResponse {
276 pub target: Principal,
277 pub kind: DelegationProvisionTargetKind,
278 pub status: DelegationProvisionStatus,
279 pub error: Option<Error>,
280}