OpenCoverage

store_lib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/store/store_lib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include "e_os.h"-
11#include <stdlib.h>-
12#include <string.h>-
13#include <assert.h>-
14-
15#include "e_os.h"-
16-
17#include <openssl/crypto.h>-
18#include <openssl/err.h>-
19#include <openssl/store.h>-
20#include "internal/thread_once.h"-
21#include "internal/store_int.h"-
22#include "store_locl.h"-
23-
24struct ossl_store_ctx_st {-
25 const OSSL_STORE_LOADER *loader;-
26 OSSL_STORE_LOADER_CTX *loader_ctx;-
27 const UI_METHOD *ui_method;-
28 void *ui_data;-
29 OSSL_STORE_post_process_info_fn post_process;-
30 void *post_process_data;-
31 int expected_type;-
32-
33 /* 0 before the first STORE_load(), 1 otherwise */-
34 int loading;-
35};-
36-
37OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method,-
38 void *ui_data,-
39 OSSL_STORE_post_process_info_fn post_process,-
40 void *post_process_data)-
41{-
42 const OSSL_STORE_LOADER *loader = NULL;-
43 OSSL_STORE_LOADER_CTX *loader_ctx = NULL;-
44 OSSL_STORE_CTX *ctx = NULL;-
45 char scheme_copy[256], *p, *schemes[2];-
46 size_t schemes_n = 0;-
47 size_t i;-
48-
49 /*-
50 * Put the file scheme first. If the uri does represent an existing file,-
51 * possible device name and all, then it should be loaded. Only a failed-
52 * attempt at loading a local file should have us try something else.-
53 */-
54 schemes[schemes_n++] = "file";-
55-
56 /*-
57 * Now, check if we have something that looks like a scheme, and add it-
58 * as a second scheme. However, also check if there's an authority start-
59 * (://), because that will invalidate the previous file scheme. Also,-
60 * check that this isn't actually the file scheme, as there's no point-
61 * going through that one twice!-
62 */-
63 OPENSSL_strlcpy(scheme_copy, uri, sizeof(scheme_copy));-
64 if ((p = strchr(scheme_copy, ':')) != NULL) {
(p = (__extens...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( ':' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con... scheme_copy )Description
TRUEnever evaluated
FALSEnever evaluated
( ':' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
65 *p++ = '\0';-
66 if (strcasecmp(scheme_copy, "file") != 0) {
strcasecmp(sch..., "file") != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
67 if (strncmp(p, "//", 2) == 0)
never executed: __result = (((const unsigned char *) (const char *) ( p ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "//" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(__extension__..." , 2 ))) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( 2 )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( p )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( p ) <...size_t) ( 2 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( "//" )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( "//" ...size_t) ( 2 ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
68 schemes_n--; /* Invalidate the file scheme */
never executed: schemes_n--;
0
69 schemes[schemes_n++] = scheme_copy;-
70 }
never executed: end of block
0
71 }
never executed: end of block
0
72-
73 ERR_set_mark();-
74-
75 /* Try each scheme until we find one that could open the URI */-
76 for (i = 0; loader_ctx == NULL && i < schemes_n; i++) {
loader_ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
i < schemes_nDescription
TRUEnever evaluated
FALSEnever evaluated
0
77 if ((loader = ossl_store_get0_loader_int(schemes[i])) != NULL)
(loader = ossl...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
78 loader_ctx = loader->open(loader, uri, ui_method, ui_data);
never executed: loader_ctx = loader->open(loader, uri, ui_method, ui_data);
0
79 }
never executed: end of block
0
80 if (loader_ctx == NULL)
loader_ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
81 goto err;
never executed: goto err;
0
82-
83 if ((ctx = OPENSSL_zalloc(sizeof(*ctx))) == NULL) {
(ctx = CRYPTO_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
84 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_OPEN, ERR_R_MALLOC_FAILURE);-
85 goto err;
never executed: goto err;
0
86 }-
87-
88 ctx->loader = loader;-
89 ctx->loader_ctx = loader_ctx;-
90 ctx->ui_method = ui_method;-
91 ctx->ui_data = ui_data;-
92 ctx->post_process = post_process;-
93 ctx->post_process_data = post_process_data;-
94-
95 /*-
96 * If the attempt to open with the 'file' scheme loader failed and the-
97 * other scheme loader succeeded, the failure to open with the 'file'-
98 * scheme loader leaves an error on the error stack. Let's remove it.-
99 */-
100 ERR_pop_to_mark();-
101-
102 return ctx;
never executed: return ctx;
0
103-
104 err:-
105 ERR_clear_last_mark();-
106 if (loader_ctx != NULL) {
loader_ctx != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
107 /*-
108 * We ignore a returned error because we will return NULL anyway in-
109 * this case, so if something goes wrong when closing, that'll simply-
110 * just add another entry on the error stack.-
111 */-
112 (void)loader->close(loader_ctx);-
113 }
never executed: end of block
0
114 return NULL;
never executed: return ((void *)0) ;
0
115}-
116-
117int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ...)-
118{-
119 va_list args;-
120 int ret;-
121-
122 va_start(args, cmd);-
123 ret = OSSL_STORE_vctrl(ctx, cmd, args);-
124 va_end(args);-
125-
126 return ret;
never executed: return ret;
0
127}-
128-
129int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args)-
130{-
131 if (ctx->loader->ctrl != NULL)
ctx->loader->c...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
132 return ctx->loader->ctrl(ctx->loader_ctx, cmd, args);
never executed: return ctx->loader->ctrl(ctx->loader_ctx, cmd, args);
0
133 return 0;
never executed: return 0;
0
134}-
135-
136int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type)-
137{-
138 if (ctx->loading) {
ctx->loadingDescription
TRUEnever evaluated
FALSEnever evaluated
0
139 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_EXPECT,-
140 OSSL_STORE_R_LOADING_STARTED);-
141 return 0;
never executed: return 0;
0
142 }-
143-
144 ctx->expected_type = expected_type;-
145 if (ctx->loader->expect != NULL)
ctx->loader->e...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
146 return ctx->loader->expect(ctx->loader_ctx, expected_type);
never executed: return ctx->loader->expect(ctx->loader_ctx, expected_type);
0
147 return 1;
never executed: return 1;
0
148}-
149-
150int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search)-
151{-
152 if (ctx->loading) {
ctx->loadingDescription
TRUEnever evaluated
FALSEnever evaluated
0
153 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_FIND,-
154 OSSL_STORE_R_LOADING_STARTED);-
155 return 0;
never executed: return 0;
0
156 }-
157 if (ctx->loader->find == NULL) {
ctx->loader->f...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
158 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_FIND,-
159 OSSL_STORE_R_UNSUPPORTED_OPERATION);-
160 return 0;
never executed: return 0;
0
161 }-
162-
163 return ctx->loader->find(ctx->loader_ctx, search);
never executed: return ctx->loader->find(ctx->loader_ctx, search);
0
164}-
165-
166OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx)-
167{-
168 OSSL_STORE_INFO *v = NULL;-
169-
170 ctx->loading = 1;-
171 again:
code before this statement never executed: again:
0
172 if (OSSL_STORE_eof(ctx))
OSSL_STORE_eof(ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
173 return NULL;
never executed: return ((void *)0) ;
0
174-
175 v = ctx->loader->load(ctx->loader_ctx, ctx->ui_method, ctx->ui_data);-
176-
177 if (ctx->post_process != NULL && v != NULL) {
ctx->post_proc...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
v != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
178 v = ctx->post_process(v, ctx->post_process_data);-
179-
180 /*-
181 * By returning NULL, the callback decides that this object should-
182 * be ignored.-
183 */-
184 if (v == NULL)
v == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
185 goto again;
never executed: goto again;
0
186 }
never executed: end of block
0
187-
188 if (v != NULL && ctx->expected_type != 0) {
v != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
ctx->expected_type != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
189 int returned_type = OSSL_STORE_INFO_get_type(v);-
190-
191 if (returned_type != OSSL_STORE_INFO_NAME && returned_type != 0) {
returned_type != 1Description
TRUEnever evaluated
FALSEnever evaluated
returned_type != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
192 /*-
193 * Soft assert here so those who want to harsly weed out faulty-
194 * loaders can do so using a debugging version of libcrypto.-
195 */-
196 if (ctx->loader->expect != NULL)
ctx->loader->e...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
197 assert(ctx->expected_type == returned_type);
never executed: ((void) (0)) ;
0
198-
199 if (ctx->expected_type != returned_type) {
ctx->expected_... returned_typeDescription
TRUEnever evaluated
FALSEnever evaluated
0
200 OSSL_STORE_INFO_free(v);-
201 goto again;
never executed: goto again;
0
202 }-
203 }
never executed: end of block
0
204 }
never executed: end of block
0
205-
206 return v;
never executed: return v;
0
207}-
208-
209int OSSL_STORE_error(OSSL_STORE_CTX *ctx)-
210{-
211 return ctx->loader->error(ctx->loader_ctx);
never executed: return ctx->loader->error(ctx->loader_ctx);
0
212}-
213-
214int OSSL_STORE_eof(OSSL_STORE_CTX *ctx)-
215{-
216 return ctx->loader->eof(ctx->loader_ctx);
never executed: return ctx->loader->eof(ctx->loader_ctx);
0
217}-
218-
219int OSSL_STORE_close(OSSL_STORE_CTX *ctx)-
220{-
221 int loader_ret = ctx->loader->close(ctx->loader_ctx);-
222-
223 OPENSSL_free(ctx);-
224 return loader_ret;
never executed: return loader_ret;
0
225}-
226-
227/*-
228 * Functions to generate OSSL_STORE_INFOs, one function for each type we-
229 * support having in them as well as a generic constructor.-
230 *-
231 * In all cases, ownership of the object is transfered to the OSSL_STORE_INFO-
232 * and will therefore be freed when the OSSL_STORE_INFO is freed.-
233 */-
234static OSSL_STORE_INFO *store_info_new(int type, void *data)-
235{-
236 OSSL_STORE_INFO *info = OPENSSL_zalloc(sizeof(*info));-
237-
238 if (info == NULL)
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
239 return NULL;
never executed: return ((void *)0) ;
0
240-
241 info->type = type;-
242 info->_.data = data;-
243 return info;
never executed: return info;
0
244}-
245-
246OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name)-
247{-
248 OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_NAME, NULL);-
249-
250 if (info == NULL) {
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
251 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME,-
252 ERR_R_MALLOC_FAILURE);-
253 return NULL;
never executed: return ((void *)0) ;
0
254 }-
255-
256 info->_.name.name = name;-
257 info->_.name.desc = NULL;-
258-
259 return info;
never executed: return info;
0
260}-
261-
262int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc)-
263{-
264 if (info->type != OSSL_STORE_INFO_NAME) {
info->type != 1Description
TRUEnever evaluated
FALSEnever evaluated
0
265 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION,-
266 ERR_R_PASSED_INVALID_ARGUMENT);-
267 return 0;
never executed: return 0;
0
268 }-
269-
270 info->_.name.desc = desc;-
271-
272 return 1;
never executed: return 1;
0
273}-
274OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params)-
275{-
276 OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_PARAMS, params);-
277-
278 if (info == NULL)
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
279 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS,
never executed: ERR_put_error(44,(110),((1|64)),__FILE__,280) ;
0
280 ERR_R_MALLOC_FAILURE);
never executed: ERR_put_error(44,(110),((1|64)),__FILE__,280) ;
0
281 return info;
never executed: return info;
0
282}-
283-
284OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey)-
285{-
286 OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_PKEY, pkey);-
287-
288 if (info == NULL)
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
289 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY,
never executed: ERR_put_error(44,(111),((1|64)),__FILE__,290) ;
0
290 ERR_R_MALLOC_FAILURE);
never executed: ERR_put_error(44,(111),((1|64)),__FILE__,290) ;
0
291 return info;
never executed: return info;
0
292}-
293-
294OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509)-
295{-
296 OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_CERT, x509);-
297-
298 if (info == NULL)
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
299 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT,
never executed: ERR_put_error(44,(106),((1|64)),__FILE__,300) ;
0
300 ERR_R_MALLOC_FAILURE);
never executed: ERR_put_error(44,(106),((1|64)),__FILE__,300) ;
0
301 return info;
never executed: return info;
0
302}-
303-
304OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl)-
305{-
306 OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_CRL, crl);-
307-
308 if (info == NULL)
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
309 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL,
never executed: ERR_put_error(44,(107),((1|64)),__FILE__,310) ;
0
310 ERR_R_MALLOC_FAILURE);
never executed: ERR_put_error(44,(107),((1|64)),__FILE__,310) ;
0
311 return info;
never executed: return info;
0
312}-
313-
314/*-
315 * Functions to try to extract data from a OSSL_STORE_INFO.-
316 */-
317int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info)-
318{-
319 return info->type;
never executed: return info->type;
0
320}-
321-
322const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info)-
323{-
324 if (info->type == OSSL_STORE_INFO_NAME)
info->type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
325 return info->_.name.name;
never executed: return info->_.name.name;
0
326 return NULL;
never executed: return ((void *)0) ;
0
327}-
328-
329char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info)-
330{-
331 if (info->type == OSSL_STORE_INFO_NAME) {
info->type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
332 char *ret = OPENSSL_strdup(info->_.name.name);-
333-
334 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
335 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME,
never executed: ERR_put_error(44,(103),((1|64)),__FILE__,336) ;
0
336 ERR_R_MALLOC_FAILURE);
never executed: ERR_put_error(44,(103),((1|64)),__FILE__,336) ;
0
337 return ret;
never executed: return ret;
0
338 }-
339 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME,-
340 OSSL_STORE_R_NOT_A_NAME);-
341 return NULL;
never executed: return ((void *)0) ;
0
342}-
343-
344const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info)-
345{-
346 if (info->type == OSSL_STORE_INFO_NAME)
info->type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
347 return info->_.name.desc;
never executed: return info->_.name.desc;
0
348 return NULL;
never executed: return ((void *)0) ;
0
349}-
350-
351char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info)-
352{-
353 if (info->type == OSSL_STORE_INFO_NAME) {
info->type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
354 char *ret = OPENSSL_strdup(info->_.name.desc-
355 ? info->_.name.desc : "");-
356-
357 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
358 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION,
never executed: ERR_put_error(44,(135),((1|64)),__FILE__,359) ;
0
359 ERR_R_MALLOC_FAILURE);
never executed: ERR_put_error(44,(135),((1|64)),__FILE__,359) ;
0
360 return ret;
never executed: return ret;
0
361 }-
362 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION,-
363 OSSL_STORE_R_NOT_A_NAME);-
364 return NULL;
never executed: return ((void *)0) ;
0
365}-
366-
367EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info)-
368{-
369 if (info->type == OSSL_STORE_INFO_PARAMS)
info->type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
370 return info->_.params;
never executed: return info->_.params;
0
371 return NULL;
never executed: return ((void *)0) ;
0
372}-
373-
374EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info)-
375{-
376 if (info->type == OSSL_STORE_INFO_PARAMS) {
info->type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
377 EVP_PKEY_up_ref(info->_.params);-
378 return info->_.params;
never executed: return info->_.params;
0
379 }-
380 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS,-
381 OSSL_STORE_R_NOT_PARAMETERS);-
382 return NULL;
never executed: return ((void *)0) ;
0
383}-
384-
385EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info)-
386{-
387 if (info->type == OSSL_STORE_INFO_PKEY)
info->type == 3Description
TRUEnever evaluated
FALSEnever evaluated
0
388 return info->_.pkey;
never executed: return info->_.pkey;
0
389 return NULL;
never executed: return ((void *)0) ;
0
390}-
391-
392EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info)-
393{-
394 if (info->type == OSSL_STORE_INFO_PKEY) {
info->type == 3Description
TRUEnever evaluated
FALSEnever evaluated
0
395 EVP_PKEY_up_ref(info->_.pkey);-
396 return info->_.pkey;
never executed: return info->_.pkey;
0
397 }-
398 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY,-
399 OSSL_STORE_R_NOT_A_KEY);-
400 return NULL;
never executed: return ((void *)0) ;
0
401}-
402-
403X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info)-
404{-
405 if (info->type == OSSL_STORE_INFO_CERT)
info->type == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
406 return info->_.x509;
never executed: return info->_.x509;
0
407 return NULL;
never executed: return ((void *)0) ;
0
408}-
409-
410X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info)-
411{-
412 if (info->type == OSSL_STORE_INFO_CERT) {
info->type == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
413 X509_up_ref(info->_.x509);-
414 return info->_.x509;
never executed: return info->_.x509;
0
415 }-
416 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT,-
417 OSSL_STORE_R_NOT_A_CERTIFICATE);-
418 return NULL;
never executed: return ((void *)0) ;
0
419}-
420-
421X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info)-
422{-
423 if (info->type == OSSL_STORE_INFO_CRL)
info->type == 5Description
TRUEnever evaluated
FALSEnever evaluated
0
424 return info->_.crl;
never executed: return info->_.crl;
0
425 return NULL;
never executed: return ((void *)0) ;
0
426}-
427-
428X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info)-
429{-
430 if (info->type == OSSL_STORE_INFO_CRL) {
info->type == 5Description
TRUEnever evaluated
FALSEnever evaluated
0
431 X509_CRL_up_ref(info->_.crl);-
432 return info->_.crl;
never executed: return info->_.crl;
0
433 }-
434 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL,-
435 OSSL_STORE_R_NOT_A_CRL);-
436 return NULL;
never executed: return ((void *)0) ;
0
437}-
438-
439/*-
440 * Free the OSSL_STORE_INFO-
441 */-
442void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info)-
443{-
444 if (info != NULL) {
info != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
445 switch (info->type) {-
446 case OSSL_STORE_INFO_EMBEDDED:
never executed: case -1:
0
447 BUF_MEM_free(info->_.embedded.blob);-
448 OPENSSL_free(info->_.embedded.pem_name);-
449 break;
never executed: break;
0
450 case OSSL_STORE_INFO_NAME:
never executed: case 1:
0
451 OPENSSL_free(info->_.name.name);-
452 OPENSSL_free(info->_.name.desc);-
453 break;
never executed: break;
0
454 case OSSL_STORE_INFO_PARAMS:
never executed: case 2:
0
455 EVP_PKEY_free(info->_.params);-
456 break;
never executed: break;
0
457 case OSSL_STORE_INFO_PKEY:
never executed: case 3:
0
458 EVP_PKEY_free(info->_.pkey);-
459 break;
never executed: break;
0
460 case OSSL_STORE_INFO_CERT:
never executed: case 4:
0
461 X509_free(info->_.x509);-
462 break;
never executed: break;
0
463 case OSSL_STORE_INFO_CRL:
never executed: case 5:
0
464 X509_CRL_free(info->_.crl);-
465 break;
never executed: break;
0
466 }-
467 OPENSSL_free(info);-
468 }
never executed: end of block
0
469}
never executed: end of block
0
470-
471int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type)-
472{-
473 OSSL_STORE_SEARCH tmp_search;-
474-
475 if (ctx->loader->find == NULL)
ctx->loader->f...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
476 return 0;
never executed: return 0;
0
477 tmp_search.search_type = search_type;-
478 return ctx->loader->find(NULL, &tmp_search);
never executed: return ctx->loader->find( ((void *)0) , &tmp_search);
0
479}-
480-
481/* Search term constructors */-
482OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name)-
483{-
484 OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search));-
485-
486 if (search == NULL) {
search == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
487 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME,-
488 ERR_R_MALLOC_FAILURE);-
489 return NULL;
never executed: return ((void *)0) ;
0
490 }-
491-
492 search->search_type = OSSL_STORE_SEARCH_BY_NAME;-
493 search->name = name;-
494 return search;
never executed: return search;
0
495}-
496-
497OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name,-
498 const ASN1_INTEGER *serial)-
499{-
500 OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search));-
501-
502 if (search == NULL) {
search == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
503 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL,-
504 ERR_R_MALLOC_FAILURE);-
505 return NULL;
never executed: return ((void *)0) ;
0
506 }-
507-
508 search->search_type = OSSL_STORE_SEARCH_BY_ISSUER_SERIAL;-
509 search->name = name;-
510 search->serial = serial;-
511 return search;
never executed: return search;
0
512}-
513-
514OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest,-
515 const unsigned char-
516 *bytes, size_t len)-
517{-
518 OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search));-
519-
520 if (search == NULL) {
search == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
521 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT,-
522 ERR_R_MALLOC_FAILURE);-
523 return NULL;
never executed: return ((void *)0) ;
0
524 }-
525-
526 if (digest != NULL && len != (size_t)EVP_MD_size(digest)) {
digest != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
len != (size_t...D_size(digest)Description
TRUEnever evaluated
FALSEnever evaluated
0
527 char buf1[20], buf2[20];-
528-
529 BIO_snprintf(buf1, sizeof(buf1), "%d", EVP_MD_size(digest));-
530 BIO_snprintf(buf2, sizeof(buf2), "%zu", len);-
531 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT,-
532 OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST);-
533 ERR_add_error_data(5, EVP_MD_name(digest), " size is ", buf1,-
534 ", fingerprint size is ", buf2);-
535 }
never executed: end of block
0
536-
537 search->search_type = OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT;-
538 search->digest = digest;-
539 search->string = bytes;-
540 search->stringlength = len;-
541 return search;
never executed: return search;
0
542}-
543-
544OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias)-
545{-
546 OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search));-
547-
548 if (search == NULL) {
search == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
549 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS,-
550 ERR_R_MALLOC_FAILURE);-
551 return NULL;
never executed: return ((void *)0) ;
0
552 }-
553-
554 search->search_type = OSSL_STORE_SEARCH_BY_ALIAS;-
555 search->string = (const unsigned char *)alias;-
556 search->stringlength = strlen(alias);-
557 return search;
never executed: return search;
0
558}-
559-
560/* Search term destructor */-
561void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search)-
562{-
563 OPENSSL_free(search);-
564}
never executed: end of block
0
565-
566/* Search term accessors */-
567int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion)-
568{-
569 return criterion->search_type;
never executed: return criterion->search_type;
0
570}-
571-
572X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion)-
573{-
574 return criterion->name;
never executed: return criterion->name;
0
575}-
576-
577const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH-
578 *criterion)-
579{-
580 return criterion->serial;
never executed: return criterion->serial;
0
581}-
582-
583const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH-
584 *criterion, size_t *length)-
585{-
586 *length = criterion->stringlength;-
587 return criterion->string;
never executed: return criterion->string;
0
588}-
589-
590const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion)-
591{-
592 return (const char *)criterion->string;
never executed: return (const char *)criterion->string;
0
593}-
594-
595const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion)-
596{-
597 return criterion->digest;
never executed: return criterion->digest;
0
598}-
599-
600/* Internal functions */-
601OSSL_STORE_INFO *ossl_store_info_new_EMBEDDED(const char *new_pem_name,-
602 BUF_MEM *embedded)-
603{-
604 OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_EMBEDDED, NULL);-
605-
606 if (info == NULL) {
info == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
607 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED,-
608 ERR_R_MALLOC_FAILURE);-
609 return NULL;
never executed: return ((void *)0) ;
0
610 }-
611-
612 info->_.embedded.blob = embedded;-
613 info->_.embedded.pem_name =-
614 new_pem_name == NULL ? NULL : OPENSSL_strdup(new_pem_name);
new_pem_name == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
615-
616 if (new_pem_name != NULL && info->_.embedded.pem_name == NULL) {
new_pem_name != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
info->_.embedd...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
617 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED,-
618 ERR_R_MALLOC_FAILURE);-
619 OSSL_STORE_INFO_free(info);-
620 info = NULL;-
621 }
never executed: end of block
0
622-
623 return info;
never executed: return info;
0
624}-
625-
626BUF_MEM *ossl_store_info_get0_EMBEDDED_buffer(OSSL_STORE_INFO *info)-
627{-
628 if (info->type == OSSL_STORE_INFO_EMBEDDED)
info->type == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
629 return info->_.embedded.blob;
never executed: return info->_.embedded.blob;
0
630 return NULL;
never executed: return ((void *)0) ;
0
631}-
632-
633char *ossl_store_info_get0_EMBEDDED_pem_name(OSSL_STORE_INFO *info)-
634{-
635 if (info->type == OSSL_STORE_INFO_EMBEDDED)
info->type == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
636 return info->_.embedded.pem_name;
never executed: return info->_.embedded.pem_name;
0
637 return NULL;
never executed: return ((void *)0) ;
0
638}-
639-
640OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method,-
641 void *ui_data)-
642{-
643 OSSL_STORE_CTX *ctx = NULL;-
644 const OSSL_STORE_LOADER *loader = NULL;-
645 OSSL_STORE_LOADER_CTX *loader_ctx = NULL;-
646-
647 if ((loader = ossl_store_get0_loader_int("file")) == NULL
(loader = ossl...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
648 || ((loader_ctx = ossl_store_file_attach_pem_bio_int(bp)) == NULL))
((loader_ctx =... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
649 goto done;
never executed: goto done;
0
650 if ((ctx = OPENSSL_zalloc(sizeof(*ctx))) == NULL) {
(ctx = CRYPTO_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
651 OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO,-
652 ERR_R_MALLOC_FAILURE);-
653 goto done;
never executed: goto done;
0
654 }-
655-
656 ctx->loader = loader;-
657 ctx->loader_ctx = loader_ctx;-
658 loader_ctx = NULL;-
659 ctx->ui_method = ui_method;-
660 ctx->ui_data = ui_data;-
661 ctx->post_process = NULL;-
662 ctx->post_process_data = NULL;-
663-
664 done:
code before this statement never executed: done:
0
665 if (loader_ctx != NULL)
loader_ctx != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
666 /*-
667 * We ignore a returned error because we will return NULL anyway in-
668 * this case, so if something goes wrong when closing, that'll simply-
669 * just add another entry on the error stack.-
670 */-
671 (void)loader->close(loader_ctx);
never executed: (void)loader->close(loader_ctx);
0
672 return ctx;
never executed: return ctx;
0
673}-
674-
675int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx)-
676{-
677 int loader_ret = ossl_store_file_detach_pem_bio_int(ctx->loader_ctx);-
678-
679 OPENSSL_free(ctx);-
680 return loader_ret;
never executed: return loader_ret;
0
681}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2