refactored simple component evidence
[strongswan.git] / src / libpts / pts / components / pts_comp_evidence.h
1 /*
2 * Copyright (C) 2011 Sansar Choinyambuu, 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_comp_evidence pts_comp_evidence
18 * @{ @ingroup pts
19 */
20
21 #ifndef PTS_COMP_EVIDENCE_H_
22 #define PTS_COMP_EVIDENCE_H_
23
24 typedef struct pts_comp_evidence_t pts_comp_evidence_t;
25 typedef enum pts_pcr_transform_t pts_pcr_transform_t;
26 typedef enum pts_comp_evid_validation_t pts_comp_evid_validation_t;
27
28 #include "pts/pts_meas_algo.h"
29 #include "pts/components/pts_comp_func_name.h"
30
31 #include <library.h>
32
33 /**
34 * PTS PCR Transformations
35 */
36 enum pts_pcr_transform_t {
37 /** No Transformation */
38 PTS_PCR_TRANSFORM_NO = 0,
39 /** Hash Value matched PCR size */
40 PTS_PCR_TRANSFORM_MATCH = 1,
41 /** Hash value shorter than PCR size */
42 PTS_PCR_TRANSFORM_SHORT = 2,
43 /** Hash value longer than PCR size */
44 PTS_PCR_TRANSFORM_LONG = 3,
45 };
46
47 /**
48 * PTS Component Evidence Validation Result Flags
49 */
50 enum pts_comp_evid_validation_t {
51 /** No Validation was attempted */
52 PTS_COMP_EVID_VALIDATION_NONE = 0x00,
53 /** Attempted validation, unable to verify */
54 PTS_COMP_EVID_VALIDATION_UNABLE = 0x20,
55 /** Attempted validation, verification failed */
56 PTS_COMP_EVID_VALIDATION_FAILED = 0x40,
57 /** Attempted validation, verification passed */
58 PTS_COMP_EVID_VALIDATION_PASSED = 0x60,
59 };
60
61 /**
62 * PTS Functional Component Interface
63 */
64 struct pts_comp_evidence_t {
65
66 /**
67 * Gets the Component Functional Name and Sub-Component Depth
68 *
69 * @param depth Sub-Component Depth
70 * @result Component Functional Name
71 */
72 pts_comp_func_name_t* (*get_comp_func_name)(pts_comp_evidence_t *this,
73 u_int32_t *depth);
74
75 /**
76 * Gets the PCR the measurement was extended into
77 *
78 * @result PCR the measurement was extended into
79 */
80 u_int32_t (*get_extended_pcr)(pts_comp_evidence_t *this);
81
82 /**
83 * Gets the measurement and the algorithms used
84 *
85 * @param extended_pcr PCR the measurement was extended into
86 * @param algo Measurement hash algorithm
87 * @param transform Transformation used for PCR extension
88 * @param measurement_time Time the measurement was taken
89 * @result Measurement hash value
90 */
91 chunk_t (*get_measurement)(pts_comp_evidence_t *this,
92 u_int32_t *extended_pcr,
93 pts_meas_algorithms_t *algo,
94 pts_pcr_transform_t *transform,
95 time_t *measurement_time);
96
97 /**
98 * Gets the PCR information if available
99 *
100 * @param pcr_before PCR value before extension
101 * @param pcr_after PCR value after extension
102 * @result TRUE if PCR information is available
103 */
104 bool (*get_pcr_info)(pts_comp_evidence_t *this, chunk_t *pcr_before,
105 chunk_t *pcr_after);
106
107 /**
108 * Sets PCR information if available
109 *
110 * @param pcr_before PCR value before extension
111 * @param pcr_after PCR value after extension
112 */
113 void (*set_pcr_info)(pts_comp_evidence_t *this, chunk_t pcr_before,
114 chunk_t pcr_after);
115
116 /**
117 * Gets Validation Result if available
118 *
119 * @param uri Verification Policy URI
120 * @return validation Validation Result
121 */
122 pts_comp_evid_validation_t (*get_validation)(pts_comp_evidence_t *this,
123 chunk_t *uri);
124
125 /**
126 * Sets Validation Result if available
127 *
128 * @param validation Validation Result
129 * @param uri Verification Policy URI
130 */
131 void (*set_validation)(pts_comp_evidence_t *this,
132 pts_comp_evid_validation_t validation, chunk_t uri);
133
134 /**
135 * Destroys a pts_comp_evidence_t object.
136 */
137 void (*destroy)(pts_comp_evidence_t *this);
138
139 };
140
141 /**
142 * Creates a pts_comp_evidence_t object
143 *
144 * @param name Component Functional Name
145 * @param depth Sub-component depth
146 * @param extended_pcr PCR the measurement was extended into
147 * @param algo Measurement hash algorithm
148 * @param transform Transformation used for PCR extension
149 * @param measurement_time Time the measurement was taken, 0 if unknown
150 * @param measurement Measurement hash value
151 */
152 pts_comp_evidence_t* pts_comp_evidence_create(pts_comp_func_name_t *name,
153 u_int32_t depth,
154 u_int32_t extended_pcr,
155 pts_meas_algorithms_t algo,
156 pts_pcr_transform_t transform,
157 time_t measurement_time,
158 chunk_t measurement);
159
160 #endif /** PTS_COMP_EVIDENCE_H_ @}*/