ikev1: Handle queued TRANSACTION messages only after processing replies
[strongswan.git] / src / libimcv / plugins / imv_attestation / attest_db.h
1 /*
2 * Copyright (C) 2011-2014 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup attest_db_t attest_db
18 * @{ @ingroup libimcv
19 */
20
21 #ifndef ATTEST_DB_H_
22 #define ATTEST_DB_H_
23
24 #include <pts/pts_meas_algo.h>
25 #include <os_info/os_info.h>
26 #include <library.h>
27
28 typedef struct attest_db_t attest_db_t;
29
30 /**
31 * Attestation database object
32 */
33 struct attest_db_t {
34
35 /**
36 * Set functional component to be queried
37 *
38 * @param comp functional component
39 * @param create if TRUE create database entry if it doesn't exist
40 * @return TRUE if successful
41 */
42 bool (*set_component)(attest_db_t *this, char *comp, bool create);
43
44 /**
45 * Set primary key of the functional component to be queried
46 *
47 * @param fid primary key of functional component
48 * @return TRUE if successful
49 */
50 bool (*set_cid)(attest_db_t *this, int fid);
51
52 /**
53 * Set directory to be queried
54 *
55 * @param dir directory
56 * @param create if TRUE create database entry if it doesn't exist
57 * @return TRUE if successful
58 */
59 bool (*set_directory)(attest_db_t *this, char *dir, bool create);
60
61 /**
62 * Set primary key of the directory to be queried
63 *
64 * @param did primary key of directory
65 * @return TRUE if successful
66 */
67 bool (*set_did)(attest_db_t *this, int did);
68
69 /**
70 * Set measurement file to be queried
71 *
72 * @param file measurement file
73 * @param create if TRUE create database entry if it doesn't exist
74 * @return TRUE if successful
75 */
76 bool (*set_file)(attest_db_t *this, char *file, bool create);
77
78 /**
79 * Set primary key of the measurement file to be queried
80 *
81 * @param fid primary key of measurement file
82 * @return TRUE if successful
83 */
84 bool (*set_fid)(attest_db_t *this, int fid);
85
86 /**
87 * Set path to directory where file[s] are to be measured
88 *
89 * @param meas_dir measurement directory
90 * @return TRUE if successful
91 */
92 bool (*set_meas_directory)(attest_db_t *this, char *dir);
93
94 /**
95 * Set functional component to be queried
96 *
97 * @param key AIK
98 * @param create if TRUE create database entry if it doesn't exist
99 * @return TRUE if successful
100 */
101 bool (*set_key)(attest_db_t *this, chunk_t key, bool create);
102
103 /**
104 * Set primary key of the AIK to be queried
105 *
106 * @param kid primary key of AIK
107 * @return TRUE if successful
108 */
109 bool (*set_kid)(attest_db_t *this, int kid);
110
111 /**
112 * Set software package to be queried
113 *
114 * @param product software package
115 * @param create if TRUE create database entry if it doesn't exist
116 * @return TRUE if successful
117 */
118 bool (*set_package)(attest_db_t *this, char *package, bool create);
119
120 /**
121 * Set primary key of the software package to be queried
122 *
123 * @param gid primary key of software package
124 * @return TRUE if successful
125 */
126 bool (*set_gid)(attest_db_t *this, int gid);
127
128 /**
129 * Set software product to be queried
130 *
131 * @param product software product
132 * @param create if TRUE create database entry if it doesn't exist
133 * @return TRUE if successful
134 */
135 bool (*set_product)(attest_db_t *this, char *product, bool create);
136
137 /**
138 * Set primary key of the software product to be queried
139 *
140 * @param pid primary key of software product
141 * @return TRUE if successful
142 */
143 bool (*set_pid)(attest_db_t *this, int pid);
144
145 /**
146 * Set software package version to be queried
147 *
148 * @param version software package version
149 * @return TRUE if successful
150 */
151 bool (*set_version)(attest_db_t *this, char *version);
152
153 /**
154 * Set measurement hash algorithm
155 *
156 * @param algo hash algorithm
157 */
158 void (*set_algo)(attest_db_t *this, pts_meas_algorithms_t algo);
159
160 /**
161 * Set that the IMA-specific SHA-1 template hash be computed
162 */
163 void (*set_ima)(attest_db_t *this);
164
165 /**
166 * Set that relative filenames are to be used
167 */
168 void (*set_relative)(attest_db_t *this);
169
170 /**
171 * Set the package security or blacklist state
172 */
173 void (*set_package_state)(attest_db_t *this, os_package_state_t package_state);
174
175 /**
176 * Set the sequence number
177 */
178 void (*set_sequence)(attest_db_t *this, int seq_no);
179
180 /**
181 * Set owner [user/host] of an AIK
182 *
183 * @param owner user/host name
184 * @return TRUE if successful
185 */
186 void (*set_owner)(attest_db_t *this, char *owner);
187
188 /**
189 * Display all dates in UTC
190 */
191 void (*set_utc)(attest_db_t *this);
192
193 /**
194 * List all packages stored in the database
195 */
196 void (*list_packages)(attest_db_t *this);
197
198 /**
199 * List all products stored in the database
200 */
201 void (*list_products)(attest_db_t *this);
202
203 /**
204 * List all directories stored in the database
205 */
206 void (*list_directories)(attest_db_t *this);
207
208 /**
209 * List selected files stored in the database
210 */
211 void (*list_files)(attest_db_t *this);
212
213 /**
214 * List all components stored in the database
215 */
216 void (*list_components)(attest_db_t *this);
217
218 /**
219 * List all devices stored in the database
220 */
221 void (*list_devices)(attest_db_t *this);
222
223 /**
224 * List all AIKs stored in the database
225 */
226 void (*list_keys)(attest_db_t *this);
227
228 /**
229 * List selected measurement hashes stored in the database
230 */
231 void (*list_hashes)(attest_db_t *this);
232
233 /**
234 * List selected component measurement stored in the database
235 */
236 void (*list_measurements)(attest_db_t *this);
237
238 /**
239 * List sessions stored in the database
240 */
241 void (*list_sessions)(attest_db_t *this);
242
243 /**
244 * Add an entry to the database
245 */
246 bool (*add)(attest_db_t *this);
247
248 /**
249 * Delete an entry from the database
250 */
251 bool (*delete)(attest_db_t *this);
252
253 /**
254 * Destroy attest_db_t object
255 */
256 void (*destroy)(attest_db_t *this);
257
258 };
259
260 /**
261 * Create an attest_db_t instance
262 *
263 * @param uri database URI
264 */
265 attest_db_t* attest_db_create(char *uri);
266
267 #endif /** ATTEST_DB_H_ @}*/