OpenCoverage

ct.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/include/openssl/ct.h
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#ifndef HEADER_CT_H-
11# define HEADER_CT_H-
12-
13# include <openssl/opensslconf.h>-
14-
15# ifndef OPENSSL_NO_CT-
16# include <openssl/ossl_typ.h>-
17# include <openssl/safestack.h>-
18# include <openssl/x509.h>-
19# include <openssl/cterr.h>-
20# ifdef __cplusplus-
21extern "C" {-
22# endif-
23-
24-
25/* Minimum RSA key size, from RFC6962 */-
26# define SCT_MIN_RSA_BITS 2048-
27-
28/* All hashes are SHA256 in v1 of Certificate Transparency */-
29# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH-
30-
31typedef enum {-
32 CT_LOG_ENTRY_TYPE_NOT_SET = -1,-
33 CT_LOG_ENTRY_TYPE_X509 = 0,-
34 CT_LOG_ENTRY_TYPE_PRECERT = 1-
35} ct_log_entry_type_t;-
36-
37typedef enum {-
38 SCT_VERSION_NOT_SET = -1,-
39 SCT_VERSION_V1 = 0-
40} sct_version_t;-
41-
42typedef enum {-
43 SCT_SOURCE_UNKNOWN,-
44 SCT_SOURCE_TLS_EXTENSION,-
45 SCT_SOURCE_X509V3_EXTENSION,-
46 SCT_SOURCE_OCSP_STAPLED_RESPONSE-
47} sct_source_t;-
48-
49typedef enum {-
50 SCT_VALIDATION_STATUS_NOT_SET,-
51 SCT_VALIDATION_STATUS_UNKNOWN_LOG,-
52 SCT_VALIDATION_STATUS_VALID,-
53 SCT_VALIDATION_STATUS_INVALID,-
54 SCT_VALIDATION_STATUS_UNVERIFIED,-
55 SCT_VALIDATION_STATUS_UNKNOWN_VERSION-
56} sct_validation_status_t;-
57-
58DEFINE_STACK_OF(SCT)
never executed: end of block
never executed: end of block
executed 12972 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
never executed: end of block
executed 29618 times by 4 tests: return OPENSSL_sk_num((const OPENSSL_STACK *)sk);
Executed by:
  • ct_test
  • libcrypto.so.1.1
  • libssl.so.1.1
  • openssl
executed 24073 times by 4 tests: return (SCT *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);
Executed by:
  • ct_test
  • libcrypto.so.1.1
  • libssl.so.1.1
  • openssl
never executed: return (struct stack_st_SCT *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare);
executed 4703 times by 3 tests: return (struct stack_st_SCT *)OPENSSL_sk_new_null();
Executed by:
  • ct_test
  • libcrypto.so.1.1
  • libssl.so.1.1
never executed: return (struct stack_st_SCT *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n);
never executed: return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n);
never executed: return (SCT *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i);
never executed: return (SCT *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, (const void *)ptr);
executed 13205 times by 3 tests: return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);
Executed by:
  • ct_test
  • libcrypto.so.1.1
  • libssl.so.1.1
never executed: return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr);
executed 20 times by 1 test: return (SCT *)OPENSSL_sk_pop((OPENSSL_STACK *)sk);
Executed by:
  • libssl.so.1.1
never executed: return (SCT *)OPENSSL_sk_shift((OPENSSL_STACK *)sk);
never executed: return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx);
never executed: return (SCT *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr);
never executed: return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk);
never executed: return (struct stack_st_SCT *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk);
never executed: return (struct stack_st_SCT *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, (OPENSSL_sk_copyfunc)copyfunc, (OPENSSL_sk_freefunc)freefunc);
never executed: return (sk_SCT_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare);
0-29618
59DEFINE_STACK_OF(CTLOG)
never executed: end of block
never executed: end of block
executed 8025 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
never executed: end of block
executed 28 times by 1 test: return OPENSSL_sk_num((const OPENSSL_STACK *)sk);
Executed by:
  • libcrypto.so.1.1
executed 28 times by 1 test: return (CTLOG *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);
Executed by:
  • libcrypto.so.1.1
never executed: return (struct stack_st_CTLOG *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare);
executed 8025 times by 1 test: return (struct stack_st_CTLOG *)OPENSSL_sk_new_null();
Executed by:
  • libcrypto.so.1.1
never executed: return (struct stack_st_CTLOG *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n);
never executed: return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n);
never executed: return (CTLOG *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i);
never executed: return (CTLOG *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, (const void *)ptr);
executed 14697 times by 1 test: return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);
Executed by:
  • libcrypto.so.1.1
