xref: /freebsd/crypto/openssl/doc/man3/X509V3_get_d2i.pod (revision a7148ab39c03abd4d1a84997c70bf96f15dd2a09)
1e71b7053SJung-uk Kim=pod
2e71b7053SJung-uk Kim
3e71b7053SJung-uk Kim=head1 NAME
4e71b7053SJung-uk Kim
5e71b7053SJung-uk KimX509V3_get_d2i, X509V3_add1_i2d, X509V3_EXT_d2i, X509V3_EXT_i2d,
6b077aed3SPierre ProncheryX509_get_ext_d2i, X509_add1_ext_i2d,
7b077aed3SPierre ProncheryX509_CRL_get_ext_d2i, X509_CRL_add1_ext_i2d,
8b077aed3SPierre ProncheryX509_REVOKED_get_ext_d2i, X509_REVOKED_add1_ext_i2d,
9b077aed3SPierre ProncheryX509_get0_extensions, X509_CRL_get0_extensions,
10b077aed3SPierre ProncheryX509_REVOKED_get0_extensions - X509 extension decode and encode functions
11e71b7053SJung-uk Kim
12e71b7053SJung-uk Kim=head1 SYNOPSIS
13e71b7053SJung-uk Kim
14e71b7053SJung-uk Kim #include <openssl/x509v3.h>
15e71b7053SJung-uk Kim
16e71b7053SJung-uk Kim void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
17e71b7053SJung-uk Kim                      int *idx);
18e71b7053SJung-uk Kim int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
19e71b7053SJung-uk Kim                     int crit, unsigned long flags);
20e71b7053SJung-uk Kim
21e71b7053SJung-uk Kim void *X509V3_EXT_d2i(X509_EXTENSION *ext);
22b077aed3SPierre Pronchery X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
23e71b7053SJung-uk Kim
24e71b7053SJung-uk Kim void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
25e71b7053SJung-uk Kim int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
26e71b7053SJung-uk Kim                       unsigned long flags);
27e71b7053SJung-uk Kim
28e71b7053SJung-uk Kim void *X509_CRL_get_ext_d2i(const X509_CRL *crl, int nid, int *crit, int *idx);
29e71b7053SJung-uk Kim int X509_CRL_add1_ext_i2d(X509_CRL *crl, int nid, void *value, int crit,
30e71b7053SJung-uk Kim                           unsigned long flags);
31e71b7053SJung-uk Kim
32e71b7053SJung-uk Kim void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *r, int nid, int *crit, int *idx);
33e71b7053SJung-uk Kim int X509_REVOKED_add1_ext_i2d(X509_REVOKED *r, int nid, void *value, int crit,
34e71b7053SJung-uk Kim                               unsigned long flags);
35e71b7053SJung-uk Kim
36e71b7053SJung-uk Kim const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
37e71b7053SJung-uk Kim const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
38e71b7053SJung-uk Kim const STACK_OF(X509_EXTENSION) *X509_REVOKED_get0_extensions(const X509_REVOKED *r);
39e71b7053SJung-uk Kim
40e71b7053SJung-uk Kim=head1 DESCRIPTION
41e71b7053SJung-uk Kim
42b077aed3SPierre ProncheryX509V3_get_d2i() looks for an extension with OID I<nid> in the extensions
43b077aed3SPierre ProncheryI<x> and, if found, decodes it. If I<idx> is NULL then only one
44b077aed3SPierre Proncheryoccurrence of an extension is permissible, otherwise the first extension after
45b077aed3SPierre Proncheryindex I<*idx> is returned and I<*idx> updated to the location of the extension.
46b077aed3SPierre ProncheryIf I<crit> is not NULL then I<*crit> is set to a status value: -2 if the
47b077aed3SPierre Proncheryextension occurs multiple times (this is only returned if I<idx> is NULL),
48e71b7053SJung-uk Kim-1 if the extension could not be found, 0 if the extension is found and is
49e71b7053SJung-uk Kimnot critical and 1 if critical. A pointer to an extension specific structure
50b077aed3SPierre Proncheryor NULL is returned.
51e71b7053SJung-uk Kim
52b077aed3SPierre ProncheryX509V3_add1_i2d() adds extension I<value> to STACK I<*x> (allocating a new
53b077aed3SPierre ProncherySTACK if necessary) using OID I<nid> and criticality I<crit> according
54b077aed3SPierre Proncheryto I<flags>.
55e71b7053SJung-uk Kim
56e71b7053SJung-uk KimX509V3_EXT_d2i() attempts to decode the ASN.1 data contained in extension
57b077aed3SPierre ProncheryI<ext> and returns a pointer to an extension specific structure or NULL
58e71b7053SJung-uk Kimif the extension could not be decoded (invalid syntax or not supported).
59e71b7053SJung-uk Kim
60b077aed3SPierre ProncheryX509V3_EXT_i2d() encodes the extension specific structure I<ext_struc>
61b077aed3SPierre Proncherywith OID I<ext_nid> and criticality I<crit>.
62e71b7053SJung-uk Kim
63e71b7053SJung-uk KimX509_get_ext_d2i() and X509_add1_ext_i2d() operate on the extensions of
64b077aed3SPierre Proncherycertificate I<x>. They are otherwise identical to X509V3_get_d2i() and
65b077aed3SPierre ProncheryX509V3_add1_i2d().
66e71b7053SJung-uk Kim
67e71b7053SJung-uk KimX509_CRL_get_ext_d2i() and X509_CRL_add1_ext_i2d() operate on the extensions
68b077aed3SPierre Proncheryof CRL I<crl>. They are otherwise identical to X509V3_get_d2i() and
69b077aed3SPierre ProncheryX509V3_add1_i2d().
70e71b7053SJung-uk Kim
71e71b7053SJung-uk KimX509_REVOKED_get_ext_d2i() and X509_REVOKED_add1_ext_i2d() operate on the
72b077aed3SPierre Proncheryextensions of B<X509_REVOKED> structure I<r> (i.e for CRL entry extensions).
73b077aed3SPierre ProncheryThey are otherwise identical to X509V3_get_d2i() and X509V3_add1_i2d().
74e71b7053SJung-uk Kim
75e71b7053SJung-uk KimX509_get0_extensions(), X509_CRL_get0_extensions() and
76b077aed3SPierre ProncheryX509_REVOKED_get0_extensions() return a STACK of all the extensions
77b077aed3SPierre Proncheryof a certificate, a CRL or a CRL entry respectively.
78e71b7053SJung-uk Kim
79e71b7053SJung-uk Kim=head1 NOTES
80e71b7053SJung-uk Kim
81e71b7053SJung-uk KimIn almost all cases an extension can occur at most once and multiple
82b077aed3SPierre Proncheryoccurrences is an error. Therefore, the I<idx> parameter is usually NULL.
83e71b7053SJung-uk Kim
84b077aed3SPierre ProncheryThe I<flags> parameter may be one of the following values.
85e71b7053SJung-uk Kim
86e71b7053SJung-uk KimB<X509V3_ADD_DEFAULT> appends a new extension only if the extension does
87b077aed3SPierre Proncherynot exist. An error is returned if the extension exists.
88e71b7053SJung-uk Kim
89e71b7053SJung-uk KimB<X509V3_ADD_APPEND> appends a new extension, ignoring whether the extension
90b077aed3SPierre Proncheryexists.
91e71b7053SJung-uk Kim
92b077aed3SPierre ProncheryB<X509V3_ADD_REPLACE> replaces an existing extension. If the extension does
93b077aed3SPierre Proncherynot exist, appends a new extension.
94e71b7053SJung-uk Kim
95b077aed3SPierre ProncheryB<X509V3_ADD_REPLACE_EXISTING> replaces an existing extension. If the
96b077aed3SPierre Proncheryextension does not exist, returns an error.
97e71b7053SJung-uk Kim
98e71b7053SJung-uk KimB<X509V3_ADD_KEEP_EXISTING> appends a new extension only if the extension does
99b077aed3SPierre Proncherynot exist. An error is B<not> returned if the extension exists.
100e71b7053SJung-uk Kim
101b077aed3SPierre ProncheryB<X509V3_ADD_DELETE> deletes and frees an existing extension. If the extension
102b077aed3SPierre Proncherydoes not exist, returns an error. No new extension is added.
103e71b7053SJung-uk Kim
104b077aed3SPierre ProncheryIf B<X509V3_ADD_SILENT> is bitwise ORed with I<flags>: any error returned
105b077aed3SPierre Proncherywill not be added to the error queue.
106e71b7053SJung-uk Kim
107b077aed3SPierre ProncheryThe function X509V3_get_d2i() and its variants
108b077aed3SPierre Proncherywill return NULL if the extension is not
109e71b7053SJung-uk Kimfound, occurs multiple times or cannot be decoded. It is possible to
110b077aed3SPierre Proncherydetermine the precise reason by checking the value of I<*crit>.
111*a7148ab3SEnji CooperThe returned pointer must be explicitly freed.
112b077aed3SPierre Pronchery
113b077aed3SPierre ProncheryThe function X509V3_add1_i2d() and its variants allocate B<X509_EXTENSION>
114b077aed3SPierre Proncheryobjects on STACK I<*x> depending on I<flags>. The B<X509_EXTENSION> objects
115b077aed3SPierre Proncherymust be explicitly freed using X509_EXTENSION_free().
116e71b7053SJung-uk Kim
117e71b7053SJung-uk Kim=head1 SUPPORTED EXTENSIONS
118e71b7053SJung-uk Kim
119e71b7053SJung-uk KimThe following sections contain a list of all supported extensions
120e71b7053SJung-uk Kimincluding their name and NID.
121e71b7053SJung-uk Kim
122e71b7053SJung-uk Kim=head2 PKIX Certificate Extensions
123e71b7053SJung-uk Kim
124e71b7053SJung-uk KimThe following certificate extensions are defined in PKIX standards such as
125e71b7053SJung-uk KimRFC5280.
126e71b7053SJung-uk Kim
127e71b7053SJung-uk Kim Basic Constraints                  NID_basic_constraints
128e71b7053SJung-uk Kim Key Usage                          NID_key_usage
129e71b7053SJung-uk Kim Extended Key Usage                 NID_ext_key_usage
130e71b7053SJung-uk Kim
131e71b7053SJung-uk Kim Subject Key Identifier             NID_subject_key_identifier
132e71b7053SJung-uk Kim Authority Key Identifier           NID_authority_key_identifier
133e71b7053SJung-uk Kim
134e71b7053SJung-uk Kim Private Key Usage Period           NID_private_key_usage_period
135e71b7053SJung-uk Kim
136e71b7053SJung-uk Kim Subject Alternative Name           NID_subject_alt_name
137e71b7053SJung-uk Kim Issuer Alternative Name            NID_issuer_alt_name
138e71b7053SJung-uk Kim
139e71b7053SJung-uk Kim Authority Information Access       NID_info_access
140e71b7053SJung-uk Kim Subject Information Access         NID_sinfo_access
141e71b7053SJung-uk Kim
142e71b7053SJung-uk Kim Name Constraints                   NID_name_constraints
143e71b7053SJung-uk Kim
144e71b7053SJung-uk Kim Certificate Policies               NID_certificate_policies
145e71b7053SJung-uk Kim Policy Mappings                    NID_policy_mappings
146e71b7053SJung-uk Kim Policy Constraints                 NID_policy_constraints
147e71b7053SJung-uk Kim Inhibit Any Policy                 NID_inhibit_any_policy
148e71b7053SJung-uk Kim
149e71b7053SJung-uk Kim TLS Feature                        NID_tlsfeature
150e71b7053SJung-uk Kim
151e71b7053SJung-uk Kim=head2 Netscape Certificate Extensions
152e71b7053SJung-uk Kim
153e71b7053SJung-uk KimThe following are (largely obsolete) Netscape certificate extensions.
154e71b7053SJung-uk Kim
155e71b7053SJung-uk Kim Netscape Cert Type                 NID_netscape_cert_type
156e71b7053SJung-uk Kim Netscape Base Url                  NID_netscape_base_url
157e71b7053SJung-uk Kim Netscape Revocation Url            NID_netscape_revocation_url
158e71b7053SJung-uk Kim Netscape CA Revocation Url         NID_netscape_ca_revocation_url
159e71b7053SJung-uk Kim Netscape Renewal Url               NID_netscape_renewal_url
160e71b7053SJung-uk Kim Netscape CA Policy Url             NID_netscape_ca_policy_url
161e71b7053SJung-uk Kim Netscape SSL Server Name           NID_netscape_ssl_server_name
162e71b7053SJung-uk Kim Netscape Comment                   NID_netscape_comment
163e71b7053SJung-uk Kim
164e71b7053SJung-uk Kim=head2 Miscellaneous Certificate Extensions
165e71b7053SJung-uk Kim
166e71b7053SJung-uk Kim Strong Extranet ID                 NID_sxnet
167e71b7053SJung-uk Kim Proxy Certificate Information      NID_proxyCertInfo
168e71b7053SJung-uk Kim
169e71b7053SJung-uk Kim=head2 PKIX CRL Extensions
170e71b7053SJung-uk Kim
171e71b7053SJung-uk KimThe following are CRL extensions from PKIX standards such as RFC5280.
172e71b7053SJung-uk Kim
173e71b7053SJung-uk Kim CRL Number                         NID_crl_number
174e71b7053SJung-uk Kim CRL Distribution Points            NID_crl_distribution_points
175e71b7053SJung-uk Kim Delta CRL Indicator                NID_delta_crl
176e71b7053SJung-uk Kim Freshest CRL                       NID_freshest_crl
177e71b7053SJung-uk Kim Invalidity Date                    NID_invalidity_date
178e71b7053SJung-uk Kim Issuing Distribution Point         NID_issuing_distribution_point
179e71b7053SJung-uk Kim
180e71b7053SJung-uk KimThe following are CRL entry extensions from PKIX standards such as RFC5280.
181e71b7053SJung-uk Kim
182e71b7053SJung-uk Kim CRL Reason Code                    NID_crl_reason
183e71b7053SJung-uk Kim Certificate Issuer                 NID_certificate_issuer
184e71b7053SJung-uk Kim
185e71b7053SJung-uk Kim=head2 OCSP Extensions
186e71b7053SJung-uk Kim
187e71b7053SJung-uk Kim OCSP Nonce                         NID_id_pkix_OCSP_Nonce
188e71b7053SJung-uk Kim OCSP CRL ID                        NID_id_pkix_OCSP_CrlID
189e71b7053SJung-uk Kim Acceptable OCSP Responses          NID_id_pkix_OCSP_acceptableResponses
190e71b7053SJung-uk Kim OCSP No Check                      NID_id_pkix_OCSP_noCheck
191e71b7053SJung-uk Kim OCSP Archive Cutoff                NID_id_pkix_OCSP_archiveCutoff
192e71b7053SJung-uk Kim OCSP Service Locator               NID_id_pkix_OCSP_serviceLocator
193e71b7053SJung-uk Kim Hold Instruction Code              NID_hold_instruction_code
194e71b7053SJung-uk Kim
195e71b7053SJung-uk Kim=head2 Certificate Transparency Extensions
196e71b7053SJung-uk Kim
197e71b7053SJung-uk KimThe following extensions are used by certificate transparency, RFC6962
198e71b7053SJung-uk Kim
199e71b7053SJung-uk Kim CT Precertificate SCTs             NID_ct_precert_scts
200e71b7053SJung-uk Kim CT Certificate SCTs                NID_ct_cert_scts
201e71b7053SJung-uk Kim
202e71b7053SJung-uk Kim=head1 RETURN VALUES
203e71b7053SJung-uk Kim
204b077aed3SPierre ProncheryX509V3_get_d2i(), its variants, and X509V3_EXT_d2i() return
205b077aed3SPierre Proncherya pointer to an extension specific structure or NULL if an error occurs.
206e71b7053SJung-uk Kim
207b077aed3SPierre ProncheryX509V3_add1_i2d() and its variants return 1 if the operation is successful
208b077aed3SPierre Proncheryand 0 if it fails due to a non-fatal error (extension not found, already exists,
209e71b7053SJung-uk Kimcannot be encoded) or -1 due to a fatal error such as a memory allocation
210e71b7053SJung-uk Kimfailure.
211e71b7053SJung-uk Kim
212b077aed3SPierre ProncheryX509V3_EXT_i2d() returns a pointer to an B<X509_EXTENSION> structure
213b077aed3SPierre Proncheryor NULL if an error occurs.
214b077aed3SPierre Pronchery
215e71b7053SJung-uk KimX509_get0_extensions(), X509_CRL_get0_extensions() and
216e71b7053SJung-uk KimX509_REVOKED_get0_extensions() return a stack of extensions. They return
217e71b7053SJung-uk KimNULL if no extensions are present.
218e71b7053SJung-uk Kim
219e71b7053SJung-uk Kim=head1 SEE ALSO
220e71b7053SJung-uk Kim
221e71b7053SJung-uk KimL<d2i_X509(3)>,
222e71b7053SJung-uk KimL<ERR_get_error(3)>,
223e71b7053SJung-uk KimL<X509_CRL_get0_by_serial(3)>,
224e71b7053SJung-uk KimL<X509_get0_signature(3)>,
225e71b7053SJung-uk KimL<X509_get_ext_d2i(3)>,
226e71b7053SJung-uk KimL<X509_get_extension_flags(3)>,
227e71b7053SJung-uk KimL<X509_get_pubkey(3)>,
228e71b7053SJung-uk KimL<X509_get_subject_name(3)>,
229e71b7053SJung-uk KimL<X509_get_version(3)>,
230e71b7053SJung-uk KimL<X509_NAME_add_entry_by_txt(3)>,
231e71b7053SJung-uk KimL<X509_NAME_ENTRY_get_object(3)>,
232e71b7053SJung-uk KimL<X509_NAME_get_index_by_NID(3)>,
233e71b7053SJung-uk KimL<X509_NAME_print_ex(3)>,
234e71b7053SJung-uk KimL<X509_new(3)>,
235e71b7053SJung-uk KimL<X509_sign(3)>,
236e71b7053SJung-uk KimL<X509_verify_cert(3)>
237e71b7053SJung-uk Kim
238e71b7053SJung-uk Kim=head1 COPYRIGHT
239e71b7053SJung-uk Kim
240*a7148ab3SEnji CooperCopyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved.
241e71b7053SJung-uk Kim
242b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
243e71b7053SJung-uk Kimthis file except in compliance with the License.  You can obtain a copy
244e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at
245e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>.
246e71b7053SJung-uk Kim
247e71b7053SJung-uk Kim=cut
248