/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "tpm_commands.h"

#include <tss2/tss2_tpm2_types.h>

#include <cstddef>
#include <string>

std::string TpmCommandName(std::uint32_t command_num) {
  switch(command_num) {
    #define MATCH_TPM_COMMAND(name) case name: return #name;
    MATCH_TPM_COMMAND(TPM2_CC_NV_UndefineSpaceSpecial)
    MATCH_TPM_COMMAND(TPM2_CC_EvictControl)
    MATCH_TPM_COMMAND(TPM2_CC_HierarchyControl)
    MATCH_TPM_COMMAND(TPM2_CC_NV_UndefineSpace)
    MATCH_TPM_COMMAND(TPM2_CC_ChangeEPS)
    MATCH_TPM_COMMAND(TPM2_CC_ChangePPS)
    MATCH_TPM_COMMAND(TPM2_CC_Clear)
    MATCH_TPM_COMMAND(TPM2_CC_ClearControl)
    MATCH_TPM_COMMAND(TPM2_CC_ClockSet)
    MATCH_TPM_COMMAND(TPM2_CC_HierarchyChangeAuth)
    MATCH_TPM_COMMAND(TPM2_CC_NV_DefineSpace)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_Allocate)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_SetAuthPolicy)
    MATCH_TPM_COMMAND(TPM2_CC_PP_Commands)
    MATCH_TPM_COMMAND(TPM2_CC_SetPrimaryPolicy)
    MATCH_TPM_COMMAND(TPM2_CC_FieldUpgradeStart)
    MATCH_TPM_COMMAND(TPM2_CC_ClockRateAdjust)
    MATCH_TPM_COMMAND(TPM2_CC_CreatePrimary)
    MATCH_TPM_COMMAND(TPM2_CC_NV_GlobalWriteLock)
    MATCH_TPM_COMMAND(TPM2_CC_GetCommandAuditDigest)
    MATCH_TPM_COMMAND(TPM2_CC_NV_Increment)
    MATCH_TPM_COMMAND(TPM2_CC_NV_SetBits)
    MATCH_TPM_COMMAND(TPM2_CC_NV_Extend)
    MATCH_TPM_COMMAND(TPM2_CC_NV_Write)
    MATCH_TPM_COMMAND(TPM2_CC_NV_WriteLock)
    MATCH_TPM_COMMAND(TPM2_CC_DictionaryAttackLockReset)
    MATCH_TPM_COMMAND(TPM2_CC_DictionaryAttackParameters)
    MATCH_TPM_COMMAND(TPM2_CC_NV_ChangeAuth)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_Event)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_Reset)
    MATCH_TPM_COMMAND(TPM2_CC_SequenceComplete)
    MATCH_TPM_COMMAND(TPM2_CC_SetAlgorithmSet)
    MATCH_TPM_COMMAND(TPM2_CC_SetCommandCodeAuditStatus)
    MATCH_TPM_COMMAND(TPM2_CC_FieldUpgradeData)
    MATCH_TPM_COMMAND(TPM2_CC_IncrementalSelfTest)
    MATCH_TPM_COMMAND(TPM2_CC_SelfTest)
    MATCH_TPM_COMMAND(TPM2_CC_Startup)
    MATCH_TPM_COMMAND(TPM2_CC_Shutdown)
    MATCH_TPM_COMMAND(TPM2_CC_StirRandom)
    MATCH_TPM_COMMAND(TPM2_CC_ActivateCredential)
    MATCH_TPM_COMMAND(TPM2_CC_Certify)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyNV)
    MATCH_TPM_COMMAND(TPM2_CC_CertifyCreation)
    MATCH_TPM_COMMAND(TPM2_CC_Duplicate)
    MATCH_TPM_COMMAND(TPM2_CC_GetTime)
    MATCH_TPM_COMMAND(TPM2_CC_GetSessionAuditDigest)
    MATCH_TPM_COMMAND(TPM2_CC_NV_Read)
    MATCH_TPM_COMMAND(TPM2_CC_NV_ReadLock)
    MATCH_TPM_COMMAND(TPM2_CC_ObjectChangeAuth)
    MATCH_TPM_COMMAND(TPM2_CC_PolicySecret)
    MATCH_TPM_COMMAND(TPM2_CC_Rewrap)
    MATCH_TPM_COMMAND(TPM2_CC_Create)
    MATCH_TPM_COMMAND(TPM2_CC_ECDH_ZGen)
    MATCH_TPM_COMMAND(TPM2_CC_HMAC)
    MATCH_TPM_COMMAND(TPM2_CC_Import)
    MATCH_TPM_COMMAND(TPM2_CC_Load)
    MATCH_TPM_COMMAND(TPM2_CC_Quote)
    MATCH_TPM_COMMAND(TPM2_CC_RSA_Decrypt)
    MATCH_TPM_COMMAND(TPM2_CC_HMAC_Start)
    MATCH_TPM_COMMAND(TPM2_CC_SequenceUpdate)
    MATCH_TPM_COMMAND(TPM2_CC_Sign)
    MATCH_TPM_COMMAND(TPM2_CC_Unseal)
    MATCH_TPM_COMMAND(TPM2_CC_PolicySigned)
    MATCH_TPM_COMMAND(TPM2_CC_ContextLoad)
    MATCH_TPM_COMMAND(TPM2_CC_ContextSave)
    MATCH_TPM_COMMAND(TPM2_CC_ECDH_KeyGen)
    MATCH_TPM_COMMAND(TPM2_CC_EncryptDecrypt)
    MATCH_TPM_COMMAND(TPM2_CC_FlushContext)
    MATCH_TPM_COMMAND(TPM2_CC_LoadExternal)
    MATCH_TPM_COMMAND(TPM2_CC_MakeCredential)
    MATCH_TPM_COMMAND(TPM2_CC_NV_ReadPublic)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyAuthorize)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyAuthValue)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyCommandCode)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyCounterTimer)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyCpHash)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyLocality)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyNameHash)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyOR)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyTicket)
    MATCH_TPM_COMMAND(TPM2_CC_ReadPublic)
    MATCH_TPM_COMMAND(TPM2_CC_RSA_Encrypt)
    MATCH_TPM_COMMAND(TPM2_CC_StartAuthSession)
    MATCH_TPM_COMMAND(TPM2_CC_VerifySignature)
    MATCH_TPM_COMMAND(TPM2_CC_ECC_Parameters)
    MATCH_TPM_COMMAND(TPM2_CC_FirmwareRead)
    MATCH_TPM_COMMAND(TPM2_CC_GetCapability)
    MATCH_TPM_COMMAND(TPM2_CC_GetRandom)
    MATCH_TPM_COMMAND(TPM2_CC_GetTestResult)
    MATCH_TPM_COMMAND(TPM2_CC_Hash)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_Read)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyPCR)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyRestart)
    MATCH_TPM_COMMAND(TPM2_CC_ReadClock)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_Extend)
    MATCH_TPM_COMMAND(TPM2_CC_PCR_SetAuthValue)
    MATCH_TPM_COMMAND(TPM2_CC_NV_Certify)
    MATCH_TPM_COMMAND(TPM2_CC_EventSequenceComplete)
    MATCH_TPM_COMMAND(TPM2_CC_HashSequenceStart)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyPhysicalPresence)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyDuplicationSelect)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyGetDigest)
    MATCH_TPM_COMMAND(TPM2_CC_TestParms)
    MATCH_TPM_COMMAND(TPM2_CC_Commit)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyPassword)
    MATCH_TPM_COMMAND(TPM2_CC_ZGen_2Phase)
    MATCH_TPM_COMMAND(TPM2_CC_EC_Ephemeral)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyNvWritten)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyTemplate)
    MATCH_TPM_COMMAND(TPM2_CC_CreateLoaded)
    MATCH_TPM_COMMAND(TPM2_CC_PolicyAuthorizeNV)
    MATCH_TPM_COMMAND(TPM2_CC_EncryptDecrypt2)
    MATCH_TPM_COMMAND(TPM2_CC_AC_GetCapability)
    MATCH_TPM_COMMAND(TPM2_CC_AC_Send)
    MATCH_TPM_COMMAND(TPM2_CC_Policy_AC_SendSelect)
    MATCH_TPM_COMMAND(TPM2_CC_Vendor_TCG_Test)
    #undef MATCH_TPM_COMMAND
    default:
      return "Unknown";
  }
}
