1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509v3_get_ext_count, X509v3_get_ext, X509v3_get_ext_by_NID,
|
---|
6 | X509v3_get_ext_by_OBJ, X509v3_get_ext_by_critical, X509v3_delete_ext,
|
---|
7 | X509v3_add_ext, X509_get_ext_count, X509_get_ext,
|
---|
8 | X509_get_ext_by_NID, X509_get_ext_by_OBJ, X509_get_ext_by_critical,
|
---|
9 | X509_delete_ext, X509_add_ext, X509_CRL_get_ext_count, X509_CRL_get_ext,
|
---|
10 | X509_CRL_get_ext_by_NID, X509_CRL_get_ext_by_OBJ, X509_CRL_get_ext_by_critical,
|
---|
11 | X509_CRL_delete_ext, X509_CRL_add_ext, X509_REVOKED_get_ext_count,
|
---|
12 | X509_REVOKED_get_ext, X509_REVOKED_get_ext_by_NID, X509_REVOKED_get_ext_by_OBJ,
|
---|
13 | X509_REVOKED_get_ext_by_critical, X509_REVOKED_delete_ext,
|
---|
14 | X509_REVOKED_add_ext - extension stack utility functions
|
---|
15 |
|
---|
16 | =head1 SYNOPSIS
|
---|
17 |
|
---|
18 | #include <openssl/x509.h>
|
---|
19 |
|
---|
20 | int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
|
---|
21 | X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
|
---|
22 |
|
---|
23 | int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
|
---|
24 | int nid, int lastpos);
|
---|
25 | int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
|
---|
26 | const ASN1_OBJECT *obj, int lastpos);
|
---|
27 | int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
|
---|
28 | int crit, int lastpos);
|
---|
29 | X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
|
---|
30 | STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
|
---|
31 | X509_EXTENSION *ex, int loc);
|
---|
32 |
|
---|
33 | int X509_get_ext_count(const X509 *x);
|
---|
34 | X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
|
---|
35 | int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
|
---|
36 | int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
|
---|
37 | int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
|
---|
38 | X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
|
---|
39 | int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
|
---|
40 |
|
---|
41 | int X509_CRL_get_ext_count(const X509_CRL *x);
|
---|
42 | X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
|
---|
43 | int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
|
---|
44 | int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
|
---|
45 | int lastpos);
|
---|
46 | int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
|
---|
47 | X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
|
---|
48 | int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
|
---|
49 |
|
---|
50 | int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
|
---|
51 | X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
|
---|
52 | int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
|
---|
53 | int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
|
---|
54 | int lastpos);
|
---|
55 | int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, int lastpos);
|
---|
56 | X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
|
---|
57 | int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
|
---|
58 |
|
---|
59 | =head1 DESCRIPTION
|
---|
60 |
|
---|
61 | X509v3_get_ext_count() retrieves the number of extensions in I<x>.
|
---|
62 |
|
---|
63 | X509v3_get_ext() retrieves extension I<loc> from I<x>. The index I<loc>
|
---|
64 | can take any value from 0 to X509_get_ext_count(I<x>) - 1. The returned
|
---|
65 | extension is an internal pointer which B<MUST NOT> be freed by the
|
---|
66 | application.
|
---|
67 |
|
---|
68 | X509v3_get_ext_by_NID() and X509v3_get_ext_by_OBJ() look for an extension
|
---|
69 | with I<nid> or I<obj> from extension STACK I<x>. The search starts from the
|
---|
70 | extension after I<lastpos> or from the beginning if I<lastpos> is -1. If
|
---|
71 | the extension is found, its index is returned, otherwise -1 is returned.
|
---|
72 |
|
---|
73 | X509v3_get_ext_by_critical() is similar to X509v3_get_ext_by_NID() except it
|
---|
74 | looks for an extension of criticality I<crit>. A zero value for I<crit>
|
---|
75 | looks for a non-critical extension. A nonzero value looks for a critical
|
---|
76 | extension.
|
---|
77 |
|
---|
78 | X509v3_delete_ext() deletes the extension with index I<loc> from I<x>.
|
---|
79 | The deleted extension is returned and must be freed by the caller.
|
---|
80 | If I<loc> is an invalid index value, NULL is returned.
|
---|
81 |
|
---|
82 | X509v3_add_ext() adds extension I<ex> to STACK I<*x> at position I<loc>. If
|
---|
83 | I<loc> is -1, the new extension is added to the end. If I<*x> is NULL,
|
---|
84 | a new STACK will be allocated. The passed extension I<ex> is duplicated
|
---|
85 | internally so it must be freed after use.
|
---|
86 |
|
---|
87 | X509_get_ext_count(), X509_get_ext(), X509_get_ext_by_NID(),
|
---|
88 | X509_get_ext_by_OBJ(), X509_get_ext_by_critical(), X509_delete_ext()
|
---|
89 | and X509_add_ext() operate on the extensions of certificate I<x>. They are
|
---|
90 | otherwise identical to the X509v3 functions.
|
---|
91 |
|
---|
92 | X509_CRL_get_ext_count(), X509_CRL_get_ext(), X509_CRL_get_ext_by_NID(),
|
---|
93 | X509_CRL_get_ext_by_OBJ(), X509_CRL_get_ext_by_critical(),
|
---|
94 | X509_CRL_delete_ext() and X509_CRL_add_ext() operate on the extensions of
|
---|
95 | CRL I<x>. They are otherwise identical to the X509v3 functions.
|
---|
96 |
|
---|
97 | X509_REVOKED_get_ext_count(), X509_REVOKED_get_ext(),
|
---|
98 | X509_REVOKED_get_ext_by_NID(), X509_REVOKED_get_ext_by_OBJ(),
|
---|
99 | X509_REVOKED_get_ext_by_critical(), X509_REVOKED_delete_ext() and
|
---|
100 | X509_REVOKED_add_ext() operate on the extensions of CRL entry I<x>.
|
---|
101 | They are otherwise identical to the X509v3 functions.
|
---|
102 |
|
---|
103 | =head1 NOTES
|
---|
104 |
|
---|
105 | These functions are used to examine stacks of extensions directly.
|
---|
106 | Applications that want to parse or encode and add an extension should
|
---|
107 | use the extension encode and decode functions instead, such as
|
---|
108 | X509_add1_ext_i2d() and X509_get_ext_d2i().
|
---|
109 |
|
---|
110 | For X509v3_get_ext_by_NID(), X509v3_get_ext_by_OBJ(),
|
---|
111 | X509v3_get_ext_by_critical() and its variants, a zero index return value
|
---|
112 | is not an error since extension STACK I<x> indices start from zero.
|
---|
113 | These search functions start from the extension B<after> the I<lastpos> parameter
|
---|
114 | so it should initially be set to -1. If it is set to zero, the initial extension
|
---|
115 | will not be checked.
|
---|
116 |
|
---|
117 | X509v3_delete_ext() and its variants are a bit counter-intuitive
|
---|
118 | because these functions do not free the extension they delete.
|
---|
119 | They return an B<X509_EXTENSION> object which must be explicitly freed
|
---|
120 | using X509_EXTENSION_free().
|
---|
121 |
|
---|
122 | =head1 RETURN VALUES
|
---|
123 |
|
---|
124 | X509v3_get_ext_count() returns the extension count or 0 for failure.
|
---|
125 |
|
---|
126 | X509v3_get_ext(), X509v3_delete_ext() and X509_delete_ext() return an
|
---|
127 | B<X509_EXTENSION> structure or NULL if an error occurs.
|
---|
128 |
|
---|
129 | X509v3_get_ext_by_OBJ() and X509v3_get_ext_by_critical() return
|
---|
130 | the extension index or -1 if an error occurs.
|
---|
131 |
|
---|
132 | X509v3_get_ext_by_NID() returns the extension index or negative values if an
|
---|
133 | error occurs.
|
---|
134 |
|
---|
135 | X509v3_add_ext() returns a STACK of extensions or NULL on error.
|
---|
136 |
|
---|
137 | X509_add_ext() returns 1 on success and 0 on error.
|
---|
138 |
|
---|
139 | =head1 SEE ALSO
|
---|
140 |
|
---|
141 | L<X509V3_get_d2i(3)>
|
---|
142 |
|
---|
143 | =head1 COPYRIGHT
|
---|
144 |
|
---|
145 | Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved.
|
---|
146 |
|
---|
147 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
148 | this file except in compliance with the License. You can obtain a copy
|
---|
149 | in the file LICENSE in the source distribution or at
|
---|
150 | L<https://www.openssl.org/source/license.html>.
|
---|
151 |
|
---|
152 | =cut
|
---|