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
Tspi_GetPolicyObject(TSS_HOBJECT hObject,TSS_FLAG policyType,TSS_HPOLICY * phPolicy)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
Tspi_Policy_SetSecret(TSS_HPOLICY hPolicy,TSS_FLAG secretMode,UINT32 ulSecretLength,BYTE * rgbSecret)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
Tspi_Policy_FlushSecret(TSS_HPOLICY hPolicy)85 Tspi_Policy_FlushSecret(TSS_HPOLICY hPolicy)      /* in */
86 {
87           return obj_policy_flush_secret(hPolicy);
88 }
89 
90 TSS_RESULT
Tspi_Policy_AssignToObject(TSS_HPOLICY hPolicy,TSS_HOBJECT hObject)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