use heapless_bytes::Bytes;
use serde::{Deserialize, Serialize};
use trussed_core::types::SerializedKey;
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
#[non_exhaustive]
pub enum ErrorKind {
SerializeBufferFull,
SerializeCustom,
Deseralization,
}
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
pub struct Error {
kind: ErrorKind,
}
#[derive(Serialize, Deserialize)]
pub struct RsaPublicParts<'d> {
pub n: &'d [u8],
pub e: &'d [u8],
}
impl<'d> RsaPublicParts<'d> {
pub fn serialize(&self) -> Result<SerializedKey, Error> {
use postcard::Error as PError;
let vec = postcard::to_vec(self).map_err(|err| match err {
PError::SerializeBufferFull => Error {
kind: ErrorKind::SerializeBufferFull,
},
_ => Error {
kind: ErrorKind::SerializeCustom,
},
})?;
Ok(Bytes::from(vec))
}
pub fn deserialize(data: &'d [u8]) -> Result<Self, Error> {
postcard::from_bytes(data).map_err(|_err| Error {
kind: ErrorKind::Deseralization,
})
}
}
#[derive(Debug, Deserialize, Serialize)]
pub struct RsaImportFormat<'d> {
pub e: &'d [u8],
pub p: &'d [u8],
pub q: &'d [u8],
}
impl<'d> RsaImportFormat<'d> {
pub fn serialize(&self) -> Result<SerializedKey, Error> {
use postcard::Error as PError;
let vec = postcard::to_vec(self).map_err(|err| match err {
PError::SerializeBufferFull => Error {
kind: ErrorKind::SerializeBufferFull,
},
_ => Error {
kind: ErrorKind::SerializeCustom,
},
})?;
Ok(Bytes::from(vec))
}
pub fn deserialize(data: &'d [u8]) -> Result<Self, Error> {
postcard::from_bytes(data).map_err(|_err| Error {
kind: ErrorKind::Deseralization,
})
}
}