tss_esapi/structures/
creation.rs1use crate::{
5 attributes::LocalityAttributes,
6 constants::AlgorithmIdentifier,
7 interface_types::algorithm::HashingAlgorithm,
8 structures::{Data, Digest, Name, PcrSelectionList},
9 tss2_esys::{TPM2B_CREATION_DATA, TPMS_CREATION_DATA},
10 Error, Result,
11};
12use std::convert::{TryFrom, TryInto};
13
14#[derive(Debug, Clone)]
15pub struct CreationData {
16 pcr_select: PcrSelectionList,
17 pcr_digest: Digest,
18 locality: LocalityAttributes,
19 parent_name_alg: Option<HashingAlgorithm>,
20 parent_name: Name,
21 parent_qualified_name: Name,
22 outside_info: Data,
23}
24
25impl TryFrom<TPMS_CREATION_DATA> for CreationData {
26 type Error = Error;
27 fn try_from(tss_creation_data: TPMS_CREATION_DATA) -> Result<Self> {
28 Ok(CreationData {
29 pcr_select: tss_creation_data.pcrSelect.try_into()?,
30 pcr_digest: tss_creation_data.pcrDigest.try_into()?,
31 locality: tss_creation_data.locality.into(),
32 parent_name_alg: match AlgorithmIdentifier::try_from(tss_creation_data.parentNameAlg)? {
33 AlgorithmIdentifier::Null => None,
34 alg => Some(HashingAlgorithm::try_from(alg)?),
35 },
36 parent_name: tss_creation_data.parentName.try_into()?,
37 parent_qualified_name: tss_creation_data.parentQualifiedName.try_into()?,
38 outside_info: tss_creation_data.outsideInfo.try_into()?,
39 })
40 }
41}
42
43impl TryFrom<TPM2B_CREATION_DATA> for CreationData {
44 type Error = Error;
45 fn try_from(tss_creation_data_buffer: TPM2B_CREATION_DATA) -> Result<Self> {
46 CreationData::try_from(tss_creation_data_buffer.creationData)
47 }
48}
49
50impl From<CreationData> for TPMS_CREATION_DATA {
51 fn from(creation_data: CreationData) -> Self {
52 TPMS_CREATION_DATA {
53 pcrSelect: creation_data.pcr_select.into(),
54 pcrDigest: creation_data.pcr_digest.into(),
55 locality: creation_data.locality.into(),
56 parentNameAlg: match creation_data.parent_name_alg {
57 None => AlgorithmIdentifier::Null.into(),
58 Some(alg) => alg.into(),
59 },
60 parentName: creation_data.parent_name.into(),
61 parentQualifiedName: creation_data.parent_qualified_name.into(),
62 outsideInfo: creation_data.outside_info.into(),
63 }
64 }
65}