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 <syslog.h>
14 #include <unistd.h>
15 
16 #include "trousers/tss.h"
17 #include "trousers_types.h"
18 #include "trousers_types.h"
19 #include "spi_utils.h"
20 #include "hosttable.h"
21 #include "tsplog.h"
22 #include "rpc_tcstp_tsp.h"
23 #include "obj_context.h"
24 
25 
26 TSS_RESULT
RPC_Error(TSS_HCONTEXT tspContext,...)27 RPC_Error(TSS_HCONTEXT tspContext, ...)
28 {
29 	LogDebugFn("Context: 0x%x", tspContext);
30 	return TSPERR(TSS_E_INTERNAL_ERROR);
31 }
32 
33 TSS_RESULT
RPC_OpenContext(TSS_HCONTEXT tspContext,BYTE * hostname,int type)34 RPC_OpenContext(TSS_HCONTEXT tspContext, BYTE *hostname, int type)
35 {
36 	TSS_RESULT result;
37 	TCS_CONTEXT_HANDLE tcsContext;
38 	struct host_table_entry *entry;
39 	UINT32 tpm_version;
40 
41 	/* __tspi_add_table_entry() will make sure an entry doesn't already exist for this tsp context */
42 	if ((result = __tspi_add_table_entry(tspContext, hostname, type, &entry)))
43 		return result;
44 
45 	switch (type) {
46 		case CONNECTION_TYPE_TCP_PERSISTANT:
47 			if ((result = RPC_OpenContext_TP(entry, &tpm_version, &tcsContext)))
48 				remove_table_entry(tspContext);
49 			else {
50 				entry->tcsContext = tcsContext;
51 				if (obj_context_set_tpm_version(tspContext, tpm_version)) {
52 					remove_table_entry(tspContext);
53 					result = TSPERR(TSS_E_INTERNAL_ERROR);
54 				}
55 			}
56 			return result;
57 		default:
58 			break;
59 	}
60 
61 	return TSPERR(TSS_E_INTERNAL_ERROR);
62 }
63 
RPC_GetRegisteredKeyByPublicInfo(TSS_HCONTEXT tspContext,TCPA_ALGORITHM_ID algID,UINT32 ulPublicInfoLength,BYTE * rgbPublicInfo,UINT32 * keySize,BYTE ** keyBlob)64 TSS_RESULT RPC_GetRegisteredKeyByPublicInfo(TSS_HCONTEXT tspContext,
65 					    TCPA_ALGORITHM_ID algID, /* in */
66 					    UINT32 ulPublicInfoLength, /* in */
67 					    BYTE * rgbPublicInfo, /* in */
68 					    UINT32 * keySize, BYTE ** keyBlob)
69 {
70 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
71 	struct host_table_entry *entry = get_table_entry(tspContext);
72 
73 	if (entry == NULL)
74 		return TSPERR(TSS_E_NO_CONNECTION);
75 
76 	switch (entry->type) {
77 		case CONNECTION_TYPE_TCP_PERSISTANT:
78 			result = RPC_GetRegisteredKeyByPublicInfo_TP(entry, algID,
79 								     ulPublicInfoLength,
80 								     rgbPublicInfo, keySize,
81 								     keyBlob);
82 			break;
83 		default:
84 			break;
85 	}
86 
87 	put_table_entry(entry);
88 
89 	return result;
90 }
91 
RPC_CloseContext(TSS_HCONTEXT tspContext)92 TSS_RESULT RPC_CloseContext(TSS_HCONTEXT tspContext)	/* in */
93 {
94 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
95 	struct host_table_entry *entry = get_table_entry(tspContext);
96 
97 	if (entry == NULL)
98 		return TSPERR(TSS_E_NO_CONNECTION);
99 
100 	switch (entry->type) {
101 		case CONNECTION_TYPE_TCP_PERSISTANT:
102 			if ((result = RPC_CloseContext_TP(entry)) == TSS_SUCCESS) {
103 				close(entry->socket);
104 				remove_table_entry(tspContext);
105 			}
106 			break;
107 		default:
108 			break;
109 	}
110 
111 	if (result != TSS_SUCCESS)
112 		put_table_entry(entry);
113 
114 	return result;
115 }
116 
RPC_FreeMemory(TSS_HCONTEXT tspContext,BYTE * pMemory)117 TSS_RESULT RPC_FreeMemory(TSS_HCONTEXT tspContext,	/* in */
118 			  BYTE * pMemory)	/* in */
119 {
120 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
121 	struct host_table_entry *entry = get_table_entry(tspContext);
122 
123 	if (entry == NULL)
124 		return TSPERR(TSS_E_NO_CONNECTION);
125 
126 	switch (entry->type) {
127 		case CONNECTION_TYPE_TCP_PERSISTANT:
128 			result = RPC_FreeMemory_TP(entry, pMemory);
129 			break;
130 		default:
131 			break;
132 	}
133 
134 	put_table_entry(entry);
135 
136 	return result;
137 }
138 
RPC_LogPcrEvent(TSS_HCONTEXT tspContext,TSS_PCR_EVENT Event,UINT32 * pNumber)139 TSS_RESULT RPC_LogPcrEvent(TSS_HCONTEXT tspContext,	/* in */
140 			   TSS_PCR_EVENT Event,	/* in */
141 			   UINT32 * pNumber)	/* out */
142 {
143 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
144 	struct host_table_entry *entry = get_table_entry(tspContext);
145 
146 	if (entry == NULL)
147 		return TSPERR(TSS_E_NO_CONNECTION);
148 
149 	switch (entry->type) {
150 		case CONNECTION_TYPE_TCP_PERSISTANT:
151 			result = RPC_LogPcrEvent_TP(entry, Event, pNumber);
152 			break;
153 		default:
154 			break;
155 	}
156 
157 	put_table_entry(entry);
158 
159 	return result;
160 }
161 
RPC_GetPcrEvent(TSS_HCONTEXT tspContext,UINT32 PcrIndex,UINT32 * pNumber,TSS_PCR_EVENT ** ppEvent)162 TSS_RESULT RPC_GetPcrEvent(TSS_HCONTEXT tspContext,	/* in */
163 			   UINT32 PcrIndex,	/* in */
164 			   UINT32 * pNumber,	/* in, out */
165 			   TSS_PCR_EVENT ** ppEvent)	/* out */
166 {
167 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
168 	struct host_table_entry *entry = get_table_entry(tspContext);
169 
170 	if (entry == NULL)
171 		return TSPERR(TSS_E_NO_CONNECTION);
172 
173 	switch (entry->type) {
174 		case CONNECTION_TYPE_TCP_PERSISTANT:
175 		result =
176 			RPC_GetPcrEvent_TP(entry, PcrIndex, pNumber, ppEvent);
177 			break;
178 		default:
179 			break;
180 	}
181 
182 	put_table_entry(entry);
183 
184 	return result;
185 }
186 
RPC_GetPcrEventsByPcr(TSS_HCONTEXT tspContext,UINT32 PcrIndex,UINT32 FirstEvent,UINT32 * pEventCount,TSS_PCR_EVENT ** ppEvents)187 TSS_RESULT RPC_GetPcrEventsByPcr(TSS_HCONTEXT tspContext,	/* in */
188 				 UINT32 PcrIndex,	/* in */
189 				 UINT32 FirstEvent,	/* in */
190 				 UINT32 * pEventCount,	/* in,out */
191 				 TSS_PCR_EVENT ** ppEvents)	/* out */
192 {
193 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
194 	struct host_table_entry *entry = get_table_entry(tspContext);
195 
196 	if (entry == NULL)
197 		return TSPERR(TSS_E_NO_CONNECTION);
198 
199 	switch (entry->type) {
200 		case CONNECTION_TYPE_TCP_PERSISTANT:
201 			result = RPC_GetPcrEventsByPcr_TP(entry, PcrIndex, FirstEvent,
202 							  pEventCount, ppEvents);
203 			break;
204 		default:
205 			break;
206 	}
207 
208 	put_table_entry(entry);
209 
210 	return result;
211 }
212 
RPC_GetPcrEventLog(TSS_HCONTEXT tspContext,UINT32 * pEventCount,TSS_PCR_EVENT ** ppEvents)213 TSS_RESULT RPC_GetPcrEventLog(TSS_HCONTEXT tspContext,	/* in */
214 			      UINT32 * pEventCount,	/* out */
215 			      TSS_PCR_EVENT ** ppEvents)	/* out */
216 {
217 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
218 	struct host_table_entry *entry = get_table_entry(tspContext);
219 
220 	if (entry == NULL)
221 		return TSPERR(TSS_E_NO_CONNECTION);
222 
223 	switch (entry->type) {
224 		case CONNECTION_TYPE_TCP_PERSISTANT:
225 			result = RPC_GetPcrEventLog_TP(entry, pEventCount, ppEvents);
226 			break;
227 		default:
228 			break;
229 	}
230 
231 	put_table_entry(entry);
232 
233 	return result;
234 }
235 
RPC_RegisterKey(TSS_HCONTEXT tspContext,TSS_UUID WrappingKeyUUID,TSS_UUID KeyUUID,UINT32 cKeySize,BYTE * rgbKey,UINT32 cVendorData,BYTE * gbVendorData)236 TSS_RESULT RPC_RegisterKey(TSS_HCONTEXT tspContext,	/* in */
237 			   TSS_UUID WrappingKeyUUID,	/* in */
238 			   TSS_UUID KeyUUID,	/* in */
239 			   UINT32 cKeySize,	/* in */
240 			   BYTE * rgbKey,	/* in */
241 			   UINT32 cVendorData,	/* in */
242 			   BYTE * gbVendorData)	/* in */
243 {
244 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
245 	struct host_table_entry *entry = get_table_entry(tspContext);
246 
247 	if (entry == NULL)
248 		return TSPERR(TSS_E_NO_CONNECTION);
249 
250 	switch (entry->type) {
251 		case CONNECTION_TYPE_TCP_PERSISTANT:
252 			result = RPC_RegisterKey_TP(entry, WrappingKeyUUID, KeyUUID, cKeySize,
253 						    rgbKey, cVendorData, gbVendorData);
254 			break;
255 		default:
256 			break;
257 	}
258 
259 	put_table_entry(entry);
260 
261 	return result;
262 }
263 
RPC_UnregisterKey(TSS_HCONTEXT tspContext,TSS_UUID KeyUUID)264 TSS_RESULT RPC_UnregisterKey(TSS_HCONTEXT tspContext,	/* in */
265 			     TSS_UUID KeyUUID)	/* in */
266 {
267 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
268 	struct host_table_entry *entry = get_table_entry(tspContext);
269 
270 	if (entry == NULL)
271 		return TSPERR(TSS_E_NO_CONNECTION);
272 
273 	switch (entry->type) {
274 		case CONNECTION_TYPE_TCP_PERSISTANT:
275 			result = RPC_UnregisterKey_TP(entry, KeyUUID);
276 			break;
277 		default:
278 			break;
279 	}
280 
281 	put_table_entry(entry);
282 
283 	return result;
284 }
285 
RPC_EnumRegisteredKeys(TSS_HCONTEXT tspContext,TSS_UUID * pKeyUUID,UINT32 * pcKeyHierarchySize,TSS_KM_KEYINFO ** ppKeyHierarchy)286 TSS_RESULT RPC_EnumRegisteredKeys(TSS_HCONTEXT tspContext,	/* in */
287 				  TSS_UUID * pKeyUUID,	/* in */
288 				  UINT32 * pcKeyHierarchySize,	/* out */
289 				  TSS_KM_KEYINFO ** ppKeyHierarchy)	/* out */
290 {
291 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
292 	struct host_table_entry *entry = get_table_entry(tspContext);
293 
294 	if (entry == NULL)
295 		return TSPERR(TSS_E_NO_CONNECTION);
296 
297 	switch (entry->type) {
298 		case CONNECTION_TYPE_TCP_PERSISTANT:
299 			result = RPC_EnumRegisteredKeys_TP(entry, pKeyUUID, pcKeyHierarchySize,
300 							   ppKeyHierarchy);
301 			break;
302 		default:
303 			break;
304 	}
305 
306 	put_table_entry(entry);
307 
308 	return result;
309 }
310 
RPC_EnumRegisteredKeys2(TSS_HCONTEXT tspContext,TSS_UUID * pKeyUUID,UINT32 * pcKeyHierarchySize,TSS_KM_KEYINFO2 ** ppKeyHierarchy)311 TSS_RESULT RPC_EnumRegisteredKeys2(TSS_HCONTEXT tspContext,	/* in */
312 				   TSS_UUID * pKeyUUID,	/* in */
313 				   UINT32 * pcKeyHierarchySize,	/* out */
314 				   TSS_KM_KEYINFO2 ** ppKeyHierarchy)	/* out */
315 {
316 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
317 	struct host_table_entry *entry = get_table_entry(tspContext);
318 
319 	if (entry == NULL)
320 		return TSPERR(TSS_E_NO_CONNECTION);
321 
322 	switch (entry->type) {
323 		case CONNECTION_TYPE_TCP_PERSISTANT:
324 			result = RPC_EnumRegisteredKeys2_TP(entry, pKeyUUID, pcKeyHierarchySize,
325 							    ppKeyHierarchy);
326 			break;
327 		default:
328 			break;
329 	}
330 
331 	put_table_entry(entry);
332 
333 	return result;
334 }
335 
336 
RPC_GetRegisteredKey(TSS_HCONTEXT tspContext,TSS_UUID KeyUUID,TSS_KM_KEYINFO ** ppKeyInfo)337 TSS_RESULT RPC_GetRegisteredKey(TSS_HCONTEXT tspContext,	/* in */
338 				TSS_UUID KeyUUID,	/* in */
339 				TSS_KM_KEYINFO ** ppKeyInfo)	/* out */
340 {
341 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
342 	struct host_table_entry *entry = get_table_entry(tspContext);
343 
344 	if (entry == NULL)
345 		return TSPERR(TSS_E_NO_CONNECTION);
346 
347 	switch (entry->type) {
348 		case CONNECTION_TYPE_TCP_PERSISTANT:
349 			result = RPC_GetRegisteredKey_TP(entry, KeyUUID, ppKeyInfo);
350 			break;
351 		default:
352 			break;
353 	}
354 
355 	put_table_entry(entry);
356 
357 	return result;
358 }
359 
RPC_GetRegisteredKeyBlob(TSS_HCONTEXT tspContext,TSS_UUID KeyUUID,UINT32 * pcKeySize,BYTE ** prgbKey)360 TSS_RESULT RPC_GetRegisteredKeyBlob(TSS_HCONTEXT tspContext,	/* in */
361 				    TSS_UUID KeyUUID,	/* in */
362 				    UINT32 * pcKeySize,	/* out */
363 				    BYTE ** prgbKey)	/* out */
364 {
365 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
366 	struct host_table_entry *entry = get_table_entry(tspContext);
367 
368 	if (entry == NULL)
369 		return TSPERR(TSS_E_NO_CONNECTION);
370 
371 	switch (entry->type) {
372 		case CONNECTION_TYPE_TCP_PERSISTANT:
373 			result = RPC_GetRegisteredKeyBlob_TP(entry, KeyUUID, pcKeySize, prgbKey);
374 			break;
375 		default:
376 			break;
377 	}
378 
379 	put_table_entry(entry);
380 
381 	return result;
382 }
383 
RPC_LoadKeyByBlob(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE hUnwrappingKey,UINT32 cWrappedKeyBlobSize,BYTE * rgbWrappedKeyBlob,TPM_AUTH * pAuth,TCS_KEY_HANDLE * phKeyTCSI,TCS_KEY_HANDLE * phKeyHMAC)384 TSS_RESULT RPC_LoadKeyByBlob(TSS_HCONTEXT tspContext,	/* in */
385 			     TCS_KEY_HANDLE hUnwrappingKey,	/* in */
386 			     UINT32 cWrappedKeyBlobSize,	/* in */
387 			     BYTE * rgbWrappedKeyBlob,	/* in */
388 			     TPM_AUTH * pAuth,	/* in, out */
389 			     TCS_KEY_HANDLE * phKeyTCSI,	/* out */
390 			     TCS_KEY_HANDLE * phKeyHMAC)	/* out */
391 {
392 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
393 	struct host_table_entry *entry = get_table_entry(tspContext);
394 
395 	if (entry == NULL)
396 		return TSPERR(TSS_E_NO_CONNECTION);
397 
398 	switch (entry->type) {
399 		case CONNECTION_TYPE_TCP_PERSISTANT:
400 			result = RPC_LoadKeyByBlob_TP(entry, hUnwrappingKey, cWrappedKeyBlobSize,
401 						      rgbWrappedKeyBlob, pAuth, phKeyTCSI,
402 						      phKeyHMAC);
403 			break;
404 		default:
405 			break;
406 	}
407 
408 	put_table_entry(entry);
409 
410 	return result;
411 }
412 
RPC_LoadKeyByUUID(TSS_HCONTEXT tspContext,TSS_UUID KeyUUID,TCS_LOADKEY_INFO * pLoadKeyInfo,TCS_KEY_HANDLE * phKeyTCSI)413 TSS_RESULT RPC_LoadKeyByUUID(TSS_HCONTEXT tspContext,	/* in */
414 			     TSS_UUID KeyUUID,	/* in */
415 			     TCS_LOADKEY_INFO * pLoadKeyInfo,	/* in, out */
416 			     TCS_KEY_HANDLE * phKeyTCSI)	/* out */
417 {
418 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
419 	struct host_table_entry *entry = get_table_entry(tspContext);
420 
421 	if (entry == NULL)
422 		return TSPERR(TSS_E_NO_CONNECTION);
423 
424 	switch (entry->type) {
425 		case CONNECTION_TYPE_TCP_PERSISTANT:
426 			result = RPC_LoadKeyByUUID_TP(entry, KeyUUID, pLoadKeyInfo, phKeyTCSI);
427 			break;
428 		default:
429 			break;
430 	}
431 
432 	put_table_entry(entry);
433 
434 	return result;
435 }
436 
RPC_EvictKey(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE hKey)437 TSS_RESULT RPC_EvictKey(TSS_HCONTEXT tspContext,	/* in */
438 			TCS_KEY_HANDLE hKey)	/* in */
439 {
440 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
441 	struct host_table_entry *entry = get_table_entry(tspContext);
442 
443 	if (entry == NULL)
444 		return TSPERR(TSS_E_NO_CONNECTION);
445 
446 	switch (entry->type) {
447 		case CONNECTION_TYPE_TCP_PERSISTANT:
448 			result = RPC_EvictKey_TP(entry, hKey);
449 			break;
450 		default:
451 			break;
452 	}
453 
454 	put_table_entry(entry);
455 
456 	return result;
457 }
458 
RPC_CreateWrapKey(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE hWrappingKey,TCPA_ENCAUTH * KeyUsageAuth,TCPA_ENCAUTH * KeyMigrationAuth,UINT32 keyInfoSize,BYTE * keyInfo,UINT32 * keyDataSize,BYTE ** keyData,TPM_AUTH * pAuth)459 TSS_RESULT RPC_CreateWrapKey(TSS_HCONTEXT tspContext,	/* in */
460 			     TCS_KEY_HANDLE hWrappingKey,	/* in */
461 			     TCPA_ENCAUTH *KeyUsageAuth,	/* in */
462 			     TCPA_ENCAUTH *KeyMigrationAuth,	/* in */
463 			     UINT32 keyInfoSize,	/* in */
464 			     BYTE * keyInfo,	/* in */
465 			     UINT32 * keyDataSize,	/* out */
466 			     BYTE ** keyData,	/* out */
467 			     TPM_AUTH * pAuth)	/* in, out */
468 {
469 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
470 	struct host_table_entry *entry = get_table_entry(tspContext);
471 
472 	if (entry == NULL)
473 		return TSPERR(TSS_E_NO_CONNECTION);
474 
475 	switch (entry->type) {
476 		case CONNECTION_TYPE_TCP_PERSISTANT:
477 			result = RPC_CreateWrapKey_TP(entry, hWrappingKey, KeyUsageAuth,
478 						      KeyMigrationAuth, keyInfoSize, keyInfo,
479 						      keyDataSize, keyData, pAuth);
480 			break;
481 		default:
482 			break;
483 	}
484 
485 	put_table_entry(entry);
486 
487 	return result;
488 }
489 
RPC_GetPubKey(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE hKey,TPM_AUTH * pAuth,UINT32 * pcPubKeySize,BYTE ** prgbPubKey)490 TSS_RESULT RPC_GetPubKey(TSS_HCONTEXT tspContext,	/* in */
491 			 TCS_KEY_HANDLE hKey,	/* in */
492 			 TPM_AUTH * pAuth,	/* in, out */
493 			 UINT32 * pcPubKeySize,	/* out */
494 			 BYTE ** prgbPubKey)	/* out */
495 {
496 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
497 	struct host_table_entry *entry = get_table_entry(tspContext);
498 
499 	if (entry == NULL)
500 		return TSPERR(TSS_E_NO_CONNECTION);
501 
502 	switch (entry->type) {
503 		case CONNECTION_TYPE_TCP_PERSISTANT:
504 			result = RPC_GetPubKey_TP(entry, hKey, pAuth, pcPubKeySize, prgbPubKey);
505 			break;
506 		default:
507 			break;
508 	}
509 
510 	put_table_entry(entry);
511 
512 	return result;
513 }
514 
RPC_MakeIdentity(TSS_HCONTEXT tspContext,TCPA_ENCAUTH identityAuth,TCPA_CHOSENID_HASH IDLabel_PrivCAHash,UINT32 idKeyInfoSize,BYTE * idKeyInfo,TPM_AUTH * pSrkAuth,TPM_AUTH * pOwnerAuth,UINT32 * idKeySize,BYTE ** idKey,UINT32 * pcIdentityBindingSize,BYTE ** prgbIdentityBinding,UINT32 * pcEndorsementCredentialSize,BYTE ** prgbEndorsementCredential,UINT32 * pcPlatformCredentialSize,BYTE ** prgbPlatformCredential,UINT32 * pcConformanceCredentialSize,BYTE ** prgbConformanceCredential)515 TSS_RESULT RPC_MakeIdentity(TSS_HCONTEXT tspContext,	/* in */
516 			    TCPA_ENCAUTH identityAuth,	/* in */
517 			    TCPA_CHOSENID_HASH IDLabel_PrivCAHash,	/* in */
518 			    UINT32 idKeyInfoSize,	/* in */
519 			    BYTE * idKeyInfo,	/* in */
520 			    TPM_AUTH * pSrkAuth,	/* in, out */
521 			    TPM_AUTH * pOwnerAuth,	/* in, out */
522 			    UINT32 * idKeySize,	/* out */
523 			    BYTE ** idKey,	/* out */
524 			    UINT32 * pcIdentityBindingSize,	/* out */
525 			    BYTE ** prgbIdentityBinding,	/* out */
526 			    UINT32 * pcEndorsementCredentialSize,	/* out */
527 			    BYTE ** prgbEndorsementCredential,	/* out */
528 			    UINT32 * pcPlatformCredentialSize,	/* out */
529 			    BYTE ** prgbPlatformCredential,	/* out */
530 			    UINT32 * pcConformanceCredentialSize,	/* out */
531 			    BYTE ** prgbConformanceCredential)	/* out */
532 {
533 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
534 	struct host_table_entry *entry = get_table_entry(tspContext);
535 
536 	if (entry == NULL)
537 		return TSPERR(TSS_E_NO_CONNECTION);
538 
539 	switch (entry->type) {
540 		case CONNECTION_TYPE_TCP_PERSISTANT:
541 			result = RPC_MakeIdentity_TP(entry, identityAuth,
542 						     IDLabel_PrivCAHash, idKeyInfoSize, idKeyInfo,
543 						     pSrkAuth, pOwnerAuth, idKeySize, idKey,
544 						     pcIdentityBindingSize, prgbIdentityBinding,
545 						     pcEndorsementCredentialSize,
546 						     prgbEndorsementCredential,
547 						     pcPlatformCredentialSize,
548 						     prgbPlatformCredential,
549 						     pcConformanceCredentialSize,
550 						     prgbConformanceCredential);
551 			break;
552 		default:
553 			break;
554 	}
555 
556 	put_table_entry(entry);
557 
558 	return result;
559 }
560 
561 #ifdef TSS_BUILD_TSS12
RPC_GetCredential(TSS_HCONTEXT tspContext,UINT32 ulCredentialType,UINT32 ulCredentialAccessMode,UINT32 * pulCredentialSize,BYTE ** prgbCredentialData)562 TSS_RESULT RPC_GetCredential(TSS_HCONTEXT tspContext,	/* in */
563 			     UINT32 ulCredentialType,          /* in */
564 			     UINT32 ulCredentialAccessMode,    /* in */
565 			     UINT32 * pulCredentialSize,       /* out */
566 			     BYTE ** prgbCredentialData)	/* out */
567 {
568 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
569 	struct host_table_entry *entry = get_table_entry(tspContext);
570 
571 	if (entry == NULL)
572 		return TSPERR(TSS_E_NO_CONNECTION);
573 
574 	switch (entry->type) {
575 		case CONNECTION_TYPE_TCP_PERSISTANT:
576 			result = RPC_GetCredential_TP(entry, ulCredentialType,
577 						      ulCredentialAccessMode, pulCredentialSize,
578 						      prgbCredentialData);
579 			break;
580 		default:
581 			break;
582 	}
583 
584 	put_table_entry(entry);
585 
586 	return result;
587 }
588 #endif
589 
RPC_SetOwnerInstall(TSS_HCONTEXT tspContext,TSS_BOOL state)590 TSS_RESULT RPC_SetOwnerInstall(TSS_HCONTEXT tspContext,	/* in */
591 			       TSS_BOOL state)	/* in */
592 {
593 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
594 	struct host_table_entry *entry = get_table_entry(tspContext);
595 
596 	if (entry == NULL)
597 		return TSPERR(TSS_E_NO_CONNECTION);
598 
599 	switch (entry->type) {
600 		case CONNECTION_TYPE_TCP_PERSISTANT:
601 			result = RPC_SetOwnerInstall_TP(entry, state);
602 			break;
603 		default:
604 			break;
605 	}
606 
607 	put_table_entry(entry);
608 
609 	return result;
610 }
611 
RPC_TakeOwnership(TSS_HCONTEXT tspContext,UINT16 protocolID,UINT32 encOwnerAuthSize,BYTE * encOwnerAuth,UINT32 encSrkAuthSize,BYTE * encSrkAuth,UINT32 srkInfoSize,BYTE * srkInfo,TPM_AUTH * ownerAuth,UINT32 * srkKeySize,BYTE ** srkKey)612 TSS_RESULT RPC_TakeOwnership(TSS_HCONTEXT tspContext,	/* in */
613 			     UINT16 protocolID,	/* in */
614 			     UINT32 encOwnerAuthSize,	/* in */
615 			     BYTE * encOwnerAuth,	/* in */
616 			     UINT32 encSrkAuthSize,	/* in */
617 			     BYTE * encSrkAuth,	/* in */
618 			     UINT32 srkInfoSize,	/* in */
619 			     BYTE * srkInfo,	/* in */
620 			     TPM_AUTH * ownerAuth,	/* in, out */
621 			     UINT32 * srkKeySize,
622 			     BYTE ** srkKey)
623 {
624 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
625 	struct host_table_entry *entry = get_table_entry(tspContext);
626 
627 	if (entry == NULL)
628 		return TSPERR(TSS_E_NO_CONNECTION);
629 
630 	switch (entry->type) {
631 		case CONNECTION_TYPE_TCP_PERSISTANT:
632 			result = RPC_TakeOwnership_TP(entry, protocolID,
633 						      encOwnerAuthSize, encOwnerAuth,
634 						      encSrkAuthSize, encSrkAuth, srkInfoSize,
635 						      srkInfo, ownerAuth, srkKeySize, srkKey);
636 			break;
637 		default:
638 			break;
639 	}
640 
641 	put_table_entry(entry);
642 
643 	return result;
644 }
645 
RPC_OIAP(TSS_HCONTEXT tspContext,TCS_AUTHHANDLE * authHandle,TCPA_NONCE * nonce0)646 TSS_RESULT RPC_OIAP(TSS_HCONTEXT tspContext,	/* in */
647 		    TCS_AUTHHANDLE * authHandle,	/* out */
648 		    TCPA_NONCE * nonce0)	/* out */
649 {
650 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
651 	struct host_table_entry *entry = get_table_entry(tspContext);
652 
653 	if (entry == NULL)
654 		return TSPERR(TSS_E_NO_CONNECTION);
655 
656 	switch (entry->type) {
657 		case CONNECTION_TYPE_TCP_PERSISTANT:
658 			result = RPC_OIAP_TP(entry, authHandle, nonce0);
659 			break;
660 		default:
661 			break;
662 	}
663 
664 	put_table_entry(entry);
665 
666 	return result;
667 }
668 
RPC_OSAP(TSS_HCONTEXT tspContext,TCPA_ENTITY_TYPE entityType,UINT32 entityValue,TPM_NONCE * nonceOddOSAP,TCS_AUTHHANDLE * authHandle,TCPA_NONCE * nonceEven,TCPA_NONCE * nonceEvenOSAP)669 TSS_RESULT RPC_OSAP(TSS_HCONTEXT tspContext,	/* in */
670 		    TCPA_ENTITY_TYPE entityType,	/* in */
671 		    UINT32 entityValue,	/* in */
672 		    TPM_NONCE *nonceOddOSAP,	/* in */
673 		    TCS_AUTHHANDLE * authHandle,	/* out */
674 		    TCPA_NONCE * nonceEven,	/* out */
675 		    TCPA_NONCE * nonceEvenOSAP)	/* out */
676 {
677 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
678 	struct host_table_entry *entry = get_table_entry(tspContext);
679 
680 	if (entry == NULL)
681 		return TSPERR(TSS_E_NO_CONNECTION);
682 
683 	switch (entry->type) {
684 		case CONNECTION_TYPE_TCP_PERSISTANT:
685 			result = RPC_OSAP_TP(entry, entityType, entityValue, nonceOddOSAP,
686 					     authHandle, nonceEven, nonceEvenOSAP);
687 			break;
688 		default:
689 			break;
690 	}
691 
692 	put_table_entry(entry);
693 
694 	return result;
695 }
696 
RPC_ChangeAuth(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE parentHandle,TCPA_PROTOCOL_ID protocolID,TCPA_ENCAUTH * newAuth,TCPA_ENTITY_TYPE entityType,UINT32 encDataSize,BYTE * encData,TPM_AUTH * ownerAuth,TPM_AUTH * entityAuth,UINT32 * outDataSize,BYTE ** outData)697 TSS_RESULT RPC_ChangeAuth(TSS_HCONTEXT tspContext,	/* in */
698 			  TCS_KEY_HANDLE parentHandle,	/* in */
699 			  TCPA_PROTOCOL_ID protocolID,	/* in */
700 			  TCPA_ENCAUTH *newAuth,	/* in */
701 			  TCPA_ENTITY_TYPE entityType,	/* in */
702 			  UINT32 encDataSize,	/* in */
703 			  BYTE * encData,	/* in */
704 			  TPM_AUTH * ownerAuth,	/* in, out */
705 			  TPM_AUTH * entityAuth,	/* in, out */
706 			  UINT32 * outDataSize,	/* out */
707 			  BYTE ** outData)	/* out */
708 {
709 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
710 	struct host_table_entry *entry = get_table_entry(tspContext);
711 
712 	if (entry == NULL)
713 		return TSPERR(TSS_E_NO_CONNECTION);
714 
715 	switch (entry->type) {
716 		case CONNECTION_TYPE_TCP_PERSISTANT:
717 			result = RPC_ChangeAuth_TP(entry, parentHandle, protocolID, newAuth,
718 						   entityType, encDataSize, encData, ownerAuth,
719 						   entityAuth, outDataSize, outData);
720 			break;
721 		default:
722 			break;
723 	}
724 
725 	put_table_entry(entry);
726 
727 	return result;
728 }
729 
RPC_ChangeAuthOwner(TSS_HCONTEXT tspContext,TCPA_PROTOCOL_ID protocolID,TCPA_ENCAUTH * newAuth,TCPA_ENTITY_TYPE entityType,TPM_AUTH * ownerAuth)730 TSS_RESULT RPC_ChangeAuthOwner(TSS_HCONTEXT tspContext,	/* in */
731 				TCPA_PROTOCOL_ID protocolID,	/* in */
732 				TCPA_ENCAUTH *newAuth,	/* in */
733 				TCPA_ENTITY_TYPE entityType,	/* in */
734 				TPM_AUTH * ownerAuth)	/* in, out */
735 {
736 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
737 	struct host_table_entry *entry = get_table_entry(tspContext);
738 
739 	if (entry == NULL)
740 		return TSPERR(TSS_E_NO_CONNECTION);
741 
742 	switch (entry->type) {
743 		case CONNECTION_TYPE_TCP_PERSISTANT:
744 			result = RPC_ChangeAuthOwner_TP(entry, protocolID, newAuth, entityType,
745 							ownerAuth);
746 			break;
747 		default:
748 			break;
749 	}
750 
751 	put_table_entry(entry);
752 
753 	return result;
754 }
755 
RPC_ChangeAuthAsymStart(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE idHandle,TCPA_NONCE antiReplay,UINT32 KeySizeIn,BYTE * KeyDataIn,TPM_AUTH * pAuth,UINT32 * KeySizeOut,BYTE ** KeyDataOut,UINT32 * CertifyInfoSize,BYTE ** CertifyInfo,UINT32 * sigSize,BYTE ** sig,TCS_KEY_HANDLE * ephHandle)756 TSS_RESULT RPC_ChangeAuthAsymStart(TSS_HCONTEXT tspContext,	/* in */
757 				   TCS_KEY_HANDLE idHandle,	/* in */
758 				   TCPA_NONCE antiReplay,	/* in */
759 				   UINT32 KeySizeIn,	/* in */
760 				   BYTE * KeyDataIn,	/* in */
761 				   TPM_AUTH * pAuth,	/* in, out */
762 				   UINT32 * KeySizeOut,	/* out */
763 				   BYTE ** KeyDataOut,	/* out */
764 				   UINT32 * CertifyInfoSize,	/* out */
765 				   BYTE ** CertifyInfo,	/* out */
766 				   UINT32 * sigSize,	/* out */
767 				   BYTE ** sig,	/* out */
768 				   TCS_KEY_HANDLE * ephHandle)	/* out */
769 {
770 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
771 	struct host_table_entry *entry = get_table_entry(tspContext);
772 
773 	if (entry == NULL)
774 		return TSPERR(TSS_E_NO_CONNECTION);
775 
776 	switch (entry->type) {
777 		case CONNECTION_TYPE_TCP_PERSISTANT:
778 			result = RPC_ChangeAuthAsymStart_TP(entry, idHandle, antiReplay,
779 							    KeySizeIn, KeyDataIn, pAuth,
780 							    KeySizeOut, KeyDataOut,
781 							    CertifyInfoSize, CertifyInfo, sigSize,
782 							    sig, ephHandle);
783 			break;
784 		default:
785 			break;
786 	}
787 
788 	put_table_entry(entry);
789 
790 	return result;
791 }
792 
RPC_ChangeAuthAsymFinish(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE parentHandle,TCS_KEY_HANDLE ephHandle,TCPA_ENTITY_TYPE entityType,TCPA_HMAC newAuthLink,UINT32 newAuthSize,BYTE * encNewAuth,UINT32 encDataSizeIn,BYTE * encDataIn,TPM_AUTH * ownerAuth,UINT32 * encDataSizeOut,BYTE ** encDataOut,TCPA_SALT_NONCE * saltNonce,TCPA_DIGEST * changeProof)793 TSS_RESULT RPC_ChangeAuthAsymFinish(TSS_HCONTEXT tspContext,	/* in */
794 				    TCS_KEY_HANDLE parentHandle,	/* in */
795 				    TCS_KEY_HANDLE ephHandle,	/* in */
796 				    TCPA_ENTITY_TYPE entityType,	/* in */
797 				    TCPA_HMAC newAuthLink,	/* in */
798 				    UINT32 newAuthSize,	/* in */
799 				    BYTE * encNewAuth,	/* in */
800 				    UINT32 encDataSizeIn,	/* in */
801 				    BYTE * encDataIn,	/* in */
802 				    TPM_AUTH * ownerAuth,	/* in, out */
803 				    UINT32 * encDataSizeOut,	/* out */
804 				    BYTE ** encDataOut,	/* out */
805 				    TCPA_SALT_NONCE * saltNonce,	/* out */
806 				    TCPA_DIGEST * changeProof)	/* out */
807 {
808 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
809 	struct host_table_entry *entry = get_table_entry(tspContext);
810 
811 	if (entry == NULL)
812 		return TSPERR(TSS_E_NO_CONNECTION);
813 
814 	switch (entry->type) {
815 		case CONNECTION_TYPE_TCP_PERSISTANT:
816 			result = RPC_ChangeAuthAsymFinish_TP(entry, parentHandle, ephHandle,
817 							     entityType, newAuthLink,
818 							     newAuthSize, encNewAuth,
819 							     encDataSizeIn, encDataIn, ownerAuth,
820 							     encDataSizeOut, encDataOut, saltNonce,
821 							     changeProof);
822 			break;
823 		default:
824 			break;
825 	}
826 
827 	put_table_entry(entry);
828 
829 	return result;
830 }
831 
RPC_TerminateHandle(TSS_HCONTEXT tspContext,TCS_AUTHHANDLE handle)832 TSS_RESULT RPC_TerminateHandle(TSS_HCONTEXT tspContext,	/* in */
833 			       TCS_AUTHHANDLE handle)	/* in */
834 {
835 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
836 	struct host_table_entry *entry = get_table_entry(tspContext);
837 
838 	if (entry == NULL)
839 		return TSPERR(TSS_E_NO_CONNECTION);
840 
841 	switch (entry->type) {
842 		case CONNECTION_TYPE_TCP_PERSISTANT:
843 			result = RPC_TerminateHandle_TP(entry, handle);
844 			break;
845 		default:
846 			break;
847 	}
848 
849 	put_table_entry(entry);
850 
851 	return result;
852 }
853 
RPC_ActivateTPMIdentity(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE idKey,UINT32 blobSize,BYTE * blob,TPM_AUTH * idKeyAuth,TPM_AUTH * ownerAuth,UINT32 * SymmetricKeySize,BYTE ** SymmetricKey)854 TSS_RESULT RPC_ActivateTPMIdentity(TSS_HCONTEXT tspContext,	/* in */
855 				   TCS_KEY_HANDLE idKey,	/* in */
856 				   UINT32 blobSize,	/* in */
857 				   BYTE * blob,	/* in */
858 				   TPM_AUTH * idKeyAuth,	/* in, out */
859 				   TPM_AUTH * ownerAuth,	/* in, out */
860 				   UINT32 * SymmetricKeySize,	/* out */
861 				   BYTE ** SymmetricKey)	/* out */
862 {
863 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
864 	struct host_table_entry *entry = get_table_entry(tspContext);
865 
866 	if (entry == NULL)
867 		return TSPERR(TSS_E_NO_CONNECTION);
868 
869 	switch (entry->type) {
870 		case CONNECTION_TYPE_TCP_PERSISTANT:
871 			result = RPC_ActivateTPMIdentity_TP(entry, idKey, blobSize, blob, idKeyAuth,
872 							    ownerAuth, SymmetricKeySize,
873 							    SymmetricKey);
874 			break;
875 		default:
876 			break;
877 	}
878 
879 	put_table_entry(entry);
880 
881 	return result;
882 }
883 
RPC_Extend(TSS_HCONTEXT tspContext,TCPA_PCRINDEX pcrNum,TCPA_DIGEST inDigest,TCPA_PCRVALUE * outDigest)884 TSS_RESULT RPC_Extend(TSS_HCONTEXT tspContext,	/* in */
885 		      TCPA_PCRINDEX pcrNum,	/* in */
886 		      TCPA_DIGEST inDigest,	/* in */
887 		      TCPA_PCRVALUE * outDigest)	/* out */
888 {
889 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
890 	struct host_table_entry *entry = get_table_entry(tspContext);
891 
892 	if (entry == NULL)
893 		return TSPERR(TSS_E_NO_CONNECTION);
894 
895 	switch (entry->type) {
896 		case CONNECTION_TYPE_TCP_PERSISTANT:
897 			result = RPC_Extend_TP(entry, pcrNum, inDigest, outDigest);
898 			break;
899 		default:
900 			break;
901 	}
902 
903 	put_table_entry(entry);
904 
905 	return result;
906 }
907 
RPC_PcrRead(TSS_HCONTEXT tspContext,TCPA_PCRINDEX pcrNum,TCPA_PCRVALUE * outDigest)908 TSS_RESULT RPC_PcrRead(TSS_HCONTEXT tspContext,	/* in */
909 		       TCPA_PCRINDEX pcrNum,	/* in */
910 		       TCPA_PCRVALUE * outDigest)	/* out */
911 {
912 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
913 	struct host_table_entry *entry = get_table_entry(tspContext);
914 
915 	if (entry == NULL)
916 		return TSPERR(TSS_E_NO_CONNECTION);
917 
918 	switch (entry->type) {
919 		case CONNECTION_TYPE_TCP_PERSISTANT:
920 			result = RPC_PcrRead_TP(entry, pcrNum, outDigest);
921 			break;
922 		default:
923 			break;
924 	}
925 
926 	put_table_entry(entry);
927 
928 	return result;
929 }
930 
RPC_PcrReset(TSS_HCONTEXT tspContext,UINT32 pcrDataSizeIn,BYTE * pcrDataIn)931 TSS_RESULT RPC_PcrReset(TSS_HCONTEXT tspContext,	/* in */
932 			UINT32 pcrDataSizeIn,		/* in */
933 			BYTE * pcrDataIn)		/* in */
934 {
935 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
936 	struct host_table_entry *entry = get_table_entry(tspContext);
937 
938 	if (entry == NULL)
939 		return TSPERR(TSS_E_NO_CONNECTION);
940 
941 	switch (entry->type) {
942 		case CONNECTION_TYPE_TCP_PERSISTANT:
943 			result = RPC_PcrReset_TP(entry, pcrDataSizeIn, pcrDataIn);
944 			break;
945 		default:
946 			break;
947 	}
948 
949 	put_table_entry(entry);
950 
951 	return result;
952 }
953 
954 
RPC_Quote(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,TCPA_NONCE * antiReplay,UINT32 pcrDataSizeIn,BYTE * pcrDataIn,TPM_AUTH * privAuth,UINT32 * pcrDataSizeOut,BYTE ** pcrDataOut,UINT32 * sigSize,BYTE ** sig)955 TSS_RESULT RPC_Quote(TSS_HCONTEXT tspContext,	/* in */
956 		     TCS_KEY_HANDLE keyHandle,	/* in */
957 		     TCPA_NONCE *antiReplay,	/* in */
958 		     UINT32 pcrDataSizeIn,	/* in */
959 		     BYTE * pcrDataIn,	/* in */
960 		     TPM_AUTH * privAuth,	/* in, out */
961 		     UINT32 * pcrDataSizeOut,	/* out */
962 		     BYTE ** pcrDataOut,	/* out */
963 		     UINT32 * sigSize,	/* out */
964 		     BYTE ** sig)	/* out */
965 {
966 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
967 	struct host_table_entry *entry = get_table_entry(tspContext);
968 
969 	if (entry == NULL)
970 		return TSPERR(TSS_E_NO_CONNECTION);
971 
972 	switch (entry->type) {
973 		case CONNECTION_TYPE_TCP_PERSISTANT:
974 			result = RPC_Quote_TP(entry, keyHandle, antiReplay, pcrDataSizeIn,
975 					      pcrDataIn, privAuth, pcrDataSizeOut, pcrDataOut,
976 					      sigSize, sig);
977 			break;
978 		default:
979 			break;
980 	}
981 
982 	put_table_entry(entry);
983 
984 	return result;
985 }
986 
987 #ifdef TSS_BUILD_TSS12
RPC_Quote2(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,TCPA_NONCE * antiReplay,UINT32 pcrDataSizeIn,BYTE * pcrDataIn,TSS_BOOL addVersion,TPM_AUTH * privAuth,UINT32 * pcrDataSizeOut,BYTE ** pcrDataOut,UINT32 * versionInfoSize,BYTE ** versionInfo,UINT32 * sigSize,BYTE ** sig)988 TSS_RESULT RPC_Quote2(TSS_HCONTEXT tspContext, /* in */
989 		      TCS_KEY_HANDLE keyHandle, /* in */
990 		      TCPA_NONCE *antiReplay, /* in */
991 		      UINT32 pcrDataSizeIn, /* in */
992 		      BYTE * pcrDataIn, /* in */
993 		      TSS_BOOL addVersion, /* in */
994 		      TPM_AUTH * privAuth, /* in,out */
995 		      UINT32 * pcrDataSizeOut, /* out */
996 		      BYTE ** pcrDataOut, /* out */
997 		      UINT32 * versionInfoSize, /* out */
998 		      BYTE ** versionInfo, /* out */
999 		      UINT32 * sigSize, /* out */
1000 		      BYTE ** sig) /* out */
1001 {
1002 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1003 	struct host_table_entry *entry = get_table_entry(tspContext);
1004 
1005 	if (entry == NULL)
1006 		return TSPERR(TSS_E_NO_CONNECTION);
1007 
1008 	switch (entry->type) {
1009 	case CONNECTION_TYPE_TCP_PERSISTANT:
1010 		result = RPC_Quote2_TP(entry, keyHandle, antiReplay, pcrDataSizeIn, pcrDataIn,
1011 				       addVersion,privAuth, pcrDataSizeOut, pcrDataOut,
1012 				       versionInfoSize, versionInfo,sigSize, sig);
1013 		break;
1014 	default:
1015 		break;
1016 	}
1017 
1018 	put_table_entry(entry);
1019 
1020 	return result;
1021 }
1022 #endif
1023 
RPC_DirWriteAuth(TSS_HCONTEXT tspContext,TCPA_DIRINDEX dirIndex,TCPA_DIRVALUE * newContents,TPM_AUTH * ownerAuth)1024 TSS_RESULT RPC_DirWriteAuth(TSS_HCONTEXT tspContext,	/* in */
1025 			    TCPA_DIRINDEX dirIndex,	/* in */
1026 			    TCPA_DIRVALUE *newContents,	/* in */
1027 			    TPM_AUTH * ownerAuth)	/* in, out */
1028 {
1029 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1030 	struct host_table_entry *entry = get_table_entry(tspContext);
1031 
1032 	if (entry == NULL)
1033 		return TSPERR(TSS_E_NO_CONNECTION);
1034 
1035 	switch (entry->type) {
1036 		case CONNECTION_TYPE_TCP_PERSISTANT:
1037 			result = RPC_DirWriteAuth_TP(entry, dirIndex, newContents, ownerAuth);
1038 			break;
1039 		default:
1040 			break;
1041 	}
1042 
1043 	put_table_entry(entry);
1044 
1045 	return result;
1046 }
1047 
RPC_DirRead(TSS_HCONTEXT tspContext,TCPA_DIRINDEX dirIndex,TCPA_DIRVALUE * dirValue)1048 TSS_RESULT RPC_DirRead(TSS_HCONTEXT tspContext,	/* in */
1049 		       TCPA_DIRINDEX dirIndex,	/* in */
1050 		       TCPA_DIRVALUE * dirValue)	/* out */
1051 {
1052 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1053 	struct host_table_entry *entry = get_table_entry(tspContext);
1054 
1055 	if (entry == NULL)
1056 		return TSPERR(TSS_E_NO_CONNECTION);
1057 
1058 	switch (entry->type) {
1059 		case CONNECTION_TYPE_TCP_PERSISTANT:
1060 			result = RPC_DirRead_TP(entry, dirIndex, dirValue);
1061 			break;
1062 		default:
1063 			break;
1064 	}
1065 
1066 	put_table_entry(entry);
1067 
1068 	return result;
1069 }
1070 
RPC_Seal(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,TCPA_ENCAUTH * encAuth,UINT32 pcrInfoSize,BYTE * PcrInfo,UINT32 inDataSize,BYTE * inData,TPM_AUTH * pubAuth,UINT32 * SealedDataSize,BYTE ** SealedData)1071 TSS_RESULT RPC_Seal(TSS_HCONTEXT tspContext,	/* in */
1072 		    TCS_KEY_HANDLE keyHandle,	/* in */
1073 		    TCPA_ENCAUTH *encAuth,	/* in */
1074 		    UINT32 pcrInfoSize,	/* in */
1075 		    BYTE * PcrInfo,	/* in */
1076 		    UINT32 inDataSize,	/* in */
1077 		    BYTE * inData,	/* in */
1078 		    TPM_AUTH * pubAuth,	/* in, out */
1079 		    UINT32 * SealedDataSize,	/* out */
1080 		    BYTE ** SealedData)	/* out */
1081 {
1082 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1083 	struct host_table_entry *entry = get_table_entry(tspContext);
1084 
1085 	if (entry == NULL)
1086 		return TSPERR(TSS_E_NO_CONNECTION);
1087 
1088 	switch (entry->type) {
1089 		case CONNECTION_TYPE_TCP_PERSISTANT:
1090 			result = RPC_Seal_TP(entry, keyHandle, encAuth, pcrInfoSize, PcrInfo,
1091 					     inDataSize, inData, pubAuth, SealedDataSize,
1092 					     SealedData);
1093 			break;
1094 		default:
1095 			break;
1096 	}
1097 
1098 	put_table_entry(entry);
1099 
1100 	return result;
1101 }
1102 
1103 #ifdef TSS_BUILD_SEALX
RPC_Sealx(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,TCPA_ENCAUTH * encAuth,UINT32 pcrInfoSize,BYTE * PcrInfo,UINT32 inDataSize,BYTE * inData,TPM_AUTH * pubAuth,UINT32 * SealedDataSize,BYTE ** SealedData)1104 TSS_RESULT RPC_Sealx(TSS_HCONTEXT tspContext,	/* in */
1105 		     TCS_KEY_HANDLE keyHandle,	/* in */
1106 		     TCPA_ENCAUTH *encAuth,	/* in */
1107 		     UINT32 pcrInfoSize,	/* in */
1108 		     BYTE * PcrInfo,	/* in */
1109 		     UINT32 inDataSize,	/* in */
1110 		     BYTE * inData,	/* in */
1111 		     TPM_AUTH * pubAuth,	/* in, out */
1112 		     UINT32 * SealedDataSize,	/* out */
1113 		     BYTE ** SealedData)	/* out */
1114 {
1115 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1116 	struct host_table_entry *entry = get_table_entry(tspContext);
1117 
1118 	if (entry == NULL)
1119 		return TSPERR(TSS_E_NO_CONNECTION);
1120 
1121 	switch (entry->type) {
1122 		case CONNECTION_TYPE_TCP_PERSISTANT:
1123 			result = RPC_Sealx_TP(entry, keyHandle, encAuth, pcrInfoSize, PcrInfo,
1124 					      inDataSize, inData, pubAuth, SealedDataSize,
1125 					      SealedData);
1126 			break;
1127 		default:
1128 			break;
1129 	}
1130 
1131 	put_table_entry(entry);
1132 
1133 	return result;
1134 }
1135 #endif
1136 
RPC_Unseal(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE parentHandle,UINT32 SealedDataSize,BYTE * SealedData,TPM_AUTH * parentAuth,TPM_AUTH * dataAuth,UINT32 * DataSize,BYTE ** Data)1137 TSS_RESULT RPC_Unseal(TSS_HCONTEXT tspContext,	/* in */
1138 		      TCS_KEY_HANDLE parentHandle,	/* in */
1139 		      UINT32 SealedDataSize,	/* in */
1140 		      BYTE * SealedData,	/* in */
1141 		      TPM_AUTH * parentAuth,	/* in, out */
1142 		      TPM_AUTH * dataAuth,	/* in, out */
1143 		      UINT32 * DataSize,	/* out */
1144 		      BYTE ** Data)	/* out */
1145 {
1146 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1147 	struct host_table_entry *entry = get_table_entry(tspContext);
1148 
1149 	if (entry == NULL)
1150 		return TSPERR(TSS_E_NO_CONNECTION);
1151 
1152 	switch (entry->type) {
1153 		case CONNECTION_TYPE_TCP_PERSISTANT:
1154 			result = RPC_Unseal_TP(entry, parentHandle, SealedDataSize, SealedData,
1155 					       parentAuth, dataAuth, DataSize, Data);
1156 			break;
1157 		default:
1158 			break;
1159 	}
1160 
1161 	put_table_entry(entry);
1162 
1163 	return result;
1164 }
1165 
RPC_UnBind(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,UINT32 inDataSize,BYTE * inData,TPM_AUTH * privAuth,UINT32 * outDataSize,BYTE ** outData)1166 TSS_RESULT RPC_UnBind(TSS_HCONTEXT tspContext,	/* in */
1167 		       TCS_KEY_HANDLE keyHandle,	/* in */
1168 		       UINT32 inDataSize,	/* in */
1169 		       BYTE * inData,	/* in */
1170 		       TPM_AUTH * privAuth,	/* in, out */
1171 		       UINT32 * outDataSize,	/* out */
1172 		       BYTE ** outData)	/* out */
1173 {
1174 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1175 	struct host_table_entry *entry = get_table_entry(tspContext);
1176 
1177 	if (entry == NULL)
1178 		return TSPERR(TSS_E_NO_CONNECTION);
1179 
1180 	switch (entry->type) {
1181 		case CONNECTION_TYPE_TCP_PERSISTANT:
1182 			result = RPC_UnBind_TP(entry, keyHandle, inDataSize, inData, privAuth,
1183 					       outDataSize, outData);
1184 			break;
1185 		default:
1186 			break;
1187 	}
1188 
1189 	put_table_entry(entry);
1190 
1191 	return result;
1192 }
1193 
RPC_CreateMigrationBlob(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE parentHandle,TCPA_MIGRATE_SCHEME migrationType,UINT32 MigrationKeyAuthSize,BYTE * MigrationKeyAuth,UINT32 encDataSize,BYTE * encData,TPM_AUTH * parentAuth,TPM_AUTH * entityAuth,UINT32 * randomSize,BYTE ** random,UINT32 * outDataSize,BYTE ** outData)1194 TSS_RESULT RPC_CreateMigrationBlob(TSS_HCONTEXT tspContext,	/* in */
1195 				   TCS_KEY_HANDLE parentHandle,	/* in */
1196 				   TCPA_MIGRATE_SCHEME migrationType,	/* in */
1197 				   UINT32 MigrationKeyAuthSize,	/* in */
1198 				   BYTE * MigrationKeyAuth,	/* in */
1199 				   UINT32 encDataSize,	/* in */
1200 				   BYTE * encData,	/* in */
1201 				   TPM_AUTH * parentAuth,	/* in, out */
1202 				   TPM_AUTH * entityAuth,	/* in, out */
1203 				   UINT32 * randomSize,	/* out */
1204 				   BYTE ** random,	/* out */
1205 				   UINT32 * outDataSize,	/* out */
1206 				   BYTE ** outData)	/* out */
1207 {
1208 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1209 	struct host_table_entry *entry = get_table_entry(tspContext);
1210 
1211 	if (entry == NULL)
1212 		return TSPERR(TSS_E_NO_CONNECTION);
1213 
1214 	switch (entry->type) {
1215 		case CONNECTION_TYPE_TCP_PERSISTANT:
1216 			result = RPC_CreateMigrationBlob_TP(entry, parentHandle,
1217 							    migrationType, MigrationKeyAuthSize,
1218 							    MigrationKeyAuth, encDataSize, encData,
1219 							    parentAuth, entityAuth, randomSize,
1220 							    random, outDataSize, outData);
1221 			break;
1222 		default:
1223 			break;
1224 	}
1225 
1226 	put_table_entry(entry);
1227 
1228 	return result;
1229 }
1230 
RPC_ConvertMigrationBlob(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE parentHandle,UINT32 inDataSize,BYTE * inData,UINT32 randomSize,BYTE * random,TPM_AUTH * parentAuth,UINT32 * outDataSize,BYTE ** outData)1231 TSS_RESULT RPC_ConvertMigrationBlob(TSS_HCONTEXT tspContext,	/* in */
1232 				    TCS_KEY_HANDLE parentHandle,	/* in */
1233 				    UINT32 inDataSize,	/* in */
1234 				    BYTE * inData,	/* in */
1235 				    UINT32 randomSize,	/* in */
1236 				    BYTE * random,	/* in */
1237 				    TPM_AUTH * parentAuth,	/* in, out */
1238 				    UINT32 * outDataSize,	/* out */
1239 				    BYTE ** outData)	/* out */
1240 {
1241 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1242 	struct host_table_entry *entry = get_table_entry(tspContext);
1243 
1244 	if (entry == NULL)
1245 		return TSPERR(TSS_E_NO_CONNECTION);
1246 
1247 	switch (entry->type) {
1248 		case CONNECTION_TYPE_TCP_PERSISTANT:
1249 			result = RPC_ConvertMigrationBlob_TP(entry, parentHandle,
1250 							     inDataSize, inData, randomSize,
1251 							     random, parentAuth, outDataSize,
1252 							     outData);
1253 			break;
1254 		default:
1255 			break;
1256 	}
1257 
1258 	put_table_entry(entry);
1259 
1260 	return result;
1261 }
1262 
RPC_AuthorizeMigrationKey(TSS_HCONTEXT tspContext,TCPA_MIGRATE_SCHEME migrateScheme,UINT32 MigrationKeySize,BYTE * MigrationKey,TPM_AUTH * ownerAuth,UINT32 * MigrationKeyAuthSize,BYTE ** MigrationKeyAuth)1263 TSS_RESULT RPC_AuthorizeMigrationKey(TSS_HCONTEXT tspContext,	/* in */
1264 				     TCPA_MIGRATE_SCHEME migrateScheme,	/* in */
1265 				     UINT32 MigrationKeySize,	/* in */
1266 				     BYTE * MigrationKey,	/* in */
1267 				     TPM_AUTH * ownerAuth,	/* in, out */
1268 				     UINT32 * MigrationKeyAuthSize,	/* out */
1269 				     BYTE ** MigrationKeyAuth)	/* out */
1270 {
1271 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1272 	struct host_table_entry *entry = get_table_entry(tspContext);
1273 
1274 	if (entry == NULL)
1275 		return TSPERR(TSS_E_NO_CONNECTION);
1276 
1277 	switch (entry->type) {
1278 		case CONNECTION_TYPE_TCP_PERSISTANT:
1279 			result = RPC_AuthorizeMigrationKey_TP(entry, migrateScheme,
1280 							      MigrationKeySize, MigrationKey,
1281 							      ownerAuth, MigrationKeyAuthSize,
1282 							      MigrationKeyAuth);
1283 			break;
1284 		default:
1285 			break;
1286 	}
1287 
1288 	put_table_entry(entry);
1289 
1290 	return result;
1291 }
1292 
RPC_CertifyKey(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE certHandle,TCS_KEY_HANDLE keyHandle,TPM_NONCE * antiReplay,TPM_AUTH * certAuth,TPM_AUTH * keyAuth,UINT32 * CertifyInfoSize,BYTE ** CertifyInfo,UINT32 * outDataSize,BYTE ** outData)1293 TSS_RESULT RPC_CertifyKey(TSS_HCONTEXT tspContext,	/* in */
1294 			  TCS_KEY_HANDLE certHandle,	/* in */
1295 			  TCS_KEY_HANDLE keyHandle,	/* in */
1296 			  TPM_NONCE * antiReplay,	/* in */
1297 			  TPM_AUTH * certAuth,	/* in, out */
1298 			  TPM_AUTH * keyAuth,	/* in, out */
1299 			  UINT32 * CertifyInfoSize,	/* out */
1300 			  BYTE ** CertifyInfo,	/* out */
1301 			  UINT32 * outDataSize,	/* out */
1302 			  BYTE ** outData)	/* out */
1303 {
1304 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1305 	struct host_table_entry *entry = get_table_entry(tspContext);
1306 
1307 	if (entry == NULL)
1308 		return TSPERR(TSS_E_NO_CONNECTION);
1309 
1310 	switch (entry->type) {
1311 		case CONNECTION_TYPE_TCP_PERSISTANT:
1312 			result = RPC_CertifyKey_TP(entry, certHandle, keyHandle, antiReplay,
1313 						   certAuth, keyAuth, CertifyInfoSize, CertifyInfo,
1314 						   outDataSize, outData);
1315 			break;
1316 		default:
1317 			break;
1318 	}
1319 
1320 	put_table_entry(entry);
1321 
1322 	return result;
1323 }
1324 
RPC_Sign(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,UINT32 areaToSignSize,BYTE * areaToSign,TPM_AUTH * privAuth,UINT32 * sigSize,BYTE ** sig)1325 TSS_RESULT RPC_Sign(TSS_HCONTEXT tspContext,	/* in */
1326 		    TCS_KEY_HANDLE keyHandle,	/* in */
1327 		    UINT32 areaToSignSize,	/* in */
1328 		    BYTE * areaToSign,	/* in */
1329 		    TPM_AUTH * privAuth,	/* in, out */
1330 		    UINT32 * sigSize,	/* out */
1331 		    BYTE ** sig)	/* out */
1332 {
1333 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1334 	struct host_table_entry *entry = get_table_entry(tspContext);
1335 
1336 	if (entry == NULL)
1337 		return TSPERR(TSS_E_NO_CONNECTION);
1338 
1339 	switch (entry->type) {
1340 		case CONNECTION_TYPE_TCP_PERSISTANT:
1341 			result = RPC_Sign_TP(entry, keyHandle, areaToSignSize, areaToSign, privAuth,
1342 					     sigSize, sig);
1343 			break;
1344 		default:
1345 			break;
1346 	}
1347 
1348 	put_table_entry(entry);
1349 
1350 	return result;
1351 }
1352 
RPC_GetRandom(TSS_HCONTEXT tspContext,UINT32 bytesRequested,BYTE ** randomBytes)1353 TSS_RESULT RPC_GetRandom(TSS_HCONTEXT tspContext,	/* in */
1354 			 UINT32 bytesRequested,	/* in */
1355 			 BYTE ** randomBytes)	/* out */
1356 {
1357 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1358 	struct host_table_entry *entry = get_table_entry(tspContext);
1359 
1360 	if (entry == NULL)
1361 		return TSPERR(TSS_E_NO_CONNECTION);
1362 
1363 	switch (entry->type) {
1364 		case CONNECTION_TYPE_TCP_PERSISTANT:
1365 			result = RPC_GetRandom_TP(entry, bytesRequested, randomBytes);
1366 			break;
1367 		default:
1368 			break;
1369 	}
1370 
1371 	put_table_entry(entry);
1372 
1373 	return result;
1374 }
1375 
RPC_StirRandom(TSS_HCONTEXT tspContext,UINT32 inDataSize,BYTE * inData)1376 TSS_RESULT RPC_StirRandom(TSS_HCONTEXT tspContext,	/* in */
1377 			  UINT32 inDataSize,	/* in */
1378 			  BYTE * inData)	/* in */
1379 {
1380 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1381 	struct host_table_entry *entry = get_table_entry(tspContext);
1382 
1383 	if (entry == NULL)
1384 		return TSPERR(TSS_E_NO_CONNECTION);
1385 
1386 	switch (entry->type) {
1387 		case CONNECTION_TYPE_TCP_PERSISTANT:
1388 			result = RPC_StirRandom_TP(entry, inDataSize, inData);
1389 			break;
1390 		default:
1391 			break;
1392 	}
1393 
1394 	put_table_entry(entry);
1395 
1396 	return result;
1397 }
1398 
RPC_GetTPMCapability(TSS_HCONTEXT tspContext,TCPA_CAPABILITY_AREA capArea,UINT32 subCapSize,BYTE * subCap,UINT32 * respSize,BYTE ** resp)1399 TSS_RESULT RPC_GetTPMCapability(TSS_HCONTEXT tspContext,	/* in */
1400 			        TCPA_CAPABILITY_AREA capArea,	/* in */
1401 			        UINT32 subCapSize,	/* in */
1402 			        BYTE * subCap,	/* in */
1403 			        UINT32 * respSize,	/* out */
1404 			        BYTE ** resp)	/* out */
1405 {
1406 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1407 	struct host_table_entry *entry = get_table_entry(tspContext);
1408 
1409 	if (entry == NULL)
1410 		return TSPERR(TSS_E_NO_CONNECTION);
1411 
1412 	switch (entry->type) {
1413 		case CONNECTION_TYPE_TCP_PERSISTANT:
1414 			result = RPC_GetTPMCapability_TP(entry, capArea, subCapSize, subCap,
1415 							 respSize, resp);
1416 			break;
1417 		default:
1418 			break;
1419 	}
1420 
1421 	put_table_entry(entry);
1422 
1423 	return result;
1424 }
1425 
RPC_SetCapability(TSS_HCONTEXT tspContext,TCPA_CAPABILITY_AREA capArea,UINT32 subCapSize,BYTE * subCap,UINT32 valueSize,BYTE * value,TPM_AUTH * ownerAuth)1426 TSS_RESULT RPC_SetCapability(TSS_HCONTEXT tspContext,	/* in */
1427 			     TCPA_CAPABILITY_AREA capArea,	/* in */
1428 			     UINT32 subCapSize,	/* in */
1429 			     BYTE * subCap,	/* in */
1430 			     UINT32 valueSize,	/* in */
1431 			     BYTE * value,	/* in */
1432 			     TPM_AUTH *ownerAuth) /* in, out */
1433 {
1434 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1435 	struct host_table_entry *entry = get_table_entry(tspContext);
1436 
1437 	if (entry == NULL)
1438 		return TSPERR(TSS_E_NO_CONNECTION);
1439 
1440 	switch (entry->type) {
1441 		case CONNECTION_TYPE_TCP_PERSISTANT:
1442 			result = RPC_SetCapability_TP(entry, capArea, subCapSize, subCap,
1443 						      valueSize, value, ownerAuth);
1444 			break;
1445 		default:
1446 			break;
1447 	}
1448 
1449 	put_table_entry(entry);
1450 
1451 	return result;
1452 }
1453 
RPC_GetCapability(TSS_HCONTEXT tspContext,TCPA_CAPABILITY_AREA capArea,UINT32 subCapSize,BYTE * subCap,UINT32 * respSize,BYTE ** resp)1454 TSS_RESULT RPC_GetCapability(TSS_HCONTEXT tspContext,	/* in */
1455 			     TCPA_CAPABILITY_AREA capArea,	/* in */
1456 			     UINT32 subCapSize,	/* in */
1457 			     BYTE * subCap,	/* in */
1458 			     UINT32 * respSize,	/* out */
1459 			     BYTE ** resp)	/* out */
1460 {
1461 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1462 	struct host_table_entry *entry = get_table_entry(tspContext);
1463 
1464 	if (entry == NULL)
1465 		return TSPERR(TSS_E_NO_CONNECTION);
1466 
1467 	switch (entry->type) {
1468 		case CONNECTION_TYPE_TCP_PERSISTANT:
1469 			result = RPC_GetCapability_TP(entry, capArea, subCapSize, subCap, respSize,
1470 						      resp);
1471 			break;
1472 		default:
1473 			break;
1474 	}
1475 
1476 	put_table_entry(entry);
1477 
1478 	return result;
1479 }
1480 
RPC_GetCapabilitySigned(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,TCPA_NONCE antiReplay,TCPA_CAPABILITY_AREA capArea,UINT32 subCapSize,BYTE * subCap,TPM_AUTH * privAuth,TCPA_VERSION * Version,UINT32 * respSize,BYTE ** resp,UINT32 * sigSize,BYTE ** sig)1481 TSS_RESULT RPC_GetCapabilitySigned(TSS_HCONTEXT tspContext,	/* in */
1482 				   TCS_KEY_HANDLE keyHandle,	/* in */
1483 				   TCPA_NONCE antiReplay,	/* in */
1484 				   TCPA_CAPABILITY_AREA capArea,	/* in */
1485 				   UINT32 subCapSize,	/* in */
1486 				   BYTE * subCap,	/* in */
1487 				   TPM_AUTH * privAuth,	/* in, out */
1488 				   TCPA_VERSION * Version,	/* out */
1489 				   UINT32 * respSize,	/* out */
1490 				   BYTE ** resp,	/* out */
1491 				   UINT32 * sigSize,	/* out */
1492 				   BYTE ** sig)	/* out */
1493 {
1494 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1495 	struct host_table_entry *entry = get_table_entry(tspContext);
1496 
1497 	if (entry == NULL)
1498 		return TSPERR(TSS_E_NO_CONNECTION);
1499 
1500 	switch (entry->type) {
1501 		case CONNECTION_TYPE_TCP_PERSISTANT:
1502 			result = RPC_GetCapabilitySigned_TP(entry, keyHandle, antiReplay, capArea,
1503 							    subCapSize, subCap, privAuth, Version,
1504 							    respSize, resp, sigSize, sig);
1505 			break;
1506 		default:
1507 			break;
1508 	}
1509 
1510 	put_table_entry(entry);
1511 
1512 	return result;
1513 }
1514 
RPC_GetCapabilityOwner(TSS_HCONTEXT tspContext,TPM_AUTH * pOwnerAuth,TCPA_VERSION * pVersion,UINT32 * pNonVolatileFlags,UINT32 * pVolatileFlags)1515 TSS_RESULT RPC_GetCapabilityOwner(TSS_HCONTEXT tspContext,	/* in */
1516 				  TPM_AUTH * pOwnerAuth,	/* out */
1517 				  TCPA_VERSION * pVersion,	/* out */
1518 				  UINT32 * pNonVolatileFlags,	/* out */
1519 				  UINT32 * pVolatileFlags)	/* out */
1520 {
1521 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1522 	struct host_table_entry *entry = get_table_entry(tspContext);
1523 
1524 	if (entry == NULL)
1525 		return TSPERR(TSS_E_NO_CONNECTION);
1526 
1527 	switch (entry->type) {
1528 		case CONNECTION_TYPE_TCP_PERSISTANT:
1529 			result = RPC_GetCapabilityOwner_TP(entry, pOwnerAuth, pVersion,
1530 							   pNonVolatileFlags, pVolatileFlags);
1531 			break;
1532 		default:
1533 			break;
1534 	}
1535 
1536 	put_table_entry(entry);
1537 
1538 	return result;
1539 }
1540 
RPC_CreateEndorsementKeyPair(TSS_HCONTEXT tspContext,TCPA_NONCE antiReplay,UINT32 endorsementKeyInfoSize,BYTE * endorsementKeyInfo,UINT32 * endorsementKeySize,BYTE ** endorsementKey,TCPA_DIGEST * checksum)1541 TSS_RESULT RPC_CreateEndorsementKeyPair(TSS_HCONTEXT tspContext,	/* in */
1542 					TCPA_NONCE antiReplay,	/* in */
1543 					UINT32 endorsementKeyInfoSize,	/* in */
1544 					BYTE * endorsementKeyInfo,	/* in */
1545 					UINT32 * endorsementKeySize,	/* out */
1546 					BYTE ** endorsementKey,	/* out */
1547 					TCPA_DIGEST * checksum)	/* out */
1548 {
1549 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1550 	struct host_table_entry *entry = get_table_entry(tspContext);
1551 
1552 	if (entry == NULL)
1553 		return TSPERR(TSS_E_NO_CONNECTION);
1554 
1555 	switch (entry->type) {
1556 		case CONNECTION_TYPE_TCP_PERSISTANT:
1557 			result = RPC_CreateEndorsementKeyPair_TP(entry, antiReplay,
1558 								 endorsementKeyInfoSize,
1559 								 endorsementKeyInfo,
1560 								 endorsementKeySize,
1561 								 endorsementKey, checksum);
1562 			break;
1563 		default:
1564 			break;
1565 	}
1566 
1567 	put_table_entry(entry);
1568 
1569 	return result;
1570 }
1571 
RPC_ReadPubek(TSS_HCONTEXT tspContext,TCPA_NONCE antiReplay,UINT32 * pubEndorsementKeySize,BYTE ** pubEndorsementKey,TCPA_DIGEST * checksum)1572 TSS_RESULT RPC_ReadPubek(TSS_HCONTEXT tspContext,	/* in */
1573 			 TCPA_NONCE antiReplay,	/* in */
1574 			 UINT32 * pubEndorsementKeySize,	/* out */
1575 			 BYTE ** pubEndorsementKey,	/* out */
1576 			 TCPA_DIGEST * checksum)	/* out */
1577 {
1578 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1579 	struct host_table_entry *entry = get_table_entry(tspContext);
1580 
1581 	if (entry == NULL)
1582 		return TSPERR(TSS_E_NO_CONNECTION);
1583 
1584 	switch (entry->type) {
1585 		case CONNECTION_TYPE_TCP_PERSISTANT:
1586 			result = RPC_ReadPubek_TP(entry, antiReplay, pubEndorsementKeySize,
1587 						  pubEndorsementKey, checksum);
1588 			break;
1589 		default:
1590 			break;
1591 	}
1592 
1593 	put_table_entry(entry);
1594 
1595 	return result;
1596 }
1597 
RPC_DisablePubekRead(TSS_HCONTEXT tspContext,TPM_AUTH * ownerAuth)1598 TSS_RESULT RPC_DisablePubekRead(TSS_HCONTEXT tspContext,	/* in */
1599 				TPM_AUTH * ownerAuth)	/* in, out */
1600 {
1601 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1602 	struct host_table_entry *entry = get_table_entry(tspContext);
1603 
1604 	if (entry == NULL)
1605 		return TSPERR(TSS_E_NO_CONNECTION);
1606 
1607 	switch (entry->type) {
1608 		case CONNECTION_TYPE_TCP_PERSISTANT:
1609 			result = RPC_DisablePubekRead_TP(entry, ownerAuth);
1610 			break;
1611 		default:
1612 			break;
1613 	}
1614 
1615 	put_table_entry(entry);
1616 
1617 	return result;
1618 }
1619 
RPC_OwnerReadPubek(TSS_HCONTEXT tspContext,TPM_AUTH * ownerAuth,UINT32 * pubEndorsementKeySize,BYTE ** pubEndorsementKey)1620 TSS_RESULT RPC_OwnerReadPubek(TSS_HCONTEXT tspContext,	/* in */
1621 			      TPM_AUTH * ownerAuth,	/* in, out */
1622 			      UINT32 * pubEndorsementKeySize,	/* out */
1623 			      BYTE ** pubEndorsementKey)	/* out */
1624 {
1625 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1626 	struct host_table_entry *entry = get_table_entry(tspContext);
1627 
1628 	if (entry == NULL)
1629 		return TSPERR(TSS_E_NO_CONNECTION);
1630 
1631 	switch (entry->type) {
1632 		case CONNECTION_TYPE_TCP_PERSISTANT:
1633 			result = RPC_OwnerReadPubek_TP(entry, ownerAuth, pubEndorsementKeySize,
1634 						       pubEndorsementKey);
1635 			break;
1636 		default:
1637 			break;
1638 	}
1639 
1640 	put_table_entry(entry);
1641 
1642 	return result;
1643 }
1644 
1645 #ifdef TSS_BUILD_TSS12
RPC_CreateRevocableEndorsementKeyPair(TSS_HCONTEXT tspContext,TPM_NONCE antiReplay,UINT32 endorsementKeyInfoSize,BYTE * endorsementKeyInfo,TSS_BOOL genResetAuth,TPM_DIGEST * eKResetAuth,UINT32 * endorsementKeySize,BYTE ** endorsementKey,TPM_DIGEST * checksum)1646 TSS_RESULT RPC_CreateRevocableEndorsementKeyPair(TSS_HCONTEXT tspContext,	/* in */
1647 						 TPM_NONCE antiReplay,		/* in */
1648 						 UINT32 endorsementKeyInfoSize,/* in */
1649 						 BYTE * endorsementKeyInfo,	/* in */
1650 						 TSS_BOOL genResetAuth,	/* in */
1651 						 TPM_DIGEST * eKResetAuth,	/* in, out */
1652 						 UINT32 * endorsementKeySize,	/* out */
1653 						 BYTE ** endorsementKey,	/* out */
1654 						 TPM_DIGEST * checksum)	/* out */
1655 {
1656 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1657 	struct host_table_entry *entry = get_table_entry(tspContext);
1658 
1659 	if (entry == NULL)
1660 		return TSPERR(TSS_E_NO_CONNECTION);
1661 
1662 	switch (entry->type) {
1663 		case CONNECTION_TYPE_TCP_PERSISTANT:
1664 			result = RPC_CreateRevocableEndorsementKeyPair_TP(entry, antiReplay,
1665 									  endorsementKeyInfoSize,
1666 									  endorsementKeyInfo,
1667 									  genResetAuth,
1668 									  eKResetAuth,
1669 									  endorsementKeySize,
1670 									  endorsementKey, checksum);
1671 			break;
1672 		default:
1673 			break;
1674 	}
1675 
1676 	put_table_entry(entry);
1677 
1678 	return result;
1679 }
1680 
RPC_RevokeEndorsementKeyPair(TSS_HCONTEXT tspContext,TPM_DIGEST * EKResetAuth)1681 TSS_RESULT RPC_RevokeEndorsementKeyPair(TSS_HCONTEXT tspContext,	/* in */
1682 					TPM_DIGEST *EKResetAuth)	/* in */
1683 {
1684 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1685 	struct host_table_entry *entry = get_table_entry(tspContext);
1686 
1687 	if (entry == NULL)
1688 		return TSPERR(TSS_E_NO_CONNECTION);
1689 
1690 	switch (entry->type) {
1691 		case CONNECTION_TYPE_TCP_PERSISTANT:
1692 			result = RPC_RevokeEndorsementKeyPair_TP(entry, EKResetAuth);
1693 			break;
1694 		default:
1695 			break;
1696 	}
1697 
1698 	put_table_entry(entry);
1699 
1700 	return result;
1701 }
1702 #endif
1703 
RPC_SelfTestFull(TSS_HCONTEXT tspContext)1704 TSS_RESULT RPC_SelfTestFull(TSS_HCONTEXT tspContext)	/* in */
1705 {
1706 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1707 	struct host_table_entry *entry = get_table_entry(tspContext);
1708 
1709 	if (entry == NULL)
1710 		return TSPERR(TSS_E_NO_CONNECTION);
1711 
1712 	switch (entry->type) {
1713 		case CONNECTION_TYPE_TCP_PERSISTANT:
1714 			result = RPC_SelfTestFull_TP(entry);
1715 			break;
1716 		default:
1717 			break;
1718 	}
1719 
1720 	put_table_entry(entry);
1721 
1722 	return result;
1723 }
1724 
RPC_CertifySelfTest(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,TCPA_NONCE antiReplay,TPM_AUTH * privAuth,UINT32 * sigSize,BYTE ** sig)1725 TSS_RESULT RPC_CertifySelfTest(TSS_HCONTEXT tspContext,	/* in */
1726 			       TCS_KEY_HANDLE keyHandle,	/* in */
1727 			       TCPA_NONCE antiReplay,	/* in */
1728 			       TPM_AUTH * privAuth,	/* in, out */
1729 			       UINT32 * sigSize,	/* out */
1730 			       BYTE ** sig)	/* out */
1731 {
1732 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1733 	struct host_table_entry *entry = get_table_entry(tspContext);
1734 
1735 	if (entry == NULL)
1736 		return TSPERR(TSS_E_NO_CONNECTION);
1737 
1738 	switch (entry->type) {
1739 		case CONNECTION_TYPE_TCP_PERSISTANT:
1740 			result = RPC_CertifySelfTest_TP(entry, keyHandle, antiReplay, privAuth,
1741 							sigSize, sig);
1742 			break;
1743 		default:
1744 			break;
1745 	}
1746 
1747 	put_table_entry(entry);
1748 
1749 	return result;
1750 }
1751 
RPC_GetTestResult(TSS_HCONTEXT tspContext,UINT32 * outDataSize,BYTE ** outData)1752 TSS_RESULT RPC_GetTestResult(TSS_HCONTEXT tspContext,	/* in */
1753 			     UINT32 * outDataSize,	/* out */
1754 			     BYTE ** outData)	/* out */
1755 {
1756 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1757 	struct host_table_entry *entry = get_table_entry(tspContext);
1758 
1759 	if (entry == NULL)
1760 		return TSPERR(TSS_E_NO_CONNECTION);
1761 
1762 	switch (entry->type) {
1763 		case CONNECTION_TYPE_TCP_PERSISTANT:
1764 			result = RPC_GetTestResult_TP(entry, outDataSize, outData);
1765 			break;
1766 		default:
1767 			break;
1768 	}
1769 
1770 	put_table_entry(entry);
1771 
1772 	return result;
1773 }
1774 
RPC_OwnerSetDisable(TSS_HCONTEXT tspContext,TSS_BOOL disableState,TPM_AUTH * ownerAuth)1775 TSS_RESULT RPC_OwnerSetDisable(TSS_HCONTEXT tspContext,	/* in */
1776 			       TSS_BOOL disableState,	/* in */
1777 			       TPM_AUTH * ownerAuth)	/* in, out */
1778 {
1779 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1780 	struct host_table_entry *entry = get_table_entry(tspContext);
1781 
1782 	if (entry == NULL)
1783 		return TSPERR(TSS_E_NO_CONNECTION);
1784 
1785 	switch (entry->type) {
1786 		case CONNECTION_TYPE_TCP_PERSISTANT:
1787 			result = RPC_OwnerSetDisable_TP(entry, disableState, ownerAuth);
1788 			break;
1789 		default:
1790 			break;
1791 	}
1792 
1793 	put_table_entry(entry);
1794 
1795 	return result;
1796 }
1797 
1798 #ifdef TSS_BUILD_TSS12
RPC_ResetLockValue(TSS_HCONTEXT tspContext,TPM_AUTH * ownerAuth)1799 TSS_RESULT RPC_ResetLockValue(TSS_HCONTEXT tspContext,	/* in */
1800 			      TPM_AUTH * ownerAuth)	/* in, out */
1801 {
1802 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1803 	struct host_table_entry *entry = get_table_entry(tspContext);
1804 
1805 	if (entry == NULL)
1806 		return TSPERR(TSS_E_NO_CONNECTION);
1807 
1808 	switch (entry->type) {
1809 		case CONNECTION_TYPE_TCP_PERSISTANT:
1810 			result = RPC_ResetLockValue_TP(entry, ownerAuth);
1811 			break;
1812 		default:
1813 			break;
1814 	}
1815 
1816 	put_table_entry(entry);
1817 
1818 	return result;
1819 }
1820 #endif
1821 
RPC_OwnerClear(TSS_HCONTEXT tspContext,TPM_AUTH * ownerAuth)1822 TSS_RESULT RPC_OwnerClear(TSS_HCONTEXT tspContext,	/* in */
1823 			  TPM_AUTH * ownerAuth)	/* in, out */
1824 {
1825 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1826 	struct host_table_entry *entry = get_table_entry(tspContext);
1827 
1828 	if (entry == NULL)
1829 		return TSPERR(TSS_E_NO_CONNECTION);
1830 
1831 	switch (entry->type) {
1832 		case CONNECTION_TYPE_TCP_PERSISTANT:
1833 			result = RPC_OwnerClear_TP(entry, ownerAuth);
1834 			break;
1835 		default:
1836 			break;
1837 	}
1838 
1839 	put_table_entry(entry);
1840 
1841 	return result;
1842 }
1843 
RPC_DisableOwnerClear(TSS_HCONTEXT tspContext,TPM_AUTH * ownerAuth)1844 TSS_RESULT RPC_DisableOwnerClear(TSS_HCONTEXT tspContext,	/* in */
1845 				 TPM_AUTH * ownerAuth)	/* in, out */
1846 {
1847 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1848 	struct host_table_entry *entry = get_table_entry(tspContext);
1849 
1850 	if (entry == NULL)
1851 		return TSPERR(TSS_E_NO_CONNECTION);
1852 
1853 	switch (entry->type) {
1854 		case CONNECTION_TYPE_TCP_PERSISTANT:
1855 			result = RPC_DisableOwnerClear_TP(entry, ownerAuth);
1856 			break;
1857 		default:
1858 			break;
1859 	}
1860 
1861 	put_table_entry(entry);
1862 
1863 	return result;
1864 }
1865 
RPC_ForceClear(TSS_HCONTEXT tspContext)1866 TSS_RESULT RPC_ForceClear(TSS_HCONTEXT tspContext)	/* in */
1867 {
1868 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1869 	struct host_table_entry *entry = get_table_entry(tspContext);
1870 
1871 	if (entry == NULL)
1872 		return TSPERR(TSS_E_NO_CONNECTION);
1873 
1874 	switch (entry->type) {
1875 		case CONNECTION_TYPE_TCP_PERSISTANT:
1876 			result = RPC_ForceClear_TP(entry);
1877 			break;
1878 		default:
1879 			break;
1880 	}
1881 
1882 	put_table_entry(entry);
1883 
1884 	return result;
1885 }
1886 
RPC_DisableForceClear(TSS_HCONTEXT tspContext)1887 TSS_RESULT RPC_DisableForceClear(TSS_HCONTEXT tspContext)	/* in */
1888 {
1889 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1890 	struct host_table_entry *entry = get_table_entry(tspContext);
1891 
1892 	if (entry == NULL)
1893 		return TSPERR(TSS_E_NO_CONNECTION);
1894 
1895 	switch (entry->type) {
1896 		case CONNECTION_TYPE_TCP_PERSISTANT:
1897 			result = RPC_DisableForceClear_TP(entry);
1898 			break;
1899 		default:
1900 			break;
1901 	}
1902 
1903 	put_table_entry(entry);
1904 
1905 	return result;
1906 }
1907 
RPC_PhysicalDisable(TSS_HCONTEXT tspContext)1908 TSS_RESULT RPC_PhysicalDisable(TSS_HCONTEXT tspContext)	/* in */
1909 {
1910 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1911 	struct host_table_entry *entry = get_table_entry(tspContext);
1912 
1913 	if (entry == NULL)
1914 		return TSPERR(TSS_E_NO_CONNECTION);
1915 
1916 	switch (entry->type) {
1917 		case CONNECTION_TYPE_TCP_PERSISTANT:
1918 			result = RPC_PhysicalDisable_TP(entry);
1919 			break;
1920 		default:
1921 			break;
1922 	}
1923 
1924 	put_table_entry(entry);
1925 
1926 	return result;
1927 }
1928 
RPC_PhysicalEnable(TSS_HCONTEXT tspContext)1929 TSS_RESULT RPC_PhysicalEnable(TSS_HCONTEXT tspContext)	/* in */
1930 {
1931 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1932 	struct host_table_entry *entry = get_table_entry(tspContext);
1933 
1934 	if (entry == NULL)
1935 		return TSPERR(TSS_E_NO_CONNECTION);
1936 
1937 	switch (entry->type) {
1938 		case CONNECTION_TYPE_TCP_PERSISTANT:
1939 			result = RPC_PhysicalEnable_TP(entry);
1940 			break;
1941 		default:
1942 			break;
1943 	}
1944 
1945 	put_table_entry(entry);
1946 
1947 	return result;
1948 }
1949 
RPC_PhysicalSetDeactivated(TSS_HCONTEXT tspContext,TSS_BOOL state)1950 TSS_RESULT RPC_PhysicalSetDeactivated(TSS_HCONTEXT tspContext,	/* in */
1951 				      TSS_BOOL state)	/* in */
1952 {
1953 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1954 	struct host_table_entry *entry = get_table_entry(tspContext);
1955 
1956 	if (entry == NULL)
1957 		return TSPERR(TSS_E_NO_CONNECTION);
1958 
1959 	switch (entry->type) {
1960 		case CONNECTION_TYPE_TCP_PERSISTANT:
1961 			result = RPC_PhysicalSetDeactivated_TP(entry, state);
1962 			break;
1963 		default:
1964 			break;
1965 	}
1966 
1967 	put_table_entry(entry);
1968 
1969 	return result;
1970 }
1971 
RPC_PhysicalPresence(TSS_HCONTEXT tspContext,TCPA_PHYSICAL_PRESENCE fPhysicalPresence)1972 TSS_RESULT RPC_PhysicalPresence(TSS_HCONTEXT tspContext,	/* in */
1973 				TCPA_PHYSICAL_PRESENCE fPhysicalPresence)	/* in */
1974 {
1975 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1976 	struct host_table_entry *entry = get_table_entry(tspContext);
1977 
1978 	if (entry == NULL)
1979 		return TSPERR(TSS_E_NO_CONNECTION);
1980 
1981 	switch (entry->type) {
1982 		case CONNECTION_TYPE_TCP_PERSISTANT:
1983 			result = RPC_PhysicalPresence_TP(entry, fPhysicalPresence);
1984 			break;
1985 		default:
1986 			break;
1987 	}
1988 
1989 	put_table_entry(entry);
1990 
1991 	return result;
1992 }
1993 
RPC_SetTempDeactivated(TSS_HCONTEXT tspContext)1994 TSS_RESULT RPC_SetTempDeactivated(TSS_HCONTEXT tspContext)	/* in */
1995 {
1996 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
1997 	struct host_table_entry *entry = get_table_entry(tspContext);
1998 
1999 	if (entry == NULL)
2000 		return TSPERR(TSS_E_NO_CONNECTION);
2001 
2002 	switch (entry->type) {
2003 		case CONNECTION_TYPE_TCP_PERSISTANT:
2004 			result = RPC_SetTempDeactivated_TP(entry);
2005 			break;
2006 		default:
2007 			break;
2008 	}
2009 
2010 	put_table_entry(entry);
2011 
2012 	return result;
2013 }
2014 
2015 #ifdef TSS_BUILD_TSS12
RPC_SetTempDeactivated2(TSS_HCONTEXT tspContext,TPM_AUTH * operatorAuth)2016 TSS_RESULT RPC_SetTempDeactivated2(TSS_HCONTEXT tspContext,	/* in */
2017 				   TPM_AUTH *operatorAuth)	/* in, out */
2018 {
2019 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2020 	struct host_table_entry *entry = get_table_entry(tspContext);
2021 
2022 	if (entry == NULL)
2023 		return TSPERR(TSS_E_NO_CONNECTION);
2024 
2025 	switch (entry->type) {
2026 		case CONNECTION_TYPE_TCP_PERSISTANT:
2027 			result = RPC_SetTempDeactivated2_TP(entry, operatorAuth);
2028 			break;
2029 		default:
2030 			break;
2031 	}
2032 
2033 	put_table_entry(entry);
2034 
2035 	return result;
2036 }
2037 #endif
2038 
RPC_FieldUpgrade(TSS_HCONTEXT tspContext,UINT32 dataInSize,BYTE * dataIn,UINT32 * dataOutSize,BYTE ** dataOut,TPM_AUTH * ownerAuth)2039 TSS_RESULT RPC_FieldUpgrade(TSS_HCONTEXT tspContext,	/* in */
2040 			    UINT32 dataInSize,	/* in */
2041 			    BYTE * dataIn,	/* in */
2042 			    UINT32 * dataOutSize,	/* out */
2043 			    BYTE ** dataOut,	/* out */
2044 			    TPM_AUTH * ownerAuth)	/* in, out */
2045 {
2046 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2047 	struct host_table_entry *entry = get_table_entry(tspContext);
2048 
2049 	if (entry == NULL)
2050 		return TSPERR(TSS_E_NO_CONNECTION);
2051 
2052 	switch (entry->type) {
2053 		case CONNECTION_TYPE_TCP_PERSISTANT:
2054 			result = (UINT32) TSPERR(TSS_E_INTERNAL_ERROR);
2055 			break;
2056 		default:
2057 			break;
2058 	}
2059 
2060 	put_table_entry(entry);
2061 
2062 	return result;
2063 }
2064 
RPC_SetRedirection(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE keyHandle,UINT32 c1,UINT32 c2,TPM_AUTH * privAuth)2065 TSS_RESULT RPC_SetRedirection(TSS_HCONTEXT tspContext,	/* in */
2066 			      TCS_KEY_HANDLE keyHandle,	/* in */
2067 			      UINT32 c1,	/* in */
2068 			      UINT32 c2,	/* in */
2069 			      TPM_AUTH * privAuth)	/* in, out */
2070 {
2071 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2072 	struct host_table_entry *entry = get_table_entry(tspContext);
2073 
2074 	if (entry == NULL)
2075 		return TSPERR(TSS_E_NO_CONNECTION);
2076 
2077 	switch (entry->type) {
2078 		case CONNECTION_TYPE_TCP_PERSISTANT:
2079 			result = (UINT32) TSPERR(TSS_E_INTERNAL_ERROR);
2080 			break;
2081 		default:
2082 			break;
2083 	}
2084 
2085 	put_table_entry(entry);
2086 
2087 	return result;
2088 }
2089 
RPC_CreateMaintenanceArchive(TSS_HCONTEXT tspContext,TSS_BOOL generateRandom,TPM_AUTH * ownerAuth,UINT32 * randomSize,BYTE ** random,UINT32 * archiveSize,BYTE ** archive)2090 TSS_RESULT RPC_CreateMaintenanceArchive(TSS_HCONTEXT tspContext,	/* in */
2091 					TSS_BOOL generateRandom,	/* in */
2092 					TPM_AUTH * ownerAuth,	/* in, out */
2093 					UINT32 * randomSize,	/* out */
2094 					BYTE ** random,	/* out */
2095 					UINT32 * archiveSize,	/* out */
2096 					BYTE ** archive)	/* out */
2097 {
2098 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2099 	struct host_table_entry *entry = get_table_entry(tspContext);
2100 
2101 	if (entry == NULL)
2102 		return TSPERR(TSS_E_NO_CONNECTION);
2103 
2104 	switch (entry->type) {
2105 		case CONNECTION_TYPE_TCP_PERSISTANT:
2106 			result = RPC_CreateMaintenanceArchive_TP(entry, generateRandom, ownerAuth,
2107 								 randomSize, random, archiveSize,
2108 								 archive);
2109 			break;
2110 		default:
2111 			break;
2112 	}
2113 
2114 	put_table_entry(entry);
2115 
2116 	return result;
2117 }
2118 
RPC_LoadMaintenanceArchive(TSS_HCONTEXT tspContext,UINT32 dataInSize,BYTE * dataIn,TPM_AUTH * ownerAuth,UINT32 * dataOutSize,BYTE ** dataOut)2119 TSS_RESULT RPC_LoadMaintenanceArchive(TSS_HCONTEXT tspContext,	/* in */
2120 				      UINT32 dataInSize,	/* in */
2121 				      BYTE * dataIn, /* in */
2122 				      TPM_AUTH * ownerAuth,	/* in, out */
2123 				      UINT32 * dataOutSize,	/* out */
2124 				      BYTE ** dataOut)	/* out */
2125 {
2126 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2127 	struct host_table_entry *entry = get_table_entry(tspContext);
2128 
2129 	if (entry == NULL)
2130 		return TSPERR(TSS_E_NO_CONNECTION);
2131 
2132 	switch (entry->type) {
2133 		case CONNECTION_TYPE_TCP_PERSISTANT:
2134 			result = RPC_LoadMaintenanceArchive_TP(entry, dataInSize, dataIn, ownerAuth,
2135 							       dataOutSize, dataOut);
2136 			break;
2137 		default:
2138 			break;
2139 	}
2140 
2141 	put_table_entry(entry);
2142 
2143 	return result;
2144 }
2145 
RPC_KillMaintenanceFeature(TSS_HCONTEXT tspContext,TPM_AUTH * ownerAuth)2146 TSS_RESULT RPC_KillMaintenanceFeature(TSS_HCONTEXT tspContext,	/* in */
2147 				      TPM_AUTH * ownerAuth)	/* in, out */
2148 {
2149 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2150 	struct host_table_entry *entry = get_table_entry(tspContext);
2151 
2152 	if (entry == NULL)
2153 		return TSPERR(TSS_E_NO_CONNECTION);
2154 
2155 	switch (entry->type) {
2156 		case CONNECTION_TYPE_TCP_PERSISTANT:
2157 			result = RPC_KillMaintenanceFeature_TP(entry, ownerAuth);
2158 			break;
2159 		default:
2160 			break;
2161 	}
2162 
2163 	put_table_entry(entry);
2164 
2165 	return result;
2166 }
2167 
RPC_LoadManuMaintPub(TSS_HCONTEXT tspContext,TCPA_NONCE antiReplay,UINT32 PubKeySize,BYTE * PubKey,TCPA_DIGEST * checksum)2168 TSS_RESULT RPC_LoadManuMaintPub(TSS_HCONTEXT tspContext,	/* in */
2169 				TCPA_NONCE antiReplay,	/* in */
2170 				UINT32 PubKeySize,	/* in */
2171 				BYTE * PubKey,	/* in */
2172 				TCPA_DIGEST * checksum)	/* out */
2173 {
2174 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2175 	struct host_table_entry *entry = get_table_entry(tspContext);
2176 
2177 	if (entry == NULL)
2178 		return TSPERR(TSS_E_NO_CONNECTION);
2179 
2180 	switch (entry->type) {
2181 		case CONNECTION_TYPE_TCP_PERSISTANT:
2182 			result = RPC_LoadManuMaintPub_TP(entry, antiReplay, PubKeySize, PubKey,
2183 							 checksum);
2184 			break;
2185 		default:
2186 			break;
2187 	}
2188 
2189 	put_table_entry(entry);
2190 
2191 	return result;
2192 }
2193 
RPC_ReadManuMaintPub(TSS_HCONTEXT tspContext,TCPA_NONCE antiReplay,TCPA_DIGEST * checksum)2194 TSS_RESULT RPC_ReadManuMaintPub(TSS_HCONTEXT tspContext,	/* in */
2195 				TCPA_NONCE antiReplay,	/* in */
2196 				TCPA_DIGEST * checksum)	/* out */
2197 {
2198 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2199 	struct host_table_entry *entry = get_table_entry(tspContext);
2200 
2201 	if (entry == NULL)
2202 		return TSPERR(TSS_E_NO_CONNECTION);
2203 
2204 	switch (entry->type) {
2205 		case CONNECTION_TYPE_TCP_PERSISTANT:
2206 			result = RPC_ReadManuMaintPub_TP(entry, antiReplay, checksum);
2207 			break;
2208 		default:
2209 			break;
2210 	}
2211 
2212 	put_table_entry(entry);
2213 
2214 	return result;
2215 }
2216 
2217 #ifdef TSS_BUILD_DAA
2218 TSS_RESULT
RPC_DaaJoin(TSS_HCONTEXT tspContext,TPM_HANDLE daa_session,BYTE stage,UINT32 inputSize0,BYTE * inputData0,UINT32 inputSize1,BYTE * inputData1,TPM_AUTH * ownerAuth,UINT32 * outputSize,BYTE ** outputData)2219 RPC_DaaJoin(TSS_HCONTEXT tspContext,	/* in */
2220 	    TPM_HANDLE daa_session,		/* in */
2221 	    BYTE stage,			/* in */
2222 	    UINT32 inputSize0,			/* in */
2223 	    BYTE* inputData0,			/* in */
2224 	    UINT32 inputSize1,			/* in */
2225 	    BYTE* inputData1,			/* in */
2226 	    TPM_AUTH* ownerAuth,		/* in, out */
2227 	    UINT32* outputSize,		/* out */
2228 	    BYTE** outputData)			/* out */
2229 {
2230 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2231 	struct host_table_entry *entry = get_table_entry(tspContext);
2232 
2233 	if (entry == NULL)
2234 		return TSPERR(TSS_E_NO_CONNECTION);
2235 
2236 	switch (entry->type) {
2237 		case CONNECTION_TYPE_TCP_PERSISTANT:
2238 			result = RPC_DaaJoin_TP(entry, daa_session, stage, inputSize0, inputData0,
2239 						inputSize1, inputData1, ownerAuth, outputSize,
2240 						outputData);
2241 			break;
2242 		default:
2243 			break;
2244 	}
2245 
2246 	put_table_entry(entry);
2247 
2248 	return result;
2249 
2250 }
2251 
2252 TSS_RESULT
RPC_DaaSign(TSS_HCONTEXT tspContext,TPM_HANDLE daa_session,BYTE stage,UINT32 inputSize0,BYTE * inputData0,UINT32 inputSize1,BYTE * inputData1,TPM_AUTH * ownerAuth,UINT32 * outputSize,BYTE ** outputData)2253 RPC_DaaSign(TSS_HCONTEXT tspContext,	/* in */
2254 	    TPM_HANDLE daa_session,		/* in */
2255 	    BYTE stage,			/* in */
2256 	    UINT32 inputSize0,			/* in */
2257 	    BYTE* inputData0,			/* in */
2258 	    UINT32 inputSize1,			/* in */
2259 	    BYTE* inputData1,			/* in */
2260 	    TPM_AUTH* ownerAuth,		/* in, out */
2261 	    UINT32* outputSize,		/* out */
2262 	    BYTE** outputData)			/* out */
2263 {
2264 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2265 	struct host_table_entry *entry = get_table_entry(tspContext);
2266 
2267 	if (entry == NULL)
2268 		return TSPERR(TSS_E_NO_CONNECTION);
2269 
2270 	switch (entry->type) {
2271 		case CONNECTION_TYPE_TCP_PERSISTANT:
2272 			result = RPC_DaaSign_TP(entry, daa_session, stage, inputSize0, inputData0,
2273 						inputSize1, inputData1, ownerAuth, outputSize,
2274 						outputData);
2275 			break;
2276 		default:
2277 			break;
2278 	}
2279 
2280 	put_table_entry(entry);
2281 
2282 	return result;
2283 }
2284 #endif
2285 
2286 #ifdef TSS_BUILD_COUNTER
2287 TSS_RESULT
RPC_ReadCounter(TSS_HCONTEXT tspContext,TSS_COUNTER_ID idCounter,TPM_COUNTER_VALUE * counterValue)2288 RPC_ReadCounter(TSS_HCONTEXT       tspContext,		/* in */
2289 		TSS_COUNTER_ID     idCounter,		/* in */
2290 		TPM_COUNTER_VALUE* counterValue)	/* out */
2291 {
2292 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2293 	struct host_table_entry *entry = get_table_entry(tspContext);
2294 
2295 	if (entry == NULL)
2296 		return TSPERR(TSS_E_NO_CONNECTION);
2297 
2298 	switch (entry->type) {
2299 		case CONNECTION_TYPE_TCP_PERSISTANT:
2300 			result = RPC_ReadCounter_TP(entry, idCounter, counterValue);
2301 			break;
2302 		default:
2303 			break;
2304 	}
2305 
2306 	put_table_entry(entry);
2307 
2308 	return result;
2309 }
2310 
2311 TSS_RESULT
RPC_CreateCounter(TSS_HCONTEXT tspContext,UINT32 LabelSize,BYTE * pLabel,TPM_ENCAUTH CounterAuth,TPM_AUTH * pOwnerAuth,TSS_COUNTER_ID * idCounter,TPM_COUNTER_VALUE * counterValue)2312 RPC_CreateCounter(TSS_HCONTEXT       tspContext,	/* in */
2313 		  UINT32             LabelSize,	/* in (=4) */
2314 		  BYTE*              pLabel,		/* in */
2315 		  TPM_ENCAUTH        CounterAuth,	/* in */
2316 		  TPM_AUTH*          pOwnerAuth,	/* in, out */
2317 		  TSS_COUNTER_ID*    idCounter,	/* out */
2318 		  TPM_COUNTER_VALUE* counterValue)	/* out */
2319 {
2320 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2321 	struct host_table_entry *entry = get_table_entry(tspContext);
2322 
2323 	if (entry == NULL)
2324 		return TSPERR(TSS_E_NO_CONNECTION);
2325 
2326 	switch (entry->type) {
2327 		case CONNECTION_TYPE_TCP_PERSISTANT:
2328 			result = RPC_CreateCounter_TP(entry, LabelSize, pLabel, CounterAuth,
2329 						      pOwnerAuth, idCounter, counterValue);
2330 			break;
2331 		default:
2332 			break;
2333 	}
2334 
2335 	put_table_entry(entry);
2336 
2337 	return result;
2338 }
2339 
2340 TSS_RESULT
RPC_IncrementCounter(TSS_HCONTEXT tspContext,TSS_COUNTER_ID idCounter,TPM_AUTH * pCounterAuth,TPM_COUNTER_VALUE * counterValue)2341 RPC_IncrementCounter(TSS_HCONTEXT       tspContext,	/* in */
2342 		     TSS_COUNTER_ID     idCounter,	/* in */
2343 		     TPM_AUTH*          pCounterAuth,	/* in, out */
2344 		     TPM_COUNTER_VALUE* counterValue)	/* out */
2345 {
2346 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2347 	struct host_table_entry *entry = get_table_entry(tspContext);
2348 
2349 	if (entry == NULL)
2350 		return TSPERR(TSS_E_NO_CONNECTION);
2351 
2352 	switch (entry->type) {
2353 		case CONNECTION_TYPE_TCP_PERSISTANT:
2354 			result = RPC_IncrementCounter_TP(entry, idCounter, pCounterAuth,
2355 							 counterValue);
2356 			break;
2357 		default:
2358 			break;
2359 	}
2360 
2361 	put_table_entry(entry);
2362 
2363 	return result;
2364 }
2365 
2366 TSS_RESULT
RPC_ReleaseCounter(TSS_HCONTEXT tspContext,TSS_COUNTER_ID idCounter,TPM_AUTH * pCounterAuth)2367 RPC_ReleaseCounter(TSS_HCONTEXT   tspContext,		/* in */
2368 		   TSS_COUNTER_ID idCounter,		/* in */
2369 		   TPM_AUTH*      pCounterAuth)	/* in, out */
2370 {
2371 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2372 	struct host_table_entry *entry = get_table_entry(tspContext);
2373 
2374 	if (entry == NULL)
2375 		return TSPERR(TSS_E_NO_CONNECTION);
2376 
2377 	switch (entry->type) {
2378 		case CONNECTION_TYPE_TCP_PERSISTANT:
2379 			result = RPC_ReleaseCounter_TP(entry, idCounter, pCounterAuth);
2380 			break;
2381 		default:
2382 			break;
2383 	}
2384 
2385 	put_table_entry(entry);
2386 
2387 	return result;
2388 }
2389 
2390 TSS_RESULT
RPC_ReleaseCounterOwner(TSS_HCONTEXT tspContext,TSS_COUNTER_ID idCounter,TPM_AUTH * pOwnerAuth)2391 RPC_ReleaseCounterOwner(TSS_HCONTEXT   tspContext,	/* in */
2392 			TSS_COUNTER_ID idCounter,	/* in */
2393 			TPM_AUTH*      pOwnerAuth)	/* in, out */
2394 {
2395 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2396 	struct host_table_entry *entry = get_table_entry(tspContext);
2397 
2398 	if (entry == NULL)
2399 		return TSPERR(TSS_E_NO_CONNECTION);
2400 
2401 	switch (entry->type) {
2402 		case CONNECTION_TYPE_TCP_PERSISTANT:
2403 			result = RPC_ReleaseCounterOwner_TP(entry, idCounter, pOwnerAuth);
2404 			break;
2405 		default:
2406 			break;
2407 	}
2408 
2409 	put_table_entry(entry);
2410 
2411 	return result;
2412 }
2413 #endif
2414 
2415 #ifdef TSS_BUILD_TICK
2416 TSS_RESULT
RPC_ReadCurrentTicks(TSS_HCONTEXT tspContext,UINT32 * pulCurrentTime,BYTE ** prgbCurrentTime)2417 RPC_ReadCurrentTicks(TSS_HCONTEXT tspContext,		/* in */
2418 		     UINT32*      pulCurrentTime,	/* out */
2419 		     BYTE**       prgbCurrentTime)	/* out */
2420 {
2421 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2422 	struct host_table_entry *entry = get_table_entry(tspContext);
2423 
2424 	if (entry == NULL)
2425 		return TSPERR(TSS_E_NO_CONNECTION);
2426 
2427 	switch (entry->type) {
2428 		case CONNECTION_TYPE_TCP_PERSISTANT:
2429 			result = RPC_ReadCurrentTicks_TP(entry, pulCurrentTime, prgbCurrentTime);
2430 			break;
2431 		default:
2432 			break;
2433 	}
2434 
2435 	put_table_entry(entry);
2436 
2437 	return result;
2438 }
2439 
2440 TSS_RESULT
RPC_TickStampBlob(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE hKey,TPM_NONCE * antiReplay,TPM_DIGEST * digestToStamp,TPM_AUTH * privAuth,UINT32 * pulSignatureLength,BYTE ** prgbSignature,UINT32 * pulTickCountLength,BYTE ** prgbTickCount)2441 RPC_TickStampBlob(TSS_HCONTEXT   tspContext,		/* in */
2442 		  TCS_KEY_HANDLE hKey,			/* in */
2443 		  TPM_NONCE*     antiReplay,		/* in */
2444 		  TPM_DIGEST*    digestToStamp,	/* in */
2445 		  TPM_AUTH*      privAuth,		/* in, out */
2446 		  UINT32*        pulSignatureLength,	/* out */
2447 		  BYTE**         prgbSignature,	/* out */
2448 		  UINT32*        pulTickCountLength,	/* out */
2449 		  BYTE**         prgbTickCount)	/* out */
2450 {
2451 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2452 	struct host_table_entry *entry = get_table_entry(tspContext);
2453 
2454 	if (entry == NULL)
2455 		return TSPERR(TSS_E_NO_CONNECTION);
2456 
2457 	switch (entry->type) {
2458 		case CONNECTION_TYPE_TCP_PERSISTANT:
2459 			result = RPC_TickStampBlob_TP(entry, hKey, antiReplay, digestToStamp,
2460 						      privAuth, pulSignatureLength,
2461 						      prgbSignature, pulTickCountLength,
2462 						      prgbTickCount);
2463 			break;
2464 		default:
2465 			break;
2466 	}
2467 
2468 	put_table_entry(entry);
2469 
2470 	return result;
2471 }
2472 #endif
2473 
2474 #ifdef TSS_BUILD_TRANSPORT
2475 TSS_RESULT
RPC_EstablishTransport(TSS_HCONTEXT tspContext,UINT32 ulTransControlFlags,TCS_KEY_HANDLE hEncKey,UINT32 ulTransSessionInfoSize,BYTE * rgbTransSessionInfo,UINT32 ulSecretSize,BYTE * rgbSecret,TPM_AUTH * pEncKeyAuth,TPM_MODIFIER_INDICATOR * pbLocality,TCS_HANDLE * hTransSession,UINT32 * ulCurrentTicksSize,BYTE ** prgbCurrentTicks,TPM_NONCE * pTransNonce)2476 RPC_EstablishTransport(TSS_HCONTEXT            tspContext,
2477 		       UINT32                  ulTransControlFlags,
2478 		       TCS_KEY_HANDLE          hEncKey,
2479 		       UINT32                  ulTransSessionInfoSize,
2480 		       BYTE*                   rgbTransSessionInfo,
2481 		       UINT32                  ulSecretSize,
2482 		       BYTE*                   rgbSecret,
2483 		       TPM_AUTH*               pEncKeyAuth,		/* in, out */
2484 		       TPM_MODIFIER_INDICATOR* pbLocality,
2485 		       TCS_HANDLE*             hTransSession,
2486 		       UINT32*                 ulCurrentTicksSize,
2487 		       BYTE**                  prgbCurrentTicks,
2488 		       TPM_NONCE*              pTransNonce)
2489 {
2490 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2491 	struct host_table_entry *entry = get_table_entry(tspContext);
2492 
2493 	if (entry == NULL)
2494 		return TSPERR(TSS_E_NO_CONNECTION);
2495 
2496 	switch (entry->type) {
2497 		case CONNECTION_TYPE_TCP_PERSISTANT:
2498 			result = RPC_EstablishTransport_TP(entry, ulTransControlFlags, hEncKey,
2499 							   ulTransSessionInfoSize,
2500 							   rgbTransSessionInfo, ulSecretSize,
2501 							   rgbSecret, pEncKeyAuth, pbLocality,
2502 							   hTransSession, ulCurrentTicksSize,
2503 							   prgbCurrentTicks, pTransNonce);
2504 			break;
2505 		default:
2506 			break;
2507 	}
2508 
2509 	put_table_entry(entry);
2510 
2511 	return result;
2512 }
2513 
2514 
2515 TSS_RESULT
RPC_ExecuteTransport(TSS_HCONTEXT tspContext,TPM_COMMAND_CODE unWrappedCommandOrdinal,UINT32 ulWrappedCmdParamInSize,BYTE * rgbWrappedCmdParamIn,UINT32 * pulHandleListSize,TCS_HANDLE ** rghHandles,TPM_AUTH * pWrappedCmdAuth1,TPM_AUTH * pWrappedCmdAuth2,TPM_AUTH * pTransAuth,UINT64 * punCurrentTicks,TPM_MODIFIER_INDICATOR * pbLocality,TPM_RESULT * pulWrappedCmdReturnCode,UINT32 * ulWrappedCmdParamOutSize,BYTE ** rgbWrappedCmdParamOut)2516 RPC_ExecuteTransport(TSS_HCONTEXT            tspContext,
2517 		     TPM_COMMAND_CODE        unWrappedCommandOrdinal,
2518 		     UINT32                  ulWrappedCmdParamInSize,
2519 		     BYTE*                   rgbWrappedCmdParamIn,
2520 		     UINT32*                 pulHandleListSize,	/* in, out */
2521 		     TCS_HANDLE**            rghHandles,		/* in, out */
2522 		     TPM_AUTH*               pWrappedCmdAuth1,		/* in, out */
2523 		     TPM_AUTH*               pWrappedCmdAuth2,		/* in, out */
2524 		     TPM_AUTH*               pTransAuth,		/* in, out */
2525 		     UINT64*                 punCurrentTicks,
2526 		     TPM_MODIFIER_INDICATOR* pbLocality,
2527 		     TPM_RESULT*             pulWrappedCmdReturnCode,
2528 		     UINT32*                 ulWrappedCmdParamOutSize,
2529 		     BYTE**                  rgbWrappedCmdParamOut)
2530 {
2531 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2532 	struct host_table_entry *entry = get_table_entry(tspContext);
2533 
2534 	if (entry == NULL)
2535 		return TSPERR(TSS_E_NO_CONNECTION);
2536 
2537 	switch (entry->type) {
2538 		case CONNECTION_TYPE_TCP_PERSISTANT:
2539 			result = RPC_ExecuteTransport_TP(entry, unWrappedCommandOrdinal,
2540 							 ulWrappedCmdParamInSize,
2541 							 rgbWrappedCmdParamIn, pulHandleListSize,
2542 							 rghHandles, pWrappedCmdAuth1,
2543 							 pWrappedCmdAuth2, pTransAuth,
2544 							 punCurrentTicks, pbLocality,
2545 							 pulWrappedCmdReturnCode,
2546 							 ulWrappedCmdParamOutSize,
2547 							 rgbWrappedCmdParamOut);
2548 			break;
2549 		default:
2550 			break;
2551 	}
2552 
2553 	put_table_entry(entry);
2554 
2555 	return result;
2556 }
2557 
2558 TSS_RESULT
RPC_ReleaseTransportSigned(TSS_HCONTEXT tspContext,TCS_KEY_HANDLE hSignatureKey,TPM_NONCE * AntiReplayNonce,TPM_AUTH * pKeyAuth,TPM_AUTH * pTransAuth,TPM_MODIFIER_INDICATOR * pbLocality,UINT32 * pulCurrentTicksSize,BYTE ** prgbCurrentTicks,UINT32 * pulSignatureSize,BYTE ** prgbSignature)2559 RPC_ReleaseTransportSigned(TSS_HCONTEXT            tspContext,
2560 			   TCS_KEY_HANDLE          hSignatureKey,
2561 			   TPM_NONCE*              AntiReplayNonce,
2562 			   TPM_AUTH*               pKeyAuth,		/* in, out */
2563 			   TPM_AUTH*               pTransAuth,		/* in, out */
2564 			   TPM_MODIFIER_INDICATOR* pbLocality,
2565 			   UINT32*                 pulCurrentTicksSize,
2566 			   BYTE**                  prgbCurrentTicks,
2567 			   UINT32*                 pulSignatureSize,
2568 			   BYTE**                  prgbSignature)
2569 {
2570 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2571 	struct host_table_entry *entry = get_table_entry(tspContext);
2572 
2573 	if (entry == NULL)
2574 		return TSPERR(TSS_E_NO_CONNECTION);
2575 
2576 	switch (entry->type) {
2577 		case CONNECTION_TYPE_TCP_PERSISTANT:
2578 			result = RPC_ReleaseTransportSigned_TP(entry, hSignatureKey,
2579 							       AntiReplayNonce, pKeyAuth,
2580 							       pTransAuth, pbLocality,
2581 							       pulCurrentTicksSize,
2582 							       prgbCurrentTicks, pulSignatureSize,
2583 							       prgbSignature);
2584 			break;
2585 		default:
2586 			break;
2587 	}
2588 
2589 	put_table_entry(entry);
2590 
2591 	return result;
2592 }
2593 #endif
2594 
2595 #ifdef TSS_BUILD_NV
2596 TSS_RESULT
RPC_NV_DefineOrReleaseSpace(TSS_HCONTEXT hContext,UINT32 cPubInfoSize,BYTE * pPubInfo,TCPA_ENCAUTH encAuth,TPM_AUTH * pAuth)2597 RPC_NV_DefineOrReleaseSpace(TSS_HCONTEXT hContext,	/* in */
2598 			    UINT32 cPubInfoSize,	/* in */
2599 			    BYTE* pPubInfo,		/* in */
2600 			    TCPA_ENCAUTH encAuth,	/* in */
2601 			    TPM_AUTH* pAuth)		/* in, out */
2602 {
2603 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2604 	struct host_table_entry *entry = get_table_entry(hContext);
2605 
2606 	if (entry == NULL)
2607 		return TSPERR(TSS_E_NO_CONNECTION);
2608 
2609 	switch (entry->type) {
2610 		case CONNECTION_TYPE_TCP_PERSISTANT:
2611 			result = RPC_NV_DefineOrReleaseSpace_TP(entry, cPubInfoSize, pPubInfo,
2612 								encAuth, pAuth);
2613 			break;
2614 		default:
2615 			break;
2616 	}
2617 
2618 	put_table_entry(entry);
2619 
2620 	return result;
2621 }
2622 
2623 TSS_RESULT
RPC_NV_WriteValue(TSS_HCONTEXT hContext,TSS_NV_INDEX hNVStore,UINT32 offset,UINT32 ulDataLength,BYTE * rgbDataToWrite,TPM_AUTH * privAuth)2624 RPC_NV_WriteValue(TSS_HCONTEXT hContext,	/* in */
2625 		  TSS_NV_INDEX hNVStore,	/* in */
2626 		  UINT32 offset,		/* in */
2627 		  UINT32 ulDataLength,		/* in */
2628 		  BYTE* rgbDataToWrite,	/* in */
2629 		  TPM_AUTH* privAuth)		/* in, out */
2630 {
2631 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2632 	struct host_table_entry *entry = get_table_entry(hContext);
2633 
2634 	if (entry == NULL)
2635 		return TSPERR(TSS_E_NO_CONNECTION);
2636 
2637 	switch (entry->type) {
2638 		case CONNECTION_TYPE_TCP_PERSISTANT:
2639 			result = RPC_NV_WriteValue_TP(entry, hNVStore, offset, ulDataLength,
2640 						      rgbDataToWrite, privAuth);
2641 			break;
2642 		default:
2643 			break;
2644 	}
2645 
2646 	put_table_entry(entry);
2647 
2648 	return result;
2649 }
2650 
2651 
2652 TSS_RESULT
RPC_NV_WriteValueAuth(TSS_HCONTEXT hContext,TSS_NV_INDEX hNVStore,UINT32 offset,UINT32 ulDataLength,BYTE * rgbDataToWrite,TPM_AUTH * NVAuth)2653 RPC_NV_WriteValueAuth(TSS_HCONTEXT hContext,	/* in */
2654 		      TSS_NV_INDEX hNVStore,		/* in */
2655 		      UINT32 offset,			/* in */
2656 		      UINT32 ulDataLength,		/* in */
2657 		      BYTE* rgbDataToWrite,		/* in */
2658 		      TPM_AUTH* NVAuth)		/* in, out */
2659 {
2660 
2661 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2662 	struct host_table_entry *entry = get_table_entry(hContext);
2663 
2664 	if (entry == NULL)
2665 		return TSPERR(TSS_E_NO_CONNECTION);
2666 
2667 	switch (entry->type) {
2668 		case CONNECTION_TYPE_TCP_PERSISTANT:
2669 			result = RPC_NV_WriteValueAuth_TP(entry, hNVStore, offset, ulDataLength,
2670 							  rgbDataToWrite, NVAuth);
2671 			break;
2672 		default:
2673 			break;
2674 	}
2675 
2676 	put_table_entry(entry);
2677 
2678 	return result;
2679 }
2680 
2681 
2682 TSS_RESULT
RPC_NV_ReadValue(TSS_HCONTEXT hContext,TSS_NV_INDEX hNVStore,UINT32 offset,UINT32 * pulDataLength,TPM_AUTH * privAuth,BYTE ** rgbDataRead)2683 RPC_NV_ReadValue(TSS_HCONTEXT hContext,	/* in */
2684 		 TSS_NV_INDEX hNVStore,	/* in */
2685 		 UINT32 offset,		/* in */
2686 		 UINT32* pulDataLength,	/* in, out */
2687 		 TPM_AUTH* privAuth,		/* in, out */
2688 		 BYTE** rgbDataRead)		/* out */
2689 {
2690 
2691 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2692 	struct host_table_entry *entry = get_table_entry(hContext);
2693 
2694 	if (entry == NULL)
2695 		return TSPERR(TSS_E_NO_CONNECTION);
2696 
2697 	switch (entry->type) {
2698 		case CONNECTION_TYPE_TCP_PERSISTANT:
2699 			result = RPC_NV_ReadValue_TP(entry, hNVStore, offset, pulDataLength,
2700 						     privAuth, rgbDataRead);
2701 			break;
2702 		default:
2703 			break;
2704 	}
2705 
2706 	put_table_entry(entry);
2707 
2708 	return result;
2709 }
2710 
2711 TSS_RESULT
RPC_NV_ReadValueAuth(TSS_HCONTEXT hContext,TSS_NV_INDEX hNVStore,UINT32 offset,UINT32 * pulDataLength,TPM_AUTH * NVAuth,BYTE ** rgbDataRead)2712 RPC_NV_ReadValueAuth(TSS_HCONTEXT hContext,	/* in */
2713 		     TSS_NV_INDEX hNVStore,    /* in */
2714 		     UINT32 offset,		/* in */
2715 		     UINT32* pulDataLength,    /* in, out */
2716 		     TPM_AUTH* NVAuth,		/* in, out */
2717 		     BYTE** rgbDataRead)       /* out */
2718 {
2719 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2720 	struct host_table_entry *entry = get_table_entry(hContext);
2721 
2722 	if (entry == NULL)
2723 		return TSPERR(TSS_E_NO_CONNECTION);
2724 
2725 	switch (entry->type) {
2726 		case CONNECTION_TYPE_TCP_PERSISTANT:
2727 			result = RPC_NV_ReadValueAuth_TP(entry, hNVStore, offset, pulDataLength,
2728 							 NVAuth, rgbDataRead);
2729 			break;
2730 		default:
2731 			break;
2732 	}
2733 
2734 	put_table_entry(entry);
2735 
2736 	return result;
2737 }
2738 #endif
2739 
2740 #ifdef TSS_BUILD_AUDIT
2741 TSS_RESULT
RPC_SetOrdinalAuditStatus(TSS_HCONTEXT hContext,TPM_AUTH * ownerAuth,UINT32 ulOrdinal,TSS_BOOL bAuditState)2742 RPC_SetOrdinalAuditStatus(TSS_HCONTEXT hContext,	/* in */
2743 			  TPM_AUTH *ownerAuth,		/* in/out */
2744 			  UINT32 ulOrdinal,		/* in */
2745 			  TSS_BOOL bAuditState)	/* in */
2746 {
2747 	TSS_RESULT result = TSS_SUCCESS;
2748 	struct host_table_entry *entry = get_table_entry(hContext);
2749 
2750 	if (entry == NULL)
2751 		return TSPERR(TSS_E_NO_CONNECTION);
2752 
2753 	switch (entry->type) {
2754 		case CONNECTION_TYPE_TCP_PERSISTANT:
2755 			result = RPC_SetOrdinalAuditStatus_TP(entry, ownerAuth, ulOrdinal,
2756 							      bAuditState);
2757 			break;
2758 		default:
2759 			break;
2760 	}
2761 
2762 	put_table_entry(entry);
2763 
2764 	return result;
2765 }
2766 
2767 TSS_RESULT
RPC_GetAuditDigest(TSS_HCONTEXT hContext,UINT32 startOrdinal,TPM_DIGEST * auditDigest,UINT32 * counterValueSize,BYTE ** counterValue,TSS_BOOL * more,UINT32 * ordSize,UINT32 ** ordList)2768 RPC_GetAuditDigest(TSS_HCONTEXT hContext,	/* in */
2769 		   UINT32 startOrdinal,		/* in */
2770 		   TPM_DIGEST *auditDigest,		/* out */
2771 		   UINT32 *counterValueSize,		/* out */
2772 		   BYTE **counterValue,		/* out */
2773 		   TSS_BOOL *more,			/* out */
2774 		   UINT32 *ordSize,			/* out */
2775 		   UINT32 **ordList)			/* out */
2776 {
2777 	TSS_RESULT result = TSS_SUCCESS;
2778 	struct host_table_entry *entry = get_table_entry(hContext);
2779 
2780 	if (entry == NULL)
2781 		return TSPERR(TSS_E_NO_CONNECTION);
2782 
2783 	switch (entry->type) {
2784 		case CONNECTION_TYPE_TCP_PERSISTANT:
2785 			result = RPC_GetAuditDigest_TP(entry, startOrdinal, auditDigest,
2786 						       counterValueSize, counterValue, more,
2787 						       ordSize, ordList);
2788 			break;
2789 		default:
2790 			break;
2791 	}
2792 
2793 	put_table_entry(entry);
2794 
2795 	return result;
2796 }
2797 
2798 TSS_RESULT
RPC_GetAuditDigestSigned(TSS_HCONTEXT hContext,TCS_KEY_HANDLE keyHandle,TSS_BOOL closeAudit,TPM_NONCE * antiReplay,TPM_AUTH * privAuth,UINT32 * counterValueSize,BYTE ** counterValue,TPM_DIGEST * auditDigest,TPM_DIGEST * ordinalDigest,UINT32 * sigSize,BYTE ** sig)2799 RPC_GetAuditDigestSigned(TSS_HCONTEXT hContext,		/* in */
2800 			 TCS_KEY_HANDLE keyHandle,	/* in */
2801 			 TSS_BOOL closeAudit,		/* in */
2802 			 TPM_NONCE *antiReplay,		/* in */
2803 			 TPM_AUTH *privAuth,		/* in/out */
2804 			 UINT32 *counterValueSize,	/* out */
2805 			 BYTE **counterValue,		/* out */
2806 			 TPM_DIGEST *auditDigest,	/* out */
2807 			 TPM_DIGEST *ordinalDigest,	/* out */
2808 			 UINT32 *sigSize,		/* out */
2809 			 BYTE **sig)			/* out */
2810 {
2811 	TSS_RESULT result = TSS_SUCCESS;
2812 	struct host_table_entry *entry = get_table_entry(hContext);
2813 
2814 	if (entry == NULL)
2815 		return TSPERR(TSS_E_NO_CONNECTION);
2816 
2817 	switch (entry->type) {
2818 		case CONNECTION_TYPE_TCP_PERSISTANT:
2819 			result = RPC_GetAuditDigestSigned_TP(entry, keyHandle, closeAudit,
2820 							     antiReplay, privAuth,
2821 							     counterValueSize, counterValue,
2822 							     auditDigest, ordinalDigest,
2823 							     sigSize, sig);
2824 			break;
2825 		default:
2826 			break;
2827 	}
2828 
2829 	put_table_entry(entry);
2830 
2831 	return result;
2832 }
2833 #endif
2834 
2835 #ifdef TSS_BUILD_TSS12
2836 TSS_RESULT
RPC_SetOperatorAuth(TSS_HCONTEXT hContext,TCPA_SECRET * operatorAuth)2837 RPC_SetOperatorAuth(TSS_HCONTEXT hContext,	/* in */
2838 		    TCPA_SECRET *operatorAuth)		/* in */
2839 {
2840 	TSS_RESULT result = TSS_SUCCESS;
2841 	struct host_table_entry *entry = get_table_entry(hContext);
2842 
2843 	if (entry == NULL)
2844 		return TSPERR(TSS_E_NO_CONNECTION);
2845 
2846 	switch (entry->type) {
2847 		case CONNECTION_TYPE_TCP_PERSISTANT:
2848 			result = RPC_SetOperatorAuth_TP(entry, operatorAuth);
2849 			break;
2850 		default:
2851 			break;
2852 	}
2853 
2854 	put_table_entry(entry);
2855 
2856 	return result;
2857 }
2858 
2859 TSS_RESULT
RPC_OwnerReadInternalPub(TSS_HCONTEXT hContext,TCS_KEY_HANDLE hKey,TPM_AUTH * pOwnerAuth,UINT32 * punPubKeySize,BYTE ** ppbPubKeyData)2860 RPC_OwnerReadInternalPub(TSS_HCONTEXT hContext,	/* in */
2861 			 TCS_KEY_HANDLE hKey,		/* in */
2862 			 TPM_AUTH* pOwnerAuth,		/* in, out */
2863 			 UINT32* punPubKeySize,	/* out */
2864 			 BYTE** ppbPubKeyData)		/* out */
2865 {
2866 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2867 	struct host_table_entry *entry = get_table_entry(hContext);
2868 
2869 	if (entry == NULL)
2870 		return TSPERR(TSS_E_NO_CONNECTION);
2871 
2872 	switch (entry->type) {
2873 		case CONNECTION_TYPE_TCP_PERSISTANT:
2874 			result = RPC_OwnerReadInternalPub_TP(entry, hKey, pOwnerAuth, punPubKeySize,
2875 							     ppbPubKeyData);
2876 			break;
2877 		default:
2878 			break;
2879 	}
2880 
2881 	put_table_entry(entry);
2882 
2883 	return result;
2884 }
2885 #endif
2886 
2887 #ifdef TSS_BUILD_DELEGATION
2888 TSS_RESULT
RPC_Delegate_Manage(TSS_HCONTEXT hContext,TPM_FAMILY_ID familyID,TPM_FAMILY_OPERATION opFlag,UINT32 opDataSize,BYTE * opData,TPM_AUTH * ownerAuth,UINT32 * retDataSize,BYTE ** retData)2889 RPC_Delegate_Manage(TSS_HCONTEXT hContext,		/* in */
2890 		    TPM_FAMILY_ID familyID,		/* in */
2891 		    TPM_FAMILY_OPERATION opFlag,	/* in */
2892 		    UINT32 opDataSize,			/* in */
2893 		    BYTE *opData,			/* in */
2894 		    TPM_AUTH *ownerAuth,		/* in, out */
2895 		    UINT32 *retDataSize,		/* out */
2896 		    BYTE **retData)			/* out */
2897 {
2898 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2899 	struct host_table_entry *entry = get_table_entry(hContext);
2900 
2901 	if (entry == NULL)
2902 		return TSPERR(TSS_E_NO_CONNECTION);
2903 
2904 	switch (entry->type) {
2905 		case CONNECTION_TYPE_TCP_PERSISTANT:
2906 			result = RPC_Delegate_Manage_TP(entry, familyID, opFlag, opDataSize, opData,
2907 							ownerAuth, retDataSize, retData);
2908 			break;
2909 		default:
2910 			break;
2911 	}
2912 
2913 	put_table_entry(entry);
2914 
2915 	return result;
2916 }
2917 
2918 TSS_RESULT
RPC_Delegate_CreateKeyDelegation(TSS_HCONTEXT hContext,TCS_KEY_HANDLE hKey,UINT32 publicInfoSize,BYTE * publicInfo,TPM_ENCAUTH * encDelAuth,TPM_AUTH * keyAuth,UINT32 * blobSize,BYTE ** blob)2919 RPC_Delegate_CreateKeyDelegation(TSS_HCONTEXT hContext,		/* in */
2920 				 TCS_KEY_HANDLE hKey,		/* in */
2921 				 UINT32 publicInfoSize,		/* in */
2922 				 BYTE *publicInfo,		/* in */
2923 				 TPM_ENCAUTH *encDelAuth,	/* in */
2924 				 TPM_AUTH *keyAuth,		/* in, out */
2925 				 UINT32 *blobSize,		/* out */
2926 				 BYTE **blob)			/* out */
2927 {
2928 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2929 	struct host_table_entry *entry = get_table_entry(hContext);
2930 
2931 	if (entry == NULL)
2932 		return TSPERR(TSS_E_NO_CONNECTION);
2933 
2934 	switch (entry->type) {
2935 		case CONNECTION_TYPE_TCP_PERSISTANT:
2936 			result = RPC_Delegate_CreateKeyDelegation_TP(entry, hKey, publicInfoSize,
2937 								     publicInfo, encDelAuth,
2938 								     keyAuth, blobSize, blob);
2939 			break;
2940 		default:
2941 			break;
2942 	}
2943 
2944 	put_table_entry(entry);
2945 
2946 	return result;
2947 }
2948 
2949 TSS_RESULT
RPC_Delegate_CreateOwnerDelegation(TSS_HCONTEXT hContext,TSS_BOOL increment,UINT32 publicInfoSize,BYTE * publicInfo,TPM_ENCAUTH * encDelAuth,TPM_AUTH * ownerAuth,UINT32 * blobSize,BYTE ** blob)2950 RPC_Delegate_CreateOwnerDelegation(TSS_HCONTEXT hContext,	/* in */
2951 				   TSS_BOOL increment,		/* in */
2952 				   UINT32 publicInfoSize,	/* in */
2953 				   BYTE *publicInfo,		/* in */
2954 				   TPM_ENCAUTH *encDelAuth,	/* in */
2955 				   TPM_AUTH *ownerAuth,		/* in, out */
2956 				   UINT32 *blobSize,		/* out */
2957 				   BYTE **blob)			/* out */
2958 {
2959 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2960 	struct host_table_entry *entry = get_table_entry(hContext);
2961 
2962 	if (entry == NULL)
2963 		return TSPERR(TSS_E_NO_CONNECTION);
2964 
2965 	switch (entry->type) {
2966 		case CONNECTION_TYPE_TCP_PERSISTANT:
2967 			result = RPC_Delegate_CreateOwnerDelegation_TP(entry, increment,
2968 								       publicInfoSize, publicInfo,
2969 								       encDelAuth, ownerAuth,
2970 								       blobSize, blob);
2971 			break;
2972 		default:
2973 			break;
2974 	}
2975 
2976 	put_table_entry(entry);
2977 
2978 	return result;
2979 }
2980 
2981 TSS_RESULT
RPC_Delegate_LoadOwnerDelegation(TSS_HCONTEXT hContext,TPM_DELEGATE_INDEX index,UINT32 blobSize,BYTE * blob,TPM_AUTH * ownerAuth)2982 RPC_Delegate_LoadOwnerDelegation(TSS_HCONTEXT hContext,	/* in */
2983 				 TPM_DELEGATE_INDEX index,	/* in */
2984 				 UINT32 blobSize,		/* in */
2985 				 BYTE *blob,			/* in */
2986 				 TPM_AUTH *ownerAuth)		/* in, out */
2987 {
2988 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
2989 	struct host_table_entry *entry = get_table_entry(hContext);
2990 
2991 	if (entry == NULL)
2992 		return TSPERR(TSS_E_NO_CONNECTION);
2993 
2994 	switch (entry->type) {
2995 		case CONNECTION_TYPE_TCP_PERSISTANT:
2996 			result = RPC_Delegate_LoadOwnerDelegation_TP(entry, index, blobSize, blob,
2997 								     ownerAuth);
2998 			break;
2999 		default:
3000 			break;
3001 	}
3002 
3003 	put_table_entry(entry);
3004 
3005 	return result;
3006 }
3007 
3008 TSS_RESULT
RPC_Delegate_ReadTable(TSS_HCONTEXT hContext,UINT32 * familyTableSize,BYTE ** familyTable,UINT32 * delegateTableSize,BYTE ** delegateTable)3009 RPC_Delegate_ReadTable(TSS_HCONTEXT hContext,		/* in */
3010 		       UINT32 *familyTableSize,		/* out */
3011 		       BYTE **familyTable,		/* out */
3012 		       UINT32 *delegateTableSize,	/* out */
3013 		       BYTE **delegateTable)		/* out */
3014 {
3015 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3016 	struct host_table_entry *entry = get_table_entry(hContext);
3017 
3018 	if (entry == NULL)
3019 		return TSPERR(TSS_E_NO_CONNECTION);
3020 
3021 	switch (entry->type) {
3022 		case CONNECTION_TYPE_TCP_PERSISTANT:
3023 			result = RPC_Delegate_ReadTable_TP(entry, familyTableSize, familyTable,
3024 							   delegateTableSize, delegateTable);
3025 			break;
3026 		default:
3027 			break;
3028 	}
3029 
3030 	put_table_entry(entry);
3031 
3032 	return result;
3033 }
3034 
3035 TSS_RESULT
RPC_Delegate_UpdateVerificationCount(TSS_HCONTEXT hContext,UINT32 inputSize,BYTE * input,TPM_AUTH * ownerAuth,UINT32 * outputSize,BYTE ** output)3036 RPC_Delegate_UpdateVerificationCount(TSS_HCONTEXT hContext,	/* in */
3037 				     UINT32 inputSize,		/* in */
3038 				     BYTE *input,		/* in */
3039 				     TPM_AUTH *ownerAuth,	/* in, out */
3040 				     UINT32 *outputSize,	/* out */
3041 				     BYTE **output)		/* out */
3042 {
3043 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3044 	struct host_table_entry *entry = get_table_entry(hContext);
3045 
3046 	if (entry == NULL)
3047 		return TSPERR(TSS_E_NO_CONNECTION);
3048 
3049 	switch (entry->type) {
3050 		case CONNECTION_TYPE_TCP_PERSISTANT:
3051 			result = RPC_Delegate_UpdateVerificationCount_TP(entry, inputSize, input,
3052 									 ownerAuth, outputSize,
3053 									 output);
3054 			break;
3055 		default:
3056 			break;
3057 	}
3058 
3059 	put_table_entry(entry);
3060 
3061 	return result;
3062 }
3063 
3064 TSS_RESULT
RPC_Delegate_VerifyDelegation(TSS_HCONTEXT hContext,UINT32 delegateSize,BYTE * delegate)3065 RPC_Delegate_VerifyDelegation(TSS_HCONTEXT hContext,	/* in */
3066 			      UINT32 delegateSize,	/* in */
3067 			      BYTE *delegate)		/* in */
3068 {
3069 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3070 	struct host_table_entry *entry = get_table_entry(hContext);
3071 
3072 	if (entry == NULL)
3073 		return TSPERR(TSS_E_NO_CONNECTION);
3074 
3075 	switch (entry->type) {
3076 		case CONNECTION_TYPE_TCP_PERSISTANT:
3077 			result = RPC_Delegate_VerifyDelegation_TP(entry, delegateSize, delegate);
3078 			break;
3079 		default:
3080 			break;
3081 	}
3082 
3083 	put_table_entry(entry);
3084 
3085 	return result;
3086 }
3087 
3088 TSS_RESULT
RPC_DSAP(TSS_HCONTEXT hContext,TPM_ENTITY_TYPE entityType,TCS_KEY_HANDLE keyHandle,TPM_NONCE * nonceOddDSAP,UINT32 entityValueSize,BYTE * entityValue,TCS_AUTHHANDLE * authHandle,TPM_NONCE * nonceEven,TPM_NONCE * nonceEvenDSAP)3089 RPC_DSAP(TSS_HCONTEXT hContext,		/* in */
3090 	 TPM_ENTITY_TYPE entityType,	/* in */
3091 	 TCS_KEY_HANDLE keyHandle,	/* in */
3092 	 TPM_NONCE *nonceOddDSAP,	/* in */
3093 	 UINT32 entityValueSize,	/* in */
3094 	 BYTE * entityValue,		/* in */
3095 	 TCS_AUTHHANDLE *authHandle,	/* out */
3096 	 TPM_NONCE *nonceEven,		/* out */
3097 	 TPM_NONCE *nonceEvenDSAP)	/* out */
3098 {
3099 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3100 	struct host_table_entry *entry = get_table_entry(hContext);
3101 
3102 	if (entry == NULL)
3103 		return TSPERR(TSS_E_NO_CONNECTION);
3104 
3105 	switch (entry->type) {
3106 		case CONNECTION_TYPE_TCP_PERSISTANT:
3107 			result = RPC_DSAP_TP(entry, entityType, keyHandle, nonceOddDSAP,
3108 					     entityValueSize, entityValue, authHandle, nonceEven,
3109 					     nonceEvenDSAP);
3110 			break;
3111 		default:
3112 			break;
3113 	}
3114 
3115 	put_table_entry(entry);
3116 
3117 	return result;
3118 }
3119 
3120 #endif
3121 
3122 #ifdef TSS_BUILD_CMK
3123 TSS_RESULT
RPC_CMK_SetRestrictions(TSS_HCONTEXT hContext,TSS_CMK_DELEGATE restriction,TPM_AUTH * ownerAuth)3124 RPC_CMK_SetRestrictions(TSS_HCONTEXT hContext,	/* in */
3125 			TSS_CMK_DELEGATE restriction,	/* in */
3126 			TPM_AUTH *ownerAuth)		/* in, out */
3127 {
3128 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3129 	struct host_table_entry *entry = get_table_entry(hContext);
3130 
3131 	if (entry == NULL)
3132 		return TSPERR(TSS_E_NO_CONNECTION);
3133 
3134 	switch (entry->type) {
3135 		case CONNECTION_TYPE_TCP_PERSISTANT:
3136 			result = RPC_CMK_SetRestrictions_TP(entry, restriction, ownerAuth);
3137 			break;
3138 		default:
3139 			break;
3140 	}
3141 
3142 	put_table_entry(entry);
3143 
3144 	return result;
3145 }
3146 
3147 TSS_RESULT
RPC_CMK_ApproveMA(TSS_HCONTEXT hContext,TPM_DIGEST migAuthorityDigest,TPM_AUTH * ownerAuth,TPM_HMAC * migAuthorityApproval)3148 RPC_CMK_ApproveMA(TSS_HCONTEXT hContext,		/* in */
3149 		  TPM_DIGEST migAuthorityDigest,	/* in */
3150 		  TPM_AUTH *ownerAuth,			/* in, out */
3151 		  TPM_HMAC *migAuthorityApproval)	/* out */
3152 {
3153 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3154 	struct host_table_entry *entry = get_table_entry(hContext);
3155 
3156 	if (entry == NULL)
3157 		return TSPERR(TSS_E_NO_CONNECTION);
3158 
3159 	switch (entry->type) {
3160 		case CONNECTION_TYPE_TCP_PERSISTANT:
3161 			result = RPC_CMK_ApproveMA_TP(entry, migAuthorityDigest, ownerAuth,
3162 					migAuthorityApproval);
3163 			break;
3164 		default:
3165 			break;
3166 	}
3167 
3168 	put_table_entry(entry);
3169 
3170 	return result;
3171 }
3172 
3173 TSS_RESULT
RPC_CMK_CreateKey(TSS_HCONTEXT hContext,TCS_KEY_HANDLE hWrappingKey,TPM_ENCAUTH * keyUsageAuth,TPM_HMAC * migAuthorityApproval,TPM_DIGEST * migAuthorityDigest,UINT32 * keyDataSize,BYTE ** keyData,TPM_AUTH * pAuth)3174 RPC_CMK_CreateKey(TSS_HCONTEXT hContext,		/* in */
3175 		  TCS_KEY_HANDLE hWrappingKey,		/* in */
3176 		  TPM_ENCAUTH *keyUsageAuth,		/* in */
3177 		  TPM_HMAC *migAuthorityApproval,	/* in */
3178 		  TPM_DIGEST *migAuthorityDigest,	/* in */
3179 		  UINT32 *keyDataSize,			/* in, out */
3180 		  BYTE **keyData,			/* in, out */
3181 		  TPM_AUTH *pAuth)			/* in, out */
3182 {
3183 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3184 	struct host_table_entry *entry = get_table_entry(hContext);
3185 
3186 	if (entry == NULL)
3187 		return TSPERR(TSS_E_NO_CONNECTION);
3188 
3189 	switch (entry->type) {
3190 		case CONNECTION_TYPE_TCP_PERSISTANT:
3191 			result = RPC_CMK_CreateKey_TP(entry, hWrappingKey, keyUsageAuth,
3192 					migAuthorityApproval, migAuthorityDigest, keyDataSize,
3193 					keyData, pAuth);
3194 			break;
3195 		default:
3196 			break;
3197 	}
3198 
3199 	put_table_entry(entry);
3200 
3201 	return result;
3202 }
3203 
3204 TSS_RESULT
RPC_CMK_CreateTicket(TSS_HCONTEXT hContext,UINT32 publicVerifyKeySize,BYTE * publicVerifyKey,TPM_DIGEST signedData,UINT32 sigValueSize,BYTE * sigValue,TPM_AUTH * ownerAuth,TPM_HMAC * sigTicket)3205 RPC_CMK_CreateTicket(TSS_HCONTEXT hContext,	/* in */
3206 		     UINT32 publicVerifyKeySize,	/* in */
3207 		     BYTE *publicVerifyKey,		/* in */
3208 		     TPM_DIGEST signedData,		/* in */
3209 		     UINT32 sigValueSize,		/* in */
3210 		     BYTE *sigValue,			/* in */
3211 		     TPM_AUTH *ownerAuth,		/* in, out */
3212 		     TPM_HMAC *sigTicket)		/* out */
3213 {
3214 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3215 	struct host_table_entry *entry = get_table_entry(hContext);
3216 
3217 	if (entry == NULL)
3218 		return TSPERR(TSS_E_NO_CONNECTION);
3219 
3220 	switch (entry->type) {
3221 		case CONNECTION_TYPE_TCP_PERSISTANT:
3222 			result = RPC_CMK_CreateTicket_TP(entry, publicVerifyKeySize,
3223 					publicVerifyKey, signedData, sigValueSize, sigValue,
3224 					ownerAuth, sigTicket);
3225 			break;
3226 		default:
3227 			break;
3228 	}
3229 
3230 	put_table_entry(entry);
3231 
3232 	return result;
3233 }
3234 
3235 TSS_RESULT
RPC_CMK_CreateBlob(TSS_HCONTEXT hContext,TCS_KEY_HANDLE hParentKey,TSS_MIGRATE_SCHEME migrationType,UINT32 migKeyAuthSize,BYTE * migKeyAuth,TPM_DIGEST pubSourceKeyDigest,UINT32 msaListSize,BYTE * msaList,UINT32 restrictTicketSize,BYTE * restrictTicket,UINT32 sigTicketSize,BYTE * sigTicket,UINT32 encDataSize,BYTE * encData,TPM_AUTH * pAuth,UINT32 * randomSize,BYTE ** random,UINT32 * outDataSize,BYTE ** outData)3236 RPC_CMK_CreateBlob(TSS_HCONTEXT hContext,	/* in */
3237 		   TCS_KEY_HANDLE hParentKey,		/* in */
3238 		   TSS_MIGRATE_SCHEME migrationType,	/* in */
3239 		   UINT32 migKeyAuthSize,		/* in */
3240 		   BYTE *migKeyAuth,			/* in */
3241 		   TPM_DIGEST pubSourceKeyDigest,	/* in */
3242 		   UINT32 msaListSize,			/* in */
3243 		   BYTE *msaList,			/* in */
3244 		   UINT32 restrictTicketSize,		/* in */
3245 		   BYTE *restrictTicket,		/* in */
3246 		   UINT32 sigTicketSize,		/* in */
3247 		   BYTE *sigTicket,			/* in */
3248 		   UINT32 encDataSize,			/* in */
3249 		   BYTE *encData,			/* in */
3250 		   TPM_AUTH *pAuth,			/* in, out */
3251 		   UINT32 *randomSize,			/* out */
3252 		   BYTE **random,			/* out */
3253 		   UINT32 *outDataSize,			/* out */
3254 		   BYTE **outData)			/* out */
3255 {
3256 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3257 	struct host_table_entry *entry = get_table_entry(hContext);
3258 
3259 	if (entry == NULL)
3260 		return TSPERR(TSS_E_NO_CONNECTION);
3261 
3262 	switch (entry->type) {
3263 		case CONNECTION_TYPE_TCP_PERSISTANT:
3264 			result = RPC_CMK_CreateBlob_TP(entry, hParentKey, migrationType,
3265 					migKeyAuthSize, migKeyAuth, pubSourceKeyDigest,
3266 					msaListSize, msaList, restrictTicketSize, restrictTicket,
3267 					sigTicketSize, sigTicket, encDataSize, encData, pAuth,
3268 					randomSize, random, outDataSize, outData);
3269 			break;
3270 		default:
3271 			break;
3272 	}
3273 
3274 	put_table_entry(entry);
3275 
3276 	return result;
3277 }
3278 
3279 TSS_RESULT
RPC_CMK_ConvertMigration(TSS_HCONTEXT hContext,TCS_KEY_HANDLE hParentHandle,TPM_CMK_AUTH restrictTicket,TPM_HMAC sigTicket,UINT32 keyDataSize,BYTE * keyData,UINT32 msaListSize,BYTE * msaList,UINT32 randomSize,BYTE * random,TPM_AUTH * pAuth,UINT32 * outDataSize,BYTE ** outData)3280 RPC_CMK_ConvertMigration(TSS_HCONTEXT hContext,	/* in */
3281 			 TCS_KEY_HANDLE hParentHandle,	/* in */
3282 			 TPM_CMK_AUTH restrictTicket,	/* in */
3283 			 TPM_HMAC sigTicket,		/* in */
3284 			 UINT32 keyDataSize,		/* in */
3285 			 BYTE *keyData,			/* in */
3286 			 UINT32 msaListSize,		/* in */
3287 			 BYTE *msaList,			/* in */
3288 			 UINT32 randomSize,		/* in */
3289 			 BYTE *random,			/* in */
3290 			 TPM_AUTH *pAuth,		/* in, out */
3291 			 UINT32 *outDataSize,		/* out */
3292 			 BYTE **outData)		/* out */
3293 {
3294 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3295 	struct host_table_entry *entry = get_table_entry(hContext);
3296 
3297 	if (entry == NULL)
3298 		return TSPERR(TSS_E_NO_CONNECTION);
3299 
3300 	switch (entry->type) {
3301 		case CONNECTION_TYPE_TCP_PERSISTANT:
3302 			result = RPC_CMK_ConvertMigration_TP(entry, hParentHandle, restrictTicket,
3303 					sigTicket, keyDataSize, keyData, msaListSize, msaList,
3304 					randomSize, random, pAuth, outDataSize, outData);
3305 			break;
3306 		default:
3307 			break;
3308 	}
3309 
3310 	put_table_entry(entry);
3311 
3312 	return result;
3313 }
3314 #endif
3315 
3316 #ifdef TSS_BUILD_TSS12
3317 TSS_RESULT
RPC_FlushSpecific(TSS_HCONTEXT hContext,TCS_HANDLE hResHandle,TPM_RESOURCE_TYPE resourceType)3318 RPC_FlushSpecific(TSS_HCONTEXT hContext, /* in */
3319 		  TCS_HANDLE hResHandle, /* in */
3320 		  TPM_RESOURCE_TYPE resourceType) /* in */
3321 {
3322 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3323 	struct host_table_entry *entry = get_table_entry(hContext);
3324 
3325 	if (entry == NULL)
3326 		return TSPERR(TSS_E_NO_CONNECTION);
3327 
3328 	switch (entry->type) {
3329 		case CONNECTION_TYPE_TCP_PERSISTANT:
3330 			result = RPC_FlushSpecific_TP(entry, hResHandle, resourceType);
3331 			break;
3332 		default:
3333 			break;
3334 	}
3335 
3336 	put_table_entry(entry);
3337 
3338 	return result;
3339 }
3340 
3341 TSS_RESULT
RPC_KeyControlOwner(TCS_CONTEXT_HANDLE hContext,TCS_KEY_HANDLE hKey,UINT32 ulPublicInfoLength,BYTE * rgbPublicInfo,UINT32 attribName,TSS_BOOL attribValue,TPM_AUTH * pOwnerAuth,TSS_UUID * pUuidData)3342 RPC_KeyControlOwner(TCS_CONTEXT_HANDLE hContext,		/* in */
3343 		    TCS_KEY_HANDLE     hKey,			/* in */
3344 		    UINT32             ulPublicInfoLength,	/* in */
3345 		    BYTE*              rgbPublicInfo,		/* in */
3346 		    UINT32             attribName,		/* in */
3347 		    TSS_BOOL           attribValue,		/* in */
3348 		    TPM_AUTH*          pOwnerAuth,		/* in, out */
3349 		    TSS_UUID*          pUuidData)		/* out */
3350 
3351 {
3352 	TSS_RESULT result = (TSS_E_INTERNAL_ERROR | TSS_LAYER_TSP);
3353 	struct host_table_entry *entry = get_table_entry(hContext);
3354 
3355 	if (entry == NULL)
3356 		return TSPERR(TSS_E_NO_CONNECTION);
3357 
3358 	switch (entry->type) {
3359 		case CONNECTION_TYPE_TCP_PERSISTANT:
3360 			result = RPC_KeyControlOwner_TP(entry, hKey,
3361 							ulPublicInfoLength,
3362 							rgbPublicInfo,
3363 							attribName,
3364 							attribValue,
3365 							pOwnerAuth,
3366 							pUuidData);
3367 			break;
3368 		default:
3369 			break;
3370 	}
3371 
3372 	put_table_entry(entry);
3373 
3374 	return result;
3375 }
3376 #endif
3377 
3378