canic_core/dto/capability/
mod.rs1use crate::dto::{
2 prelude::*,
3 rpc::{Request, Response},
4};
5
6pub mod proof;
7
8pub use proof::{DelegatedGrant, DelegatedGrantProof, DelegatedGrantScope, RoleAttestationProof};
9
10pub const CAPABILITY_VERSION_V1: u16 = 1;
15
16pub const PROOF_VERSION_V1: u16 = 1;
21
22#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
27pub enum CapabilityService {
28 Root,
29}
30
31#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
36pub struct CapabilityRequestMetadata {
37 pub request_id: [u8; 16],
38 pub nonce: [u8; 16],
39 pub issued_at: u64,
40 pub ttl_seconds: u32,
41}
42
43#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
48pub struct CapabilityProofBlob {
49 pub proof_version: u16,
50 pub capability_hash: [u8; 32],
51 pub payload: Vec<u8>,
52}
53
54#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
59pub enum CapabilityProof {
60 Structural,
61 RoleAttestation(CapabilityProofBlob),
62 DelegatedGrant(CapabilityProofBlob),
63}
64
65#[derive(CandidType, Clone, Debug, Deserialize)]
70pub struct RootCapabilityEnvelopeV1 {
71 pub service: CapabilityService,
72 pub capability_version: u16,
73 pub capability: Request,
74 pub proof: CapabilityProof,
75 pub metadata: CapabilityRequestMetadata,
76}
77
78#[derive(CandidType, Clone, Debug, Deserialize)]
83pub struct RootCapabilityResponseV1 {
84 pub response: Response,
85}