Skip to main content

canic_core/dto/capability/
mod.rs

1use crate::dto::{
2    prelude::*,
3    rpc::{CyclesRequest, CyclesResponse, 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}
86
87//
88// NonrootCyclesCapabilityEnvelopeV1
89//
90
91#[derive(CandidType, Clone, Debug, Deserialize)]
92pub struct NonrootCyclesCapabilityEnvelopeV1 {
93    pub service: CapabilityService,
94    pub capability_version: u16,
95    pub capability: CyclesRequest,
96    pub proof: CapabilityProof,
97    pub metadata: CapabilityRequestMetadata,
98}
99
100//
101// NonrootCyclesCapabilityResponseV1
102//
103
104#[derive(CandidType, Clone, Debug, Deserialize)]
105pub struct NonrootCyclesCapabilityResponseV1 {
106    pub response: CyclesResponse,
107}