authnz_common/types/tokens/
mpaat.rs1use serde::{Deserialize, Serialize};
4
5#[cfg(any(feature = "pqc-utils", feature = "ed25519-utils"))]
6use crate::{MResult, ServerError};
7
8#[derive(Deserialize, Serialize, PartialEq, Eq, Hash, Clone)]
9pub struct MPAATHeader<U> {
11 pub authnz_pkey: Vec<u8>,
13 pub nonce: Vec<u8>,
15 #[serde(flatten)]
16 pub common_public_fields: Option<U>,
18}
19
20#[derive(Deserialize, Serialize, PartialEq, Eq, Hash, Clone)]
21pub struct MPAATPayload<T> {
23 pub cli_pkey: Vec<u8>,
25 pub exp: chrono::DateTime<chrono::Utc>,
27 #[serde(flatten)]
28 pub container: T,
30}
31
32#[derive(Deserialize, Serialize, PartialEq, Eq, Hash, Clone)]
33pub struct MPAATSignature {
35 pub sig: Vec<u8>,
37}
38
39#[cfg(any(feature = "pqc-utils", feature = "ed25519-utils"))]
40impl<U: serde::Serialize> MPAATHeader<U> {
41 pub fn sign_mpaat(&self, payload: &[u8], keypair: &crate::SignKeypair) -> MResult<Vec<u8>> {
45 let mut data = rmp_serde::to_vec(self).map_err(ServerError::from_private)?;
46 data.extend_from_slice(payload);
47 Ok(keypair.sign_raw(&data))
48 }
49}