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
25TSS_RESULT
26Transport_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
53TSS_RESULT
54Transport_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