never executed: return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return (CTLOG *)OPENSSL_sk_pop((OPENSSL_STACK *)sk);
never executed: return (CTLOG *)OPENSSL_sk_shift((OPENSSL_STACK *)sk);
never executed: return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx);
never executed: return (CTLOG *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr);
never executed: return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk);
never executed: return (struct stack_st_CTLOG *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk);
never executed: return (struct stack_st_CTLOG *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, (OPENSSL_sk_copyfunc)copyfunc, (OPENSSL_sk_freefunc)freefunc);
never executed: return (sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare);
0-14697
60-
61/******************************************-
62 * CT policy evaluation context functions *-
63 ******************************************/-
64-
65/*-
66 * Creates a new, empty policy evaluation context.-
67 * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished-
68 * with the CT_POLICY_EVAL_CTX.-
69 */-
70CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void);-
71-
72/* Deletes a policy evaluation context and anything it owns. */-
73void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx);-
74-
75/* Gets the peer certificate that the SCTs are for */-
76X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx);-
77-
78/*-
79 * Sets the certificate associated with the received SCTs.-
80 * Increments the reference count of cert.-
81 * Returns 1 on success, 0 otherwise.-
82 */-
83int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert);-
84-
85/* Gets the issuer of the aforementioned certificate */-
86X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx);-
87-
88/*-
89 * Sets the issuer of the certificate associated with the received SCTs.-
90 * Increments the reference count of issuer.-
91 * Returns 1 on success, 0 otherwise.-
92 */-
93int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer);-
94-
95/* Gets the CT logs that are trusted sources of SCTs */-
96const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx);-
97-
98/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */-
99void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx,-
100 CTLOG_STORE *log_store);-
101-
102/*-
103 * Gets the time, in milliseconds since the Unix epoch, that will be used as the-
104 * current time when checking whether an SCT was issued in the future.-
105 * Such SCTs will fail validation, as required by RFC6962.-
106 */-
107uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx);-
108-
109/*-
110 * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch.-
111 * If an SCT's timestamp is after this time, it will be interpreted as having-
112 * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs-
113 * whose timestamp is in the future", so an SCT will not validate in this case.-
114 */-
115void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms);-
116-
117/*****************-
118 * SCT functions *-
119 *****************/-
120-
121/*-
122 * Creates a new, blank SCT.-
123 * The caller is responsible for calling SCT_free when finished with the SCT.-
124 */-
125SCT *SCT_new(void);-
126-
127/*-
128 * Creates a new SCT from some base64-encoded strings.-
129 * The caller is responsible for calling SCT_free when finished with the SCT.-
130 */-
131SCT *SCT_new_from_base64(unsigned char version,-
132 const char *logid_base64,-
133 ct_log_entry_type_t entry_type,-
134 uint64_t timestamp,-
135 const char *extensions_base64,-
136 const char *signature_base64);-
137-
138/*-
139 * Frees the SCT and the underlying data structures.-
140 */-
141void SCT_free(SCT *sct);-
142-
143/*-
144 * Free a stack of SCTs, and the underlying SCTs themselves.-
145 * Intended to be compatible with X509V3_EXT_FREE.-
146 */-
147void SCT_LIST_free(STACK_OF(SCT) *a);-
148-
149/*-
150 * Returns the version of the SCT.-
151 */-
152sct_version_t SCT_get_version(const SCT *sct);-
153-
154/*-
155 * Set the version of an SCT.-
156 * Returns 1 on success, 0 if the version is unrecognized.-
157 */-
158__owur int SCT_set_version(SCT *sct, sct_version_t version);-
159-
160/*-
161 * Returns the log entry type of the SCT.-
162 */-
163ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct);-
164-
165/*-
166 * Set the log entry type of an SCT.-
167 * Returns 1 on success, 0 otherwise.-
168 */-
169__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type);-
170-
171/*-
172 * Gets the ID of the log that an SCT came from.-
173 * Ownership of the log ID remains with the SCT.-
174 * Returns the length of the log ID.-
175 */-
176size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id);-
177-
178/*-
179 * Set the log ID of an SCT to point directly to the *log_id specified.-
180 * The SCT takes ownership of the specified pointer.-
181 * Returns 1 on success, 0 otherwise.-
182 */-
183__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len);-
184-
185/*-
186 * Set the log ID of an SCT.-
187 * This makes a copy of the log_id.-
188 * Returns 1 on success, 0 otherwise.-
189 */-
190__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id,-
191 size_t log_id_len);-
192-
193/*-
194 * Returns the timestamp for the SCT (epoch time in milliseconds).-
195 */-
196uint64_t SCT_get_timestamp(const SCT *sct);-
197-
198/*-
199 * Set the timestamp of an SCT (epoch time in milliseconds).-
200 */-
201void SCT_set_timestamp(SCT *sct, uint64_t timestamp);-
202-
203/*-
204 * Return the NID for the signature used by the SCT.-
205 * For CT v1, this will be either NID_sha256WithRSAEncryption or-
206 * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset).-
207 */-
208int SCT_get_signature_nid(const SCT *sct);-
209-
210/*-
211 * Set the signature type of an SCT-
212 * For CT v1, this should be either NID_sha256WithRSAEncryption or-
213 * NID_ecdsa_with_SHA256.-
214 * Returns 1 on success, 0 otherwise.-
215 */-
216__owur int SCT_set_signature_nid(SCT *sct, int nid);-
217-
218/*-
219 * Set *ext to point to the extension data for the SCT. ext must not be NULL.-
220 * The SCT retains ownership of this pointer.-
221 * Returns length of the data pointed to.-
222 */-
223size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext);-
224-
225/*-
226 * Set the extensions of an SCT to point directly to the *ext specified.-
227 * The SCT takes ownership of the specified pointer.-
228 */-
229void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len);-
230-
231/*-
232 * Set the extensions of an SCT.-
233 * This takes a copy of the ext.-
234 * Returns 1 on success, 0 otherwise.-
235 */-
236__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext,-
237 size_t ext_len);-
238-
239/*-
240 * Set *sig to point to the signature for the SCT. sig must not be NULL.-
241 * The SCT retains ownership of this pointer.-
242 * Returns length of the data pointed to.-
243 */-
244size_t SCT_get0_signature(const SCT *sct, unsigned char **sig);-
245-
246/*-
247 * Set the signature of an SCT to point directly to the *sig specified.-
248 * The SCT takes ownership of the specified pointer.-
249 */-
250void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len);-
251-
252/*-
253 * Set the signature of an SCT to be a copy of the *sig specified.-
254 * Returns 1 on success, 0 otherwise.-
255 */-
256__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig,-
257 size_t sig_len);-
258-
259/*-
260 * The origin of this SCT, e.g. TLS extension, OCSP response, etc.-
261 */-
262sct_source_t SCT_get_source(const SCT *sct);-
263-
264/*-
265 * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc.-
266 * Returns 1 on success, 0 otherwise.-
267 */-
268__owur int SCT_set_source(SCT *sct, sct_source_t source);-
269-
270/*-
271 * Returns a text string describing the validation status of |sct|.-
272 */-
273const char *SCT_validation_status_string(const SCT *sct);-
274-
275/*-
276 * Pretty-prints an |sct| to |out|.-
277 * It will be indented by the number of spaces specified by |indent|.-
278 * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came-
279 * from, so that the log name can be printed.-
280 */-
281void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs);-
282-
283/*-
284 * Pretty-prints an |sct_list| to |out|.-
285 * It will be indented by the number of spaces specified by |indent|.-
286 * SCTs will be delimited by |separator|.-
287 * If |logs| is not NULL, it will be used to lookup the CT log that each SCT-
288 * came from, so that the log names can be printed.-
289 */-
290void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent,-
291 const char *separator, const CTLOG_STORE *logs);-
292-
293/*-
294 * Gets the last result of validating this SCT.-
295 * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET.-
296 */-
297sct_validation_status_t SCT_get_validation_status(const SCT *sct);-
298-
299/*-
300 * Validates the given SCT with the provided context.-
301 * Sets the "validation_status" field of the SCT.-
302 * Returns 1 if the SCT is valid and the signature verifies.-
303 * Returns 0 if the SCT is invalid or could not be verified.-
304 * Returns -1 if an error occurs.-
305 */-
306__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx);-
307-
308/*-
309 * Validates the given list of SCTs with the provided context.-
310 * Sets the "validation_status" field of each SCT.-
311 * Returns 1 if there are no invalid SCTs and all signatures verify.-
312 * Returns 0 if at least one SCT is invalid or could not be verified.-
313 * Returns a negative integer if an error occurs.-
314 */-
315__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts,-
316 CT_POLICY_EVAL_CTX *ctx);-
317-
318-
319/*********************************-
320 * SCT parsing and serialisation *-
321 *********************************/-
322-
323/*-
324 * Serialize (to TLS format) a stack of SCTs and return the length.-
325 * "a" must not be NULL.-
326 * If "pp" is NULL, just return the length of what would have been serialized.-
327 * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer-
328 * for data that caller is responsible for freeing (only if function returns-
329 * successfully).-
330 * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring-
331 * that "*pp" is large enough to accept all of the serialized data.-
332 * Returns < 0 on error, >= 0 indicating bytes written (or would have been)-
333 * on success.-
334 */-
335__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp);-
336-
337/*-
338 * Convert TLS format SCT list to a stack of SCTs.-
339 * If "a" or "*a" is NULL, a new stack will be created that the caller is-
340 * responsible for freeing (by calling SCT_LIST_free).-
341 * "**pp" and "*pp" must not be NULL.-
342 * Upon success, "*pp" will point to after the last bytes read, and a stack-
343 * will be returned.-
344 * Upon failure, a NULL pointer will be returned, and the position of "*pp" is-
345 * not defined.-
346 */-
347STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp,-
348 size_t len);-
349-
350/*-
351 * Serialize (to DER format) a stack of SCTs and return the length.-
352 * "a" must not be NULL.-
353 * If "pp" is NULL, just returns the length of what would have been serialized.-
354 * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer-
355 * for data that caller is responsible for freeing (only if function returns-
356 * successfully).-
357 * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring-
358 * that "*pp" is large enough to accept all of the serialized data.-
359 * Returns < 0 on error, >= 0 indicating bytes written (or would have been)-
360 * on success.-
361 */-
362__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp);-
363-
364/*-
365 * Parses an SCT list in DER format and returns it.-
366 * If "a" or "*a" is NULL, a new stack will be created that the caller is-
367 * responsible for freeing (by calling SCT_LIST_free).-
368 * "**pp" and "*pp" must not be NULL.-
369 * Upon success, "*pp" will point to after the last bytes read, and a stack-
370 * will be returned.-
371 * Upon failure, a NULL pointer will be returned, and the position of "*pp" is-
372 * not defined.-
373 */-
374STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp,-
375 long len);-
376-
377/*-
378 * Serialize (to TLS format) an |sct| and write it to |out|.-
379 * If |out| is null, no SCT will be output but the length will still be returned.-
380 * If |out| points to a null pointer, a string will be allocated to hold the-
381 * TLS-format SCT. It is the responsibility of the caller to free it.-
382 * If |out| points to an allocated string, the TLS-format SCT will be written-
383 * to it.-
384 * The length of the SCT in TLS format will be returned.-
385 */-
386__owur int i2o_SCT(const SCT *sct, unsigned char **out);-
387-
388/*-
389 * Parses an SCT in TLS format and returns it.-
390 * If |psct| is not null, it will end up pointing to the parsed SCT. If it-
391 * already points to a non-null pointer, the pointer will be free'd.-
392 * |in| should be a pointer to a string containing the TLS-format SCT.-
393 * |in| will be advanced to the end of the SCT if parsing succeeds.-
394 * |len| should be the length of the SCT in |in|.-
395 * Returns NULL if an error occurs.-
396 * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len'-
397 * fields will be populated (with |in| and |len| respectively).-
398 */-
399SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len);-
400-
401/********************-
402 * CT log functions *-
403 ********************/-
404-
405/*-
406 * Creates a new CT log instance with the given |public_key| and |name|.-
407 * Takes ownership of |public_key| but copies |name|.-
408 * Returns NULL if malloc fails or if |public_key| cannot be converted to DER.-
409 * Should be deleted by the caller using CTLOG_free when no longer needed.-
410 */-
411CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name);-
412-
413/*-
414 * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER-
415 * in |pkey_base64|. The |name| is a string to help users identify this log.-
416 * Returns 1 on success, 0 on failure.-
417 * Should be deleted by the caller using CTLOG_free when no longer needed.-
418 */-
419int CTLOG_new_from_base64(CTLOG ** ct_log,-
420 const char *pkey_base64, const char *name);-
421-
422/*-
423 * Deletes a CT log instance and its fields.-
424 */-
425void CTLOG_free(CTLOG *log);-
426-
427/* Gets the name of the CT log */-
428const char *CTLOG_get0_name(const CTLOG *log);-
429/* Gets the ID of the CT log */-
430void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id,-
431 size_t *log_id_len);-
432/* Gets the public key of the CT log */-
433EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log);-
434-
435/**************************-
436 * CT log store functions *-
437 **************************/-
438-
439/*-
440 * Creates a new CT log store.-
441 * Should be deleted by the caller using CTLOG_STORE_free when no longer needed.-
442 */-
443CTLOG_STORE *CTLOG_STORE_new(void);-
444-
445/*-
446 * Deletes a CT log store and all of the CT log instances held within.-
447 */-
448void CTLOG_STORE_free(CTLOG_STORE *store);-
449-
450/*-
451 * Finds a CT log in the store based on its log ID.-
452 * Returns the CT log, or NULL if no match is found.-
453 */-
454const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store,-
455 const uint8_t *log_id,-
456 size_t log_id_len);-
457-
458/*-
459 * Loads a CT log list into a |store| from a |file|.-
460 * Returns 1 if loading is successful, or 0 otherwise.-
461 */-
462__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file);-
463-
464/*-
465 * Loads the default CT log list into a |store|.-
466 * See internal/cryptlib.h for the environment variable and file path that are-
467 * consulted to find the default file.-
468 * Returns 1 if loading is successful, or 0 otherwise.-
469 */-
470__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store);-
471-
472# ifdef __cplusplus-
473}-
474# endif-
475# endif-
476#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2