blob: af8eeb1fa7fa392556093f4ed645009bf50f11e5 [file] [log] [blame]
//**********************************************************************;
// Copyright (c) 2015, Intel Corporation
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
// THE POSSIBILITY OF SUCH DAMAGE.
//**********************************************************************;
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h> // Needed for _wtoi
#include "sapi/tpm20.h"
#include "debug.h"
int DebugPrintf( printf_type type, const char *format, ...)
{
va_list args;
int rval = 0;
if( type == RM_PREFIX )
printf( "|| " );
va_start( args, format );
rval = vprintf( format, args );
va_end (args);
return rval;
}
/* This callback function is intended for use with the TCTI log callback
* mechanism. It provides an additional parameter for receiving arbitrary
* user specified data.
*/
int DebugPrintfCallback( void *data, printf_type type, const char *format, ...)
{
va_list args;
int rval = 0;
if( type == RM_PREFIX )
DebugPrintfCallback( data, NO_PREFIX, "|| " );
va_start( args, format );
rval = vprintf( format, args );
va_end (args);
return rval;
}
void DebugPrintBuffer( printf_type type, UINT8 *buffer, UINT32 length )
{
UINT32 i;
for( i = 0; i < length; i++ )
{
if( ( i % 16 ) == 0 )
{
DebugPrintf(NO_PREFIX, "\n");
if( type == RM_PREFIX )
DebugPrintf(NO_PREFIX, "|| " );
}
DebugPrintf(NO_PREFIX, "%2.2x ", buffer[i] );
}
DebugPrintf(NO_PREFIX, "\n\n" );
fflush( stdout );
}
/* This callback function is intended for use with the TCTI log data
* callback mechanism. It provides an additional parameter for receiving
* arbitrary user specified data.
*/
int DebugPrintBufferCallback( void *data, printf_type type, UINT8 *buffer, UINT32 length )
{
DebugPrintBuffer (type, buffer, length);
return 0;
}
const char *commandCodeStrings[] =
{
"TPM2_NV_UndefineSpaceSpecial", // 11f
"TPM2_EvictControl", // 120
"TPM2_HierarchyControl", // 121
"TPM2_NV_UndefineSpace",// 122
"", // 123
"TPM2_ChangeEPS", // 124
"TPM2_ChangePPS", // 125
"TPM2_Clear", // 126
"TPM2_ClearControl",// 127
"TPM2_ClockSet", // 128
"TPM2_HierarchyChangeAuth", // 129
"TPM2_NV_DefineSpace", // 12a
"TPM2_PCR_Allocate", // 12b
"TPM2_PCR_SetAuthPolicy", // 12c
"TPM2_PP_Commands", // 12d
"TPM2_SetPrimaryPolicy", // 12e
"TPM2_FieldUpgradeStart", // 12f
"TPM2_ClockRateAdjust", // 130
"TPM2_CreatePrimary", // 131
"TPM2_NV_GlobalWriteLock", // 132
"TPM2_GetCommandAuditDigest", // 133
"TPM2_NV_Increment", // 134
"TPM2_NV_SetBits", // 135
"TPM2_NV_Extend", // 136
"TPM2_NV_Write", // 137
"TPM2_NV_WriteLock", // 138
"TPM2_DictionaryAttackLockReset", // 139
"TPM2_DictionaryAttackParameters", // 13a
"TPM2_NV_ChangeAuth", // 13b
"TPM2_PCR_Event", // 13c
"TPM2_PCR_Reset", // 13d
"TPM2_SequenceComplete",// 13e
"TPM2_SetAlgorithmSet", // 13f
"TPM2_SetCommandCodeAuditStatus", // 140
"TPM2_FieldUpgradeData", // 141
"TPM2_IncrementalSelfTest", // 142
"TPM2_SelfTest", // 143
"TPM2_Startup", // 144
"TPM2_Shutdown", // 145
"TPM2_StirRandom", // 146
"TPM2_ActivateCredential", // 147
"TPM2_Certify", // 148
"TPM2_PolicyNV", // 149
"TPM2_CertifyCreation",// 14a
"TPM2_Duplicate", // 14b
"TPM2_GetTime", // 14c
"TPM2_GetSessionAuditDigest", // 14d
"TPM2_NV_Read", // 14e
"TPM2_NV_ReadLock", // 14f
"TPM2_ObjectChangeAuth", // 150
"TPM2_PolicySecret", // 151
"TPM2_Rewrap", // 152
"TPM2_Create", // 153
"TPM2_ECDH_ZGen", // 154
"TPM2_HMAC", // 155
"TPM2_Import", // 156
"TPM2_Load", // 157
"TPM2_Quote", // 158
"TPM2_RSA_Decrypt",// 159
"", // 15a
"TPM2_HMAC_Start", // 15b
"TPM2_SequenceUpdate", // 15c
"TPM2_Sign", // 15d
"TPM2_Unseal",// 15e
"", // 15f
"TPM2_PolicySigned", // 160
"TPM2_ContextLoad", // 161
"TPM2_ContextSave", // 162
"TPM2_ECDH_KeyGen", // 163
"TPM2_EncryptDecrypt", // 164
"TPM2_FlushContext", // 165
"",
"TPM2_LoadExternal", // 167
"TPM2_MakeCredential", // 168
"TPM2_NV_ReadPublic", // 169
"TPM2_PolicyAuthorize", // 16a
"TPM2_PolicyAuthValue", // 16b
"TPM2_PolicyCommandCode", // 16c
"TPM2_PolicyCounterTimer", // 16d
"TPM2_PolicyCpHash", // 16e
"TPM2_PolicyLocality", // 16f
"TPM2_PolicyNameHash", // 170
"TPM2_PolicyOR", // 171
"TPM2_PolicyTicket", // 172
"TPM2_ReadPublic", // 173
"TPM2_RSA_Encrypt",// 174
"", // 175
"TPM2_StartAuthSession", // 176
"TPM2_VerifySignature", // 177
"TPM2_ECC_Parameters", // 178
"TPM2_FirmwareRead", // 179
"TPM2_GetCapability", // 17a
"TPM2_GetRandom", // 17b
"TPM2_GetTestResult", // 17c
"TPM2_Hash", // 17d
"TPM2_PCR_Read", // 17e
"TPM2_PolicyPCR", // 17f
"TPM2_PolicyRestart", // 180
"TPM2_ReadClock", // 181
"TPM2_PCR_Extend", // 182
"TPM2_PCR_SetAuthValue", // 183
"TPM2_NV_Certify", // 184
"TPM2_EventSequenceComplete", // 185
"TPM2_HashSequenceStart", // 186
"TPM2_PolicyPhysicalPresence", // 187
"TPM2_PolicyDuplicationSelect", // 188
"TPM2_PolicyGetDigest", // 189
"TPM2_TestParms", // 18a
"TPM2_Commit", // 18b
"TPM2_PolicyPassword", // 18c
"TPM2_ZGen_2Phase", // 18d
"TPM2_EC_Ephemeral", // 18e
"TPM2_PolicyNvWritten" // 18f
};
char undefinedCommandString[10] = "";
const char* strTpmCommandCode( TPM_CC code )
{
if( code >= TPM_CC_NV_UndefineSpaceSpecial && code <= TPM_CC_PolicyNvWritten )
{
return commandCodeStrings[ code - TPM_CC_FIRST ];
}
else
{
sprintf( &undefinedCommandString[0], "0x%4.4x", code );
return &undefinedCommandString[0];
}
}