Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/ts/ts_rsp_verify.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | - | |||||||||||||||||||
3 | static int ts_verify_cert(X509_STORE *store, struct stack_st_X509 *untrusted, | - | ||||||||||||||||||
4 | X509 *signer, struct stack_st_X509 **chain); | - | ||||||||||||||||||
5 | static int ts_check_signing_certs(PKCS7_SIGNER_INFO *si, | - | ||||||||||||||||||
6 | struct stack_st_X509 *chain); | - | ||||||||||||||||||
7 | static ESS_SIGNING_CERT *ess_get_signing_cert(PKCS7_SIGNER_INFO *si); | - | ||||||||||||||||||
8 | static int ts_find_cert(struct stack_st_ESS_CERT_ID *cert_ids, X509 *cert); | - | ||||||||||||||||||
9 | static int ts_issuer_serial_cmp(ESS_ISSUER_SERIAL *is, X509 *cert); | - | ||||||||||||||||||
10 | static int int_ts_RESP_verify_token(TS_VERIFY_CTX *ctx, | - | ||||||||||||||||||
11 | PKCS7 *token, TS_TST_INFO *tst_info); | - | ||||||||||||||||||
12 | static int ts_check_status_info(TS_RESP *response); | - | ||||||||||||||||||
13 | static char *ts_get_status_text(struct stack_st_ASN1_UTF8STRING *text); | - | ||||||||||||||||||
14 | static int ts_check_policy(const ASN1_OBJECT *req_oid, | - | ||||||||||||||||||
15 | const TS_TST_INFO *tst_info); | - | ||||||||||||||||||
16 | static int ts_compute_imprint(BIO *data, TS_TST_INFO *tst_info, | - | ||||||||||||||||||
17 | X509_ALGOR **md_alg, | - | ||||||||||||||||||
18 | unsigned char **imprint, unsigned *imprint_len); | - | ||||||||||||||||||
19 | static int ts_check_imprints(X509_ALGOR *algor_a, | - | ||||||||||||||||||
20 | const unsigned char *imprint_a, unsigned len_a, | - | ||||||||||||||||||
21 | TS_TST_INFO *tst_info); | - | ||||||||||||||||||
22 | static int ts_check_nonces(const ASN1_INTEGER *a, TS_TST_INFO *tst_info); | - | ||||||||||||||||||
23 | static int ts_check_signer_name(GENERAL_NAME *tsa_name, X509 *signer); | - | ||||||||||||||||||
24 | static int ts_find_name(struct stack_st_GENERAL_NAME *gen_names, | - | ||||||||||||||||||
25 | GENERAL_NAME *name); | - | ||||||||||||||||||
26 | static int ts_find_cert_v2(struct stack_st_ESS_CERT_ID_V2 *cert_ids, X509 *cert); | - | ||||||||||||||||||
27 | static ESS_SIGNING_CERT_V2 *ess_get_signing_cert_v2(PKCS7_SIGNER_INFO *si); | - | ||||||||||||||||||
28 | static const char *ts_status_text[] = { | - | ||||||||||||||||||
29 | "granted", | - | ||||||||||||||||||
30 | "grantedWithMods", | - | ||||||||||||||||||
31 | "rejection", | - | ||||||||||||||||||
32 | "waiting", | - | ||||||||||||||||||
33 | "revocationWarning", | - | ||||||||||||||||||
34 | "revocationNotification" | - | ||||||||||||||||||
35 | }; | - | ||||||||||||||||||
36 | - | |||||||||||||||||||
37 | - | |||||||||||||||||||
38 | - | |||||||||||||||||||
39 | static struct { | - | ||||||||||||||||||
40 | int code; | - | ||||||||||||||||||
41 | const char *text; | - | ||||||||||||||||||
42 | } ts_failure_info[] = { | - | ||||||||||||||||||
43 | {0, "badAlg"}, | - | ||||||||||||||||||
44 | {2, "badRequest"}, | - | ||||||||||||||||||
45 | {5, "badDataFormat"}, | - | ||||||||||||||||||
46 | {14, "timeNotAvailable"}, | - | ||||||||||||||||||
47 | {15, "unacceptedPolicy"}, | - | ||||||||||||||||||
48 | {16, "unacceptedExtension"}, | - | ||||||||||||||||||
49 | {17, "addInfoNotAvailable"}, | - | ||||||||||||||||||
50 | {25, "systemFailure"} | - | ||||||||||||||||||
51 | }; | - | ||||||||||||||||||
52 | int TS_RESP_verify_signature(PKCS7 *token, struct stack_st_X509 *certs, | - | ||||||||||||||||||
53 | X509_STORE *store, X509 **signer_out) | - | ||||||||||||||||||
54 | { | - | ||||||||||||||||||
55 | struct stack_st_PKCS7_SIGNER_INFO *sinfos = | - | ||||||||||||||||||
56 | ((void *)0) | - | ||||||||||||||||||
57 | ; | - | ||||||||||||||||||
58 | PKCS7_SIGNER_INFO *si; | - | ||||||||||||||||||
59 | struct stack_st_X509 *signers = | - | ||||||||||||||||||
60 | ((void *)0) | - | ||||||||||||||||||
61 | ; | - | ||||||||||||||||||
62 | X509 *signer; | - | ||||||||||||||||||
63 | struct stack_st_X509 *chain = | - | ||||||||||||||||||
64 | ((void *)0) | - | ||||||||||||||||||
65 | ; | - | ||||||||||||||||||
66 | char buf[4096]; | - | ||||||||||||||||||
67 | int i, j = 0, ret = 0; | - | ||||||||||||||||||
68 | BIO *p7bio = | - | ||||||||||||||||||
69 | ((void *)0) | - | ||||||||||||||||||
70 | ; | - | ||||||||||||||||||
71 | - | |||||||||||||||||||
72 | - | |||||||||||||||||||
73 | if (!token
| 0 | ||||||||||||||||||
74 | ERR_put_error(47,(106),(102),__FILE__,104); | - | ||||||||||||||||||
75 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
76 | } | - | ||||||||||||||||||
77 | if (!(OBJ_obj2nid((token)->type) == 22)
| 0 | ||||||||||||||||||
78 | ERR_put_error(47,(106),(114),__FILE__,108); | - | ||||||||||||||||||
79 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
80 | } | - | ||||||||||||||||||
81 | sinfos = PKCS7_get_signer_info(token); | - | ||||||||||||||||||
82 | if (!sinfos
| 0 | ||||||||||||||||||
83 | ERR_put_error(47,(106),(110),__FILE__,113); | - | ||||||||||||||||||
84 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
85 | } | - | ||||||||||||||||||
86 | si = sk_PKCS7_SIGNER_INFO_value(sinfos, 0); | - | ||||||||||||||||||
87 | if (PKCS7_ctrl(token,2,0,
| 0 | ||||||||||||||||||
88 | ((void *)0)
| 0 | ||||||||||||||||||
89 | )
| 0 | ||||||||||||||||||
90 | ERR_put_error(47,(106),(106),__FILE__,118); | - | ||||||||||||||||||
91 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
92 | } | - | ||||||||||||||||||
93 | - | |||||||||||||||||||
94 | - | |||||||||||||||||||
95 | - | |||||||||||||||||||
96 | - | |||||||||||||||||||
97 | - | |||||||||||||||||||
98 | signers = PKCS7_get0_signers(token, certs, 0); | - | ||||||||||||||||||
99 | if (!signers
| 0 | ||||||||||||||||||
100 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
101 | signer = sk_X509_value(signers, 0); | - | ||||||||||||||||||
102 | - | |||||||||||||||||||
103 | if (!ts_verify_cert(store, certs, signer, &chain)
| 0 | ||||||||||||||||||
104 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
105 | if (!ts_check_signing_certs(si, chain)
| 0 | ||||||||||||||||||
106 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
107 | p7bio = PKCS7_dataInit(token, | - | ||||||||||||||||||
108 | ((void *)0) | - | ||||||||||||||||||
109 | ); | - | ||||||||||||||||||
110 | - | |||||||||||||||||||
111 | - | |||||||||||||||||||
112 | while ((
| 0 | ||||||||||||||||||
113 | continue; never executed: continue; | 0 | ||||||||||||||||||
114 | - | |||||||||||||||||||
115 | j = PKCS7_signatureVerify(p7bio, token, si, signer); | - | ||||||||||||||||||
116 | if (j <= 0
| 0 | ||||||||||||||||||
117 | ERR_put_error(47,(106),(109),__FILE__,143); | - | ||||||||||||||||||
118 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
119 | } | - | ||||||||||||||||||
120 | - | |||||||||||||||||||
121 | if (signer_out
| 0 | ||||||||||||||||||
122 | *signer_out = signer; | - | ||||||||||||||||||
123 | X509_up_ref(signer); | - | ||||||||||||||||||
124 | } never executed: end of block | 0 | ||||||||||||||||||
125 | ret = 1; | - | ||||||||||||||||||
126 | - | |||||||||||||||||||
127 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
128 | BIO_free_all(p7bio); | - | ||||||||||||||||||
129 | sk_X509_pop_free(chain, X509_free); | - | ||||||||||||||||||
130 | sk_X509_free(signers); | - | ||||||||||||||||||
131 | - | |||||||||||||||||||
132 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
133 | } | - | ||||||||||||||||||
134 | - | |||||||||||||||||||
135 | - | |||||||||||||||||||
136 | - | |||||||||||||||||||
137 | - | |||||||||||||||||||
138 | - | |||||||||||||||||||
139 | static int ts_verify_cert(X509_STORE *store, struct stack_st_X509 *untrusted, | - | ||||||||||||||||||
140 | X509 *signer, struct stack_st_X509 **chain) | - | ||||||||||||||||||
141 | { | - | ||||||||||||||||||
142 | X509_STORE_CTX *cert_ctx = | - | ||||||||||||||||||
143 | ((void *)0) | - | ||||||||||||||||||
144 | ; | - | ||||||||||||||||||
145 | int i; | - | ||||||||||||||||||
146 | int ret = 0; | - | ||||||||||||||||||
147 | - | |||||||||||||||||||
148 | *chain = | - | ||||||||||||||||||
149 | ((void *)0) | - | ||||||||||||||||||
150 | ; | - | ||||||||||||||||||
151 | cert_ctx = X509_STORE_CTX_new(); | - | ||||||||||||||||||
152 | if (cert_ctx ==
| 0 | ||||||||||||||||||
153 | ((void *)0)
| 0 | ||||||||||||||||||
154 | ) { | - | ||||||||||||||||||
155 | ERR_put_error(47,(109),((1|64)),__FILE__,175); | - | ||||||||||||||||||
156 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
157 | } | - | ||||||||||||||||||
158 | if (!X509_STORE_CTX_init(cert_ctx, store, signer, untrusted)
| 0 | ||||||||||||||||||
159 | goto never executed: end;goto end; never executed: goto end; | 0 | ||||||||||||||||||
160 | X509_STORE_CTX_set_purpose(cert_ctx, 9); | - | ||||||||||||||||||
161 | i = X509_verify_cert(cert_ctx); | - | ||||||||||||||||||
162 | if (i <= 0
| 0 | ||||||||||||||||||
163 | int j = X509_STORE_CTX_get_error(cert_ctx); | - | ||||||||||||||||||
164 | ERR_put_error(47,(109),(100),__FILE__,184); | - | ||||||||||||||||||
165 | ERR_add_error_data(2, "Verify error:", | - | ||||||||||||||||||
166 | X509_verify_cert_error_string(j)); | - | ||||||||||||||||||
167 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
168 | } | - | ||||||||||||||||||
169 | *chain = X509_STORE_CTX_get1_chain(cert_ctx); | - | ||||||||||||||||||
170 | ret = 1; | - | ||||||||||||||||||
171 | goto never executed: end;goto end; never executed: goto end; | 0 | ||||||||||||||||||
172 | - | |||||||||||||||||||
173 | err: | - | ||||||||||||||||||
174 | ret = 0; | - | ||||||||||||||||||
175 | - | |||||||||||||||||||
176 | end: code before this statement never executed: end: | 0 | ||||||||||||||||||
177 | X509_STORE_CTX_free(cert_ctx); | - | ||||||||||||||||||
178 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
179 | } | - | ||||||||||||||||||
180 | - | |||||||||||||||||||
181 | static int ts_check_signing_certs(PKCS7_SIGNER_INFO *si, | - | ||||||||||||||||||
182 | struct stack_st_X509 *chain) | - | ||||||||||||||||||
183 | { | - | ||||||||||||||||||
184 | ESS_SIGNING_CERT *ss = ess_get_signing_cert(si); | - | ||||||||||||||||||
185 | struct stack_st_ESS_CERT_ID *cert_ids = | - | ||||||||||||||||||
186 | ((void *)0) | - | ||||||||||||||||||
187 | ; | - | ||||||||||||||||||
188 | ESS_SIGNING_CERT_V2 *ssv2 = ess_get_signing_cert_v2(si); | - | ||||||||||||||||||
189 | struct stack_st_ESS_CERT_ID_V2 *cert_ids_v2 = | - | ||||||||||||||||||
190 | ((void *)0) | - | ||||||||||||||||||
191 | ; | - | ||||||||||||||||||
192 | X509 *cert; | - | ||||||||||||||||||
193 | int i = 0; | - | ||||||||||||||||||
194 | int ret = 0; | - | ||||||||||||||||||
195 | - | |||||||||||||||||||
196 | if (ss !=
| 0 | ||||||||||||||||||
197 | ((void *)0)
| 0 | ||||||||||||||||||
198 | ) { | - | ||||||||||||||||||
199 | cert_ids = ss->cert_ids; | - | ||||||||||||||||||
200 | cert = sk_X509_value(chain, 0); | - | ||||||||||||||||||
201 | if (ts_find_cert(cert_ids, cert) != 0
| 0 | ||||||||||||||||||
202 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
203 | - | |||||||||||||||||||
204 | - | |||||||||||||||||||
205 | - | |||||||||||||||||||
206 | - | |||||||||||||||||||
207 | - | |||||||||||||||||||
208 | if (sk_ESS_CERT_ID_num(cert_ids) > 1
| 0 | ||||||||||||||||||
209 | for (i = 1; i < sk_X509_num(chain)
| 0 | ||||||||||||||||||
210 | cert = sk_X509_value(chain, i); | - | ||||||||||||||||||
211 | if (ts_find_cert(cert_ids, cert) < 0
| 0 | ||||||||||||||||||
212 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
213 | } never executed: end of block | 0 | ||||||||||||||||||
214 | } never executed: end of block | 0 | ||||||||||||||||||
215 | } never executed: else if (ssv2 != end of block
| 0 | ||||||||||||||||||
216 | ((void *)0)
| 0 | ||||||||||||||||||
217 | ) { | - | ||||||||||||||||||
218 | cert_ids_v2 = ssv2->cert_ids; | - | ||||||||||||||||||
219 | cert = sk_X509_value(chain, 0); | - | ||||||||||||||||||
220 | if (ts_find_cert_v2(cert_ids_v2, cert) != 0
| 0 | ||||||||||||||||||
221 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
222 | - | |||||||||||||||||||
223 | - | |||||||||||||||||||
224 | - | |||||||||||||||||||
225 | - | |||||||||||||||||||
226 | - | |||||||||||||||||||
227 | if (sk_ESS_CERT_ID_V2_num(cert_ids_v2) > 1
| 0 | ||||||||||||||||||
228 | for (i = 1; i < sk_X509_num(chain)
| 0 | ||||||||||||||||||
229 | cert = sk_X509_value(chain, i); | - | ||||||||||||||||||
230 | if (ts_find_cert_v2(cert_ids_v2, cert) < 0
| 0 | ||||||||||||||||||
231 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
232 | } never executed: end of block | 0 | ||||||||||||||||||
233 | } never executed: end of block | 0 | ||||||||||||||||||
234 | } never executed: else {end of block | 0 | ||||||||||||||||||
235 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
236 | } | - | ||||||||||||||||||
237 | - | |||||||||||||||||||
238 | ret = 1; | - | ||||||||||||||||||
239 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
240 | if (!ret
| 0 | ||||||||||||||||||
241 | ERR_put_error(47,(103),(101),__FILE__,254) never executed: ERR_put_error(47,(103),(101),__FILE__,254) ; | 0 | ||||||||||||||||||
242 | ; never executed: ERR_put_error(47,(103),(101),__FILE__,254) ; | 0 | ||||||||||||||||||
243 | ESS_SIGNING_CERT_free(ss); | - | ||||||||||||||||||
244 | ESS_SIGNING_CERT_V2_free(ssv2); | - | ||||||||||||||||||
245 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
246 | } | - | ||||||||||||||||||
247 | - | |||||||||||||||||||
248 | static ESS_SIGNING_CERT *ess_get_signing_cert(PKCS7_SIGNER_INFO *si) | - | ||||||||||||||||||
249 | { | - | ||||||||||||||||||
250 | ASN1_TYPE *attr; | - | ||||||||||||||||||
251 | const unsigned char *p; | - | ||||||||||||||||||
252 | attr = PKCS7_get_signed_attribute(si, 223); | - | ||||||||||||||||||
253 | if (!attr
| 0 | ||||||||||||||||||
254 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
255 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
256 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
257 | p = attr->value.sequence->data; | - | ||||||||||||||||||
258 | return never executed: d2i_ESS_SIGNING_CERT(return d2i_ESS_SIGNING_CERT( ((void *)0) , &p, attr->value.sequence->length); never executed: return d2i_ESS_SIGNING_CERT( ((void *)0) , &p, attr->value.sequence->length); | 0 | ||||||||||||||||||
259 | ((void *)0) never executed: return d2i_ESS_SIGNING_CERT( ((void *)0) , &p, attr->value.sequence->length); | 0 | ||||||||||||||||||
260 | , &p, attr->value.sequence->length); never executed: return d2i_ESS_SIGNING_CERT( ((void *)0) , &p, attr->value.sequence->length); | 0 | ||||||||||||||||||
261 | } | - | ||||||||||||||||||
262 | - | |||||||||||||||||||
263 | static ESS_SIGNING_CERT_V2 *ess_get_signing_cert_v2(PKCS7_SIGNER_INFO *si) | - | ||||||||||||||||||
264 | { | - | ||||||||||||||||||
265 | ASN1_TYPE *attr; | - | ||||||||||||||||||
266 | const unsigned char *p; | - | ||||||||||||||||||
267 | - | |||||||||||||||||||
268 | attr = PKCS7_get_signed_attribute(si, 1086); | - | ||||||||||||||||||
269 | if (attr ==
| 0 | ||||||||||||||||||
270 | ((void *)0)
| 0 | ||||||||||||||||||
271 | ) | - | ||||||||||||||||||
272 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
273 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
274 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
275 | p = attr->value.sequence->data; | - | ||||||||||||||||||
276 | return never executed: d2i_ESS_SIGNING_CERT_V2(return d2i_ESS_SIGNING_CERT_V2( ((void *)0) , &p, attr->value.sequence->length); never executed: return d2i_ESS_SIGNING_CERT_V2( ((void *)0) , &p, attr->value.sequence->length); | 0 | ||||||||||||||||||
277 | ((void *)0) never executed: return d2i_ESS_SIGNING_CERT_V2( ((void *)0) , &p, attr->value.sequence->length); | 0 | ||||||||||||||||||
278 | , &p, attr->value.sequence->length); never executed: return d2i_ESS_SIGNING_CERT_V2( ((void *)0) , &p, attr->value.sequence->length); | 0 | ||||||||||||||||||
279 | } | - | ||||||||||||||||||
280 | - | |||||||||||||||||||
281 | - | |||||||||||||||||||
282 | static int ts_find_cert(struct stack_st_ESS_CERT_ID *cert_ids, X509 *cert) | - | ||||||||||||||||||
283 | { | - | ||||||||||||||||||
284 | int i; | - | ||||||||||||||||||
285 | unsigned char cert_sha1[20]; | - | ||||||||||||||||||
286 | - | |||||||||||||||||||
287 | if (!cert_ids
| 0 | ||||||||||||||||||
288 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
289 | - | |||||||||||||||||||
290 | X509_digest(cert, EVP_sha1(), cert_sha1, | - | ||||||||||||||||||
291 | ((void *)0) | - | ||||||||||||||||||
292 | ); | - | ||||||||||||||||||
293 | - | |||||||||||||||||||
294 | - | |||||||||||||||||||
295 | X509_check_purpose(cert, -1, 0); | - | ||||||||||||||||||
296 | - | |||||||||||||||||||
297 | - | |||||||||||||||||||
298 | for (i = 0; i < sk_ESS_CERT_ID_num(cert_ids)
| 0 | ||||||||||||||||||
299 | ESS_CERT_ID *cid = sk_ESS_CERT_ID_value(cert_ids, i); | - | ||||||||||||||||||
300 | - | |||||||||||||||||||
301 | if (cid->hash->length == 20
| 0 | ||||||||||||||||||
302 | && memcmp(cid->hash->data, cert_sha1, 20) == 0
| 0 | ||||||||||||||||||
303 | ESS_ISSUER_SERIAL *is = cid->issuer_serial; | - | ||||||||||||||||||
304 | if (!is
| 0 | ||||||||||||||||||
305 | return never executed: i;return i; never executed: return i; | 0 | ||||||||||||||||||
306 | } never executed: end of block | 0 | ||||||||||||||||||
307 | } never executed: end of block | 0 | ||||||||||||||||||
308 | - | |||||||||||||||||||
309 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
310 | } | - | ||||||||||||||||||
311 | - | |||||||||||||||||||
312 | - | |||||||||||||||||||
313 | static int ts_find_cert_v2(struct stack_st_ESS_CERT_ID_V2 *cert_ids, X509 *cert) | - | ||||||||||||||||||
314 | { | - | ||||||||||||||||||
315 | int i; | - | ||||||||||||||||||
316 | unsigned char cert_digest[64]; | - | ||||||||||||||||||
317 | unsigned int len; | - | ||||||||||||||||||
318 | - | |||||||||||||||||||
319 | - | |||||||||||||||||||
320 | for (i = 0; i < sk_ESS_CERT_ID_V2_num(cert_ids)
| 0 | ||||||||||||||||||
321 | ESS_CERT_ID_V2 *cid = sk_ESS_CERT_ID_V2_value(cert_ids, i); | - | ||||||||||||||||||
322 | const EVP_MD *md; | - | ||||||||||||||||||
323 | - | |||||||||||||||||||
324 | if (cid->hash_alg !=
| 0 | ||||||||||||||||||
325 | ((void *)0)
| 0 | ||||||||||||||||||
326 | ) | - | ||||||||||||||||||
327 | md = EVP_get_digestbyname(OBJ_nid2sn(OBJ_obj2nid(cid->hash_alg->algorithm))); never executed: md = EVP_get_digestbyname(OBJ_nid2sn(OBJ_obj2nid(cid->hash_alg->algorithm))); | 0 | ||||||||||||||||||
328 | else | - | ||||||||||||||||||
329 | md = EVP_sha256(); never executed: md = EVP_sha256(); | 0 | ||||||||||||||||||
330 | - | |||||||||||||||||||
331 | X509_digest(cert, md, cert_digest, &len); | - | ||||||||||||||||||
332 | if (cid->hash->length != (int)len
| 0 | ||||||||||||||||||
333 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
334 | - | |||||||||||||||||||
335 | if (memcmp(cid->hash->data, cert_digest, cid->hash->length) == 0
| 0 | ||||||||||||||||||
336 | ESS_ISSUER_SERIAL *is = cid->issuer_serial; | - | ||||||||||||||||||
337 | - | |||||||||||||||||||
338 | if (is
| 0 | ||||||||||||||||||
339 | ((void *)0)
| 0 | ||||||||||||||||||
340 | || !ts_issuer_serial_cmp(is, cert)
| 0 | ||||||||||||||||||
341 | return never executed: i;return i; never executed: return i; | 0 | ||||||||||||||||||
342 | } never executed: end of block | 0 | ||||||||||||||||||
343 | } never executed: end of block | 0 | ||||||||||||||||||
344 | - | |||||||||||||||||||
345 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
346 | } | - | ||||||||||||||||||
347 | - | |||||||||||||||||||
348 | static int ts_issuer_serial_cmp(ESS_ISSUER_SERIAL *is, X509 *cert) | - | ||||||||||||||||||
349 | { | - | ||||||||||||||||||
350 | GENERAL_NAME *issuer; | - | ||||||||||||||||||
351 | - | |||||||||||||||||||
352 | if (!is
| 0 | ||||||||||||||||||
353 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
354 | - | |||||||||||||||||||
355 | issuer = sk_GENERAL_NAME_value(is->issuer, 0); | - | ||||||||||||||||||
356 | if (issuer->type != 4
| 0 | ||||||||||||||||||
357 | || X509_NAME_cmp(issuer->d.dirn, X509_get_issuer_name(cert))
| 0 | ||||||||||||||||||
358 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
359 | - | |||||||||||||||||||
360 | if (ASN1_INTEGER_cmp(is->serial, X509_get_serialNumber(cert))
| 0 | ||||||||||||||||||
361 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
362 | - | |||||||||||||||||||
363 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
364 | } | - | ||||||||||||||||||
365 | - | |||||||||||||||||||
366 | - | |||||||||||||||||||
367 | - | |||||||||||||||||||
368 | - | |||||||||||||||||||
369 | - | |||||||||||||||||||
370 | - | |||||||||||||||||||
371 | - | |||||||||||||||||||
372 | int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response) | - | ||||||||||||||||||
373 | { | - | ||||||||||||||||||
374 | PKCS7 *token = response->token; | - | ||||||||||||||||||
375 | TS_TST_INFO *tst_info = response->tst_info; | - | ||||||||||||||||||
376 | int ret = 0; | - | ||||||||||||||||||
377 | - | |||||||||||||||||||
378 | if (!ts_check_status_info(response)
| 0 | ||||||||||||||||||
379 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
380 | if (!int_ts_RESP_verify_token(ctx, token, tst_info)
| 0 | ||||||||||||||||||
381 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
382 | ret = 1; | - | ||||||||||||||||||
383 | - | |||||||||||||||||||
384 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
385 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
386 | } | - | ||||||||||||||||||
387 | - | |||||||||||||||||||
388 | - | |||||||||||||||||||
389 | - | |||||||||||||||||||
390 | - | |||||||||||||||||||
391 | - | |||||||||||||||||||
392 | int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token) | - | ||||||||||||||||||
393 | { | - | ||||||||||||||||||
394 | TS_TST_INFO *tst_info = PKCS7_to_TS_TST_INFO(token); | - | ||||||||||||||||||
395 | int ret = 0; | - | ||||||||||||||||||
396 | if (tst_info
| 0 | ||||||||||||||||||
397 | ret = int_ts_RESP_verify_token(ctx, token, tst_info); | - | ||||||||||||||||||
398 | TS_TST_INFO_free(tst_info); | - | ||||||||||||||||||
399 | } never executed: end of block | 0 | ||||||||||||||||||
400 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
401 | } | - | ||||||||||||||||||
402 | static int int_ts_RESP_verify_token(TS_VERIFY_CTX *ctx, | - | ||||||||||||||||||
403 | PKCS7 *token, TS_TST_INFO *tst_info) | - | ||||||||||||||||||
404 | { | - | ||||||||||||||||||
405 | X509 *signer = | - | ||||||||||||||||||
406 | ((void *)0) | - | ||||||||||||||||||
407 | ; | - | ||||||||||||||||||
408 | GENERAL_NAME *tsa_name = tst_info->tsa; | - | ||||||||||||||||||
409 | X509_ALGOR *md_alg = | - | ||||||||||||||||||
410 | ((void *)0) | - | ||||||||||||||||||
411 | ; | - | ||||||||||||||||||
412 | unsigned char *imprint = | - | ||||||||||||||||||
413 | ((void *)0) | - | ||||||||||||||||||
414 | ; | - | ||||||||||||||||||
415 | unsigned imprint_len = 0; | - | ||||||||||||||||||
416 | int ret = 0; | - | ||||||||||||||||||
417 | int flags = ctx->flags; | - | ||||||||||||||||||
418 | - | |||||||||||||||||||
419 | - | |||||||||||||||||||
420 | if (((
| 0 | ||||||||||||||||||
421 | ((void *)0)
| 0 | ||||||||||||||||||
422 | ) | - | ||||||||||||||||||
423 | || (
| 0 | ||||||||||||||||||
424 | flags |= (1u << 0); | - | ||||||||||||||||||
425 | } never executed: end of block | 0 | ||||||||||||||||||
426 | - | |||||||||||||||||||
427 | if ((
| 0 | ||||||||||||||||||
428 | && !TS_RESP_verify_signature(token, ctx->certs, ctx->store, &signer)
| 0 | ||||||||||||||||||
429 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
430 | if ((
| 0 | ||||||||||||||||||
431 | && TS_TST_INFO_get_version(tst_info) != 1
| 0 | ||||||||||||||||||
432 | ERR_put_error(47,(149),(113),__FILE__,433); | - | ||||||||||||||||||
433 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
434 | } | - | ||||||||||||||||||
435 | if ((
| 0 | ||||||||||||||||||
436 | && !ts_check_policy(ctx->policy, tst_info)
| 0 | ||||||||||||||||||
437 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
438 | if ((
| 0 | ||||||||||||||||||
439 | && !ts_check_imprints(ctx->md_alg, ctx->imprint, ctx->imprint_len,
| 0 | ||||||||||||||||||
440 | tst_info)
| 0 | ||||||||||||||||||
441 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
442 | if ((
| 0 | ||||||||||||||||||
443 | && (!ts_compute_imprint(ctx->data, tst_info,
| 0 | ||||||||||||||||||
444 | &md_alg, &imprint, &imprint_len)
| 0 | ||||||||||||||||||
445 | || !ts_check_imprints(md_alg, imprint, imprint_len, tst_info)
| 0 | ||||||||||||||||||
446 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
447 | if ((
| 0 | ||||||||||||||||||
448 | && !ts_check_nonces(ctx->nonce, tst_info)
| 0 | ||||||||||||||||||
449 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
450 | if ((
| 0 | ||||||||||||||||||
451 | && tsa_name
| 0 | ||||||||||||||||||
452 | ERR_put_error(47,(149),(111),__FILE__,453); | - | ||||||||||||||||||
453 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
454 | } | - | ||||||||||||||||||
455 | if ((
| 0 | ||||||||||||||||||
456 | && !ts_check_signer_name(ctx->tsa_name, signer)
| 0 | ||||||||||||||||||
457 | ERR_put_error(47,(149),(112),__FILE__,458); | - | ||||||||||||||||||
458 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
459 | } | - | ||||||||||||||||||
460 | ret = 1; | - | ||||||||||||||||||
461 | - | |||||||||||||||||||
462 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
463 | X509_free(signer); | - | ||||||||||||||||||
464 | X509_ALGOR_free(md_alg); | - | ||||||||||||||||||
465 | CRYPTO_free(imprint, __FILE__, 466); | - | ||||||||||||||||||
466 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
467 | } | - | ||||||||||||||||||
468 | - | |||||||||||||||||||
469 | static int ts_check_status_info(TS_RESP *response) | - | ||||||||||||||||||
470 | { | - | ||||||||||||||||||
471 | TS_STATUS_INFO *info = response->status_info; | - | ||||||||||||||||||
472 | long status = ASN1_INTEGER_get(info->status); | - | ||||||||||||||||||
473 | const char *status_text = | - | ||||||||||||||||||
474 | ((void *)0) | - | ||||||||||||||||||
475 | ; | - | ||||||||||||||||||
476 | char *embedded_status_text = | - | ||||||||||||||||||
477 | ((void *)0) | - | ||||||||||||||||||
478 | ; | - | ||||||||||||||||||
479 | char failure_text[256] = ""; | - | ||||||||||||||||||
480 | - | |||||||||||||||||||
481 | if (status == 0
| 0 | ||||||||||||||||||
482 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
483 | - | |||||||||||||||||||
484 | - | |||||||||||||||||||
485 | if (0 <= status
| 0 | ||||||||||||||||||
486 | status_text = ts_status_text[status]; never executed: status_text = ts_status_text[status]; | 0 | ||||||||||||||||||
487 | else | - | ||||||||||||||||||
488 | status_text = "unknown code"; never executed: status_text = "unknown code"; | 0 | ||||||||||||||||||
489 | - | |||||||||||||||||||
490 | if (sk_ASN1_UTF8STRING_num(info->text) > 0
| 0 | ||||||||||||||||||
491 | && (
| 0 | ||||||||||||||||||
492 | ((void *)0)
| 0 | ||||||||||||||||||
493 | ) | - | ||||||||||||||||||
494 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
495 | - | |||||||||||||||||||
496 | - | |||||||||||||||||||
497 | if (info->failure_info
| 0 | ||||||||||||||||||
498 | int i; | - | ||||||||||||||||||
499 | int first = 1; | - | ||||||||||||||||||
500 | for (i = 0; i < (int)(sizeof(ts_failure_info)/sizeof((ts_failure_info)[0]))
| 0 | ||||||||||||||||||
501 | if (ASN1_BIT_STRING_get_bit(info->failure_info,
| 0 | ||||||||||||||||||
502 | ts_failure_info[i].code)
| 0 | ||||||||||||||||||
503 | if (!first
| 0 | ||||||||||||||||||
504 | strcat(failure_text, ","); never executed: strcat(failure_text, ","); | 0 | ||||||||||||||||||
505 | else | - | ||||||||||||||||||
506 | first = 0; never executed: first = 0; | 0 | ||||||||||||||||||
507 | strcat(failure_text, ts_failure_info[i].text); | - | ||||||||||||||||||
508 | } never executed: end of block | 0 | ||||||||||||||||||
509 | } never executed: end of block | 0 | ||||||||||||||||||
510 | } never executed: end of block | 0 | ||||||||||||||||||
511 | if (failure_text[0] == '\0'
| 0 | ||||||||||||||||||
512 | strcpy(failure_text, "unspecified"); never executed: strcpy(failure_text, "unspecified"); | 0 | ||||||||||||||||||
513 | - | |||||||||||||||||||
514 | ERR_put_error(47,(104),(107),__FILE__,509); | - | ||||||||||||||||||
515 | ERR_add_error_data(6, | - | ||||||||||||||||||
516 | "status code: ", status_text, | - | ||||||||||||||||||
517 | ", status text: ", embedded_status_text ? | - | ||||||||||||||||||
518 | embedded_status_text : "unspecified", | - | ||||||||||||||||||
519 | ", failure codes: ", failure_text); | - | ||||||||||||||||||
520 | CRYPTO_free(embedded_status_text, __FILE__, 515); | - | ||||||||||||||||||
521 | - | |||||||||||||||||||
522 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
523 | } | - | ||||||||||||||||||
524 | - | |||||||||||||||||||
525 | static char *ts_get_status_text(struct stack_st_ASN1_UTF8STRING *text) | - | ||||||||||||||||||
526 | { | - | ||||||||||||||||||
527 | int i; | - | ||||||||||||||||||
528 | int length = 0; | - | ||||||||||||||||||
529 | char *result = | - | ||||||||||||||||||
530 | ((void *)0) | - | ||||||||||||||||||
531 | ; | - | ||||||||||||||||||
532 | char *p; | - | ||||||||||||||||||
533 | - | |||||||||||||||||||
534 | for (i = 0; i < sk_ASN1_UTF8STRING_num(text)
| 0 | ||||||||||||||||||
535 | ASN1_UTF8STRING *current = sk_ASN1_UTF8STRING_value(text, i); | - | ||||||||||||||||||
536 | if (ASN1_STRING_length(current) > (1024 * 1024) - length - 1
| 0 | ||||||||||||||||||
537 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
538 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
539 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
540 | length += ASN1_STRING_length(current); | - | ||||||||||||||||||
541 | length += 1; | - | ||||||||||||||||||
542 | } never executed: end of block | 0 | ||||||||||||||||||
543 | if ((
| 0 | ||||||||||||||||||
544 | ((void *)0)
| 0 | ||||||||||||||||||
545 | ) { | - | ||||||||||||||||||
546 | ERR_put_error(47,(105),((1|64)),__FILE__,535); | - | ||||||||||||||||||
547 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
548 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
549 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
550 | } | - | ||||||||||||||||||
551 | - | |||||||||||||||||||
552 | for (i = 0, p = result; i < sk_ASN1_UTF8STRING_num(text)
| 0 | ||||||||||||||||||
553 | ASN1_UTF8STRING *current = sk_ASN1_UTF8STRING_value(text, i); | - | ||||||||||||||||||
554 | length = ASN1_STRING_length(current); | - | ||||||||||||||||||
555 | if (i > 0
| 0 | ||||||||||||||||||
556 | * never executed: p++ = '/';*p++ = '/'; never executed: *p++ = '/'; | 0 | ||||||||||||||||||
557 | - | |||||||||||||||||||
558 | __builtin_strncpy ( | - | ||||||||||||||||||
559 | p | - | ||||||||||||||||||
560 | , | - | ||||||||||||||||||
561 | (const char *)ASN1_STRING_get0_data(current) | - | ||||||||||||||||||
562 | , | - | ||||||||||||||||||
563 | length | - | ||||||||||||||||||
564 | ) | - | ||||||||||||||||||
565 | ; | - | ||||||||||||||||||
566 | p += length; | - | ||||||||||||||||||
567 | } never executed: end of block | 0 | ||||||||||||||||||
568 | *p = '\0'; | - | ||||||||||||||||||
569 | - | |||||||||||||||||||
570 | return never executed: result;return result; never executed: return result; | 0 | ||||||||||||||||||
571 | } | - | ||||||||||||||||||
572 | - | |||||||||||||||||||
573 | static int ts_check_policy(const ASN1_OBJECT *req_oid, | - | ||||||||||||||||||
574 | const TS_TST_INFO *tst_info) | - | ||||||||||||||||||
575 | { | - | ||||||||||||||||||
576 | const ASN1_OBJECT *resp_oid = tst_info->policy_id; | - | ||||||||||||||||||
577 | - | |||||||||||||||||||
578 | if (OBJ_cmp(req_oid, resp_oid) != 0
| 0 | ||||||||||||||||||
579 | ERR_put_error(47,(102),(108),__FILE__,558); | - | ||||||||||||||||||
580 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
581 | } | - | ||||||||||||||||||
582 | - | |||||||||||||||||||
583 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
584 | } | - | ||||||||||||||||||
585 | - | |||||||||||||||||||
586 | static int ts_compute_imprint(BIO *data, TS_TST_INFO *tst_info, | - | ||||||||||||||||||
587 | X509_ALGOR **md_alg, | - | ||||||||||||||||||
588 | unsigned char **imprint, unsigned *imprint_len) | - | ||||||||||||||||||
589 | { | - | ||||||||||||||||||
590 | TS_MSG_IMPRINT *msg_imprint = tst_info->msg_imprint; | - | ||||||||||||||||||
591 | X509_ALGOR *md_alg_resp = msg_imprint->hash_algo; | - | ||||||||||||||||||
592 | const EVP_MD *md; | - | ||||||||||||||||||
593 | EVP_MD_CTX *md_ctx = | - | ||||||||||||||||||
594 | ((void *)0) | - | ||||||||||||||||||
595 | ; | - | ||||||||||||||||||
596 | unsigned char buffer[4096]; | - | ||||||||||||||||||
597 | int length; | - | ||||||||||||||||||
598 | - | |||||||||||||||||||
599 | *md_alg = | - | ||||||||||||||||||
600 | ((void *)0) | - | ||||||||||||||||||
601 | ; | - | ||||||||||||||||||
602 | *imprint = | - | ||||||||||||||||||
603 | ((void *)0) | - | ||||||||||||||||||
604 | ; | - | ||||||||||||||||||
605 | - | |||||||||||||||||||
606 | if ((*
| 0 | ||||||||||||||||||
607 | ((void *)0)
| 0 | ||||||||||||||||||
608 | ) | - | ||||||||||||||||||
609 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
610 | if ((
| 0 | ||||||||||||||||||
611 | ((void *)0)
| 0 | ||||||||||||||||||
612 | ) { | - | ||||||||||||||||||
613 | ERR_put_error(47,(145),(126),__FILE__,582); | - | ||||||||||||||||||
614 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
615 | } | - | ||||||||||||||||||
616 | length = EVP_MD_size(md); | - | ||||||||||||||||||
617 | if (length < 0
| 0 | ||||||||||||||||||
618 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
619 | *imprint_len = length; | - | ||||||||||||||||||
620 | if ((*
| 0 | ||||||||||||||||||
621 | ((void *)0)
| 0 | ||||||||||||||||||
622 | ) { | - | ||||||||||||||||||
623 | ERR_put_error(47,(145),((1|64)),__FILE__,590); | - | ||||||||||||||||||
624 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
625 | } | - | ||||||||||||||||||
626 | - | |||||||||||||||||||
627 | md_ctx = EVP_MD_CTX_new(); | - | ||||||||||||||||||
628 | if (md_ctx ==
| 0 | ||||||||||||||||||
629 | ((void *)0)
| 0 | ||||||||||||||||||
630 | ) { | - | ||||||||||||||||||
631 | ERR_put_error(47,(145),((1|64)),__FILE__,596); | - | ||||||||||||||||||
632 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
633 | } | - | ||||||||||||||||||
634 | if (!EVP_DigestInit(md_ctx, md)
| 0 | ||||||||||||||||||
635 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
636 | while ((
| 0 | ||||||||||||||||||
637 | if (!EVP_DigestUpdate(md_ctx, buffer, length)
| 0 | ||||||||||||||||||
638 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
639 | } never executed: end of block | 0 | ||||||||||||||||||
640 | if (!EVP_DigestFinal(md_ctx, *imprint,
| 0 | ||||||||||||||||||
641 | ((void *)0)
| 0 | ||||||||||||||||||
642 | )
| 0 | ||||||||||||||||||
643 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
644 | EVP_MD_CTX_free(md_ctx); | - | ||||||||||||||||||
645 | - | |||||||||||||||||||
646 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
647 | err: | - | ||||||||||||||||||
648 | EVP_MD_CTX_free(md_ctx); | - | ||||||||||||||||||
649 | X509_ALGOR_free(*md_alg); | - | ||||||||||||||||||
650 | CRYPTO_free(*imprint, __FILE__, 613); | - | ||||||||||||||||||
651 | *imprint_len = 0; | - | ||||||||||||||||||
652 | *imprint = 0; | - | ||||||||||||||||||
653 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
654 | } | - | ||||||||||||||||||
655 | - | |||||||||||||||||||
656 | static int ts_check_imprints(X509_ALGOR *algor_a, | - | ||||||||||||||||||
657 | const unsigned char *imprint_a, unsigned len_a, | - | ||||||||||||||||||
658 | TS_TST_INFO *tst_info) | - | ||||||||||||||||||
659 | { | - | ||||||||||||||||||
660 | TS_MSG_IMPRINT *b = tst_info->msg_imprint; | - | ||||||||||||||||||
661 | X509_ALGOR *algor_b = b->hash_algo; | - | ||||||||||||||||||
662 | int ret = 0; | - | ||||||||||||||||||
663 | - | |||||||||||||||||||
664 | if (algor_a
| 0 | ||||||||||||||||||
665 | if (OBJ_cmp(algor_a->algorithm, algor_b->algorithm)
| 0 | ||||||||||||||||||
666 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
667 | - | |||||||||||||||||||
668 | - | |||||||||||||||||||
669 | if ((algor_a->parameter
| 0 | ||||||||||||||||||
670 | && ASN1_TYPE_get(algor_a->parameter) != 5
| 0 | ||||||||||||||||||
671 | || (algor_b->parameter
| 0 | ||||||||||||||||||
672 | && ASN1_TYPE_get(algor_b->parameter) != 5
| 0 | ||||||||||||||||||
673 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
674 | } never executed: end of block | 0 | ||||||||||||||||||
675 | - | |||||||||||||||||||
676 | ret = len_a == (unsigned)ASN1_STRING_length(b->hashed_msg)
| 0 | ||||||||||||||||||
677 | memcmp(imprint_a, ASN1_STRING_get0_data(b->hashed_msg), len_a) == 0
| 0 | ||||||||||||||||||
678 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
679 | if (!ret
| 0 | ||||||||||||||||||
680 | ERR_put_error(47,(100),(103),__FILE__,643); never executed: ERR_put_error(47,(100),(103),__FILE__,643); | 0 | ||||||||||||||||||
681 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
682 | } | - | ||||||||||||||||||
683 | - | |||||||||||||||||||
684 | static int ts_check_nonces(const ASN1_INTEGER *a, TS_TST_INFO *tst_info) | - | ||||||||||||||||||
685 | { | - | ||||||||||||||||||
686 | const ASN1_INTEGER *b = tst_info->nonce; | - | ||||||||||||||||||
687 | - | |||||||||||||||||||
688 | if (!b
| 0 | ||||||||||||||||||
689 | ERR_put_error(47,(101),(105),__FILE__,652); | - | ||||||||||||||||||
690 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
691 | } | - | ||||||||||||||||||
692 | - | |||||||||||||||||||
693 | - | |||||||||||||||||||
694 | if (ASN1_INTEGER_cmp(a, b) != 0
| 0 | ||||||||||||||||||
695 | ERR_put_error(47,(101),(104),__FILE__,658); | - | ||||||||||||||||||
696 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
697 | } | - | ||||||||||||||||||
698 | - | |||||||||||||||||||
699 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
700 | } | - | ||||||||||||||||||
701 | - | |||||||||||||||||||
702 | - | |||||||||||||||||||
703 | - | |||||||||||||||||||
704 | - | |||||||||||||||||||
705 | - | |||||||||||||||||||
706 | static int ts_check_signer_name(GENERAL_NAME *tsa_name, X509 *signer) | - | ||||||||||||||||||
707 | { | - | ||||||||||||||||||
708 | struct stack_st_GENERAL_NAME *gen_names = | - | ||||||||||||||||||
709 | ((void *)0) | - | ||||||||||||||||||
710 | ; | - | ||||||||||||||||||
711 | int idx = -1; | - | ||||||||||||||||||
712 | int found = 0; | - | ||||||||||||||||||
713 | - | |||||||||||||||||||
714 | if (tsa_name->type == 4
| 0 | ||||||||||||||||||
715 | && X509_NAME_cmp((tsa_name->d.dirn),(X509_get_subject_name(signer))) == 0
| 0 | ||||||||||||||||||
716 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
717 | gen_names = X509_get_ext_d2i(signer, 85, | - | ||||||||||||||||||
718 | ((void *)0) | - | ||||||||||||||||||
719 | , &idx); | - | ||||||||||||||||||
720 | while (gen_names !=
| 0 | ||||||||||||||||||
721 | ((void *)0)
| 0 | ||||||||||||||||||
722 | ) { | - | ||||||||||||||||||
723 | found = ts_find_name(gen_names, tsa_name) >= 0; | - | ||||||||||||||||||
724 | if (found
| 0 | ||||||||||||||||||
725 | break; never executed: break; | 0 | ||||||||||||||||||
726 | - | |||||||||||||||||||
727 | - | |||||||||||||||||||
728 | - | |||||||||||||||||||
729 | - | |||||||||||||||||||
730 | GENERAL_NAMES_free(gen_names); | - | ||||||||||||||||||
731 | gen_names = X509_get_ext_d2i(signer, 85, | - | ||||||||||||||||||
732 | ((void *)0) | - | ||||||||||||||||||
733 | , &idx); | - | ||||||||||||||||||
734 | } never executed: end of block | 0 | ||||||||||||||||||
735 | GENERAL_NAMES_free(gen_names); | - | ||||||||||||||||||
736 | - | |||||||||||||||||||
737 | return never executed: found;return found; never executed: return found; | 0 | ||||||||||||||||||
738 | } | - | ||||||||||||||||||
739 | - | |||||||||||||||||||
740 | - | |||||||||||||||||||
741 | static int ts_find_name(struct stack_st_GENERAL_NAME *gen_names, GENERAL_NAME *name) | - | ||||||||||||||||||
742 | { | - | ||||||||||||||||||
743 | int i, found; | - | ||||||||||||||||||
744 | for (i = 0, found = 0; !found
| 0 | ||||||||||||||||||
745 | GENERAL_NAME *current = sk_GENERAL_NAME_value(gen_names, i); | - | ||||||||||||||||||
746 | found = GENERAL_NAME_cmp(current, name) == 0; | - | ||||||||||||||||||
747 | } never executed: end of block | 0 | ||||||||||||||||||
748 | return never executed: foundreturn found ? i - 1 : -1;
never executed: return found ? i - 1 : -1; | 0 | ||||||||||||||||||
749 | } | - | ||||||||||||||||||
Switch to Source code | Preprocessed file |