/src/strongswan/src/libimcv/tcg/tcg_attr.c
Line | Count | Source |
1 | | /* |
2 | | * Copyright (C) 2011-2022 Andreas Steffen |
3 | | * |
4 | | * Copyright (C) secunet Security Networks AG |
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 | | #include "tcg_attr.h" |
18 | | #include "tcg/pts/tcg_pts_attr_proto_caps.h" |
19 | | #include "tcg/pts/tcg_pts_attr_dh_nonce_params_req.h" |
20 | | #include "tcg/pts/tcg_pts_attr_dh_nonce_params_resp.h" |
21 | | #include "tcg/pts/tcg_pts_attr_dh_nonce_finish.h" |
22 | | #include "tcg/pts/tcg_pts_attr_meas_algo.h" |
23 | | #include "tcg/pts/tcg_pts_attr_get_tpm_version_info.h" |
24 | | #include "tcg/pts/tcg_pts_attr_tpm_version_info.h" |
25 | | #include "tcg/pts/tcg_pts_attr_get_aik.h" |
26 | | #include "tcg/pts/tcg_pts_attr_aik.h" |
27 | | #include "tcg/pts/tcg_pts_attr_req_func_comp_evid.h" |
28 | | #include "tcg/pts/tcg_pts_attr_gen_attest_evid.h" |
29 | | #include "tcg/pts/tcg_pts_attr_simple_comp_evid.h" |
30 | | #include "tcg/pts/tcg_pts_attr_simple_evid_final.h" |
31 | | #include "tcg/pts/tcg_pts_attr_req_file_meas.h" |
32 | | #include "tcg/pts/tcg_pts_attr_file_meas.h" |
33 | | #include "tcg/pts/tcg_pts_attr_req_file_meta.h" |
34 | | #include "tcg/pts/tcg_pts_attr_unix_file_meta.h" |
35 | | #include "tcg/seg/tcg_seg_attr_seg_contract.h" |
36 | | #include "tcg/seg/tcg_seg_attr_seg_env.h" |
37 | | #include "tcg/seg/tcg_seg_attr_next_seg.h" |
38 | | |
39 | | ENUM_BEGIN(tcg_attr_names, TCG_SCAP_REFERENCES, |
40 | | TCG_SCAP_SUMMARY_RESULTS, |
41 | | "SCAP References", |
42 | | "SCAP Capabilities and Inventory", |
43 | | "SCAP Content", |
44 | | "SCAP Assessment", |
45 | | "SCAP Results", |
46 | | "SCAP Summary Results"); |
47 | | ENUM_NEXT(tcg_attr_names, TCG_SWID_REQUEST, |
48 | | TCG_SWID_SUBSCRIPTION_STATUS_RESP, |
49 | | TCG_SCAP_SUMMARY_RESULTS, |
50 | | "SWID Request", |
51 | | "SWID Tag Identifier Inventory", |
52 | | "SWID Tag Identifier Events", |
53 | | "SWID Tag Inventory", |
54 | | "SWID Tag Events", |
55 | | "SWID Subscription Status Request", |
56 | | "SWID Subscription Status Response"); |
57 | | ENUM_NEXT(tcg_attr_names, TCG_SEG_CONTRACT_REQ, |
58 | | TCG_SEG_CONTRACT_EXEMPTION, |
59 | | TCG_SWID_SUBSCRIPTION_STATUS_RESP, |
60 | | "Segmentation Contract Request", |
61 | | "Segmentation Contract Response", |
62 | | "Segment Envelope", |
63 | | "Next Segment", |
64 | | "Cancel", |
65 | | "Oversized Message", |
66 | | "Contract Exemption"); |
67 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_FUNC_COMP_EVID, |
68 | | TCG_PTS_REQ_FUNC_COMP_EVID, |
69 | | TCG_SEG_CONTRACT_EXEMPTION, |
70 | | "Request Functional Component Evidence"); |
71 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_GEN_ATTEST_EVID, |
72 | | TCG_PTS_GEN_ATTEST_EVID, |
73 | | TCG_PTS_REQ_FUNC_COMP_EVID, |
74 | | "Generate Attestation Evidence"); |
75 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_SIMPLE_COMP_EVID, |
76 | | TCG_PTS_SIMPLE_COMP_EVID, |
77 | | TCG_PTS_GEN_ATTEST_EVID, |
78 | | "Simple Component Evidence"); |
79 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_SIMPLE_EVID_FINAL, |
80 | | TCG_PTS_SIMPLE_EVID_FINAL, |
81 | | TCG_PTS_SIMPLE_COMP_EVID, |
82 | | "Simple Evidence Final"); |
83 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_VERIFICATION_RESULT, |
84 | | TCG_PTS_VERIFICATION_RESULT, |
85 | | TCG_PTS_SIMPLE_EVID_FINAL, |
86 | | "Verification Result"); |
87 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_INTEG_REPORT, |
88 | | TCG_PTS_INTEG_REPORT, |
89 | | TCG_PTS_VERIFICATION_RESULT, |
90 | | "Integrity Report"); |
91 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_FILE_META, |
92 | | TCG_PTS_REQ_FILE_META, |
93 | | TCG_PTS_INTEG_REPORT, |
94 | | "Request File Metadata"); |
95 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_WIN_FILE_META, |
96 | | TCG_PTS_WIN_FILE_META, |
97 | | TCG_PTS_REQ_FILE_META, |
98 | | "Windows-Style File Metadata"); |
99 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_UNIX_FILE_META, |
100 | | TCG_PTS_UNIX_FILE_META, |
101 | | TCG_PTS_WIN_FILE_META, |
102 | | "Unix-Style File Metadata"); |
103 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_REGISTRY_VALUE, |
104 | | TCG_PTS_REQ_REGISTRY_VALUE, |
105 | | TCG_PTS_UNIX_FILE_META, |
106 | | "Request Registry Value"); |
107 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REGISTRY_VALUE, |
108 | | TCG_PTS_REGISTRY_VALUE, |
109 | | TCG_PTS_REQ_REGISTRY_VALUE, |
110 | | "Registry Value"); |
111 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_FILE_MEAS, |
112 | | TCG_PTS_REQ_FILE_MEAS, |
113 | | TCG_PTS_REGISTRY_VALUE, |
114 | | "Request File Measurement"); |
115 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_FILE_MEAS, |
116 | | TCG_PTS_FILE_MEAS, |
117 | | TCG_PTS_REQ_FILE_MEAS, |
118 | | "File Measurement"); |
119 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_INTEG_MEAS_LOG, |
120 | | TCG_PTS_REQ_INTEG_MEAS_LOG, |
121 | | TCG_PTS_FILE_MEAS, |
122 | | "Request Integrity Measurement Log"); |
123 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_INTEG_MEAS_LOG, |
124 | | TCG_PTS_INTEG_MEAS_LOG, |
125 | | TCG_PTS_REQ_INTEG_MEAS_LOG, |
126 | | "Integrity Measurement Log"); |
127 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_PROTO_CAPS, |
128 | | TCG_PTS_REQ_PROTO_CAPS, |
129 | | TCG_PTS_INTEG_MEAS_LOG, |
130 | | "Request PTS Protocol Capabilities"); |
131 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_PROTO_CAPS, |
132 | | TCG_PTS_PROTO_CAPS, |
133 | | TCG_PTS_REQ_PROTO_CAPS, |
134 | | "PTS Protocol Capabilities"); |
135 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_DH_NONCE_PARAMS_REQ, |
136 | | TCG_PTS_DH_NONCE_PARAMS_REQ, |
137 | | TCG_PTS_PROTO_CAPS, |
138 | | "DH Nonce Parameters Request"); |
139 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_DH_NONCE_PARAMS_RESP, |
140 | | TCG_PTS_DH_NONCE_PARAMS_RESP, |
141 | | TCG_PTS_DH_NONCE_PARAMS_REQ, |
142 | | "DH Nonce Parameters Response"); |
143 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_DH_NONCE_FINISH, |
144 | | TCG_PTS_DH_NONCE_FINISH, |
145 | | TCG_PTS_DH_NONCE_PARAMS_RESP, |
146 | | "DH Nonce Finish"); |
147 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_MEAS_ALGO, |
148 | | TCG_PTS_MEAS_ALGO, |
149 | | TCG_PTS_DH_NONCE_FINISH, |
150 | | "PTS Measurement Algorithm Request"); |
151 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_MEAS_ALGO_SELECTION, |
152 | | TCG_PTS_MEAS_ALGO_SELECTION, |
153 | | TCG_PTS_MEAS_ALGO, |
154 | | "PTS Measurement Algorithm"); |
155 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_GET_TPM_VERSION_INFO, |
156 | | TCG_PTS_GET_TPM_VERSION_INFO, |
157 | | TCG_PTS_MEAS_ALGO_SELECTION, |
158 | | "Get TPM Version Information"); |
159 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_TPM_VERSION_INFO, |
160 | | TCG_PTS_TPM_VERSION_INFO, |
161 | | TCG_PTS_GET_TPM_VERSION_INFO, |
162 | | "TPM Version Information"); |
163 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_REQ_TEMPL_REF_MANI_SET_META, |
164 | | TCG_PTS_REQ_TEMPL_REF_MANI_SET_META, |
165 | | TCG_PTS_TPM_VERSION_INFO, |
166 | | "Request Template Reference Manifest Set Metadata"); |
167 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_TEMPL_REF_MANI_SET_META, |
168 | | TCG_PTS_TEMPL_REF_MANI_SET_META, |
169 | | TCG_PTS_REQ_TEMPL_REF_MANI_SET_META, |
170 | | "Template Reference Manifest Set Metadata"); |
171 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_UPDATE_TEMPL_REF_MANI, |
172 | | TCG_PTS_UPDATE_TEMPL_REF_MANI, |
173 | | TCG_PTS_TEMPL_REF_MANI_SET_META, |
174 | | "Update Template Reference Manifest"); |
175 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_GET_AIK, |
176 | | TCG_PTS_GET_AIK, |
177 | | TCG_PTS_UPDATE_TEMPL_REF_MANI, |
178 | | "Get Attestation Identity Key"); |
179 | | ENUM_NEXT(tcg_attr_names, TCG_PTS_AIK, |
180 | | TCG_PTS_AIK, |
181 | | TCG_PTS_GET_AIK, |
182 | | "Attestation Identity Key"); |
183 | | ENUM_END(tcg_attr_names, TCG_PTS_AIK); |
184 | | |
185 | | /** |
186 | | * See header |
187 | | */ |
188 | | pa_tnc_attr_t* tcg_attr_create_from_data(uint32_t type, size_t length, chunk_t value) |
189 | 15.7k | { |
190 | 15.7k | switch (type) |
191 | 15.7k | { |
192 | 486 | case TCG_SEG_CONTRACT_REQ: |
193 | 486 | return tcg_seg_attr_seg_contract_create_from_data(length, value, TRUE); |
194 | 242 | case TCG_SEG_CONTRACT_RESP: |
195 | 242 | return tcg_seg_attr_seg_contract_create_from_data(length, value, FALSE); |
196 | 468 | case TCG_SEG_ENVELOPE: |
197 | 468 | return tcg_seg_attr_seg_env_create_from_data(length, value); |
198 | 315 | case TCG_SEG_NEXT_SEGMENT: |
199 | 315 | return tcg_seg_attr_next_seg_create_from_data(length, value); |
200 | 276 | case TCG_PTS_REQ_PROTO_CAPS: |
201 | 276 | return tcg_pts_attr_proto_caps_create_from_data(length, value, |
202 | 276 | TRUE); |
203 | 223 | case TCG_PTS_PROTO_CAPS: |
204 | 223 | return tcg_pts_attr_proto_caps_create_from_data(length, value, |
205 | 223 | FALSE); |
206 | 443 | case TCG_PTS_DH_NONCE_PARAMS_REQ: |
207 | 443 | return tcg_pts_attr_dh_nonce_params_req_create_from_data(length, |
208 | 443 | value); |
209 | 668 | case TCG_PTS_DH_NONCE_PARAMS_RESP: |
210 | 668 | return tcg_pts_attr_dh_nonce_params_resp_create_from_data(length, |
211 | 668 | value); |
212 | 952 | case TCG_PTS_DH_NONCE_FINISH: |
213 | 952 | return tcg_pts_attr_dh_nonce_finish_create_from_data(length, value); |
214 | 208 | case TCG_PTS_MEAS_ALGO: |
215 | 208 | return tcg_pts_attr_meas_algo_create_from_data(length, value, |
216 | 208 | FALSE); |
217 | 323 | case TCG_PTS_MEAS_ALGO_SELECTION: |
218 | 323 | return tcg_pts_attr_meas_algo_create_from_data(length, value, |
219 | 323 | TRUE); |
220 | 327 | case TCG_PTS_GET_TPM_VERSION_INFO: |
221 | 327 | return tcg_pts_attr_get_tpm_version_info_create_from_data(length, |
222 | 327 | value); |
223 | 395 | case TCG_PTS_TPM_VERSION_INFO: |
224 | 395 | return tcg_pts_attr_tpm_version_info_create_from_data(length, |
225 | 395 | value); |
226 | 306 | case TCG_PTS_GET_AIK: |
227 | 306 | return tcg_pts_attr_get_aik_create_from_data(length, value); |
228 | 37 | case TCG_PTS_AIK: |
229 | 37 | return tcg_pts_attr_aik_create_from_data(length, value); |
230 | 481 | case TCG_PTS_REQ_FUNC_COMP_EVID: |
231 | 481 | return tcg_pts_attr_req_func_comp_evid_create_from_data(length, |
232 | 481 | value); |
233 | 467 | case TCG_PTS_GEN_ATTEST_EVID: |
234 | 467 | return tcg_pts_attr_gen_attest_evid_create_from_data(length, value); |
235 | 3.01k | case TCG_PTS_SIMPLE_COMP_EVID: |
236 | 3.01k | return tcg_pts_attr_simple_comp_evid_create_from_data(length, |
237 | 3.01k | value); |
238 | 2.98k | case TCG_PTS_SIMPLE_EVID_FINAL: |
239 | 2.98k | return tcg_pts_attr_simple_evid_final_create_from_data(length, |
240 | 2.98k | value); |
241 | 352 | case TCG_PTS_REQ_FILE_MEAS: |
242 | 352 | return tcg_pts_attr_req_file_meas_create_from_data(length, value); |
243 | 722 | case TCG_PTS_FILE_MEAS: |
244 | 722 | return tcg_pts_attr_file_meas_create_from_data(length, value); |
245 | 323 | case TCG_PTS_REQ_FILE_META: |
246 | 323 | return tcg_pts_attr_req_file_meta_create_from_data(length, value); |
247 | 618 | case TCG_PTS_UNIX_FILE_META: |
248 | 618 | return tcg_pts_attr_unix_file_meta_create_from_data(length, value); |
249 | | /* unsupported TCG/SWID attributes */ |
250 | 0 | case TCG_SWID_REQUEST: |
251 | 0 | case TCG_SWID_TAG_ID_INVENTORY: |
252 | 0 | case TCG_SWID_TAG_INVENTORY: |
253 | 0 | case TCG_SWID_TAG_ID_EVENTS: |
254 | 0 | case TCG_SWID_TAG_EVENTS: |
255 | 0 | case TCG_SWID_SUBSCRIPTION_STATUS_REQ: |
256 | 0 | case TCG_SWID_SUBSCRIPTION_STATUS_RESP: |
257 | | /* unsupported TCG/PTS attributes */ |
258 | 0 | case TCG_PTS_REQ_TEMPL_REF_MANI_SET_META: |
259 | 0 | case TCG_PTS_TEMPL_REF_MANI_SET_META: |
260 | 0 | case TCG_PTS_UPDATE_TEMPL_REF_MANI: |
261 | 1 | case TCG_PTS_VERIFICATION_RESULT: |
262 | 1 | case TCG_PTS_INTEG_REPORT: |
263 | 2 | case TCG_PTS_WIN_FILE_META: |
264 | 2 | case TCG_PTS_REQ_REGISTRY_VALUE: |
265 | 2 | case TCG_PTS_REGISTRY_VALUE: |
266 | 2 | case TCG_PTS_REQ_INTEG_MEAS_LOG: |
267 | 2 | case TCG_PTS_INTEG_MEAS_LOG: |
268 | 1.06k | default: |
269 | | return NULL; |
270 | 15.7k | } |
271 | 15.7k | } |