iPXE
x509.h
Go to the documentation of this file.
1 #ifndef _IPXE_X509_H
2 #define _IPXE_X509_H
3 
4 /** @file
5  *
6  * X.509 certificates
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 FILE_SECBOOT ( PERMITTED );
12 
13 #include <stdint.h>
14 #include <stddef.h>
15 #include <time.h>
16 #include <ipxe/asn1.h>
17 #include <ipxe/refcnt.h>
18 #include <ipxe/list.h>
19 
20 struct image;
21 struct private_key;
22 
23 /** An X.509 serial number */
24 struct x509_serial {
25  /** Raw serial number */
26  struct asn1_cursor raw;
27 };
28 
29 /** An X.509 issuer */
30 struct x509_issuer {
31  /** Raw issuer */
32  struct asn1_cursor raw;
33 };
34 
35 /** An X.509 time */
36 struct x509_time {
37  /** Seconds since the Epoch */
39 };
40 
41 /** An X.509 certificate validity period */
42 struct x509_validity {
43  /** Not valid before */
45  /** Not valid after */
47 };
48 
49 /** An X.509 certificate public key */
51  /** Raw public key information */
52  struct asn1_cursor raw;
53  /** Public key algorithm */
55  /** Public key value */
57 };
58 
59 /** An X.509 certificate subject */
60 struct x509_subject {
61  /** Raw subject */
62  struct asn1_cursor raw;
63  /** Common name */
65  /** Public key information */
67 };
68 
69 /** An X.509 certificate signature */
71  /** Signature algorithm */
73  /** Signature value */
75 };
76 
77 /** An X.509 certificate basic constraints set */
79  /** Subject is a CA */
80  int ca;
81  /** Path length */
82  unsigned int path_len;
83 };
84 
85 /** Unlimited path length
86  *
87  * We use -2U, since this quantity represents one *fewer* than the
88  * maximum number of remaining certificates in a chain.
89  */
90 #define X509_PATH_LEN_UNLIMITED -2U
91 
92 /** An X.509 certificate key usage */
94  /** Key usage extension is present */
95  int present;
96  /** Usage bits */
97  unsigned int bits;
98 };
99 
100 /** X.509 certificate key usage bits */
108  X509_CRL_SIGN = 0x0002,
111 };
112 
113 /** An X.509 certificate extended key usage */
115  /** Usage bits */
116  unsigned int bits;
117 };
118 
119 /** X.509 certificate extended key usage bits
120  *
121  * Extended key usages are identified by OID; these bits are purely an
122  * internal definition.
123  */
127 };
128 
129 /** X.509 certificate OCSP responder */
131  /** URI */
132  struct asn1_cursor uri;
133  /** OCSP status is good */
134  int good;
135 };
136 
137 /** X.509 certificate authority information access */
139  /** OCSP responder */
141 };
142 
143 /** X.509 certificate subject alternative name */
145  /** Names */
147 };
148 
149 /** X.509 certificate general name types */
154 };
155 
156 /** An X.509 certificate extensions set */
158  /** Basic constraints */
160  /** Key usage */
162  /** Extended key usage */
164  /** Authority information access */
166  /** Subject alternative name */
168 };
169 
170 /** A link in an X.509 certificate chain */
171 struct x509_link {
172  /** List of links */
173  struct list_head list;
174  /** Certificate */
176  /** Flags */
177  unsigned int flags;
178 };
179 
180 /** X.509 certficate chain link flags */
182  /** Cross-signed certificate download has been attempted
183  *
184  * This indicates that a cross-signature download attempt has
185  * been made to find a cross-signed issuer for this link's
186  * certificate.
187  */
189  /** OCSP has been attempted
190  *
191  * This indicates that an OCSP attempt has been made using
192  * this link's certificate as an issuer. (We record the flag
193  * on the issuer rather than on the issued certificate, since
194  * we want to retry OCSP if an issuer is replaced with a
195  * downloaded cross-signed certificate.)
196  */
198 };
199 
200 /** An X.509 certificate chain */
201 struct x509_chain {
202  /** Reference count */
203  struct refcnt refcnt;
204  /** List of links */
205  struct list_head links;
206  /** Mark certificate as found
207  *
208  * @v store Certificate store
209  * @v cert X.509 certificate
210  */
211  void ( * found ) ( struct x509_chain *store,
212  struct x509_certificate *cert );
213 };
214 
215 /** An X.509 certificate */
217  /** Reference count */
218  struct refcnt refcnt;
219 
220  /** Link in certificate store */
221  struct x509_link store;
222 
223  /** Flags */
224  unsigned int flags;
225  /** Root against which certificate has been validated (if any) */
226  struct x509_root *root;
227  /** Maximum number of subsequent certificates in chain */
228  unsigned int path_remaining;
229 
230  /** Raw certificate */
231  struct asn1_cursor raw;
232  /** Version */
233  unsigned int version;
234  /** Serial number */
236  /** Raw tbsCertificate */
237  struct asn1_cursor tbs;
238  /** Signature algorithm */
240  /** Issuer */
242  /** Validity */
244  /** Subject */
246  /** Signature */
248  /** Extensions */
250 };
251 
252 /** X.509 certificate flags */
254  /** Certificate was added at build time */
256  /** Certificate was added explicitly at run time */
258 };
259 
260 /**
261  * Get reference to X.509 certificate
262  *
263  * @v cert X.509 certificate
264  * @ret cert X.509 certificate
265  */
266 static inline __attribute__ (( always_inline )) struct x509_certificate *
267 x509_get ( struct x509_certificate *cert ) {
268  ref_get ( &cert->refcnt );
269  return cert;
270 }
271 
272 /**
273  * Drop reference to X.509 certificate
274  *
275  * @v cert X.509 certificate
276  */
277 static inline __attribute__ (( always_inline )) void
278 x509_put ( struct x509_certificate *cert ) {
279  ref_put ( &cert->refcnt );
280 }
281 
282 /**
283  * Get reference to X.509 certificate chain
284  *
285  * @v chain X.509 certificate chain
286  * @ret chain X.509 certificate chain
287  */
288 static inline __attribute__ (( always_inline )) struct x509_chain *
289 x509_chain_get ( struct x509_chain *chain ) {
290  ref_get ( &chain->refcnt );
291  return chain;
292 }
293 
294 /**
295  * Drop reference to X.509 certificate chain
296  *
297  * @v chain X.509 certificate chain
298  */
299 static inline __attribute__ (( always_inline )) void
300 x509_chain_put ( struct x509_chain *chain ) {
301  ref_put ( &chain->refcnt );
302 }
303 
304 /**
305  * Get first certificate in X.509 certificate chain
306  *
307  * @v chain X.509 certificate chain
308  * @ret cert X.509 certificate, or NULL
309  */
310 static inline __attribute__ (( always_inline )) struct x509_certificate *
311 x509_first ( struct x509_chain *chain ) {
312  struct x509_link *link;
313 
314  link = list_first_entry ( &chain->links, struct x509_link, list );
315  return ( link ? link->cert : NULL );
316 }
317 
318 /**
319  * Get last certificate in X.509 certificate chain
320  *
321  * @v chain X.509 certificate chain
322  * @ret cert X.509 certificate, or NULL
323  */
324 static inline __attribute__ (( always_inline )) struct x509_certificate *
325 x509_last ( struct x509_chain *chain ) {
326  struct x509_link *link;
327 
328  link = list_last_entry ( &chain->links, struct x509_link, list );
329  return ( link ? link->cert : NULL );
330 }
331 
332 /** An X.509 extension */
334  /** Name */
335  const char *name;
336  /** Object identifier */
337  struct asn1_cursor oid;
338  /** Parse extension
339  *
340  * @v cert X.509 certificate
341  * @v raw ASN.1 cursor
342  * @ret rc Return status code
343  */
344  int ( * parse ) ( struct x509_certificate *cert,
345  const struct asn1_cursor *raw );
346 };
347 
348 /** An X.509 key purpose */
350  /** Name */
351  const char *name;
352  /** Object identifier */
353  struct asn1_cursor oid;
354  /** Extended key usage bits */
355  unsigned int bits;
356 };
357 
358 /** An X.509 access method */
360  /** Name */
361  const char *name;
362  /** Object identifier */
363  struct asn1_cursor oid;
364  /** Parse access method
365  *
366  * @v cert X.509 certificate
367  * @v raw ASN.1 cursor
368  * @ret rc Return status code
369  */
370  int ( * parse ) ( struct x509_certificate *cert,
371  const struct asn1_cursor *raw );
372 };
373 
374 /** An X.509 root certificate list */
375 struct x509_root {
376  /** Reference count */
377  struct refcnt refcnt;
378  /** Fingerprint digest algorithm */
380  /** Number of certificates */
381  unsigned int count;
382  /** Certificate fingerprints */
383  const void *fingerprints;
384 };
385 
386 /**
387  * Get reference to X.509 root certificate list
388  *
389  * @v root X.509 root certificate list
390  * @ret root X.509 root certificate list
391  */
392 static inline __attribute__ (( always_inline )) struct x509_root *
394  ref_get ( &root->refcnt );
395  return root;
396 }
397 
398 /**
399  * Drop reference to X.509 root certificate list
400  *
401  * @v root X.509 root certificate list
402  */
403 static inline __attribute__ (( always_inline )) void
405  ref_put ( &root->refcnt );
406 }
407 
408 /**
409  * Check if X.509 certificate is self-signed
410  *
411  * @v cert X.509 certificate
412  * @ret is_self_signed X.509 certificate is self-signed
413  */
414 static inline int x509_is_self_signed ( struct x509_certificate *cert ) {
415  return ( asn1_compare ( &cert->issuer.raw, &cert->subject.raw ) == 0 );
416 }
417 
418 extern const char * x509_name ( struct x509_certificate *cert );
419 extern int x509_parse ( struct x509_certificate *cert,
420  const struct asn1_cursor *raw );
421 extern int x509_certificate ( const void *data, size_t len,
422  struct x509_certificate **cert );
423 extern int x509_is_valid ( struct x509_certificate *cert,
424  struct x509_root *root );
425 extern void x509_set_valid ( struct x509_certificate *cert,
426  struct x509_certificate *issuer,
427  struct x509_root *root );
428 extern int x509_validate ( struct x509_certificate *cert,
429  struct x509_certificate *issuer,
430  time_t time, struct x509_root *root );
431 extern int x509_check_name ( struct x509_certificate *cert, const char *name );
432 
433 extern struct x509_chain * x509_alloc_chain ( void );
434 extern int x509_append ( struct x509_chain *chain,
435  struct x509_certificate *cert );
436 extern int x509_append_raw ( struct x509_chain *chain, const void *data,
437  size_t len );
438 extern void x509_truncate ( struct x509_chain *chain, struct x509_link *link );
439 extern struct x509_certificate * x509_find ( struct x509_chain *store,
440  const struct asn1_cursor *raw );
441 extern struct x509_certificate *
443  const struct asn1_cursor *subject );
444 extern struct x509_certificate *
446  const struct asn1_cursor *issuer,
447  const struct asn1_cursor *serial );
448 extern struct x509_certificate * x509_find_key ( struct x509_chain *store,
449  struct private_key *key );
450 extern int x509_auto_append ( struct x509_chain *chain,
451  struct x509_chain *store );
452 extern int x509_validate_chain ( struct x509_chain *chain, time_t time,
453  struct x509_chain *store,
454  struct x509_root *root );
455 extern int image_x509 ( struct image *image, size_t offset,
456  struct x509_certificate **cert );
457 
458 /* Functions exposed only for unit testing */
459 extern int x509_check_issuer ( struct x509_certificate *cert,
460  struct x509_certificate *issuer );
461 extern void x509_fingerprint ( struct x509_certificate *cert,
462  struct digest_algorithm *digest,
463  void *fingerprint );
464 extern int x509_check_root ( struct x509_certificate *cert,
465  struct x509_root *root );
466 extern int x509_check_time ( struct x509_certificate *cert, time_t time );
467 
468 /**
469  * Invalidate X.509 certificate
470  *
471  * @v cert X.509 certificate
472  */
473 static inline void x509_invalidate ( struct x509_certificate *cert ) {
474  x509_root_put ( cert->root );
475  cert->root = NULL;
476  cert->path_remaining = 0;
477 }
478 
479 /**
480  * Invalidate X.509 certificate chain
481  *
482  * @v chain X.509 certificate chain
483  */
484 static inline void x509_invalidate_chain ( struct x509_chain *chain ) {
485  struct x509_link *link;
486 
487  list_for_each_entry ( link, &chain->links, list )
488  x509_invalidate ( link->cert );
489 }
490 
491 #endif /* _IPXE_X509_H */
x509_key_usage_bits
X.509 certificate key usage bits.
Definition: x509.h:101
static void x509_chain_put(struct x509_chain *chain)
Drop reference to X.509 certificate chain.
Definition: x509.h:300
const char * name
Name.
Definition: x509.h:361
#define __attribute__(x)
Definition: compiler.h:10
int x509_validate(struct x509_certificate *cert, struct x509_certificate *issuer, time_t time, struct x509_root *root)
Validate X.509 certificate.
Definition: x509.c:1366
An ASN.1 OID-identified algorithm.
Definition: asn1.h:408
struct asn1_cursor raw
Raw public key information.
Definition: x509.h:52
const char * name
Definition: ath9k_hw.c:1986
struct x509_extended_key_usage ext_usage
Extended key usage.
Definition: x509.h:163
struct asn1_cursor raw
Raw issuer.
Definition: x509.h:32
unsigned int path_remaining
Maximum number of subsequent certificates in chain.
Definition: x509.h:228
static struct x509_chain * x509_chain_get(struct x509_chain *chain)
Get reference to X.509 certificate chain.
Definition: x509.h:289
x509_general_name_types
X.509 certificate general name types.
Definition: x509.h:150
int asn1_compare(const struct asn1_cursor *cursor1, const struct asn1_cursor *cursor2)
Compare two ASN.1 objects.
Definition: asn1.c:458
struct asn1_cursor names
Names.
Definition: x509.h:146
#define ASN1_IMPLICIT_TAG(number)
ASN.1 implicit tag.
Definition: asn1.h:96
static struct x509_certificate * x509_get(struct x509_certificate *cert)
Get reference to X.509 certificate.
Definition: x509.h:267
unsigned int path_len
Path length.
Definition: x509.h:82
struct asn1_cursor value
Signature value.
Definition: x509.h:74
An X.509 certificate basic constraints set.
Definition: x509.h:78
struct refcnt refcnt
Reference count.
Definition: x509.h:218
x509_extended_key_usage_bits
X.509 certificate extended key usage bits.
Definition: x509.h:124
int good
OCSP status is good.
Definition: x509.h:134
struct stp_switch root
Root switch.
Definition: stp.h:27
unsigned int bits
Usage bits.
Definition: x509.h:116
int x509_check_root(struct x509_certificate *cert, struct x509_root *root)
Check X.509 root certificate.
Definition: x509.c:1255
struct list_head links
List of links.
Definition: x509.h:205
const char * x509_name(struct x509_certificate *cert)
Get X.509 certificate display name.
Definition: x509.c:147
struct x509_issuer issuer
Issuer.
Definition: x509.h:241
const char * name
Name.
Definition: x509.h:351
int x509_check_time(struct x509_certificate *cert, time_t time)
Check X.509 certificate validity period.
Definition: x509.c:1287
struct asn1_algorithm * signature_algorithm
Signature algorithm.
Definition: x509.h:239
struct asn1_cursor oid
Object identifier.
Definition: x509.h:337
x509_link_flags
X.509 certficate chain link flags.
Definition: x509.h:181
static void x509_root_put(struct x509_root *root)
Drop reference to X.509 root certificate list.
Definition: x509.h:404
struct asn1_algorithm * algorithm
Signature algorithm.
Definition: x509.h:72
struct asn1_cursor raw
Raw serial number.
Definition: x509.h:26
struct asn1_cursor oid
Object identifier.
Definition: x509.h:353
struct x509_certificate * x509_find_key(struct x509_chain *store, struct private_key *key)
Identify X.509 certificate by corresponding public key.
Definition: x509.c:1835
An executable image.
Definition: image.h:24
void x509_fingerprint(struct x509_certificate *cert, struct digest_algorithm *digest, void *fingerprint)
Calculate X.509 certificate fingerprint.
Definition: x509.c:1237
time_t time
Seconds since the Epoch.
Definition: x509.h:38
int image_x509(struct image *image, size_t offset, struct x509_certificate **cert)
Extract X.509 certificate object from image.
Definition: x509.c:1961
#define list_last_entry(list, type, member)
Get the container of the last entry in a list.
Definition: list.h:347
unsigned int flags
Flags.
Definition: x509.h:224
An X.509 key purpose.
Definition: x509.h:349
A doubly-linked list entry (or list head)
Definition: list.h:19
int present
Key usage extension is present.
Definition: x509.h:95
A reference counter.
Definition: refcnt.h:27
struct x509_certificate * x509_find_issuer_serial(struct x509_chain *store, const struct asn1_cursor *issuer, const struct asn1_cursor *serial)
Identify X.509 certificate by issuer and serial number.
Definition: x509.c:1805
X.509 certificate OCSP responder.
Definition: x509.h:130
struct x509_certificate * x509_find_subject(struct x509_chain *store, const struct asn1_cursor *subject)
Identify X.509 certificate by subject.
Definition: x509.c:1775
#define list_first_entry(list, type, member)
Get the container of the first entry in a list.
Definition: list.h:334
static int x509_is_self_signed(struct x509_certificate *cert)
Check if X.509 certificate is self-signed.
Definition: x509.h:414
An X.509 certificate chain.
Definition: x509.h:201
int x509_check_name(struct x509_certificate *cert, const char *name)
Check X.509 certificate name.
Definition: x509.c:1564
int x509_check_issuer(struct x509_certificate *cert, struct x509_certificate *issuer)
Check X.509 certificate against issuer certificate.
Definition: x509.c:1177
struct x509_time not_before
Not valid before.
Definition: x509.h:44
struct x509_root * root
Root against which certificate has been validated (if any)
Definition: x509.h:226
ASN.1 encoding.
struct x509_signature signature
Signature.
Definition: x509.h:247
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition: list.h:432
struct x509_chain * x509_alloc_chain(void)
Allocate X.509 certificate chain.
Definition: x509.c:1615
void x509_set_valid(struct x509_certificate *cert, struct x509_certificate *issuer, struct x509_root *root)
Set X.509 certificate as validated.
Definition: x509.c:1329
ring len
Length.
Definition: dwmac.h:231
struct digest_algorithm * digest
Fingerprint digest algorithm.
Definition: x509.h:379
u32 link
Link to next descriptor.
Definition: ar9003_mac.h:25
int x509_is_valid(struct x509_certificate *cert, struct x509_root *root)
Check if X.509 certificate is valid.
Definition: x509.c:1313
static struct x509_root * x509_root_get(struct x509_root *root)
Get reference to X.509 root certificate list.
Definition: x509.h:393
An X.509 certificate public key.
Definition: x509.h:50
X.509 certificate authority information access.
Definition: x509.h:138
struct x509_authority_info_access auth_info
Authority information access.
Definition: x509.h:165
struct x509_public_key public_key
Public key information.
Definition: x509.h:66
Linked lists.
static struct x509_certificate * x509_last(struct x509_chain *chain)
Get last certificate in X.509 certificate chain.
Definition: x509.h:325
An X.509 certificate.
Definition: x509.h:216
struct x509_serial serial
Serial number.
Definition: x509.h:235
struct asn1_cursor value
Public key value.
Definition: x509.h:56
OCSP has been attempted.
Definition: x509.h:197
struct x509_subject subject
Subject.
Definition: x509.h:245
int ca
Subject is a CA.
Definition: x509.h:80
#define ref_get(refcnt)
Get additional reference to object.
Definition: refcnt.h:93
struct asn1_algorithm * algorithm
Public key algorithm.
Definition: x509.h:54
An X.509 issuer.
Definition: x509.h:30
uint64_t serial
Serial number.
Definition: edd.h:31
An X.509 certificate key usage.
Definition: x509.h:93
An X.509 certificate validity period.
Definition: x509.h:42
struct asn1_cursor raw
Raw subject.
Definition: x509.h:62
const char * name
Name.
Definition: x509.h:335
unsigned int bits
Extended key usage bits.
Definition: x509.h:355
int(* parse)(struct x509_certificate *cert, const struct asn1_cursor *raw)
Parse access method.
Definition: x509.h:370
Certificate was added at build time.
Definition: x509.h:255
An X.509 root certificate list.
Definition: x509.h:375
struct x509_validity validity
Validity.
Definition: x509.h:243
struct asn1_cursor common_name
Common name.
Definition: x509.h:64
int x509_parse(struct x509_certificate *cert, const struct asn1_cursor *raw)
Parse X.509 certificate from ASN.1 data.
Definition: x509.c:1008
struct x509_subject_alt_name alt_name
Subject alternative name.
Definition: x509.h:167
An X.509 serial number.
Definition: x509.h:24
An X.509 time.
Definition: x509.h:36
int x509_validate_chain(struct x509_chain *chain, time_t time, struct x509_chain *store, struct x509_root *root)
Validate X.509 certificate chain.
Definition: x509.c:1908
An X.509 certificate extended key usage.
Definition: x509.h:114
int x509_certificate(const void *data, size_t len, struct x509_certificate **cert)
Create X.509 certificate.
Definition: x509.c:1074
An X.509 certificate subject.
Definition: x509.h:60
unsigned int bits
Usage bits.
Definition: x509.h:97
int x509_auto_append(struct x509_chain *chain, struct x509_chain *store)
Append X.509 certificates to X.509 certificate chain.
Definition: x509.c:1868
unsigned int version
Version.
Definition: x509.h:233
static void x509_put(struct x509_certificate *cert)
Drop reference to X.509 certificate.
Definition: x509.h:278
static struct x509_certificate * x509_first(struct x509_chain *chain)
Get first certificate in X.509 certificate chain.
Definition: x509.h:311
unsigned int count
Number of certificates.
Definition: x509.h:381
struct asn1_cursor tbs
Raw tbsCertificate.
Definition: x509.h:237
A message digest algorithm.
Definition: crypto.h:19
Reference counting.
X.509 certificate subject alternative name.
Definition: x509.h:144
struct x509_link store
Link in certificate store.
Definition: x509.h:221
uint8_t data[48]
Additional event data.
Definition: ena.h:22
A private key.
Definition: privkey.h:17
struct x509_certificate * x509_find(struct x509_chain *store, const struct asn1_cursor *raw)
Identify X.509 certificate by raw certificate data.
Definition: x509.c:1746
struct x509_time not_after
Not valid after.
Definition: x509.h:46
static void x509_invalidate_chain(struct x509_chain *chain)
Invalidate X.509 certificate chain.
Definition: x509.h:484
__be32 raw[7]
Definition: CIB_PRM.h:28
void x509_truncate(struct x509_chain *chain, struct x509_link *link)
Truncate X.509 certificate chain.
Definition: x509.c:1704
A Uniform Resource Identifier.
Definition: uri.h:65
struct asn1_cursor oid
Object identifier.
Definition: x509.h:363
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
const void * fingerprints
Certificate fingerprints.
Definition: x509.h:383
An X.509 certificate extensions set.
Definition: x509.h:157
uint16_t offset
Offset to command line.
Definition: bzimage.h:8
struct asn1_cursor raw
Raw certificate.
Definition: x509.h:231
struct x509_key_usage usage
Key usage.
Definition: x509.h:161
int64_t time_t
Seconds since the Epoch.
Definition: time.h:19
Time source.
int(* parse)(struct x509_certificate *cert, const struct asn1_cursor *raw)
Parse extension.
Definition: x509.h:344
void(* found)(struct x509_chain *store, struct x509_certificate *cert)
Mark certificate as found.
Definition: x509.h:211
int x509_append_raw(struct x509_chain *chain, const void *data, size_t len)
Append X.509 certificate to X.509 certificate chain.
Definition: x509.c:1674
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
struct x509_ocsp_responder ocsp
OCSP responder.
Definition: x509.h:140
Certificate was added explicitly at run time.
Definition: x509.h:257
An ASN.1 object cursor.
Definition: asn1.h:21
struct x509_basic_constraints basic
Basic constraints.
Definition: x509.h:159
union @391 key
Sense key.
Definition: scsi.h:18
struct refcnt refcnt
Reference count.
Definition: x509.h:203
Cross-signed certificate download has been attempted.
Definition: x509.h:188
int x509_append(struct x509_chain *chain, struct x509_certificate *cert)
Append X.509 certificate to X.509 certificate chain.
Definition: x509.c:1638
struct x509_extensions extensions
Extensions.
Definition: x509.h:249
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:107
x509_flags
X.509 certificate flags.
Definition: x509.h:253
static void x509_invalidate(struct x509_certificate *cert)
Invalidate X.509 certificate.
Definition: x509.h:473
An X.509 certificate signature.
Definition: x509.h:70
An X.509 extension.
Definition: x509.h:333
FILE_SECBOOT(PERMITTED)
An X.509 access method.
Definition: x509.h:359