45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
// 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 "Unseal_fp.h"
|
|
//
|
|
//
|
|
// Error Returns Meaning
|
|
//
|
|
// TPM_RC_ATTRIBUTES itemHandle has wrong attributes
|
|
// TPM_RC_TYPE itemHandle is not a KEYEDHASH data object
|
|
//
|
|
TPM_RC
|
|
TPM2_Unseal(
|
|
Unseal_In *in,
|
|
Unseal_Out *out
|
|
)
|
|
{
|
|
OBJECT *object;
|
|
|
|
// Input Validation
|
|
|
|
// Get pointer to loaded object
|
|
object = ObjectGet(in->itemHandle);
|
|
|
|
// Input handle must be a data object
|
|
if(object->publicArea.type != TPM_ALG_KEYEDHASH)
|
|
return TPM_RC_TYPE + RC_Unseal_itemHandle;
|
|
if( object->publicArea.objectAttributes.decrypt == SET
|
|
|| object->publicArea.objectAttributes.sign == SET
|
|
|| object->publicArea.objectAttributes.restricted == SET)
|
|
return TPM_RC_ATTRIBUTES + RC_Unseal_itemHandle;
|
|
|
|
// Command Output
|
|
|
|
// Copy data
|
|
MemoryCopy2B(&out->outData.b, &object->sensitive.sensitive.bits.b,
|
|
sizeof(out->outData.t.buffer));
|
|
|
|
return TPM_RC_SUCCESS;
|
|
}
|