1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use crate::constants::tss::{
TPM2_ST_ATTEST_CERTIFY, TPM2_ST_ATTEST_COMMAND_AUDIT, TPM2_ST_ATTEST_CREATION,
TPM2_ST_ATTEST_NV, TPM2_ST_ATTEST_NV_DIGEST, TPM2_ST_ATTEST_QUOTE,
TPM2_ST_ATTEST_SESSION_AUDIT, TPM2_ST_ATTEST_TIME, TPM2_ST_AUTH_SECRET, TPM2_ST_AUTH_SIGNED,
TPM2_ST_CREATION, TPM2_ST_FU_MANIFEST, TPM2_ST_HASHCHECK, TPM2_ST_NO_SESSIONS, TPM2_ST_NULL,
TPM2_ST_RESERVED1, TPM2_ST_RESERVED2, TPM2_ST_RESERVED3, TPM2_ST_RSP_COMMAND, TPM2_ST_SESSIONS,
TPM2_ST_VERIFIED,
};
use crate::tss2_esys::TPM2_ST;
use crate::{Error, Result, WrapperErrorKind};
use std::convert::{From, TryFrom};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StructureTag {
RspCommand,
Null,
NoSessions,
Sessions,
Reserved1,
Reserved2,
AttestNv,
AttestCommandAudit,
AttestSessionAudit,
AttestCertify,
AttestQuote,
AttestTime,
AttestCreation,
AttestNvDigest,
Creation,
Verified,
AuthSecret,
Hashcheck,
AuthSigned,
FuManifest,
}
impl From<StructureTag> for TPM2_ST {
fn from(structure_tag: StructureTag) -> Self {
match structure_tag {
StructureTag::RspCommand => TPM2_ST_RSP_COMMAND,
StructureTag::Null => TPM2_ST_NULL,
StructureTag::NoSessions => TPM2_ST_NO_SESSIONS,
StructureTag::Sessions => TPM2_ST_SESSIONS,
StructureTag::Reserved1 => TPM2_ST_RESERVED1,
StructureTag::Reserved2 => TPM2_ST_RESERVED2,
StructureTag::AttestNv => TPM2_ST_ATTEST_NV,
StructureTag::AttestCommandAudit => TPM2_ST_ATTEST_COMMAND_AUDIT,
StructureTag::AttestSessionAudit => TPM2_ST_ATTEST_SESSION_AUDIT,
StructureTag::AttestCertify => TPM2_ST_ATTEST_CERTIFY,
StructureTag::AttestQuote => TPM2_ST_ATTEST_QUOTE,
StructureTag::AttestTime => TPM2_ST_ATTEST_TIME,
StructureTag::AttestCreation => TPM2_ST_ATTEST_CREATION,
StructureTag::AttestNvDigest => TPM2_ST_ATTEST_NV_DIGEST,
StructureTag::Creation => TPM2_ST_CREATION,
StructureTag::Verified => TPM2_ST_VERIFIED,
StructureTag::AuthSecret => TPM2_ST_AUTH_SECRET,
StructureTag::Hashcheck => TPM2_ST_HASHCHECK,
StructureTag::AuthSigned => TPM2_ST_AUTH_SIGNED,
StructureTag::FuManifest => TPM2_ST_FU_MANIFEST,
}
}
}
impl TryFrom<TPM2_ST> for StructureTag {
type Error = Error;
fn try_from(tpm2_structure_tag: TPM2_ST) -> Result<Self> {
match tpm2_structure_tag {
TPM2_ST_RSP_COMMAND => Ok(StructureTag::RspCommand),
TPM2_ST_NULL => Ok(StructureTag::Null),
TPM2_ST_NO_SESSIONS => Ok(StructureTag::NoSessions),
TPM2_ST_SESSIONS => Ok(StructureTag::Sessions),
TPM2_ST_RESERVED1 => Ok(StructureTag::Reserved1),
TPM2_ST_RESERVED2 => Ok(StructureTag::Reserved2),
TPM2_ST_ATTEST_NV => Ok(StructureTag::AttestNv),
TPM2_ST_ATTEST_COMMAND_AUDIT => Ok(StructureTag::AttestCommandAudit),
TPM2_ST_ATTEST_SESSION_AUDIT => Ok(StructureTag::AttestSessionAudit),
TPM2_ST_ATTEST_CERTIFY => Ok(StructureTag::AttestCertify),
TPM2_ST_ATTEST_QUOTE => Ok(StructureTag::AttestQuote),
TPM2_ST_ATTEST_TIME => Ok(StructureTag::AttestTime),
TPM2_ST_ATTEST_CREATION => Ok(StructureTag::AttestCreation),
TPM2_ST_RESERVED3 => Err(Error::local_error(WrapperErrorKind::InvalidParam)),
TPM2_ST_ATTEST_NV_DIGEST => Ok(StructureTag::AttestNvDigest),
TPM2_ST_CREATION => Ok(StructureTag::Creation),
TPM2_ST_VERIFIED => Ok(StructureTag::Verified),
TPM2_ST_AUTH_SECRET => Ok(StructureTag::AuthSecret),
TPM2_ST_HASHCHECK => Ok(StructureTag::Hashcheck),
TPM2_ST_AUTH_SIGNED => Ok(StructureTag::AuthSigned),
TPM2_ST_FU_MANIFEST => Ok(StructureTag::FuManifest),
_ => Err(Error::local_error(WrapperErrorKind::InvalidParam)),
}
}
}