Skip to main content

canic_core/dto/auth/
attestation.rs

1//! Module: dto::auth::attestation
2//!
3//! Responsibility: root-signed role-attestation DTOs.
4//! Does not own: attestation signing, cache state, or verification.
5//! Boundary: passive role-attestation request and proof contracts.
6
7use super::IcCanisterSignatureProofV1;
8use crate::dto::{prelude::*, rpc::RootRequestMetadata};
9
10//
11// RoleAttestationRequest
12//
13
14#[derive(CandidType, Clone, Debug, Deserialize)]
15pub struct RoleAttestationRequest {
16    pub subject: Principal,
17    pub role: CanisterRole,
18    pub subnet_id: Option<Principal>,
19    pub audience: Principal,
20    pub ttl_ns: u64,
21    pub epoch: u64,
22    pub metadata: Option<RootRequestMetadata>,
23}
24
25//
26// RoleAttestation
27//
28
29#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
30pub struct RoleAttestation {
31    pub subject: Principal,
32    pub role: CanisterRole,
33    pub subnet_id: Option<Principal>,
34    pub audience: Principal,
35    pub issued_at_ns: u64,
36    pub expires_at_ns: u64,
37    pub epoch: u64,
38}
39
40//
41// RoleAttestationRootProof
42//
43
44#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
45pub enum RoleAttestationRootProof {
46    IcCanisterSignatureV1(IcCanisterSignatureProofV1),
47}
48
49//
50// RoleAttestationPrepareResponse
51//
52
53#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
54pub struct RoleAttestationPrepareResponse {
55    pub payload: RoleAttestation,
56    pub payload_hash: [u8; 32],
57    pub retrieval_expires_at_ns: u64,
58}
59
60//
61// RoleAttestationGetRequest
62//
63
64#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
65pub struct RoleAttestationGetRequest {
66    pub payload_hash: [u8; 32],
67}
68
69//
70// SignedRoleAttestation
71//
72
73#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
74pub struct SignedRoleAttestation {
75    pub payload: RoleAttestation,
76    pub root_proof: RoleAttestationRootProof,
77}