From: Roberto S. <rob...@po...> - 2011-12-07 15:02:25
|
This function has been added to support loading keys by UUID for the TPM v1.2. Signed-off-by: Roberto Sassu <rob...@po...> --- src/include/tcs_utils.h | 7 ++++++ src/tcs/tcs_key_mem_cache.c | 10 ++++++++- src/tcs/tcs_ps.c | 5 +++- src/tcs/tcsi_ps.c | 47 +++++++++++++++++++++++++++++++----------- 4 files changed, 54 insertions(+), 15 deletions(-) diff --git a/src/include/tcs_utils.h b/src/include/tcs_utils.h index 71cf3f7..43a7786 100644 --- a/src/include/tcs_utils.h +++ b/src/include/tcs_utils.h @@ -278,6 +278,7 @@ TSS_RESULT load_key_init(TPM_COMMAND_CODE, TCS_CONTEXT_HANDLE, TCS_KEY_HANDLE, U TSS_RESULT load_key_final(TCS_CONTEXT_HANDLE, TCS_KEY_HANDLE, TCS_KEY_HANDLE *, BYTE *, TPM_KEY_HANDLE); TSS_RESULT LoadKeyByBlob_Internal(UINT32,TCS_CONTEXT_HANDLE,TCS_KEY_HANDLE,UINT32,BYTE *,TPM_AUTH *, TCS_KEY_HANDLE *,TCS_KEY_HANDLE *); +TSS_RESULT LoadKeyByUUID_Internal(UINT32 ord,TCS_CONTEXT_HANDLE,TSS_UUID *,TCS_LOADKEY_INFO *,TCS_KEY_HANDLE *); TSS_RESULT TSC_PhysicalPresence_Internal(UINT16 physPres); TSS_RESULT TCSP_FlushSpecific_Common(UINT32, TPM_RESOURCE_TYPE); @@ -378,6 +379,12 @@ TSS_RESULT TCSP_FlushSpecific_Common(UINT32, TPM_RESOURCE_TYPE); TCS_KEY_HANDLE * phKeyTCSI /* out */ ); + TSS_RESULT TCSP_LoadKey2ByUUID_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ + TSS_UUID *KeyUUID, /* in */ + TCS_LOADKEY_INFO * pLoadKeyInfo, /* in, out */ + TCS_KEY_HANDLE * phKeyTCSI /* out */ + ); + TSS_RESULT TCSP_EvictKey_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ TCS_KEY_HANDLE hKey /* in */ ); diff --git a/src/tcs/tcs_key_mem_cache.c b/src/tcs/tcs_key_mem_cache.c index a44278e..e9d875c 100644 --- a/src/tcs/tcs_key_mem_cache.c +++ b/src/tcs/tcs_key_mem_cache.c @@ -1043,7 +1043,15 @@ LoadKeyShim(TCS_CONTEXT_HANDLE hContext, TCPA_STORE_PUBKEY *pubKey, if ((result = ps_get_uuid_by_pub(pubKey, &uuid))) return result; - if ((result = TCSP_LoadKeyByUUID_Internal(hContext, uuid, NULL, &tcsKeyHandle))) { + if (TPM_VERSION_IS(1,2)) + result = TCSP_LoadKey2ByUUID_Internal(hContext, uuid, + NULL, + &tcsKeyHandle); + else + result = TCSP_LoadKeyByUUID_Internal(hContext, uuid, + NULL, + &tcsKeyHandle); + if (result) { free(uuid); return result; } diff --git a/src/tcs/tcs_ps.c b/src/tcs/tcs_ps.c index cd3d0c3..3918024 100644 --- a/src/tcs/tcs_ps.c +++ b/src/tcs/tcs_ps.c @@ -164,7 +164,10 @@ key_mgr_load_by_uuid(TCS_CONTEXT_HANDLE hContext, MUTEX_LOCK(mem_cache_lock); - result = TCSP_LoadKeyByUUID_Internal(hContext, uuid, pInfo, phKeyTCSI); + if (TPM_VERSION_IS(1,2)) + result = TCSP_LoadKey2ByUUID_Internal(hContext, uuid, pInfo, phKeyTCSI); + else + result = TCSP_LoadKeyByUUID_Internal(hContext, uuid, pInfo, phKeyTCSI); LogDebug("Key %s loaded by UUID w/ TCS handle: 0x%x", result ? "NOT" : "successfully", result ? 0 : *phKeyTCSI); diff --git a/src/tcs/tcsi_ps.c b/src/tcs/tcsi_ps.c index e1fd4f3..b922be0 100644 --- a/src/tcs/tcsi_ps.c +++ b/src/tcs/tcsi_ps.c @@ -500,6 +500,27 @@ TCSP_LoadKeyByUUID_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ TCS_LOADKEY_INFO * pLoadKeyInfo, /* in, out */ TCS_KEY_HANDLE * phKeyTCSI) /* out */ { + return LoadKeyByUUID_Internal(TPM_ORD_LoadKey, hContext, KeyUUID, + pLoadKeyInfo, phKeyTCSI); +} + +TSS_RESULT +TCSP_LoadKey2ByUUID_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ + TSS_UUID *KeyUUID, /* in */ + TCS_LOADKEY_INFO * pLoadKeyInfo, /* in, out */ + TCS_KEY_HANDLE * phKeyTCSI) /* out */ +{ + return LoadKeyByUUID_Internal(TPM_ORD_LoadKey2, hContext, KeyUUID, + pLoadKeyInfo, phKeyTCSI); +} + +TSS_RESULT +LoadKeyByUUID_Internal(UINT32 ord, /* The ordinal to use, LoadKey or LoadKey2 */ + TCS_CONTEXT_HANDLE hContext, /* in */ + TSS_UUID *KeyUUID, /* in */ + TCS_LOADKEY_INFO * pLoadKeyInfo, /* in, out */ + TCS_KEY_HANDLE * phKeyTCSI) /* out */ +{ UINT32 keyslot = 0, keySize; TSS_RESULT result; TSS_UUID parentUuid; @@ -525,10 +546,10 @@ TCSP_LoadKeyByUUID_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ &keyslot)) return TCSERR(TCS_E_KM_LOADFAILED); - return TCSP_LoadKeyByBlob_Internal(hContext, parentTCSKeyHandle, - blobSize, keyBlob, - &pLoadKeyInfo->authData, - phKeyTCSI, &keyslot); + return LoadKeyByBlob_Internal(ord, hContext, parentTCSKeyHandle, + blobSize, keyBlob, + &pLoadKeyInfo->authData, + phKeyTCSI, &keyslot); } /* if KeyUUID is already loaded, increment the ref count and return */ @@ -557,20 +578,20 @@ TCSP_LoadKeyByUUID_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ if ((result = getParentUUIDByUUID(KeyUUID, &parentUuid))) return TCSERR(TCS_E_KM_LOADFAILED); - if ((result = TCSP_LoadKeyByUUID_Internal(hContext, &parentUuid, - pLoadKeyInfo, &parentTCSKeyHandle))) + if ((result = LoadKeyByUUID_Internal(ord, hContext, &parentUuid, + pLoadKeyInfo, &parentTCSKeyHandle))) return result; - LogDebugFn("calling TCSP_LoadKeyByBlob_Internal"); + LogDebugFn("calling LoadKeyByBlob_Internal"); /******************************************************* * If no errors have happend up till now, then the parent is loaded and ready for use. * The parent's TCS Handle should be in parentTCSKeyHandle. ******************************************************/ - if ((result = TCSP_LoadKeyByBlob_Internal(hContext, parentTCSKeyHandle, - keySize, keyBlob, - NULL, - phKeyTCSI, &keyslot))) { - LogDebugFn("TCSP_LoadKeyByBlob_Internal returned 0x%x", result); + if ((result = LoadKeyByBlob_Internal(ord, hContext, parentTCSKeyHandle, + keySize, keyBlob, + NULL, + phKeyTCSI, &keyslot))) { + LogDebugFn("LoadKeyByBlob_Internal returned 0x%x", result); if (result == TCPA_E_AUTHFAIL && pLoadKeyInfo) { BYTE blob[1000]; @@ -580,7 +601,7 @@ TCSP_LoadKeyByUUID_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ /* calculate the paramDigest */ offset = 0; - LoadBlob_UINT32(&offset, TPM_ORD_LoadKey, blob); + LoadBlob_UINT32(&offset, ord, blob); LoadBlob(&offset, keySize, blob, keyBlob); if (Hash(TSS_HASH_SHA1, offset, blob, (BYTE *)&pLoadKeyInfo->paramDigest.digest)) -- 1.7.6.4 |