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 shard_public_key_sec1: Option<Vec<u8>>,
48}
49
50#[derive(CandidType, Clone, Debug, Deserialize)]
55pub struct DelegatedTokenClaims {
56 pub sub: Principal,
57 pub shard_pid: Principal,
58 pub scopes: Vec<String>,
59 pub aud: Vec<Principal>,
60 pub iat: u64,
61 pub exp: u64,
62}
63
64#[derive(CandidType, Clone, Debug, Deserialize)]
69pub struct DelegatedToken {
70 pub claims: DelegatedTokenClaims,
71 pub proof: DelegationProof,
72 pub token_sig: Vec<u8>,
73}
74
75#[derive(CandidType, Clone, Debug, Deserialize)]
80pub struct DelegationRequest {
81 pub shard_pid: Principal,
82 pub scopes: Vec<String>,
83 pub aud: Vec<Principal>,
84 pub ttl_secs: u64,
85 pub verifier_targets: Vec<Principal>,
86 pub include_root_verifier: bool,
87 #[serde(default)]
88 pub shard_public_key_sec1: Option<Vec<u8>>,
89 #[serde(default)]
90 pub metadata: Option<RootRequestMetadata>,
91}
92
93#[derive(CandidType, Clone, Debug, Deserialize)]
98pub struct RoleAttestationRequest {
99 pub subject: Principal,
100 pub role: CanisterRole,
101 #[serde(default)]
102 pub subnet_id: Option<Principal>,
103 #[serde(default)]
104 pub audience: Option<Principal>,
105 pub ttl_secs: u64,
106 pub epoch: u64,
107 #[serde(default)]
108 pub metadata: Option<RootRequestMetadata>,
109}
110
111#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
116pub struct RoleAttestation {
117 pub subject: Principal,
118 pub role: CanisterRole,
119 #[serde(default)]
120 pub subnet_id: Option<Principal>,
121 #[serde(default)]
122 pub audience: Option<Principal>,
123 pub issued_at: u64,
124 pub expires_at: u64,
125 pub epoch: u64,
126}
127
128#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
133pub struct SignedRoleAttestation {
134 pub payload: RoleAttestation,
135 pub signature: Vec<u8>,
136 pub key_id: u32,
137}
138
139#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
144pub enum AttestationKeyStatus {
145 Current,
146 Previous,
147}
148
149#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
154pub struct AttestationKey {
155 pub key_id: u32,
156 pub public_key: Vec<u8>,
157 pub status: AttestationKeyStatus,
158 #[serde(default)]
159 pub valid_from: Option<u64>,
160 #[serde(default)]
161 pub valid_until: Option<u64>,
162}
163
164#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
169pub struct AttestationKeySet {
170 pub root_pid: Principal,
171 pub generated_at: u64,
172 pub keys: Vec<AttestationKey>,
173}
174
175#[derive(CandidType, Clone, Debug, Deserialize)]
182pub struct DelegationProvisionRequest {
183 pub cert: DelegationCert,
184 pub signer_targets: Vec<Principal>,
185 pub verifier_targets: Vec<Principal>,
186 #[serde(default)]
187 pub shard_public_key_sec1: Option<Vec<u8>>,
188}
189
190#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
197pub struct DelegationProvisionResponse {
198 pub proof: DelegationProof,
199 pub results: Vec<DelegationProvisionTargetResponse>,
200}
201
202#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
207pub struct DelegationVerifierProofPushRequest {
208 pub proof: DelegationProof,
209 pub verifier_targets: Vec<Principal>,
210}
211
212#[derive(CandidType, Clone, Debug, Deserialize)]
217pub struct DelegationVerifierProofPushResponse {
218 pub results: Vec<DelegationProvisionTargetResponse>,
219}
220
221#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
226pub struct DelegationProofStatus {
227 pub shard_pid: Principal,
228 pub issued_at: u64,
229 pub expires_at: u64,
230}
231
232#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
233pub enum DelegationProvisionTargetKind {
234 Signer,
235 Verifier,
236}
237
238#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
239pub enum DelegationProvisionStatus {
240 Ok,
241 Failed,
242}
243
244#[derive(CandidType, Clone, Debug, Deserialize)]
249pub enum DelegationAdminCommand {
250 PrewarmVerifiers(DelegationVerifierProofPushRequest),
251 RepairVerifiers(DelegationVerifierProofPushRequest),
252}
253
254#[derive(CandidType, Clone, Debug, Deserialize)]
259pub enum DelegationAdminResponse {
260 PrewarmedVerifiers {
261 result: DelegationVerifierProofPushResponse,
262 },
263 RepairedVerifiers {
264 result: DelegationVerifierProofPushResponse,
265 },
266}
267
268#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
273pub struct DelegationProvisionTargetResponse {
274 pub target: Principal,
275 pub kind: DelegationProvisionTargetKind,
276 pub status: DelegationProvisionStatus,
277 pub error: Option<Error>,
278}