use super::IcCanisterSignatureProofV1;
use crate::dto::{prelude::*, rpc::RootRequestMetadata};
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct RoleAttestationRequest {
pub subject: Principal,
pub role: CanisterRole,
#[serde(default)]
pub subnet_id: Option<Principal>,
pub audience: Principal,
pub ttl_ns: u64,
pub epoch: u64,
#[serde(default)]
pub metadata: Option<RootRequestMetadata>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct RoleAttestation {
pub subject: Principal,
pub role: CanisterRole,
#[serde(default)]
pub subnet_id: Option<Principal>,
pub audience: Principal,
pub issued_at_ns: u64,
pub expires_at_ns: u64,
pub epoch: u64,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum RoleAttestationRootProof {
IcCanisterSignatureV1(IcCanisterSignatureProofV1),
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct RoleAttestationPrepareResponse {
pub payload: RoleAttestation,
pub payload_hash: [u8; 32],
pub retrieval_expires_at_ns: u64,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct RoleAttestationGetRequest {
pub payload_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct SignedRoleAttestation {
pub payload: RoleAttestation,
pub root_proof: RoleAttestationRootProof,
}