tss_esapi/constants/
command_code.rs

1// Copyright 2021 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3mod structure;
4
5use crate::{tss2_esys::TPM2_CC, Error, Result, WrapperErrorKind};
6use log::error;
7use num_derive::{FromPrimitive, ToPrimitive};
8use num_traits::{FromPrimitive, ToPrimitive};
9use std::convert::TryFrom;
10use structure::CommandCodeStructure;
11
12/// Enum representing the command code constants.
13///
14/// # Details
15/// This corresponds to the TPM2_CC constants.
16#[derive(FromPrimitive, ToPrimitive, Copy, Clone, Debug, PartialEq, Eq, Hash)]
17#[repr(u32)]
18pub enum CommandCode {
19    NvUndefineSpaceSpecial = CommandCodeStructure::NV_UNDEFINE_SPACE_SPECIAL.0,
20    EvictControl = CommandCodeStructure::EVICT_CONTROL.0,
21    HierarchyControl = CommandCodeStructure::HIERARCHY_CONTROL.0,
22    NvUndefineSpace = CommandCodeStructure::NV_UNDEFINE_SPACE.0,
23    ChangeEps = CommandCodeStructure::CHANGE_EPS.0,
24    ChangePps = CommandCodeStructure::CHANGE_PPS.0,
25    Clear = CommandCodeStructure::CLEAR.0,
26    ClearControl = CommandCodeStructure::CLEAR_CONTROL.0,
27    ClockSet = CommandCodeStructure::CLOCK_SET.0,
28    HierarchyChangeAuth = CommandCodeStructure::HIERARCHY_CHANGE_AUTH.0,
29    NvDefineSpace = CommandCodeStructure::NV_DEFINE_SPACE.0,
30    PcrAllocate = CommandCodeStructure::PCR_ALLOCATE.0,
31    PcrSetAuthPolicy = CommandCodeStructure::PCR_SET_AUTH_POLICY.0,
32    PpCommands = CommandCodeStructure::PP_COMMANDS.0,
33    SetPrimaryPolicy = CommandCodeStructure::SET_PRIMARY_POLICY.0,
34    FieldUpgradeStart = CommandCodeStructure::FIELD_UPGRADE_START.0,
35    ClockRateAdjust = CommandCodeStructure::CLOCK_RATE_ADJUST.0,
36    CreatePrimary = CommandCodeStructure::CREATE_PRIMARY.0,
37    NvGlobalWriteLock = CommandCodeStructure::NV_GLOBAL_WRITE_LOCK.0,
38    GetCommandAuditDigest = CommandCodeStructure::GET_COMMAND_AUDIT_DIGEST.0,
39    NvIncrement = CommandCodeStructure::NV_INCREMENT.0,
40    NvSetBits = CommandCodeStructure::NV_SET_BITS.0,
41    NvExtend = CommandCodeStructure::NV_EXTEND.0,
42    NvWrite = CommandCodeStructure::NV_WRITE.0,
43    NvWriteLock = CommandCodeStructure::NV_WRITE_LOCK.0,
44    DictionaryAttackLockReset = CommandCodeStructure::DICTIONARY_ATTACK_LOCK_RESET.0,
45    DictionaryAttackParameters = CommandCodeStructure::DICTIONARY_ATTACK_PARAMETERS.0,
46    NvChangeAuth = CommandCodeStructure::NV_CHANGE_AUTH.0,
47    PcrEvent = CommandCodeStructure::PCR_EVENT.0,
48    PcrReset = CommandCodeStructure::PCR_RESET.0,
49    SequenceComplete = CommandCodeStructure::SEQUENCE_COMPLETE.0,
50    SetAlgorithmSet = CommandCodeStructure::SET_ALGORITHM_SET.0,
51    SetCommandCodeAuditStatus = CommandCodeStructure::SET_COMMAND_CODE_AUDIT_STATUS.0,
52    FieldUpgradeData = CommandCodeStructure::FIELD_UPGRADE_DATA.0,
53    IncrementalSelfTest = CommandCodeStructure::INCREMENTAL_SELF_TEST.0,
54    SelfTest = CommandCodeStructure::SELF_TEST.0,
55    Startup = CommandCodeStructure::STARTUP.0,
56    Shutdown = CommandCodeStructure::SHUTDOWN.0,
57    StirRandom = CommandCodeStructure::STIR_RANDOM.0,
58    ActivateCredential = CommandCodeStructure::ACTIVATE_CREDENTIAL.0,
59    Certify = CommandCodeStructure::CERTIFY.0,
60    PolicyNv = CommandCodeStructure::POLICY_NV.0,
61    CertifyCreation = CommandCodeStructure::CERTIFY_CREATION.0,
62    Duplicate = CommandCodeStructure::DUPLICATE.0,
63    GetTime = CommandCodeStructure::GET_TIME.0,
64    GetSessionAuditDigest = CommandCodeStructure::GET_SESSION_AUDIT_DIGEST.0,
65    NvRead = CommandCodeStructure::NV_READ.0,
66    NvReadLock = CommandCodeStructure::NV_READ_LOCK.0,
67    ObjectChangeAuth = CommandCodeStructure::OBJECT_CHANGE_AUTH.0,
68    PolicySecret = CommandCodeStructure::POLICY_SECRET.0,
69    Rewrap = CommandCodeStructure::REWRAP.0,
70    Create = CommandCodeStructure::CREATE.0,
71    EcdhZGen = CommandCodeStructure::ECDH_Z_GEN.0,
72    Hmac = CommandCodeStructure::HMAC.0,
73    Import = CommandCodeStructure::IMPORT.0,
74    Load = CommandCodeStructure::LOAD.0,
75    Quote = CommandCodeStructure::QUOTE.0,
76    RsaDecrypt = CommandCodeStructure::RSA_DECRYPT.0,
77    HmacStart = CommandCodeStructure::HMAC_START.0,
78    SequenceUpdate = CommandCodeStructure::SEQUENCE_UPDATE.0,
79    Sign = CommandCodeStructure::SIGN.0,
80    Unseal = CommandCodeStructure::UNSEAL.0,
81    PolicySigned = CommandCodeStructure::POLICY_SIGNED.0,
82    ContextLoad = CommandCodeStructure::CONTEXT_LOAD.0,
83    ContextSave = CommandCodeStructure::CONTEXT_SAVE.0,
84    EcdhKeyGen = CommandCodeStructure::ECDH_KEY_GEN.0,
85    EncryptDecrypt = CommandCodeStructure::ENCRYPT_DECRYPT.0,
86    FlushContext = CommandCodeStructure::FLUSH_CONTEXT.0,
87    LoadExternal = CommandCodeStructure::LOAD_EXTERNAL.0,
88    MakeCredential = CommandCodeStructure::MAKE_CREDENTIAL.0,
89    NvReadPublic = CommandCodeStructure::NV_READ_PUBLIC.0,
90    PolicyAuthorize = CommandCodeStructure::POLICY_AUTHORIZE.0,
91    PolicyAuthValue = CommandCodeStructure::POLICY_AUTH_VALUE.0,
92    PolicyCommandCode = CommandCodeStructure::POLICY_COMMAND_CODE.0,
93    PolicyCounterTimer = CommandCodeStructure::POLICY_COUNTER_TIMER.0,
94    PolicyCpHash = CommandCodeStructure::POLICY_CP_HASH.0,
95    PolicyLocality = CommandCodeStructure::POLICY_LOCALITY.0,
96    PolicyNameHash = CommandCodeStructure::POLICY_NAME_HASH.0,
97    PolicyOr = CommandCodeStructure::POLICY_OR.0,
98    PolicyTicket = CommandCodeStructure::POLICY_TICKET.0,
99    ReadPublic = CommandCodeStructure::READ_PUBLIC.0,
100    RsaEncrypt = CommandCodeStructure::RSA_ENCRYPT.0,
101    StartAuthSession = CommandCodeStructure::START_AUTH_SESSION.0,
102    VerifySignature = CommandCodeStructure::VERIFY_SIGNATURE.0,
103    EccParameters = CommandCodeStructure::ECC_PARAMETERS.0,
104    FirmwareRead = CommandCodeStructure::FIRMWARE_READ.0,
105    GetCapability = CommandCodeStructure::GET_CAPABILITY.0,
106    GetRandom = CommandCodeStructure::GET_RANDOM.0,
107    GetTestResult = CommandCodeStructure::GET_TEST_RESULT.0,
108    Hash = CommandCodeStructure::HASH.0,
109    PcrRead = CommandCodeStructure::PCR_READ.0,
110    PolicyPcr = CommandCodeStructure::POLICY_PCR.0,
111    PolicyRestart = CommandCodeStructure::POLICY_RESTART.0,
112    ReadClock = CommandCodeStructure::READ_CLOCK.0,
113    PcrExtend = CommandCodeStructure::PCR_EXTEND.0,
114    PcrSetAuthValue = CommandCodeStructure::PCR_SET_AUTH_VALUE.0,
115    NvCertify = CommandCodeStructure::NV_CERTIFY.0,
116    EventSequenceComplete = CommandCodeStructure::EVENT_SEQUENCE_COMPLETE.0,
117    HashSequenceStart = CommandCodeStructure::HASH_SEQUENCE_START.0,
118    PolicyPhysicalPresence = CommandCodeStructure::POLICY_PHYSICAL_PRESENCE.0,
119    PolicyDuplicationSelect = CommandCodeStructure::POLICY_DUPLICATION_SELECT.0,
120    PolicyGetDigest = CommandCodeStructure::POLICY_GET_DIGEST.0,
121    TestParms = CommandCodeStructure::TEST_PARMS.0,
122    Commit = CommandCodeStructure::COMMIT.0,
123    PolicyPassword = CommandCodeStructure::POLICY_PASSWORD.0,
124    ZGen2Phase = CommandCodeStructure::Z_GEN_2_PHASE.0,
125    EcEphemeral = CommandCodeStructure::EC_EPHEMERAL.0,
126    PolicyNvWritten = CommandCodeStructure::POLICY_NV_WRITTEN.0,
127    PolicyTemplate = CommandCodeStructure::POLICY_TEMPLATE.0,
128    CreateLoaded = CommandCodeStructure::CREATE_LOADED.0,
129    PolicyAuthorizeNv = CommandCodeStructure::POLICY_AUTHORIZE_NV.0,
130    EncryptDecrypt2 = CommandCodeStructure::ENCRYPT_DECRYPT_2.0,
131    AcGetCapability = CommandCodeStructure::AC_GET_CAPABILITY.0,
132    AcSend = CommandCodeStructure::AC_SEND.0,
133    PolicyAcSendSelect = CommandCodeStructure::POLICY_AC_SEND_SELECT.0,
134}
135
136impl TryFrom<TPM2_CC> for CommandCode {
137    type Error = Error;
138
139    fn try_from(tpm2_cc: TPM2_CC) -> Result<Self> {
140        CommandCode::from_u32(CommandCodeStructure::try_from(tpm2_cc)?.0).ok_or_else(|| {
141            error!("Value = {} did not match any Command Code", tpm2_cc);
142            Error::local_error(WrapperErrorKind::InvalidParam)
143        })
144    }
145}
146
147impl From<CommandCode> for TPM2_CC {
148    fn from(command_code: CommandCode) -> Self {
149        // The values are well defined so this cannot fail.
150        command_code.to_u32().unwrap()
151    }
152}