Annotation of embedaddon/strongswan/src/libimcv/pts/pts_database.h, revision 1.1.1.1
1.1 misho 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 pts_database pts_database
18: * @{ @ingroup pts
19: */
20:
21: #ifndef PTS_DATABASE_H_
22: #define PTS_DATABASE_H_
23:
24: typedef struct pts_database_t pts_database_t;
25:
26: #include "pts_meas_algo.h"
27: #include "components/pts_comp_func_name.h"
28:
29: #include <imv/imv_database.h>
30: #include <library.h>
31:
32: /**
33: * Class implementing the PTS File Measurement database
34: *
35: */
36: struct pts_database_t {
37:
38: /**
39: * Get absolute pathname for file or directory measurement
40: *
41: * @param is_dir TRUE if dir, FALSE if file
42: * @param id Primary key into directories or files table
43: * @return Absolute pathname as a text string
44: */
45: char* (*get_pathname)(pts_database_t *this, bool is_dir, int id);
46:
47: /**
48: * Get stored measurement hash for single file or directory entries
49: *
50: * @param pid Primary key of software product in database
51: * @param algo Hash algorithm used for measurement
52: * @param is_dir TRUE if directory was measured
53: * @param id Primary key of measured file/directory
54: * @return Enumerator over all matching measurement hashes
55: */
56: enumerator_t* (*create_file_hash_enumerator)(pts_database_t *this,
57: int pid, pts_meas_algorithms_t algo,
58: bool is_dir, int id);
59:
60: /**
61: * Add PTS file measurement reference value
62: *
63: * @param pid Primary key of platform product
64: * @param vid Primary key of generic product version
65: * @return TRUE if successful
66: */
67: bool (*get_product_version)(pts_database_t *this, int pid, int *vid);
68:
69: /**
70: * Add PTS file measurement reference value
71: *
72: * @param vid Primary key of generic product version
73: * @param algo File measurement hash algorithm used
74: * @param measurement File measurement hash
75: * @param filename Optional name of the file to be checked
76: * @param is_dir TRUE if part of directory measurement
77: * @param id Primary key into directories/files table
78: * @return TRUE if successful
79: */
80: bool (*add_file_measurement)(pts_database_t *this, int vid,
81: pts_meas_algorithms_t algo,
82: chunk_t measurement, char *filename,
83: bool is_dir, int id);
84:
85: /**
86: * Get PTS measurement[s] for a given filename stored in database
87: *
88: * @param pid Primary key of software product in database
89: * @param algo File measurement hash algorithm used
90: * @param filename Name of the file to be checked
91: * @return Enumerator over all matching measurement hashes
92: */
93: enumerator_t* (*create_file_meas_enumerator)(pts_database_t *this, int pid,
94: pts_meas_algorithms_t algo,
95: char *filename);
96:
97: /**
98: * Check a functional component measurement against value stored in database
99: *
100: * @param measurement measurement hash
101: * @param cid Primary key of Component Functional Name entry
102: * @param aik_id Primary key of AIK entry in database
103: * @param seq_no Measurement sequence number
104: * @param prc Number of the PCR the measurement was extended into
105: * @param algo Hash algorithm used for measurement
106: * @return SUCCESS if check was successful
107: */
108: status_t (*check_comp_measurement)(pts_database_t *this, chunk_t measurement,
109: int cid, int aik_id, int seq_no, int pcr,
110: pts_meas_algorithms_t algo);
111:
112: /**
113: * Insert a functional component measurement into the database
114: *
115: * @param measurement Measurement hash
116: * @param cid Primary key of Component Functional Name entry
117: * @param aik_id Primary key of AIK entry in database
118: * @param seq_no Measurement sequence number
119: * @param prc Number of the PCR the measurement was extended into
120: * @param algo Hash algorithm used for measurement
121: * @return SUCCESS if INSERT was successful
122: */
123: status_t (*insert_comp_measurement)(pts_database_t *this, chunk_t measurement,
124: int cid, int aik_id, int seq_no, int pcr,
125: pts_meas_algorithms_t algo);
126:
127: /**
128: * Delete functional component measurements from the database
129: *
130: * @param cid Primary key of Component Functional Name entry
131: * @param aik_id Primary key of AIK entry in database
132: * @return number of deleted measurement entries
133: */
134: int (*delete_comp_measurements)(pts_database_t *this, int cid, int aik_id);
135:
136: /**
137: * Get the number of measurements for a functional component and AIK
138: *
139: * @param comp_name Component Functional Name
140: * @param aik_id Primary key of AIK entry in database
141: * @param algo Hash algorithm used for measurement
142: * @param cid Primary key of Component Functional Name entry
143: * @param count measurement count
144: * @return SUCCESS if COUNT was successful
145: */
146: status_t (*get_comp_measurement_count)(pts_database_t *this,
147: pts_comp_func_name_t *comp_name, int aik_id,
148: pts_meas_algorithms_t algo, int *cid, int *count);
149:
150: /**
151: * Destroys a pts_database_t object.
152: */
153: void (*destroy)(pts_database_t *this);
154:
155: };
156:
157: /**
158: * Creates an pts_database_t object
159: *
160: * @param imv_db Already attached IMV database
161: */
162: pts_database_t* pts_database_create(imv_database_t *imv_db);
163:
164: #endif /** PTS_DATABASE_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>