tss_esapi/structures/lists/
digest_values.rs1use crate::interface_types::algorithm::HashingAlgorithm;
4use crate::structures::Digest;
5use crate::structures::HashAgile;
6use crate::tss2_esys::TPML_DIGEST_VALUES;
7use crate::{Error, Result};
8use std::collections::HashMap;
9use std::convert::{TryFrom, TryInto};
10
11#[derive(Debug, Clone, Default)]
12pub struct DigestValues {
13 digests: HashMap<HashingAlgorithm, Digest>,
14}
15
16impl DigestValues {
17 pub fn new() -> Self {
18 DigestValues {
19 digests: HashMap::new(),
20 }
21 }
22
23 pub fn set(&mut self, alg: HashingAlgorithm, dig: Digest) {
24 let _ = self.digests.insert(alg, dig);
25 }
26}
27
28impl TryFrom<DigestValues> for TPML_DIGEST_VALUES {
29 type Error = Error;
30 fn try_from(digest_values: DigestValues) -> Result<Self> {
31 let mut digest_values = digest_values;
32 let mut tss_digest_values: TPML_DIGEST_VALUES = Default::default();
33 for (digest_hash, digest_val) in digest_values.digests.drain() {
34 let ha = HashAgile::new(digest_hash, digest_val);
35 tss_digest_values.digests[tss_digest_values.count as usize] = ha.try_into()?;
36 tss_digest_values.count += 1;
37 }
38 Ok(tss_digest_values)
39 }
40}