Skip to main content

canic_core/dto/capability/
mod.rs

1use crate::dto::{
2    prelude::*,
3    rpc::{Request, Response},
4};
5
6pub mod proof;
7
8pub use proof::{DelegatedGrant, DelegatedGrantProof, DelegatedGrantScope, RoleAttestationProof};
9
10///
11/// CapabilityVersion
12///
13
14pub const CAPABILITY_VERSION_V1: u16 = 1;
15
16///
17/// ProofVersion
18///
19
20pub const PROOF_VERSION_V1: u16 = 1;
21
22///
23/// CapabilityService
24///
25
26#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
27pub enum CapabilityService {
28    Root,
29}
30
31///
32/// CapabilityRequestMetadata
33///
34
35#[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///
44/// CapabilityProofBlob
45///
46
47#[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///
55/// CapabilityProof
56///
57
58#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
59pub enum CapabilityProof {
60    Structural,
61    RoleAttestation(CapabilityProofBlob),
62    DelegatedGrant(CapabilityProofBlob),
63}
64
65///
66/// RootCapabilityEnvelopeV1
67///
68
69#[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///
79/// RootCapabilityResponseV1
80///
81
82#[derive(CandidType, Clone, Debug, Deserialize)]
83pub struct RootCapabilityResponseV1 {
84    pub response: Response,
85}