// This file was extracted from the TCG Published // Trusted Platform Module Library // Part 3: Commands // Family "2.0" // Level 00 Revision 01.16 // October 30, 2014 #include "InternalRoutines.h" #include "NV_Read_fp.h" #include "NV_spt_fp.h" // // // Error Returns Meaning // // TPM_RC_NV_AUTHORIZATION the authorization was valid but the authorizing entity (authHandle) is // not allowed to read from the Index referenced by nvIndex // TPM_RC_NV_LOCKED the Index referenced by nvIndex is read locked // TPM_RC_NV_RANGE read range defined by size and offset is outside the range of the // Index referenced by nvIndex // TPM_RC_NV_UNINITIALIZED the Index referenced by nvIndex has not been initialized (written) // TPM_RC TPM2_NV_Read( NV_Read_In *in, // IN: input parameter list NV_Read_Out *out // OUT: output parameter list ) { NV_INDEX nvIndex; TPM_RC result; // Input Validation // Get NV index info NvGetIndexInfo(in->nvIndex, &nvIndex); // Common read access checks. NvReadAccessChecks() returns // TPM_RC_NV_AUTHORIZATION, TPM_RC_NV_LOCKED, or TPM_RC_NV_UNINITIALIZED // error may be returned at this point result = NvReadAccessChecks(in->authHandle, in->nvIndex); if(result != TPM_RC_SUCCESS) return result; // Too much data if((in->size + in->offset) > nvIndex.publicArea.dataSize) return TPM_RC_NV_RANGE; // Command Output // Set the return size out->data.t.size = in->size; // Perform the read NvGetIndexData(in->nvIndex, &nvIndex, in->offset, in->size, out->data.t.buffer); return TPM_RC_SUCCESS; }