1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/*
* The Initial Developer of the Original Code is Intel Corporation.
* Portions created by Intel Corporation are Copyright (C) 2007 Intel Corporation.
* All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the Common Public License as published by
* IBM Corporation; either version 1 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Common Public License for more details.
*
* You should have received a copy of the Common Public License
* along with this program; if not, a copy can be viewed at
* http://www.opensource.org/licenses/cpl1.0.php.
*
* trousers - An open source TCG Software Stack
*
* Author: james.xu@intel.com Rossey.liu@intel.com
*
*/
#ifndef _OBJ_NVSTORE_H_
#define _OBJ_NVSTORE_H_
#ifdef TSS_BUILD_NV
#define MAX_PUBLIC_DATA_SIZE 1024
#define TSS_LOCALITY_MASK 0x1f
typedef struct objNV_DATA_PUBLIC
{
TPM_STRUCTURE_TAG tag;
TPM_NV_INDEX nvIndex;
TPM_NV_ATTRIBUTES permission;
TPM_BOOL bReadSTClear;
TPM_BOOL bWriteSTClear;
TPM_BOOL bWriteDefine;
UINT32 dataSize;
}NV_DATA_PUBLIC;
/* structures */
struct tr_nvstore_obj {
TPM_STRUCTURE_TAG tag;
TPM_NV_INDEX nvIndex;
TPM_NV_ATTRIBUTES permission;
TPM_BOOL bReadSTClear;
TPM_BOOL bWriteSTClear;
TPM_BOOL bWriteDefine;
UINT32 dataSize;
TSS_HPOLICY policy;
};
/* obj_nv.c */
void nvstore_free(void *data);
TSS_RESULT obj_nvstore_add(TSS_HCONTEXT, TSS_HOBJECT *);
TSS_BOOL obj_is_nvstore(TSS_HOBJECT tspContext);
TSS_RESULT obj_nvstore_remove(TSS_HOBJECT, TSS_HCONTEXT);
TSS_RESULT obj_nvstore_get_tsp_context(TSS_HNVSTORE, TSS_HCONTEXT *);
TSS_RESULT obj_nvstore_set_index(TSS_HNVSTORE, UINT32);
TSS_RESULT obj_nvstore_get_index(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_set_datasize(TSS_HNVSTORE, UINT32);
TSS_RESULT obj_nvstore_get_datasize(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_set_permission(TSS_HNVSTORE, UINT32);
TSS_RESULT obj_nvstore_get_permission_from_tpm(TSS_HNVSTORE hNvstore, UINT32 * permission);
TSS_RESULT obj_nvstore_get_permission(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_set_policy(TSS_HNVSTORE, TSS_HPOLICY);
TSS_RESULT obj_nvstore_get_policy(TSS_HNVSTORE, UINT32, TSS_HPOLICY *);
TSS_RESULT obj_nvstore_get_datapublic(TSS_HNVSTORE, UINT32 *, BYTE *);
TSS_RESULT obj_nvstore_get_readdigestatrelease(TSS_HNVSTORE, UINT32 *, BYTE **);
TSS_RESULT obj_nvstore_get_readpcrselection(TSS_HNVSTORE, UINT32 *, BYTE **);
TSS_RESULT obj_nvstore_get_writedigestatrelease(TSS_HNVSTORE, UINT32 *, BYTE **);
TSS_RESULT obj_nvstore_get_writepcrselection(TSS_HNVSTORE, UINT32 *, BYTE **);
TSS_RESULT obj_nvstore_get_state_readstclear(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_get_state_writedefine(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_get_state_writestclear(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_get_readlocalityatrelease(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_get_writelocalityatrelease(TSS_HNVSTORE, UINT32 *);
TSS_RESULT obj_nvstore_create_pcrshortinfo(TSS_HNVSTORE, TSS_HPCRS, UINT32 *, BYTE **);
#define NVSTORE_LIST_DECLARE struct obj_list nvstore_list
#define NVSTORE_LIST_DECLARE_EXTERN extern struct obj_list nvstore_list
#define NVSTORE_LIST_INIT() list_init(&nvstore_list)
#define NVSTORE_LIST_CONNECT(a,b) obj_connectContext_list(&nvstore_list, a, b)
#define NVSTORE_LIST_CLOSE(a) obj_list_close(&nvstore_list, &nvstore_free, a)
#else
#define NVSTORE_LIST_DECLARE
#define NVSTORE_LIST_DECLARE_EXTERN
#define NVSTORE_LIST_INIT()
#define NVSTORE_LIST_CONNECT(a,b)
#define NVSTORE_LIST_CLOSE(a)
#endif
#endif
|