tpm2_protocol/data/
enum.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2// Copyright (c) 2025 Opinsys Oy
3// Copyright (c) 2024-2025 Jarkko Sakkinen
4
5use crate::tpm_enum;
6tpm_enum! {
7    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Hash, Default)]
8    pub enum TpmAlgId(u16) {
9        (Error, 0x0000, "TPM_ALG_ERROR"),
10        (Rsa, 0x0001, "TPM_ALG_RSA"),
11        (Sha1, 0x0004, "TPM_ALG_SHA1"),
12        (Hmac, 0x0005, "TPM_ALG_HMAC"),
13        (Aes, 0x0006, "TPM_ALG_AES"),
14        (Mgf1, 0x0007, "TPM_ALG_MGF1"),
15        (KeyedHash, 0x0008, "TPM_ALG_KEYEDHASH"),
16        (Xor, 0x000A, "TPM_ALG_XOR"),
17        (Sha256, 0x000B, "TPM_ALG_SHA256"),
18        (Sha384, 0x000C, "TPM_ALG_SHA384"),
19        (Sha512, 0x000D, "TPM_ALG_SHA512"),
20        #[default]
21        (Null, 0x0010, "TPM_ALG_NULL"),
22        (Sm3_256, 0x0012, "TPM_ALG_SM3_256"),
23        (Sm4, 0x0013, "TPM_ALG_SM4"),
24        (Rsassa, 0x0014, "TPM_ALG_RSASSA"),
25        (Rsaes, 0x0015, "TPM_ALG_RSAES"),
26        (Rsapss, 0x0016, "TPM_ALG_RSAPSS"),
27        (Oaep, 0x0017, "TPM_ALG_OAEP"),
28        (Ecdsa, 0x0018, "TPM_ALG_ECDSA"),
29        (Ecdh, 0x0019, "TPM_ALG_ECDH"),
30        (Ecdaa, 0x001A, "TPM_ALG_ECDAA"),
31        (Sm2, 0x001B, "TPM_ALG_SM2"),
32        (Ecschnorr, 0x001C, "TPM_ALG_ECSCHNORR"),
33        (Ecmqv, 0x001D, "TPM_ALG_ECMQV"),
34        (Kdf1Sp800_56A, 0x0020, "TPM_ALG_KDF1_SP800_56A"),
35        (Kdf2, 0x0021, "TPM_ALG_KDF2"),
36        (Kdf1Sp800_108, 0x0022, "TPM_ALG_KDF1_SP800_108"),
37        (Ecc, 0x0023, "TPM_ALG_ECC"),
38        (SymCipher, 0x0025, "TPM_ALG_SYMCIPHER"),
39        (Camellia, 0x0026, "TPM_ALG_CAMELLIA"),
40        (Ctr, 0x0040, "TPM_ALG_CTR"),
41        (Ofb, 0x0041, "TPM_ALG_OFB"),
42        (Cbc, 0x0042, "TPM_ALG_CBC"),
43        (Cfb, 0x0043, "TPM_ALG_CFB"),
44        (Ecb, 0x0044, "TPM_ALG_ECB"),
45    }
46}
47
48tpm_enum! {
49    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
50    pub enum TpmAt(u32) {
51        (Any, 0x0000_0000, "TPM_AT_ANY"),
52        (Error, 0x0000_0001, "TPM_AT_ERROR"),
53        (Pv1, 0x0000_0002, "TPM_AT_PV1"),
54        (Vend, 0x8000_0000, "TPM_AT_VEND"),
55    }
56}
57
58impl Default for TpmAt {
59    fn default() -> Self {
60        Self::Any
61    }
62}
63
64tpm_enum! {
65    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
66    pub enum TpmCap(u32) {
67        (Algs, 0x0000_0000, "TPM_CAP_ALGS"),
68        (Handles, 0x0000_0001, "TPM_CAP_HANDLES"),
69        (Commands, 0x0000_0002, "TPM_CAP_COMMANDS"),
70        (Pcrs, 0x0000_0005, "TPM_CAP_PCRS"),
71        (EccCurves, 0x0000_0006, "TPM_CAP_ECC_CURVES"),
72    }
73}
74
75tpm_enum! {
76    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone)]
77    pub enum TpmCc(u32) {
78        (NvUndefineSpaceSpecial, 0x0000_011F, "TPM_CC_NV_UndefineSpaceSpecial"),
79        (EvictControl, 0x0000_0120, "TPM_CC_EvictControl"),
80        (HierarchyControl, 0x0000_0121, "TPM_CC_HierarchyControl"),
81        (NvUndefineSpace, 0x0000_0122, "TPM_CC_NV_UndefineSpace"),
82        (ChangeEps, 0x0000_0124, "TPM_CC_ChangeEPS"),
83        (ChangePps, 0x0000_0125, "TPM_CC_ChangePPS"),
84        (Clear, 0x0000_0126, "TPM_CC_Clear"),
85        (ClearControl, 0x0000_0127, "TPM_CC_ClearControl"),
86        (ClockSet, 0x0000_0128, "TPM_CC_ClockSet"),
87        (HierarchyChangeAuth, 0x0000_0129, "TPM_CC_HierarchyChangeAuth"),
88        (NvDefineSpace, 0x0000_012A, "TPM_CC_NV_DefineSpace"),
89        (PcrAllocate, 0x0000_012B, "TPM_CC_PCR_Allocate"),
90        (PcrSetAuthPolicy, 0x0000_012C, "TPM_CC_PCR_SetAuthPolicy"),
91        (PpCommands, 0x0000_012D, "TPM_CC_PP_Commands"),
92        (SetPrimaryPolicy, 0x0000_012E, "TPM_CC_SetPrimaryPolicy"),
93        (FieldUpgradeStart, 0x0000_012F, "TPM_CC_FieldUpgradeStart"),
94        (ClockRateAdjust, 0x0000_0130, "TPM_CC_ClockRateAdjust"),
95        (CreatePrimary, 0x0000_0131, "TPM_CC_CreatePrimary"),
96        (NvGlobalWriteLock, 0x0000_0132, "TPM_CC_NV_GlobalWriteLock"),
97        (GetCommandAuditDigest, 0x0000_0133, "TPM_CC_GetCommandAuditDigest"),
98        (NvIncrement, 0x0000_0134, "TPM_CC_NV_Increment"),
99        (NvSetBits, 0x0000_0135, "TPM_CC_NV_SetBits"),
100        (NvExtend, 0x0000_0136, "TPM_CC_NV_Extend"),
101        (NvWrite, 0x0000_0137, "TPM_CC_NV_Write"),
102        (NvWriteLock, 0x0000_0138, "TPM_CC_NV_WriteLock"),
103        (DictionaryAttackLockReset, 0x0000_0139, "TPM_CC_DictionaryAttackLockReset"),
104        (DictionaryAttackParameters, 0x0000_013A, "TPM_CC_DictionaryAttackParameters"),
105        (NvChangeAuth, 0x0000_013B, "TPM_CC_NV_ChangeAuth"),
106        (PcrEvent, 0x0000_013C, "TPM_CC_PCR_Event"),
107        (PcrReset, 0x0000_013D, "TPM_CC_PCR_Reset"),
108        (SequenceComplete, 0x0000_013E, "TPM_CC_SequenceComplete"),
109        (SetAlgorithmSet, 0x0000_013F, "TPM_CC_SetAlgorithmSet"),
110        (SetCommandCodeAuditStatus, 0x0000_0140, "TPM_CC_SetCommandCodeAuditStatus"),
111        (FieldUpgradeData, 0x0000_0141, "TPM_CC_FieldUpgradeData"),
112        (IncrementalSelfTest, 0x0000_0142, "TPM_CC_IncrementalSelfTest"),
113        (SelfTest, 0x0000_0143, "TPM_CC_SelfTest"),
114        (Startup, 0x0000_0144, "TPM_CC_Startup"),
115        (Shutdown, 0x0000_0145, "TPM_CC_Shutdown"),
116        (StirRandom, 0x0000_0146, "TPM_CC_StirRandom"),
117        (ActivateCredential, 0x0000_0147, "TPM_CC_ActivateCredential"),
118        (Certify, 0x0000_0148, "TPM_CC_Certify"),
119        (PolicyNv, 0x0000_0149, "TPM_CC_PolicyNV"),
120        (CertifyCreation, 0x0000_014A, "TPM_CC_CertifyCreation"),
121        (Duplicate, 0x0000_014B, "TPM_CC_Duplicate"),
122        (GetTime, 0x0000_014C, "TPM_CC_GetTime"),
123        (GetSessionAuditDigest, 0x0000_014D, "TPM_CC_GetSessionAuditDigest"),
124        (NvRead, 0x0000_014E, "TPM_CC_NV_Read"),
125        (NvReadLock, 0x0000_014F, "TPM_CC_NV_ReadLock"),
126        (ObjectChangeAuth, 0x0000_0150, "TPM_CC_ObjectChangeAuth"),
127        (PolicySecret, 0x0000_0151, "TPM_CC_PolicySecret"),
128        (Rewrap, 0x0000_0152, "TPM_CC_Rewrap"),
129        (Create, 0x0000_0153, "TPM_CC_Create"),
130        (EcdhZGen, 0x0000_0154, "TPM_CC_ECDH_ZGen"),
131        (Hmac, 0x0000_0155, "TPM_CC_HMAC"),
132        (Import, 0x0000_0156, "TPM_CC_Import"),
133        (Load, 0x0000_0157, "TPM_CC_Load"),
134        (Quote, 0x0000_0158, "TPM_CC_Quote"),
135        (RsaDecrypt, 0x0000_0159, "TPM_CC_RSA_Decrypt"),
136        (HmacStart, 0x0000_015B, "TPM_CC_HMAC_Start"),
137        (SequenceUpdate, 0x0000_015C, "TPM_CC_SequenceUpdate"),
138        (Sign, 0x0000_015D, "TPM_CC_Sign"),
139        (Unseal, 0x0000_015E, "TPM_CC_Unseal"),
140        (PolicySigned, 0x0000_0160, "TPM_CC_PolicySigned"),
141        (ContextLoad, 0x0000_0161, "TPM_CC_ContextLoad"),
142        (ContextSave, 0x0000_0162, "TPM_CC_ContextSave"),
143        (EcdhKeyGen, 0x0000_0163, "TPM_CC_ECDH_KeyGen"),
144        (EncryptDecrypt, 0x0000_0164, "TPM_CC_EncryptDecrypt"),
145        (FlushContext, 0x0000_0165, "TPM_CC_FlushContext"),
146        (LoadExternal, 0x0000_0167, "TPM_CC_LoadExternal"),
147        (MakeCredential, 0x0000_0168, "TPM_CC_MakeCredential"),
148        (NvReadPublic, 0x0000_0169, "TPM_CC_NV_ReadPublic"),
149        (PolicyAuthorize, 0x0000_016A, "TPM_CC_PolicyAuthorize"),
150        (PolicyAuthValue, 0x0000_016B, "TPM_CC_PolicyAuthValue"),
151        (PolicyCommandCode, 0x0000_016C, "TPM_CC_PolicyCommandCode"),
152        (PolicyCounterTimer, 0x0000_016D, "TPM_CC_PolicyCounterTimer"),
153        (PolicyCpHash, 0x0000_016E, "TPM_CC_PolicyCpHash"),
154        (PolicyLocality, 0x0000_016F, "TPM_CC_PolicyLocality"),
155        (PolicyNameHash, 0x0000_0170, "TPM_CC_PolicyNameHash"),
156        (PolicyOR, 0x0000_0171, "TPM_CC_PolicyOR"),
157        (PolicyTicket, 0x0000_0172, "TPM_CC_PolicyTicket"),
158        (ReadPublic, 0x0000_0173, "TPM_CC_ReadPublic"),
159        (RsaEncrypt, 0x0000_0174, "TPM_CC_RSA_Encrypt"),
160        (StartAuthSession, 0x0000_0176, "TPM_CC_StartAuthSession"),
161        (VerifySignature, 0x0000_0177, "TPM_CC_VerifySignature"),
162        (EccParameters, 0x0000_0178, "TPM_CC_ECC_Parameters"),
163        (FirmwareRead, 0x0000_0179, "TPM_CC_FirmwareRead"),
164        (GetCapability, 0x0000_017A, "TPM_CC_GetCapability"),
165        (GetRandom, 0x0000_017B, "TPM_CC_GetRandom"),
166        (GetTestResult, 0x0000_017C, "TPM_CC_GetTestResult"),
167        (Hash, 0x0000_017D, "TPM_CC_Hash"),
168        (PcrRead, 0x0000_017E, "TPM_CC_PCR_Read"),
169        (PolicyPcr, 0x0000_017F, "TPM_CC_PolicyPCR"),
170        (PolicyRestart, 0x0000_0180, "TPM_CC_PolicyRestart"),
171        (ReadClock, 0x0000_0181, "TPM_CC_ReadClock"),
172        (PcrExtend, 0x0000_0182, "TPM_CC_PCR_Extend"),
173        (PcrSetAuthValue, 0x0000_0183, "TPM_CC_PCR_SetAuthValue"),
174        (NvCertify, 0x0000_0184, "TPM_CC_NV_Certify"),
175        (EventSequenceComplete, 0x0000_0185, "TPM_CC_EventSequenceComplete"),
176        (HashSequenceStart, 0x0000_0186, "TPM_CC_HashSequenceStart"),
177        (PolicyPhysicalPresence, 0x0000_0187, "TPM_CC_PolicyPhysicalPresence"),
178        (PolicyDuplicationSelect, 0x0000_0188, "TPM_CC_PolicyDuplicationSelect"),
179        (PolicyGetDigest, 0x0000_0189, "TPM_CC_PolicyGetDigest"),
180        (TestParms, 0x0000_018A, "TPM_CC_TestParms"),
181        (Commit, 0x0000_018B, "TPM_CC_Commit"),
182        (PolicyPassword, 0x0000_018C, "TPM_CC_PolicyPassword"),
183        (ZGen2Phase, 0x0000_018D, "TPM_CC_ZGen_2Phase"),
184        (EcEphemeral, 0x0000_018E, "TPM_CC_EC_Ephemeral"),
185        (PolicyNvWritten, 0x0000_018F, "TPM_CC_PolicyNvWritten"),
186        (PolicyTemplate, 0x0000_0190, "TPM_CC_PolicyTemplate"),
187        (CreateLoaded, 0x0000_0191, "TPM_CC_CreateLoaded"),
188        (PolicyAuthorizeNv, 0x0000_0192, "TPM_CC_PolicyAuthorizeNV"),
189        (EncryptDecrypt2, 0x0000_0193, "TPM_CC_EncryptDecrypt2"),
190        (AcGetCapability, 0x0000_0194, "TPM_CC_AcGetCapability"),
191        (AcSend, 0x0000_0195, "TPM_CC_AcSend"),
192        (PolicyAcSendSelect, 0x0000_0196, "TPM_CC_Policy_AC_SendSelect"),
193        (ActSetTimeout, 0x0000_0198, "TPM2_ACT_SetTimeout"),
194        (EccEncrypt, 0x0000_0199, "TPM_CC_ECC_Encrypt"),
195        (EccDecrypt, 0x0000_019A, "TPM_CC_ECC_Decrypt"),
196        (PolicyCapability, 0x0000_019B, "TPM_CC_PolicyCapability"),
197        (PolicyParameters, 0x0000_019C, "TPM_CC_PolicyParameters"),
198        (NvDefineSpace2, 0x0000_019D, "TPM_CC_NV_DefineSpace2"),
199        (NvReadPublic2, 0x0000_019E, "TPM_CC_NV_ReadPublic2"),
200        (SetCapability, 0x0000_019F, "TPM_CC_SetCapability"),
201        (ReadOnlyControl, 0x0000_01A0, "TPM_CC_ReadOnlyControl"),
202        (PolicyTransportSpdm, 0x0000_01A1, "TPM_CC_Policy_TransportSPDM"),
203        (VendorTcgTest, 0x2000_0000, "TPM_CC_Vendor_TCG_Test"),
204    }
205}
206
207tpm_enum! {
208    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Hash, Default)]
209    pub enum TpmClockAdjust(i8) {
210        (CoarseSlower, -3, "TPM_CLOCK_COARSE_SLOWER"),
211        (MediumSlower, -2, "TPM_CLOCK_MEDIUM_SLOWER"),
212        (FineSlower, -1, "TPM_CLOCK_FINE_SLOWER"),
213        #[default]
214        (NoChange, 0, "TPM_CLOCK_NO_CHANGE"),
215        (FineFaster, 1, "TPM_CLOCK_FINE_FASTER"),
216        (MediumFaster, 2, "TPM_CLOCK_MEDIUM_FASTER"),
217        (CoarseFaster, 3, "TPM_CLOCK_COARSE_FASTER"),
218    }
219}
220
221tpm_enum! {
222    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
223    pub enum TpmEo(u16) {
224        #[default]
225        (Eq, 0x0000, "TPM_EO_EQ"),
226        (Neq, 0x0001, "TPM_EO_NEQ"),
227        (SignedGt, 0x0002, "TPM_EO_SIGNED_GT"),
228        (UnsignedGt, 0x0003, "TPM_EO_UNSIGNED_GT"),
229        (SignedLt, 0x0004, "TPM_EO_SIGNED_LT"),
230        (UnsignedLt, 0x0005, "TPM_EO_UNSIGNED_LT"),
231        (SignedGe, 0x0006, "TPM_EO_SIGNED_GE"),
232        (UnsignedGe, 0x0007, "TPM_EO_UNSIGNED_GE"),
233        (SignedLe, 0x0008, "TPM_EO_SIGNED_LE"),
234        (UnsignedLe, 0x0009, "TPM_EO_UNSIGNED_LE"),
235        (Bitset, 0x000A, "TPM_EO_BITSET"),
236        (Bitclear, 0x000B, "TPM_EO_BITCLEAR"),
237    }
238}
239
240tpm_enum! {
241    #[derive(Debug, Default, PartialEq, Eq, Clone, Copy)]
242    pub enum TpmEccCurve(u16) {
243        #[default]
244        (None, 0x0000, "TPM_ECC_NONE"),
245        (NistP192, 0x0001, "TPM_ECC_NIST_P192"),
246        (NistP224, 0x0002, "TPM_ECC_NIST_P224"),
247        (NistP256, 0x0003, "TPM_ECC_NIST_P256"),
248        (NistP384, 0x0004, "TPM_ECC_NIST_P384"),
249        (NistP521, 0x0005, "TPM_ECC_NIST_P521"),
250    }
251}
252
253tpm_enum! {
254    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
255    pub enum TpmHt(u8) {
256        (Pcr, 0x00, "TPM_HT_PCR"),
257        (NvIndex, 0x01, "TPM_HT_NV_INDEX"),
258        (HmacSession, 0x02, "TPM_HT_HMAC_SESSION"),
259        (PolicySession, 0x03, "TPM_HT_POLICY_SESSION"),
260        (ExternalNv, 0x11, "TPM_HT_EXTERNAL_NV"),
261        (PermanentNv, 0x12, "TPM_HT_PERMANENT_NV"),
262        (Permanent, 0x40, "TPM_HT_PERMANENT"),
263        (Transient, 0x80, "TPM_HT_TRANSIENT"),
264        (Persistent, 0x81, "TPM_HT_PERSISTENT"),
265        (Ac, 0x90, "TPM_HT_AC"),
266    }
267}
268
269tpm_enum! {
270    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
271    pub enum TpmRh(u32) {
272        (Owner, 0x4000_0001, "TPM_RH_OWNER"),
273        #[default]
274        (Null, 0x4000_0007, "TPM_RH_NULL"),
275        (Password, 0x4000_0009, "TPM_RH_PW"),
276        (Lockout, 0x4000_000A, "TPM_RH_LOCKOUT"),
277        (Endorsement, 0x4000_000B, "TPM_RH_ENDORSEMENT"),
278        (Platform, 0x4000_000C, "TPM_RH_PLATFORM"),
279        (TransientFirst, 0x8000_0000, "First transient handle"),
280        (PersistentFirst, 0x8100_0000, "First persistent handle"),
281    }
282}
283
284tpm_enum! {
285    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
286    pub enum TpmSe(u8) {
287        (Hmac, 0x00, "TPM_SE_HMAC"),
288        (Policy, 0x01, "TPM_SE_POLICY"),
289        (Trial, 0x03, "TPM_SE_TRIAL"),
290    }
291}
292
293tpm_enum! {
294    #[derive(Debug, PartialEq, Eq, Copy, Clone, Default)]
295    pub enum TpmSt(u16) {
296        (RspCommand, 0x00C4, "TPM_ST_RSP_COMMAND"),
297        #[default]
298        (Null, 0x8000, "TPM_ST_NULL"),
299        (NoSessions, 0x8001, "TPM_ST_NO_SESSIONS"),
300        (Sessions, 0x8002, "TPM_ST_SESSIONS"),
301        (AttestNv, 0x8014, "TPM_ST_ATTEST_NV"),
302        (AttestCommandAudit, 0x8015, "TPM_ST_ATTEST_COMMAND_AUDIT"),
303        (AttestSessionAudit, 0x8016, "TPM_ST_ATTEST_SESSION_AUDIT"),
304        (AttestCertify, 0x8017, "TPM_ST_ATTEST_CERTIFY"),
305        (AttestQuote, 0x8018, "TPM_ST_ATTEST_QUOTE"),
306        (AttestTime, 0x8019, "TPM_ST_ATTEST_TIME"),
307        (AttestCreation, 0x801A, "TPM_ST_ATTEST_CREATION"),
308        (AttestNvDigest, 0x801C, "TPM_ST_ATTEST_NV_DIGEST"),
309        (Creation, 0x8021, "TPM_ST_CREATION"),
310        (Verified, 0x8022, "TPM_ST_VERIFIED"),
311        (AuthSecret, 0x8023, "TPM_ST_AUTH_SECRET"),
312        (HashCheck, 0x8024, "TPM_ST_HASHCHECK"),
313        (AuthSigned, 0x8025, "TPM_ST_AUTH_SIGNED"),
314    }
315}
316
317tpm_enum! {
318    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
319    pub enum TpmSu(u16) {
320        (Clear, 0x0000, "TPM_SU_CLEAR"),
321        (State, 0x0001, "TPM_SU_STATE"),
322    }
323}