Home | History | Annotate | Line # | Download | only in tspi
      1 
      2 /*
      3  * Licensed Materials - Property of IBM
      4  *
      5  * trousers - An open source TCG Software Stack
      6  *
      7  * (C) Copyright International Business Machines Corp. 2007
      8  *
      9  */
     10 
     11 
     12 #include <stdlib.h>
     13 #include <string.h>
     14 
     15 #include "trousers/tss.h"
     16 #include "trousers/trousers.h"
     17 #include "trousers_types.h"
     18 #include "spi_utils.h"
     19 #include "capabilities.h"
     20 #include "tsplog.h"
     21 #include "obj.h"
     22 
     23 
     24 #ifdef TSS_BUILD_TRANSPORT
     25 TSS_RESULT
     26 Transport_DirWriteAuth(TSS_HCONTEXT tspContext,    /* in */
     27 		       TCPA_DIRINDEX dirIndex,     /* in */
     28 		       TCPA_DIRVALUE *newContents,  /* in */
     29 		       TPM_AUTH * ownerAuth)       /* in, out */
     30 {
     31 	TSS_RESULT result;
     32 	UINT32 handlesLen = 0;
     33 	UINT64 offset;
     34 	BYTE data[sizeof(TCPA_DIRINDEX) + sizeof(TCPA_DIRVALUE)];
     35 
     36 
     37 	if ((result = obj_context_transport_init(tspContext)))
     38 		return result;
     39 
     40 	LogDebugFn("Executing in a transport session");
     41 
     42 	offset = 0;
     43 	Trspi_LoadBlob_UINT32(&offset, dirIndex, data);
     44 	Trspi_LoadBlob_DIGEST(&offset, data, (TPM_DIGEST *)newContents);
     45 
     46 	result = obj_context_transport_execute(tspContext, TPM_ORD_DirWriteAuth, sizeof(data), data,
     47 					       NULL, &handlesLen, NULL, ownerAuth, NULL, NULL,
     48 					       NULL);
     49 
     50 	return result;
     51 }
     52 
     53 TSS_RESULT
     54 Transport_DirRead(TSS_HCONTEXT tspContext, /* in */
     55 		  TCPA_DIRINDEX dirIndex,  /* in */
     56 		  TCPA_DIRVALUE * dirValue)        /* out */
     57 {
     58 	TSS_RESULT result;
     59 	UINT32 handlesLen = 0, decLen;
     60 	UINT64 offset;
     61 	BYTE data[sizeof(TCPA_DIRINDEX)], *dec;
     62 
     63 
     64 	if ((result = obj_context_transport_init(tspContext)))
     65 		return result;
     66 
     67 	LogDebugFn("Executing in a transport session");
     68 
     69 	offset = 0;
     70 	Trspi_LoadBlob_UINT32(&offset, dirIndex, data);
     71 
     72 	if ((result = obj_context_transport_execute(tspContext, TPM_ORD_DirRead, sizeof(data), data,
     73 						    NULL, &handlesLen, NULL, NULL, NULL, &decLen,
     74 						    &dec)))
     75 		return result;
     76 
     77 	offset = 0;
     78 	Trspi_UnloadBlob_DIGEST(&offset, dec, dirValue);
     79 
     80 	return result;
     81 }
     82 #endif
     83 
     84