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