blob: 399933c6792fbe769371025243a8b9f78aaa8114 [file] [log] [blame]
/* Software-based Trusted Platform Module (TPM) Emulator
* Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net>
*
* This module is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This module is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* $Id: tpm_error.c 364 2010-02-11 10:24:45Z mast $
*/
#include "tpm_emulator.h"
#include "tpm_structures.h"
const char *tpm_error_to_string(TPM_RESULT res)
{
switch (res) {
case TPM_SUCCESS:
return "Successful completion of the operation.";
case TPM_AUTHFAIL:
return "Authentication failed.";
case TPM_BADINDEX:
return "The index to a PCR, DIR or other register is incorrect.";
case TPM_BAD_PARAMETER:
return "One or more parameter is bad.";
case TPM_AUDITFAILURE:
return "An operation completed successfully but the auditing of "
"that operation failed.";
case TPM_CLEAR_DISABLED:
return "The clear disable flag is set and all clear operations now "
"require physical access.";
case TPM_DEACTIVATED:
return "The TPM is deactivated.";
case TPM_DISABLED:
return "The TPM is disabled.";
case TPM_DISABLED_CMD:
return "The target command has been disabled.";
case TPM_FAIL:
return "The operation failed.";
case TPM_BAD_ORDINAL:
return "The ordinal was unknown or inconsistent.";
case TPM_INSTALL_DISABLED:
return "The ability to install an owner is disabled.";
case TPM_INVALID_KEYHANDLE:
return "The key handle can not be interpreted.";
case TPM_KEYNOTFOUND:
return "The key handle points to an invalid key.";
case TPM_INAPPROPRIATE_ENC:
return "Unacceptable encryption scheme.";
case TPM_MIGRATEFAIL:
return "Migration authorization failed.";
case TPM_INVALID_PCR_INFO:
return "PCR information could not be interpreted.";
case TPM_NOSPACE:
return "No room to load key.";
case TPM_NOSRK:
return "There is no SRK set.";
case TPM_NOTSEALED_BLOB:
return "An encrypted blob is invalid or was not created by this TPM.";
case TPM_OWNER_SET:
return "There is already an Owner.";
case TPM_RESOURCES:
return "The TPM has insufficient internal resources to perform the "
"requested action.";
case TPM_SHORTRANDOM:
return "A random string was too short.";
case TPM_SIZE:
return "The TPM does not have the space to perform the operation.";
case TPM_WRONGPCRVAL:
return "The named PCR value does not match the current PCR value.";
case TPM_BAD_PARAM_SIZE:
return "The paramSize argument to the command has the incorrect value.";
case TPM_SHA_THREAD:
return "There is no existing SHA-1 thread.";
case TPM_SHA_ERROR:
return "The calculation is unable to proceed because the existing SHA-1 "
"thread has already encountered an error.";
case TPM_FAILEDSELFTEST:
return "Self-test has failed and the TPM has shutdown.";
case TPM_AUTH2FAIL:
return "The authorization for the second key in a 2 key function failed "
"authorization.";
case TPM_BADTAG:
return "The tag value sent to for a command is invalid.";
case TPM_IOERROR:
return "An IO error occurred transmitting information to the TPM.";
case TPM_ENCRYPT_ERROR:
return "The encryption process had a problem.";
case TPM_DECRYPT_ERROR:
return "The decryption process did not complete.";
case TPM_INVALID_AUTHHANDLE:
return "An invalid handle was used.";
case TPM_NO_ENDORSEMENT:
return "The TPM does not a EK installed.";
case TPM_INVALID_KEYUSAGE:
return "The usage of a key is not allowed.";
case TPM_WRONG_ENTITYTYPE:
return "The submitted entity type is not allowed.";
case TPM_INVALID_POSTINIT:
return "The command was received in the wrong sequence relative to "
"TPM_Init and a subsequent TPM_Startup.";
case TPM_INAPPROPRIATE_SIG:
return "Signed data cannot include additional DER information.";
case TPM_BAD_KEY_PROPERTY:
return "The key properties in TPM_KEY_PARMs are not supported "
"by this TPM.";
case TPM_BAD_MIGRATION:
return "The migration properties of this key are incorrect.";
case TPM_BAD_SCHEME:
return "The signature or encryption scheme for this key is incorrect "
"or not permitted in this situation.";
case TPM_BAD_DATASIZE:
return "The size of the data (or blob) parameter is bad or "
"inconsistent with the referenced key.";
case TPM_BAD_MODE:
return "A mode parameter is bad, such as capArea or subCapArea for "
"TPM_GetCapability, physicalPresence parameter for "
"TPM_PhysicalPresence, or migrationType for TPM_CreateMigrationBlob.";
case TPM_BAD_PRESENCE:
return "Either the physicalPresence or physicalPresenceLock bits "
"have the wrong value.";
case TPM_BAD_VERSION:
return "The TPM cannot perform this version of the capability.";
case TPM_NO_WRAP_TRANSPORT:
return "The TPM does not allow for wrapped transport sessions.";
case TPM_AUDITFAIL_UNSUCCESSFUL:
return "TPM audit construction failed and the underlying command was "
"returning a failure code also.";
case TPM_AUDITFAIL_SUCCESSFUL:
return "TPM audit construction failed and the underlying command was "
"returning success.";
case TPM_NOTRESETABLE:
return "Attempt to reset a PCR register that does not have the "
"resettable attribute.";
case TPM_NOTLOCAL:
return "Attempt to reset a PCR register that requires locality and "
"locality modifier not part of command transport.";
case TPM_BAD_TYPE:
return "Make identity blob not properly typed.";
case TPM_INVALID_RESOURCE:
return "When saving context identified resource type does not match "
"actual resource.";
case TPM_NOTFIPS:
return "The TPM is attempting to execute a command only available "
"when in FIPS mode.";
case TPM_INVALID_FAMILY:
return "The command is attempting to use an invalid family ID.";
case TPM_NO_NV_PERMISSION:
return "The permission to manipulate the NV storage is not available.";
case TPM_REQUIRES_SIGN:
return "The operation requires a signed command.";
case TPM_KEY_NOTSUPPORTED:
return "Wrong operation to load an NV key.";
case TPM_AUTH_CONFLICT:
return "NV_LoadKey blob requires both owner and blob authorization.";
case TPM_AREA_LOCKED:
return "The NV area is locked and not writable.";
case TPM_BAD_LOCALITY:
return "The locality is incorrect for the attempted operation.";
case TPM_READ_ONLY:
return "The NV area is read only and can't be written to.";
case TPM_PER_NOWRITE:
return "There is no protection on the write to the NV area.";
case TPM_FAMILYCOUNT:
return "The family count value does not match.";
case TPM_WRITE_LOCKED:
return "The NV area has already been written to.";
case TPM_BAD_ATTRIBUTES:
return "The NV area attributes conflict.";
case TPM_INVALID_STRUCTURE:
return "The structure tag and version are invalid or inconsistent.";
case TPM_KEY_OWNER_CONTROL:
return "The key is under control of the TPM Owner and can only be "
"evicted by the TPM Owner.";
case TPM_BAD_COUNTER:
return "The counter handle is incorrect.";
case TPM_NOT_FULLWRITE:
return "The write is not a complete write of the area.";
case TPM_CONTEXT_GAP:
return "The gap between saved context counts is too large.";
case TPM_MAXNVWRITES:
return "The maximum number of NV writes without an "
"owner has been exceeded.";
case TPM_NOOPERATOR:
return "No operator AuthData value is set.";
case TPM_RESOURCEMISSING:
return "The resource pointed to by context is not loaded.";
case TPM_DELEGATE_LOCK:
return "The delegate administration is locked.";
case TPM_DELEGATE_FAMILY:
return "Attempt to manage a family other then the delegated family.";
case TPM_DELEGATE_ADMIN:
return "Delegation table management not enabled.";
case TPM_TRANSPORT_NOTEXCLUSIVE:
return "There was a command executed outside of an exclusive "
"transport session.";
case TPM_OWNER_CONTROL:
return "Attempt to context save a owner evict controlled key.";
case TPM_DAA_RESOURCES:
return "The DAA command has no resources available to "
"execute the command.";
case TPM_DAA_INPUT_DATA0:
return "The consistency check on DAA parameter inputData0 has failed.";
case TPM_DAA_INPUT_DATA1:
return "The consistency check on DAA parameter inputData1 has failed.";
case TPM_DAA_ISSUER_SETTINGS:
return "The consistency check on DAA_issuerSettings has failed.";
case TPM_DAA_TPM_SETTINGS:
return "The consistency check on DAA_tpmSpecific has failed.";
case TPM_DAA_STAGE:
return "The atomic process indicated by the submitted DAA command "
"is not the expected process.";
case TPM_DAA_ISSUER_VALIDITY:
return "The issuer's validity check has detected an inconsistency.";
case TPM_DAA_WRONG_W:
return "The consistency check on w has failed.";
case TPM_BAD_HANDLE:
return "The handle is incorrect.";
case TPM_BAD_DELEGATE:
return "Delegation is not correct.";
case TPM_BADCONTEXT:
return "The context blob is invalid.";
case TPM_TOOMANYCONTEXTS:
return "Too many contexts held by the TPM.";
case TPM_MA_TICKET_SIGNATURE:
return "Migration authority signature validation failure.";
case TPM_MA_DESTINATION:
return "Migration destination not authenticated.";
case TPM_MA_SOURCE:
return "Migration source incorrect.";
case TPM_MA_AUTHORITY:
return "Incorrect migration authority.";
case TPM_PERMANENTEK:
return "Attempt to revoke the EK and the EK is not revocable.";
case TPM_BAD_SIGNATURE:
return "Bad signature of CMK ticket.";
case TPM_NOCONTEXTSPACE:
return "There is no room in the context list for additional contexts.";
case TPM_RETRY:
return "The TPM is too busy to respond to the command immediately, "
"but the command could be resubmitted at a later time.";
default:
return "Unknown TPM error";
}
}