use alloc::vec::Vec;
use serde::{Deserialize, Serialize};
use jose_b64::serde::{Bytes, Secret};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Rsa {
pub n: Bytes,
pub e: Bytes,
#[serde(skip_serializing_if = "Option::is_none", default, flatten)]
pub prv: Option<RsaPrivate>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct RsaPrivate {
pub d: Secret,
#[serde(skip_serializing_if = "Option::is_none", default, flatten)]
pub opt: Option<RsaOptional>,
}
impl From<Secret> for RsaPrivate {
#[inline(always)]
fn from(bytes: Secret) -> Self {
Self {
d: bytes,
opt: None,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct RsaOptional {
pub p: Secret,
pub q: Secret,
pub dp: Secret,
pub dq: Secret,
pub qi: Secret,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub oth: Vec<RsaOtherPrimes>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct RsaOtherPrimes {
pub r: Secret,
pub d: Secret,
pub t: Secret,
}