1 2/* 3 * Licensed Materials - Property of IBM 4 * 5 * trousers - An open source TCG Software Stack 6 * 7 * (C) Copyright International Business Machines Corp. 2004-2007 8 * 9 */ 10 11 12#include <stdlib.h> 13#include <stdio.h> 14#include <string.h> 15#include <time.h> 16#include <errno.h> 17 18#include "trousers/tss.h" 19#include "trousers/trousers.h" 20#include "trousers_types.h" 21#include "trousers_types.h" 22#include "spi_utils.h" 23#include "capabilities.h" 24#include "tsplog.h" 25#include "obj.h" 26 27 28TSS_RESULT 29Tspi_GetPolicyObject(TSS_HOBJECT hObject, /* in */ 30 TSS_FLAG policyType, /* in */ 31 TSS_HPOLICY * phPolicy) /* out */ 32{ 33 TSS_RESULT result; 34 35 if (phPolicy == NULL) 36 return TSPERR(TSS_E_BAD_PARAMETER); 37 38 if (obj_is_tpm(hObject)) { 39 result = obj_tpm_get_policy(hObject, policyType, phPolicy); 40#ifdef TSS_BUILD_NV 41 } else if (obj_is_nvstore(hObject)) { 42 result = obj_nvstore_get_policy(hObject, policyType, phPolicy); 43#endif 44#ifdef TSS_BUILD_RSAKEY_LIST 45 } else if (obj_is_rsakey(hObject)) { 46 result = obj_rsakey_get_policy(hObject, policyType, phPolicy, NULL); 47#endif 48#ifdef TSS_BUILD_ENCDATA_LIST 49 } else if (obj_is_encdata(hObject)) { 50 result = obj_encdata_get_policy(hObject, policyType, phPolicy); 51#endif 52 } else { 53 if (obj_is_policy(hObject) || obj_is_hash(hObject) || 54 obj_is_pcrs(hObject) || obj_is_context(hObject)) 55 result = TSPERR(TSS_E_BAD_PARAMETER); 56 else 57 result = TSPERR(TSS_E_INVALID_HANDLE); 58 } 59 60 if (result == TSS_SUCCESS && *phPolicy == NULL_HPOLICY) 61 result = TSPERR(TSS_E_INTERNAL_ERROR); 62 63 return result; 64} 65 66TSS_RESULT 67Tspi_Policy_SetSecret(TSS_HPOLICY hPolicy, /* in */ 68 TSS_FLAG secretMode, /* in */ 69 UINT32 ulSecretLength, /* in */ 70 BYTE * rgbSecret) /* in */ 71{ 72 TSS_RESULT result; 73 TSS_HCONTEXT tspContext; 74 75 if ((result = obj_policy_get_tsp_context(hPolicy, &tspContext))) 76 return result; 77 78 if (obj_context_is_silent(tspContext) && secretMode == TSS_SECRET_MODE_POPUP) 79 return TSPERR(TSS_E_SILENT_CONTEXT); 80 81 return obj_policy_set_secret(hPolicy, secretMode, ulSecretLength, rgbSecret); 82} 83 84TSS_RESULT 85Tspi_Policy_FlushSecret(TSS_HPOLICY hPolicy) /* in */ 86{ 87 return obj_policy_flush_secret(hPolicy); 88} 89 90TSS_RESULT 91Tspi_Policy_AssignToObject(TSS_HPOLICY hPolicy, /* in */ 92 TSS_HOBJECT hObject) /* in */ 93{ 94 TSS_RESULT result; 95 96 if (obj_is_tpm(hObject)) { 97 result = obj_tpm_set_policy(hObject, hPolicy); 98#ifdef TSS_BUILD_NV 99 } else if (obj_is_nvstore(hObject)) { 100 result = obj_nvstore_set_policy(hObject, hPolicy); 101#endif 102#ifdef TSS_BUILD_RSAKEY_LIST 103 } else if (obj_is_rsakey(hObject)) { 104 result = obj_rsakey_set_policy(hObject, hPolicy); 105#endif 106#ifdef TSS_BUILD_ENCDATA_LIST 107 } else if (obj_is_encdata(hObject)) { 108 result = obj_encdata_set_policy(hObject, hPolicy); 109#endif 110 } else { 111 result = TSPERR(TSS_E_BAD_PARAMETER); 112 } 113 114 return result; 115} 116