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