Request missing SWID tags in a directed PA-TNC message
[strongswan.git] / src / libimcv / pts / pts_file_meas.h
1 /*
2 * Copyright (C) 2011 Sansar Choinyambuu
3 * Copyright (C) 2014 Andreas Steffen
4 * HSR Hochschule fuer Technik Rapperswil
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * for more details.
15 */
16
17 /**
18 * @defgroup pts_file_meas pts_file_meas
19 * @{ @ingroup pts
20 */
21
22 #ifndef PTS_FILE_MEAS_H_
23 #define PTS_FILE_MEAS_H_
24
25 #include "pts/pts_database.h"
26
27 #include <library.h>
28
29 typedef struct pts_file_meas_t pts_file_meas_t;
30
31 /**
32 * Class storing PTS File Measurements
33 */
34 struct pts_file_meas_t {
35
36 /**
37 * Get the ID of the PTS File Measurement Request
38 *
39 * @return ID of PTS File Measurement Request
40 */
41 u_int16_t (*get_request_id)(pts_file_meas_t *this);
42
43 /**
44 * Get the number of measured files
45 *
46 * @return Number of measured files
47 */
48 int (*get_file_count)(pts_file_meas_t *this);
49
50 /**
51 * Add a PTS File Measurement
52 *
53 * @param filename Name of measured file or directory
54 * @param measurement PTS Measurement hash
55 */
56 void (*add)(pts_file_meas_t *this, char *filename, chunk_t measurement);
57
58 /**
59 * Create a PTS File Measurement enumerator
60 *
61 * @return Enumerator returning filename and measurement
62 */
63 enumerator_t* (*create_enumerator)(pts_file_meas_t *this);
64
65 /**
66 * Check PTS File Measurements against reference value in the database
67 *
68 * @param db PTS Measurement database
69 * @param pid Primary key of software product in database
70 * @param algo PTS Measurement algorithm used
71 * @return TRUE if all measurements agreed
72 */
73 bool (*check)(pts_file_meas_t *this, pts_database_t *db, int pid,
74 pts_meas_algorithms_t algo);
75
76 /**
77 * Verify stored hashes against PTS File Measurements
78 *
79 * @param e_hash Hash enumerator
80 * @param is_dir TRUE for directory contents hashes
81 * @return TRUE if all hashes match a measurement
82 */
83 bool (*verify)(pts_file_meas_t *this, enumerator_t *e_hash, bool is_dir);
84
85 /**
86 * Destroys a pts_file_meas_t object.
87 */
88 void (*destroy)(pts_file_meas_t *this);
89
90 };
91
92 /**
93 * Creates a pts_file_meas_t object
94 *
95 * @param request_id ID of PTS File Measurement Request
96 */
97 pts_file_meas_t* pts_file_meas_create(u_int16_t request_id);
98
99 /**
100 * Creates a pts_file_meas_t object measuring a file/directory
101 *
102 * @param request_id ID of PTS File Measurement Request
103 * @param pathname Absolute file or directory pathname
104 * @param is_dir TRUE if directory path
105 * @param use_rel_name TRUE if relative filenames are to be used
106 * @param alg PTS hash measurement algorithm to be used
107 */
108 pts_file_meas_t* pts_file_meas_create_from_path(u_int16_t request_id,
109 char* pathname, bool is_dir, bool use_rel_name,
110 pts_meas_algorithms_t alg);
111
112 #endif /** PTS_FILE_MEAS_H_ @}*/