use crate::{AudienceId, DelegatedRoleGrant, Principal};
#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum PortableMechanism {
Certified,
Ed25519,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PortableClaims {
pub mechanism: PortableMechanism,
pub audience: AudienceId,
pub issuer: Principal,
pub key_binding_id: [u8; 32],
pub browser_public_key: [u8; 32],
pub account_subject: Principal,
pub login_started_at_ns: u64,
pub login_deadline_ns: u64,
pub issued_at_ns: u64,
pub admission_expires_at_ns: u64,
pub nonce: [u8; 16],
pub grants: Vec<DelegatedRoleGrant>,
}
#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct PortableCredential {
pub claims: Vec<u8>,
pub proof: PortableProof,
}
#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum PortableProof {
Certified {
delegation: Box<crate::DelegationProof>,
issuer_signature: crate::IcCanisterSignatureProofV1,
},
Ed25519 {
signature: Vec<u8>,
},
}