Coverage Report

Created: 2026-09-03 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}