use crate::{
Error, Result,
interface_types::ecc::EccCurve,
structures::{EccParameter, EccScheme, KeyDerivationFunctionScheme},
tss2_esys::TPMS_ALGORITHM_DETAIL_ECC,
};
use std::convert::{TryFrom, TryInto};
#[derive(Debug, Clone)]
pub struct EccParameterDetails {
curve_id: EccCurve,
key_size: u16,
kdf: KeyDerivationFunctionScheme,
sign: EccScheme,
p: EccParameter,
a: EccParameter,
b: EccParameter,
g_x: EccParameter,
g_y: EccParameter,
n: EccParameter,
h: EccParameter,
}
impl EccParameterDetails {
pub const fn curve_id(&self) -> EccCurve {
self.curve_id
}
pub const fn key_size(&self) -> u16 {
self.key_size
}
pub const fn kdf(&self) -> &KeyDerivationFunctionScheme {
&self.kdf
}
pub const fn sign(&self) -> &EccScheme {
&self.sign
}
pub const fn p(&self) -> &EccParameter {
&self.p
}
pub const fn a(&self) -> &EccParameter {
&self.a
}
pub const fn b(&self) -> &EccParameter {
&self.b
}
pub const fn g_x(&self) -> &EccParameter {
&self.g_x
}
pub const fn g_y(&self) -> &EccParameter {
&self.g_y
}
pub const fn n(&self) -> &EccParameter {
&self.n
}
pub const fn h(&self) -> &EccParameter {
&self.h
}
}
impl TryFrom<TPMS_ALGORITHM_DETAIL_ECC> for EccParameterDetails {
type Error = Error;
fn try_from(details: TPMS_ALGORITHM_DETAIL_ECC) -> Result<Self> {
Ok(EccParameterDetails {
curve_id: EccCurve::try_from(details.curveID)?,
key_size: details.keySize,
kdf: details.kdf.try_into()?,
sign: details.sign.try_into()?,
p: details.p.try_into()?,
a: details.a.try_into()?,
b: details.b.try_into()?,
g_x: details.gX.try_into()?,
g_y: details.gY.try_into()?,
n: details.n.try_into()?,
h: details.h.try_into()?,
})
}
}