Home | History | Annotate | Line # | Download | only in tspi
      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 
     28 TSS_RESULT
     29 Tspi_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 
     66 TSS_RESULT
     67 Tspi_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 
     84 TSS_RESULT
     85 Tspi_Policy_FlushSecret(TSS_HPOLICY hPolicy)	/* in */
     86 {
     87 	return obj_policy_flush_secret(hPolicy);
     88 }
     89 
     90 TSS_RESULT
     91 Tspi_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