1mod 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#[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 command_code.to_u32().unwrap()
151 }
152}