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-2006 8 * 9 */ 10 11#include <stdlib.h> 12#include <stdio.h> 13#include <string.h> 14#include <assert.h> 15 16#include "trousers/tss.h" 17#include "trousers/trousers.h" 18#include "trousers_types.h" 19#include "spi_utils.h" 20#include "capabilities.h" 21#include "tsplog.h" 22#include "hosttable.h" 23#include "tcsd_wrap.h" 24#include "obj.h" 25#include "rpc_tcstp_tsp.h" 26 27 28TSS_RESULT 29RPC_Extend_TP(struct host_table_entry *hte, 30 TCPA_PCRINDEX pcrNum, /* in */ 31 TCPA_DIGEST inDigest, /* in */ 32 TCPA_PCRVALUE * outDigest /* out */ 33 ) { 34 TSS_RESULT result; 35 36 initData(&hte->comm, 3); 37 hte->comm.hdr.u.ordinal = TCSD_ORD_EXTEND; 38 LogDebugFn("TCS Context: 0x%x", hte->tcsContext); 39 40 if (setData(TCSD_PACKET_TYPE_UINT32, 0, &hte->tcsContext, 0, &hte->comm)) 41 return TSPERR(TSS_E_INTERNAL_ERROR); 42 if (setData(TCSD_PACKET_TYPE_UINT32, 1, &pcrNum, 0, &hte->comm)) 43 return TSPERR(TSS_E_INTERNAL_ERROR); 44 if (setData(TCSD_PACKET_TYPE_DIGEST, 2, &inDigest, 0, &hte->comm)) 45 return TSPERR(TSS_E_INTERNAL_ERROR); 46 47 result = sendTCSDPacket(hte); 48 49 if (result == TSS_SUCCESS) 50 result = hte->comm.hdr.u.result; 51 52 if (result == TSS_SUCCESS) { 53 if (getData(TCSD_PACKET_TYPE_DIGEST, 0, outDigest, 0, &hte->comm)) 54 result = TSPERR(TSS_E_INTERNAL_ERROR); 55 } 56 57 return result; 58} 59 60TSS_RESULT 61RPC_PcrRead_TP(struct host_table_entry *hte, 62 TCPA_PCRINDEX pcrNum, /* in */ 63 TCPA_PCRVALUE * outDigest /* out */ 64 ) { 65 TSS_RESULT result; 66 67 initData(&hte->comm, 2); 68 hte->comm.hdr.u.ordinal = TCSD_ORD_PCRREAD; 69 LogDebugFn("TCS Context: 0x%x", hte->tcsContext); 70 71 if (setData(TCSD_PACKET_TYPE_UINT32, 0, &hte->tcsContext, 0, &hte->comm)) 72 return TSPERR(TSS_E_INTERNAL_ERROR); 73 if (setData(TCSD_PACKET_TYPE_UINT32, 1, &pcrNum, 0, &hte->comm)) 74 return TSPERR(TSS_E_INTERNAL_ERROR); 75 76 result = sendTCSDPacket(hte); 77 78 if (result == TSS_SUCCESS) 79 result = hte->comm.hdr.u.result; 80 81 if (result == TSS_SUCCESS) { 82 if (getData(TCSD_PACKET_TYPE_DIGEST, 0, outDigest, 0, &hte->comm)) 83 result = TSPERR(TSS_E_INTERNAL_ERROR); 84 } 85 86 return result; 87} 88 89TSS_RESULT 90RPC_PcrReset_TP(struct host_table_entry *hte, 91 UINT32 pcrDataSizeIn, /* in */ 92 BYTE * pcrDataIn) /* in */ 93{ 94 TSS_RESULT result; 95 96 initData(&hte->comm, 3); 97 hte->comm.hdr.u.ordinal = TCSD_ORD_PCRRESET; 98 LogDebugFn("TCS Context: 0x%x", hte->tcsContext); 99 100 if (setData(TCSD_PACKET_TYPE_UINT32, 0, &hte->tcsContext, 0, &hte->comm)) 101 return TSPERR(TSS_E_INTERNAL_ERROR); 102 if (setData(TCSD_PACKET_TYPE_UINT32, 1, &pcrDataSizeIn, 0, &hte->comm)) 103 return TSPERR(TSS_E_INTERNAL_ERROR); 104 if (setData(TCSD_PACKET_TYPE_PBYTE, 2, pcrDataIn, pcrDataSizeIn, &hte->comm)) 105 return TSPERR(TSS_E_INTERNAL_ERROR); 106 107 result = sendTCSDPacket(hte); 108 109 if (result == TSS_SUCCESS) 110 result = hte->comm.hdr.u.result; 111 112 return result; 113} 114