Skip to main content

ic_auth_protocol_types/
token.rs

1//! Passive application authentication token contracts.
2//! Adapted from Canic; see docs/design/canic-source-review.md.
3
4use super::{
5    AuthRequestMetadata, DelegatedRoleGrant, DelegationAudience, DelegationProof, IssuerProof,
6};
7use candid::{CandidType, Principal};
8use serde::{Deserialize, Serialize};
9
10//
11// DelegatedTokenClaims
12//
13
14#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
15pub struct DelegatedTokenClaims {
16    pub presenter: Principal,
17    pub subject: Principal,
18    pub issuer_pid: Principal,
19    pub cert_hash: [u8; 32],
20    pub issued_at_ns: u64,
21    pub expires_at_ns: u64,
22    pub aud: DelegationAudience,
23    pub grants: Vec<DelegatedRoleGrant>,
24    pub nonce: [u8; 16],
25    pub ext: Option<Vec<u8>>,
26}
27
28//
29// DelegatedToken
30//
31
32#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
33pub struct DelegatedToken {
34    pub claims: DelegatedTokenClaims,
35    pub proof: DelegationProof,
36    pub issuer_proof: IssuerProof,
37}
38
39//
40// DelegatedTokenPrepareRequest
41//
42
43#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
44pub struct DelegatedTokenPrepareRequest {
45    pub metadata: Option<AuthRequestMetadata>,
46    pub aud: DelegationAudience,
47    pub grants: Vec<DelegatedRoleGrant>,
48    pub ttl_ns: u64,
49    pub ext: Option<Vec<u8>>,
50}
51
52//
53// DelegatedTokenPrepareResponse
54//
55
56#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
57pub struct DelegatedTokenPrepareResponse {
58    pub claims: DelegatedTokenClaims,
59    pub claims_hash: [u8; 32],
60    pub retrieval_expires_at_ns: u64,
61}
62
63//
64// DelegatedTokenGetRequest
65//
66
67#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
68pub struct DelegatedTokenGetRequest {
69    pub claims_hash: [u8; 32],
70}