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 value(&self) -> &HashMap<HashingAlgorithm, Digest> {
24 &self.digests
25 }
26
27 pub fn set(&mut self, alg: HashingAlgorithm, dig: Digest) {
28 let _ = self.digests.insert(alg, dig);
29 }
30}
31
32impl TryFrom<DigestValues> for TPML_DIGEST_VALUES {
33 type Error = Error;
34 fn try_from(digest_values: DigestValues) -> Result<Self> {
35 let mut digest_values = digest_values;
36 let mut tss_digest_values: TPML_DIGEST_VALUES = Default::default();
37 for (digest_hash, digest_val) in digest_values.digests.drain() {
38 let ha = HashAgile::new(digest_hash, digest_val);
39 tss_digest_values.digests[tss_digest_values.count as usize] = ha.try_into()?;
40 tss_digest_values.count += 1;
41 }
42 Ok(tss_digest_values)
43 }
44}