tss_esapi/structures/hash/
agile.rs1use crate::interface_types::algorithm::HashingAlgorithm;
4use crate::structures::Digest;
5use crate::tss2_esys::{TPMT_HA, TPMU_HA};
6use crate::{Error, Result, WrapperErrorKind};
7use std::convert::{TryFrom, TryInto};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub struct HashAgile {
11 algorithm: HashingAlgorithm,
12 digest: Digest,
13}
14
15impl HashAgile {
16 pub fn new(algorithm: HashingAlgorithm, digest: Digest) -> Self {
17 HashAgile { algorithm, digest }
18 }
19}
20
21impl TryFrom<HashAgile> for TPMT_HA {
22 type Error = Error;
23 fn try_from(ha: HashAgile) -> Result<Self> {
24 let algid: crate::tss2_esys::TPM2_ALG_ID = ha.algorithm.into();
25 let digest_val = ha.digest;
26 Ok(TPMT_HA {
27 hashAlg: algid,
28 digest: match ha.algorithm {
29 HashingAlgorithm::Sha1 => TPMU_HA {
30 sha1: digest_val.try_into()?,
31 },
32 HashingAlgorithm::Sha256 => TPMU_HA {
33 sha256: digest_val.try_into()?,
34 },
35 HashingAlgorithm::Sha384 => TPMU_HA {
36 sha384: digest_val.try_into()?,
37 },
38 HashingAlgorithm::Sha512 => TPMU_HA {
39 sha512: digest_val.try_into()?,
40 },
41 HashingAlgorithm::Sm3_256 => TPMU_HA {
42 sm3_256: digest_val.try_into()?,
43 },
44 _ => return Err(Error::local_error(WrapperErrorKind::UnsupportedParam)),
45 },
46 })
47 }
48}
49
50impl TryFrom<TPMT_HA> for HashAgile {
51 type Error = Error;
52
53 fn try_from(tpmt_ha: TPMT_HA) -> Result<Self> {
54 let algorithm = HashingAlgorithm::try_from(tpmt_ha.hashAlg)?;
55 Ok(HashAgile {
56 algorithm,
57 digest: match algorithm {
58 HashingAlgorithm::Sha1 => unsafe { tpmt_ha.digest.sha1 }.as_ref().try_into()?,
59 HashingAlgorithm::Sha256 => unsafe { tpmt_ha.digest.sha256 }.as_ref().try_into()?,
60 HashingAlgorithm::Sha384 => unsafe { tpmt_ha.digest.sha384 }.as_ref().try_into()?,
61 HashingAlgorithm::Sha512 => unsafe { tpmt_ha.digest.sha512 }.as_ref().try_into()?,
62 HashingAlgorithm::Sm3_256 => {
63 unsafe { tpmt_ha.digest.sm3_256 }.as_ref().try_into()?
64 }
65 _ => return Err(Error::local_error(WrapperErrorKind::WrongValueFromTpm)),
66 },
67 })
68 }
69}