Skip to content

Commit 8dacad0

Browse files
committed
Adds missing property tags.
Extends the PropertyTag enum with the two property tags that were added in "Trusted Platform Module Library, Part 2: Structures, Family 2.0, Level 00, Revision 01.83, January 25, 2024". This fixes #608 Signed-off-by: Jesper Brynolf <jesper.brynolf@gmail.com>
1 parent 8c856a7 commit 8dacad0

File tree

4 files changed

+146
-0
lines changed

4 files changed

+146
-0
lines changed

tss-esapi/src/constants/property_tag.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ pub enum PropertyTag {
5757
NvBufferMax = TPM2_PT_NV_BUFFER_MAX,
5858
Modes = TPM2_PT_MODES,
5959
MaxCapBuffer = TPM2_PT_MAX_CAP_BUFFER,
60+
FirmwareSvn = TPM2_PT_FIRMWARE_SVN,
61+
FirmwareMaxSvn = TPM2_PT_FIRMWARE_MAX_SVN,
6062
// Variable
6163
Permanent = TPM2_PT_PERMANENT,
6264
StartupClear = TPM2_PT_STARTUP_CLEAR,

tss-esapi/src/constants/tss.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,8 @@ pub const TPM2_PT_VENDOR_COMMANDS: TPM2_PT = TPM2_PT_FIXED + 43; /* number of ve
426426
pub const TPM2_PT_NV_BUFFER_MAX: TPM2_PT = TPM2_PT_FIXED + 44; /* the maximum data size in one NV write command */
427427
pub const TPM2_PT_MODES: TPM2_PT = TPM2_PT_FIXED + 45; /* a TPMA_MODES value indicating that the TPM is designed for these modes. */
428428
pub const TPM2_PT_MAX_CAP_BUFFER: TPM2_PT = TPM2_PT_FIXED + 46; /* the maximum size of a TPMS_CAPABILITY_DATA structure returned in TPM2_GetCapability(). */
429+
pub const TPM2_PT_FIRMWARE_SVN: TPM2_PT = TPM2_PT_FIXED + 47; /* the TPM vendor-specific value indicating the SVN of the firmware. This value shall be less than or equal to UINT16_MAX. */
430+
pub const TPM2_PT_FIRMWARE_MAX_SVN: TPM2_PT = TPM2_PT_FIXED + 48; /* the TPM vendor-specific value indicating the maximum value that TPM_PT_FIRMWARE_SVN may take in the future. */
429431
pub const TPM2_PT_VAR: TPM2_PT = TPM2_PT_GROUP * 2; /* the group of variable properties returned as TPMS_TAGGED_PROPERTY. The properties in this group change because of a Protected Capability other than a firmware update. The values are not necessarily persistent across all power transitions. */
430432
pub const TPM2_PT_PERMANENT: TPM2_PT = TPM2_PT_VAR + 0; /* TPMA_PERMANENT */
431433
pub const TPM2_PT_STARTUP_CLEAR: TPM2_PT = TPM2_PT_VAR + 1; /* TPMA_STARTUP_CLEAR */

tss-esapi/tests/integration_tests/constants_tests/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ mod capabilities_tests;
55
mod command_code_tests;
66
mod nv_index_type_tests;
77
mod pcr_property_tag_tests;
8+
mod property_tag_tests;
89
mod return_code_tests;
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
// Copyright 2025 Contributors to the Parsec project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
use std::convert::TryFrom;
5+
use tss_esapi::{
6+
constants::{
7+
tss::{
8+
TPM2_PT_ACTIVE_SESSIONS_MAX, TPM2_PT_ALGORITHM_SET, TPM2_PT_AUDIT_COUNTER_0,
9+
TPM2_PT_AUDIT_COUNTER_1, TPM2_PT_CLOCK_UPDATE, TPM2_PT_CONTEXT_GAP_MAX,
10+
TPM2_PT_CONTEXT_HASH, TPM2_PT_CONTEXT_SYM, TPM2_PT_CONTEXT_SYM_SIZE,
11+
TPM2_PT_DAY_OF_YEAR, TPM2_PT_FAMILY_INDICATOR, TPM2_PT_FIRMWARE_MAX_SVN,
12+
TPM2_PT_FIRMWARE_SVN, TPM2_PT_FIRMWARE_VERSION_1, TPM2_PT_FIRMWARE_VERSION_2,
13+
TPM2_PT_FIXED, TPM2_PT_HR_ACTIVE, TPM2_PT_HR_ACTIVE_AVAIL, TPM2_PT_HR_LOADED,
14+
TPM2_PT_HR_LOADED_AVAIL, TPM2_PT_HR_LOADED_MIN, TPM2_PT_HR_NV_INDEX,
15+
TPM2_PT_HR_PERSISTENT, TPM2_PT_HR_PERSISTENT_AVAIL, TPM2_PT_HR_PERSISTENT_MIN,
16+
TPM2_PT_HR_TRANSIENT_AVAIL, TPM2_PT_HR_TRANSIENT_MIN, TPM2_PT_INPUT_BUFFER,
17+
TPM2_PT_LEVEL, TPM2_PT_LIBRARY_COMMANDS, TPM2_PT_LOADED_CURVES,
18+
TPM2_PT_LOCKOUT_COUNTER, TPM2_PT_LOCKOUT_INTERVAL, TPM2_PT_LOCKOUT_RECOVERY,
19+
TPM2_PT_MANUFACTURER, TPM2_PT_MAX_AUTH_FAIL, TPM2_PT_MAX_CAP_BUFFER,
20+
TPM2_PT_MAX_COMMAND_SIZE, TPM2_PT_MAX_DIGEST, TPM2_PT_MAX_OBJECT_CONTEXT,
21+
TPM2_PT_MAX_RESPONSE_SIZE, TPM2_PT_MAX_SESSION_CONTEXT, TPM2_PT_MEMORY, TPM2_PT_MODES,
22+
TPM2_PT_NONE, TPM2_PT_NV_BUFFER_MAX, TPM2_PT_NV_COUNTERS, TPM2_PT_NV_COUNTERS_AVAIL,
23+
TPM2_PT_NV_COUNTERS_MAX, TPM2_PT_NV_INDEX_MAX, TPM2_PT_NV_WRITE_RECOVERY,
24+
TPM2_PT_ORDERLY_COUNT, TPM2_PT_PCR_COUNT, TPM2_PT_PCR_SELECT_MIN, TPM2_PT_PERMANENT,
25+
TPM2_PT_PS_DAY_OF_YEAR, TPM2_PT_PS_FAMILY_INDICATOR, TPM2_PT_PS_LEVEL,
26+
TPM2_PT_PS_REVISION, TPM2_PT_PS_YEAR, TPM2_PT_REVISION, TPM2_PT_SPLIT_MAX,
27+
TPM2_PT_STARTUP_CLEAR, TPM2_PT_TOTAL_COMMANDS, TPM2_PT_VAR, TPM2_PT_VENDOR_COMMANDS,
28+
TPM2_PT_VENDOR_STRING_1, TPM2_PT_VENDOR_STRING_2, TPM2_PT_VENDOR_STRING_3,
29+
TPM2_PT_VENDOR_STRING_4, TPM2_PT_VENDOR_TPM_TYPE, TPM2_PT_YEAR,
30+
},
31+
PropertyTag,
32+
},
33+
tss2_esys::TPM2_PT,
34+
Error, WrapperErrorKind,
35+
};
36+
37+
macro_rules! test_valid_conversion {
38+
(PropertyTag::$item:ident, $tpm_pt:ident) => {
39+
assert_eq!(
40+
$tpm_pt,
41+
TPM2_PT::from(PropertyTag::$item),
42+
"Failed to convert {} to TPM2_PT",
43+
std::stringify!(PropertyTag::$item),
44+
);
45+
46+
assert_eq!(
47+
PropertyTag::$item,
48+
PropertyTag::try_from($tpm_pt).expect(&format!(
49+
"Failed to convert {} to a PropertyTag",
50+
std::stringify!($tpm_pt)
51+
)),
52+
"{} did not convert into {}",
53+
std::stringify!($tpm_pt),
54+
std::stringify!(PropertyTag::$item),
55+
)
56+
};
57+
}
58+
59+
#[test]
60+
fn test_invalid_conversions() {
61+
const INVALID_PT_VALUE: TPM2_PT = 0xFFFFFFFF;
62+
assert_eq!(
63+
Err(Error::WrapperError(WrapperErrorKind::InvalidParam)),
64+
PropertyTag::try_from(INVALID_PT_VALUE),
65+
"Expected an error when converting 0xFFFFFFFF to a PropertyTag"
66+
);
67+
}
68+
69+
#[test]
70+
fn test_valid_conversions() {
71+
test_valid_conversion!(PropertyTag::None, TPM2_PT_NONE);
72+
test_valid_conversion!(PropertyTag::FamilyIndicator, TPM2_PT_FAMILY_INDICATOR);
73+
test_valid_conversion!(PropertyTag::Level, TPM2_PT_LEVEL);
74+
test_valid_conversion!(PropertyTag::Revision, TPM2_PT_REVISION);
75+
test_valid_conversion!(PropertyTag::DayOfYear, TPM2_PT_DAY_OF_YEAR);
76+
test_valid_conversion!(PropertyTag::Year, TPM2_PT_YEAR);
77+
test_valid_conversion!(PropertyTag::Manufacturer, TPM2_PT_MANUFACTURER);
78+
test_valid_conversion!(PropertyTag::VendorString1, TPM2_PT_VENDOR_STRING_1);
79+
test_valid_conversion!(PropertyTag::VendorString2, TPM2_PT_VENDOR_STRING_2);
80+
test_valid_conversion!(PropertyTag::VendorString3, TPM2_PT_VENDOR_STRING_3);
81+
test_valid_conversion!(PropertyTag::VendorString4, TPM2_PT_VENDOR_STRING_4);
82+
test_valid_conversion!(PropertyTag::VendorTPMType, TPM2_PT_VENDOR_TPM_TYPE);
83+
test_valid_conversion!(PropertyTag::FirmwareVersion1, TPM2_PT_FIRMWARE_VERSION_1);
84+
test_valid_conversion!(PropertyTag::FirmwareVersion2, TPM2_PT_FIRMWARE_VERSION_2);
85+
test_valid_conversion!(PropertyTag::InputBuffer, TPM2_PT_INPUT_BUFFER);
86+
test_valid_conversion!(PropertyTag::HrTransientMin, TPM2_PT_HR_TRANSIENT_MIN);
87+
test_valid_conversion!(PropertyTag::HrPersistentMin, TPM2_PT_HR_PERSISTENT_MIN);
88+
test_valid_conversion!(PropertyTag::HrLoadedMin, TPM2_PT_HR_LOADED_MIN);
89+
test_valid_conversion!(PropertyTag::ActiveSessionsMax, TPM2_PT_ACTIVE_SESSIONS_MAX);
90+
test_valid_conversion!(PropertyTag::PcrCount, TPM2_PT_PCR_COUNT);
91+
test_valid_conversion!(PropertyTag::PcrSelectMin, TPM2_PT_PCR_SELECT_MIN);
92+
test_valid_conversion!(PropertyTag::ContextGapMax, TPM2_PT_CONTEXT_GAP_MAX);
93+
test_valid_conversion!(PropertyTag::NvCountersMax, TPM2_PT_NV_COUNTERS_MAX);
94+
test_valid_conversion!(PropertyTag::NvIndexMax, TPM2_PT_NV_INDEX_MAX);
95+
test_valid_conversion!(PropertyTag::Memory, TPM2_PT_MEMORY);
96+
test_valid_conversion!(PropertyTag::ClockUpdate, TPM2_PT_CLOCK_UPDATE);
97+
test_valid_conversion!(PropertyTag::ContextHash, TPM2_PT_CONTEXT_HASH);
98+
test_valid_conversion!(PropertyTag::ContextSym, TPM2_PT_CONTEXT_SYM);
99+
test_valid_conversion!(PropertyTag::ContextSymSize, TPM2_PT_CONTEXT_SYM_SIZE);
100+
test_valid_conversion!(PropertyTag::OrderlyCount, TPM2_PT_ORDERLY_COUNT);
101+
test_valid_conversion!(PropertyTag::MaxCommandSize, TPM2_PT_MAX_COMMAND_SIZE);
102+
test_valid_conversion!(PropertyTag::MaxResponseSize, TPM2_PT_MAX_RESPONSE_SIZE);
103+
test_valid_conversion!(PropertyTag::MaxDigest, TPM2_PT_MAX_DIGEST);
104+
test_valid_conversion!(PropertyTag::MaxObjectContext, TPM2_PT_MAX_OBJECT_CONTEXT);
105+
test_valid_conversion!(PropertyTag::MaxSessionContext, TPM2_PT_MAX_SESSION_CONTEXT);
106+
test_valid_conversion!(PropertyTag::PsFamilyIndicator, TPM2_PT_PS_FAMILY_INDICATOR);
107+
test_valid_conversion!(PropertyTag::PsLevel, TPM2_PT_PS_LEVEL);
108+
test_valid_conversion!(PropertyTag::PsRevision, TPM2_PT_PS_REVISION);
109+
test_valid_conversion!(PropertyTag::PsDayOfYear, TPM2_PT_PS_DAY_OF_YEAR);
110+
test_valid_conversion!(PropertyTag::PsYear, TPM2_PT_PS_YEAR);
111+
test_valid_conversion!(PropertyTag::SplitMax, TPM2_PT_SPLIT_MAX);
112+
test_valid_conversion!(PropertyTag::TotalCommands, TPM2_PT_TOTAL_COMMANDS);
113+
test_valid_conversion!(PropertyTag::LibraryCommands, TPM2_PT_LIBRARY_COMMANDS);
114+
test_valid_conversion!(PropertyTag::VendorCommands, TPM2_PT_VENDOR_COMMANDS);
115+
test_valid_conversion!(PropertyTag::NvBufferMax, TPM2_PT_NV_BUFFER_MAX);
116+
test_valid_conversion!(PropertyTag::Modes, TPM2_PT_MODES);
117+
test_valid_conversion!(PropertyTag::MaxCapBuffer, TPM2_PT_MAX_CAP_BUFFER);
118+
test_valid_conversion!(PropertyTag::FirmwareSvn, TPM2_PT_FIRMWARE_SVN);
119+
test_valid_conversion!(PropertyTag::FirmwareMaxSvn, TPM2_PT_FIRMWARE_MAX_SVN);
120+
test_valid_conversion!(PropertyTag::Permanent, TPM2_PT_PERMANENT);
121+
test_valid_conversion!(PropertyTag::StartupClear, TPM2_PT_STARTUP_CLEAR);
122+
test_valid_conversion!(PropertyTag::HrNvIndex, TPM2_PT_HR_NV_INDEX);
123+
test_valid_conversion!(PropertyTag::HrLoaded, TPM2_PT_HR_LOADED);
124+
test_valid_conversion!(PropertyTag::HrLoadedAvail, TPM2_PT_HR_LOADED_AVAIL);
125+
test_valid_conversion!(PropertyTag::HrActive, TPM2_PT_HR_ACTIVE);
126+
test_valid_conversion!(PropertyTag::HrActiveAvail, TPM2_PT_HR_ACTIVE_AVAIL);
127+
test_valid_conversion!(PropertyTag::HrTransientAvail, TPM2_PT_HR_TRANSIENT_AVAIL);
128+
test_valid_conversion!(PropertyTag::HrPersistent, TPM2_PT_HR_PERSISTENT);
129+
test_valid_conversion!(PropertyTag::HrPersistentAvail, TPM2_PT_HR_PERSISTENT_AVAIL);
130+
test_valid_conversion!(PropertyTag::NvCounters, TPM2_PT_NV_COUNTERS);
131+
test_valid_conversion!(PropertyTag::NvCountersAvail, TPM2_PT_NV_COUNTERS_AVAIL);
132+
test_valid_conversion!(PropertyTag::AlgorithmSet, TPM2_PT_ALGORITHM_SET);
133+
test_valid_conversion!(PropertyTag::LoadedCurves, TPM2_PT_LOADED_CURVES);
134+
test_valid_conversion!(PropertyTag::LockoutCounter, TPM2_PT_LOCKOUT_COUNTER);
135+
test_valid_conversion!(PropertyTag::MaxAuthFail, TPM2_PT_MAX_AUTH_FAIL);
136+
test_valid_conversion!(PropertyTag::LockoutInterval, TPM2_PT_LOCKOUT_INTERVAL);
137+
test_valid_conversion!(PropertyTag::LockoutRecovery, TPM2_PT_LOCKOUT_RECOVERY);
138+
test_valid_conversion!(PropertyTag::WriteRecovery, TPM2_PT_NV_WRITE_RECOVERY);
139+
test_valid_conversion!(PropertyTag::AuditCounter0, TPM2_PT_AUDIT_COUNTER_0);
140+
test_valid_conversion!(PropertyTag::AuditCounter1, TPM2_PT_AUDIT_COUNTER_1);
141+
}

0 commit comments

Comments
 (0)