xref: /openbsd-src/lib/libcrypto/man/X509_EXTENSION_set_object.3 (revision a197a99efabaceb29adae7924768205fb80712e9)
1*a197a99eSschwarze.\" $OpenBSD: X509_EXTENSION_set_object.3,v 1.19 2024/12/28 11:04:09 schwarze Exp $
2877d0413Sschwarze.\" full merge up to: OpenSSL 99d63d46 Oct 26 13:56:48 2016 -0400
3a0fbd016Sschwarze.\"
4fcf58271Sschwarze.\" This file is a derived work.
5fcf58271Sschwarze.\" The changes are covered by the following Copyright and license:
6fcf58271Sschwarze.\"
7*a197a99eSschwarze.\" Copyright (c) 2016, 2021, 2024 Ingo Schwarze <schwarze@openbsd.org>
8fcf58271Sschwarze.\"
9fcf58271Sschwarze.\" Permission to use, copy, modify, and distribute this software for any
10fcf58271Sschwarze.\" purpose with or without fee is hereby granted, provided that the above
11fcf58271Sschwarze.\" copyright notice and this permission notice appear in all copies.
12fcf58271Sschwarze.\"
13fcf58271Sschwarze.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14fcf58271Sschwarze.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15fcf58271Sschwarze.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16fcf58271Sschwarze.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17fcf58271Sschwarze.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18fcf58271Sschwarze.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19fcf58271Sschwarze.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20fcf58271Sschwarze.\"
21fcf58271Sschwarze.\" The original file was written by Dr. Stephen Henson <steve@openssl.org>.
22a0fbd016Sschwarze.\" Copyright (c) 2015 The OpenSSL Project.  All rights reserved.
23a0fbd016Sschwarze.\"
24a0fbd016Sschwarze.\" Redistribution and use in source and binary forms, with or without
25a0fbd016Sschwarze.\" modification, are permitted provided that the following conditions
26a0fbd016Sschwarze.\" are met:
27a0fbd016Sschwarze.\"
28a0fbd016Sschwarze.\" 1. Redistributions of source code must retain the above copyright
29a0fbd016Sschwarze.\"    notice, this list of conditions and the following disclaimer.
30a0fbd016Sschwarze.\"
31a0fbd016Sschwarze.\" 2. Redistributions in binary form must reproduce the above copyright
32a0fbd016Sschwarze.\"    notice, this list of conditions and the following disclaimer in
33a0fbd016Sschwarze.\"    the documentation and/or other materials provided with the
34a0fbd016Sschwarze.\"    distribution.
35a0fbd016Sschwarze.\"
36a0fbd016Sschwarze.\" 3. All advertising materials mentioning features or use of this
37a0fbd016Sschwarze.\"    software must display the following acknowledgment:
38a0fbd016Sschwarze.\"    "This product includes software developed by the OpenSSL Project
39a0fbd016Sschwarze.\"    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
40a0fbd016Sschwarze.\"
41a0fbd016Sschwarze.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
42a0fbd016Sschwarze.\"    endorse or promote products derived from this software without
43a0fbd016Sschwarze.\"    prior written permission. For written permission, please contact
44a0fbd016Sschwarze.\"    openssl-core@openssl.org.
45a0fbd016Sschwarze.\"
46a0fbd016Sschwarze.\" 5. Products derived from this software may not be called "OpenSSL"
47a0fbd016Sschwarze.\"    nor may "OpenSSL" appear in their names without prior written
48a0fbd016Sschwarze.\"    permission of the OpenSSL Project.
49a0fbd016Sschwarze.\"
50a0fbd016Sschwarze.\" 6. Redistributions of any form whatsoever must retain the following
51a0fbd016Sschwarze.\"    acknowledgment:
52a0fbd016Sschwarze.\"    "This product includes software developed by the OpenSSL Project
53a0fbd016Sschwarze.\"    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
54a0fbd016Sschwarze.\"
55a0fbd016Sschwarze.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
56a0fbd016Sschwarze.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
57a0fbd016Sschwarze.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
58a0fbd016Sschwarze.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
59a0fbd016Sschwarze.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
60a0fbd016Sschwarze.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
61a0fbd016Sschwarze.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
62a0fbd016Sschwarze.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
63a0fbd016Sschwarze.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
64a0fbd016Sschwarze.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
65a0fbd016Sschwarze.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
66a0fbd016Sschwarze.\" OF THE POSSIBILITY OF SUCH DAMAGE.
67a0fbd016Sschwarze.\"
68*a197a99eSschwarze.Dd $Mdocdate: December 28 2024 $
69a0fbd016Sschwarze.Dt X509_EXTENSION_SET_OBJECT 3
70a0fbd016Sschwarze.Os
71a0fbd016Sschwarze.Sh NAME
72fcf58271Sschwarze.Nm X509_EXTENSION_new ,
73877d0413Sschwarze.Nm X509_EXTENSION_dup ,
74fcf58271Sschwarze.Nm X509_EXTENSION_free ,
75fcf58271Sschwarze.Nm X509_EXTENSION_create_by_NID ,
76fcf58271Sschwarze.Nm X509_EXTENSION_create_by_OBJ ,
77a0fbd016Sschwarze.Nm X509_EXTENSION_set_object ,
78a0fbd016Sschwarze.Nm X509_EXTENSION_set_critical ,
79a0fbd016Sschwarze.Nm X509_EXTENSION_set_data ,
80a0fbd016Sschwarze.Nm X509_EXTENSION_get_object ,
81a0fbd016Sschwarze.Nm X509_EXTENSION_get_critical ,
82*a197a99eSschwarze.Nm X509_EXTENSION_get_data ,
83*a197a99eSschwarze.Nm X509_supported_extension
8449864eb8Sschwarze.\" In the next line, the capital "E" is not a typo.
8549864eb8Sschwarze.\" The ASN.1 structure is called "Extension", not "extension".
86fcf58271Sschwarze.Nd create, change, and inspect X.509 Extension objects
87a0fbd016Sschwarze.Sh SYNOPSIS
88fcf58271Sschwarze.In openssl/x509.h
89fcf58271Sschwarze.Ft X509_EXTENSION *
90fcf58271Sschwarze.Fn X509_EXTENSION_new void
91877d0413Sschwarze.Ft X509_EXTENSION *
92877d0413Sschwarze.Fn X509_EXTENSION_dup "X509_EXTENSION *ex"
93fcf58271Sschwarze.Ft void
94fcf58271Sschwarze.Fn X509_EXTENSION_free "X509_EXTENSION *ex"
95fcf58271Sschwarze.Ft X509_EXTENSION *
96fcf58271Sschwarze.Fo X509_EXTENSION_create_by_NID
97fcf58271Sschwarze.Fa "X509_EXTENSION **ex"
98fcf58271Sschwarze.Fa "int nid"
99fcf58271Sschwarze.Fa "int crit"
100fcf58271Sschwarze.Fa "ASN1_OCTET_STRING *data"
101fcf58271Sschwarze.Fc
102fcf58271Sschwarze.Ft X509_EXTENSION *
103fcf58271Sschwarze.Fo X509_EXTENSION_create_by_OBJ
104fcf58271Sschwarze.Fa "X509_EXTENSION **ex"
105877d0413Sschwarze.Fa "const ASN1_OBJECT *obj"
106fcf58271Sschwarze.Fa "int crit"
107fcf58271Sschwarze.Fa "ASN1_OCTET_STRING *data"
108fcf58271Sschwarze.Fc
109a0fbd016Sschwarze.Ft int
110a0fbd016Sschwarze.Fo X509_EXTENSION_set_object
111a0fbd016Sschwarze.Fa "X509_EXTENSION *ex"
1125e64f191Sschwarze.Fa "const ASN1_OBJECT *obj"
113a0fbd016Sschwarze.Fc
114a0fbd016Sschwarze.Ft int
115a0fbd016Sschwarze.Fo X509_EXTENSION_set_critical
116a0fbd016Sschwarze.Fa "X509_EXTENSION *ex"
117a0fbd016Sschwarze.Fa "int crit"
118a0fbd016Sschwarze.Fc
119a0fbd016Sschwarze.Ft int
120a0fbd016Sschwarze.Fo X509_EXTENSION_set_data
121a0fbd016Sschwarze.Fa "X509_EXTENSION *ex"
122a0fbd016Sschwarze.Fa "ASN1_OCTET_STRING *data"
123a0fbd016Sschwarze.Fc
124a0fbd016Sschwarze.Ft ASN1_OBJECT *
125a0fbd016Sschwarze.Fo X509_EXTENSION_get_object
126a0fbd016Sschwarze.Fa "X509_EXTENSION *ex"
127a0fbd016Sschwarze.Fc
128a0fbd016Sschwarze.Ft int
129a0fbd016Sschwarze.Fo X509_EXTENSION_get_critical
1305e64f191Sschwarze.Fa "const X509_EXTENSION *ex"
131a0fbd016Sschwarze.Fc
132a0fbd016Sschwarze.Ft ASN1_OCTET_STRING *
133a0fbd016Sschwarze.Fo X509_EXTENSION_get_data
134877d0413Sschwarze.Fa "X509_EXTENSION *ex"
135a0fbd016Sschwarze.Fc
136*a197a99eSschwarze.Ft int
137*a197a99eSschwarze.Fo X509_supported_extension
138*a197a99eSschwarze.Fa "X509_EXTENSION *ex"
139*a197a99eSschwarze.Fc
140a0fbd016Sschwarze.Sh DESCRIPTION
141fcf58271Sschwarze.Fn X509_EXTENSION_new
142fcf58271Sschwarzeallocates and initializes an empty
143fcf58271Sschwarze.Vt X509_EXTENSION
14456bc162bSschwarzeobject, representing an ASN.1
14556bc162bSschwarze.Vt Extension
14656bc162bSschwarzestructure defined in RFC 5280 section 4.1.
147fcf58271SschwarzeIt is a wrapper object around specific extension objects of different
148fcf58271Sschwarzetypes and stores an extension type identifier and a criticality
149fcf58271Sschwarzeflag in addition to the DER-encoded form of the wrapped object.
150fcf58271Sschwarze.Vt X509_EXTENSION
151fcf58271Sschwarzeobjects can be used for X.509 v3 certificates inside
152fcf58271Sschwarze.Vt X509_CINF
153fcf58271Sschwarzeobjects and for X.509 v2 certificate revocation lists inside
154fcf58271Sschwarze.Vt X509_CRL_INFO
155fcf58271Sschwarzeand
156fcf58271Sschwarze.Vt X509_REVOKED
157fcf58271Sschwarzeobjects.
158fcf58271Sschwarze.Pp
159877d0413Sschwarze.Fn X509_EXTENSION_dup
160877d0413Sschwarzecreates a deep copy of
161877d0413Sschwarze.Fa ex
162877d0413Sschwarzeusing
163877d0413Sschwarze.Xr ASN1_item_dup 3 .
164877d0413Sschwarze.Pp
165fcf58271Sschwarze.Fn X509_EXTENSION_free
166fcf58271Sschwarzefrees
167fcf58271Sschwarze.Fa ex
168fcf58271Sschwarzeand all objects it is using.
169fcf58271Sschwarze.Pp
170fcf58271Sschwarze.Fn X509_EXTENSION_create_by_NID
171fcf58271Sschwarzecreates an extension of type
172fcf58271Sschwarze.Fa nid
173fcf58271Sschwarzeand criticality
174fcf58271Sschwarze.Fa crit
175fcf58271Sschwarzeusing data
176fcf58271Sschwarze.Fa data .
177fcf58271SschwarzeThe created extension is returned and written to
178fcf58271Sschwarze.Pf * Fa ex
179fcf58271Sschwarzereusing or allocating a new extension if necessary, so
180fcf58271Sschwarze.Pf * Fa ex
181fcf58271Sschwarzeshould either be
182fcf58271Sschwarze.Dv NULL
183fcf58271Sschwarzeor a valid
184fcf58271Sschwarze.Vt X509_EXTENSION
185fcf58271Sschwarzestructure.
186fcf58271SschwarzeIt must not be an uninitialised pointer.
187fcf58271Sschwarze.Pp
188fcf58271Sschwarze.Fn X509_EXTENSION_create_by_OBJ
189fcf58271Sschwarzeis identical to
190fcf58271Sschwarze.Fn X509_EXTENSION_create_by_NID
191fcf58271Sschwarzeexcept that it creates an extension using
192fcf58271Sschwarze.Fa obj
193fcf58271Sschwarzeinstead of a NID.
194fcf58271Sschwarze.Pp
195a0fbd016Sschwarze.Fn X509_EXTENSION_set_object
196a0fbd016Sschwarzesets the extension type of
197a0fbd016Sschwarze.Fa ex
198a0fbd016Sschwarzeto
199a0fbd016Sschwarze.Fa obj .
200a0fbd016SschwarzeThe
201a0fbd016Sschwarze.Fa obj
202a0fbd016Sschwarzepointer is duplicated internally so
203a0fbd016Sschwarze.Fa obj
204a0fbd016Sschwarzeshould be freed up after use.
205a0fbd016Sschwarze.Pp
206a0fbd016Sschwarze.Fn X509_EXTENSION_set_critical
207a0fbd016Sschwarzesets the criticality of
208a0fbd016Sschwarze.Fa ex
209a0fbd016Sschwarzeto
210a0fbd016Sschwarze.Fa crit .
211a0fbd016SschwarzeIf
212a0fbd016Sschwarze.Fa crit
213a0fbd016Sschwarzeis zero, the extension in non-critical, otherwise it is critical.
214a0fbd016Sschwarze.Pp
215a0fbd016Sschwarze.Fn X509_EXTENSION_set_data
216a0fbd016Sschwarzesets the data in extension
217a0fbd016Sschwarze.Fa ex
218a0fbd016Sschwarzeto
219a0fbd016Sschwarze.Fa data .
220a0fbd016SschwarzeThe
221a0fbd016Sschwarze.Fa data
222a0fbd016Sschwarzepointer is duplicated internally.
223a0fbd016Sschwarze.Pp
224a0fbd016Sschwarze.Fn X509_EXTENSION_get_object
225a0fbd016Sschwarzereturns the extension type of
226a0fbd016Sschwarze.Fa ex
227a0fbd016Sschwarzeas an
228a0fbd016Sschwarze.Vt ASN1_OBJECT
229a0fbd016Sschwarzepointer.
230a0fbd016SschwarzeThe returned pointer is an internal value which must not be freed up.
231a0fbd016Sschwarze.Pp
232a0fbd016Sschwarze.Fn X509_EXTENSION_get_critical
233*a197a99eSschwarzetests whether
234a0fbd016Sschwarze.Fa ex
235*a197a99eSschwarzeis critical.
236a0fbd016Sschwarze.Pp
237a0fbd016Sschwarze.Fn X509_EXTENSION_get_data
238a0fbd016Sschwarzereturns the data of extension
239a0fbd016Sschwarze.Fa ex .
240a0fbd016SschwarzeThe returned pointer is an internal value which must not be freed up.
241a0fbd016Sschwarze.Pp
242*a197a99eSschwarze.Fn X509_supported_extension
243*a197a99eSschwarzechecks whether
244*a197a99eSschwarze.Fa ex
245*a197a99eSschwarzeis of a type supported by the verifier.
246*a197a99eSschwarzeThe list of supported extension types is hardcoded into the library.
247*a197a99eSschwarzeIf an extension is critical but unsupported,
248*a197a99eSschwarzethe certificate will normally be rejected.
249*a197a99eSschwarze.Pp
250a0fbd016SschwarzeThese functions manipulate the contents of an extension directly.
251a0fbd016SschwarzeMost applications will want to parse or encode and add an extension:
252a0fbd016Sschwarzethey should use the extension encode and decode functions instead
253a0fbd016Sschwarzesuch as
254a0fbd016Sschwarze.Xr X509_add1_ext_i2d 3
255a0fbd016Sschwarzeand
256a0fbd016Sschwarze.Xr X509_get_ext_d2i 3 .
257a0fbd016Sschwarze.Pp
258a0fbd016SschwarzeThe
259a0fbd016Sschwarze.Fa data
260a0fbd016Sschwarzeassociated with an extension is the extension encoding in an
261a0fbd016Sschwarze.Vt ASN1_OCTET_STRING
262a0fbd016Sschwarzestructure.
263a0fbd016Sschwarze.Sh RETURN VALUES
264fcf58271Sschwarze.Fn X509_EXTENSION_new ,
265877d0413Sschwarze.Fn X509_EXTENSION_dup ,
266fcf58271Sschwarze.Fn X509_EXTENSION_create_by_NID ,
267a0fbd016Sschwarzeand
268a0fbd016Sschwarze.Fn X509_EXTENSION_create_by_OBJ
269a0fbd016Sschwarzereturn an
270a0fbd016Sschwarze.Vt X509_EXTENSION
271a0fbd016Sschwarzepointer or
272a0fbd016Sschwarze.Dv NULL
273a0fbd016Sschwarzeif an error occurs.
274a0fbd016Sschwarze.Pp
275fcf58271Sschwarze.Fn X509_EXTENSION_set_object ,
276fcf58271Sschwarze.Fn X509_EXTENSION_set_critical ,
277fcf58271Sschwarzeand
278fcf58271Sschwarze.Fn X509_EXTENSION_set_data
279fcf58271Sschwarzereturn 1 for success or 0 for failure.
280fcf58271Sschwarze.Pp
281a0fbd016Sschwarze.Fn X509_EXTENSION_get_object
282a0fbd016Sschwarzereturns an
283a0fbd016Sschwarze.Vt ASN1_OBJECT
284a0fbd016Sschwarzepointer.
285a0fbd016Sschwarze.Pp
286a0fbd016Sschwarze.Fn X509_EXTENSION_get_critical
287a0fbd016Sschwarzereturns 0 for non-critical or 1 for critical.
288a0fbd016Sschwarze.Pp
289a0fbd016Sschwarze.Fn X509_EXTENSION_get_data
290a0fbd016Sschwarzereturns an
291a0fbd016Sschwarze.Vt ASN1_OCTET_STRING
292a0fbd016Sschwarzepointer.
293*a197a99eSschwarze.Pp
294*a197a99eSschwarze.Fn X509_supported_extension
295*a197a99eSschwarzereturns 1 if the type of
296*a197a99eSschwarze.Fa ex
297*a197a99eSschwarzeis supported by the verifier or 0 otherwise.
298a0fbd016Sschwarze.Sh SEE ALSO
299b365cb80Sschwarze.Xr ACCESS_DESCRIPTION_new 3 ,
300b365cb80Sschwarze.Xr AUTHORITY_KEYID_new 3 ,
301b365cb80Sschwarze.Xr BASIC_CONSTRAINTS_new 3 ,
30249864eb8Sschwarze.Xr d2i_X509_EXTENSION 3 ,
303b365cb80Sschwarze.Xr DIST_POINT_new 3 ,
304c4c55c71Sschwarze.Xr ESS_SIGNING_CERT_new 3 ,
305b365cb80Sschwarze.Xr EXTENDED_KEY_USAGE_new 3 ,
306c4c55c71Sschwarze.Xr GENERAL_NAME_new 3 ,
307b365cb80Sschwarze.Xr NAME_CONSTRAINTS_new 3 ,
308fcf58271Sschwarze.Xr OCSP_CRLID_new 3 ,
309fcf58271Sschwarze.Xr OCSP_SERVICELOC_new 3 ,
310b365cb80Sschwarze.Xr PKEY_USAGE_PERIOD_new 3 ,
311b365cb80Sschwarze.Xr POLICYINFO_new 3 ,
312c4c55c71Sschwarze.Xr TS_REQ_new 3 ,
313c4c55c71Sschwarze.Xr X509_check_ca 3 ,
314c4c55c71Sschwarze.Xr X509_check_host 3 ,
315c4c55c71Sschwarze.Xr X509_check_issued 3 ,
3165bcdf354Sschwarze.Xr X509_get_extension_flags 3 ,
31743caf4b1Sschwarze.Xr X509_REQ_add_extensions 3 ,
318f9473784Stb.Xr X509V3_EXT_get_nid 3 ,
3196211ded6Sschwarze.Xr X509V3_EXT_print 3 ,
32080a0aabaSschwarze.Xr X509V3_extensions_print 3 ,
321fcf58271Sschwarze.Xr X509V3_get_d2i 3 ,
322c6fb9ef1Sjmc.Xr X509v3_get_ext_by_NID 3
323fcf58271Sschwarze.Sh STANDARDS
324fcf58271SschwarzeRFC 5280: Internet X.509 Public Key Infrastructure Certificate and
325fcf58271SschwarzeCertificate Revocation List (CRL) Profile
326d9d184f2Sschwarze.Sh HISTORY
32710e00d17Sschwarze.Fn X509_EXTENSION_new
32810e00d17Sschwarzeand
32910e00d17Sschwarze.Fn X509_EXTENSION_free
330877d0413Sschwarzefirst appeared in SSLeay 0.6.2,
331877d0413Sschwarze.Fn X509_EXTENSION_dup
332877d0413Sschwarzein SSLeay 0.6.5, and
33310e00d17Sschwarze.Fn X509_EXTENSION_create_by_NID ,
33410e00d17Sschwarze.Fn X509_EXTENSION_create_by_OBJ ,
33510e00d17Sschwarze.Fn X509_EXTENSION_set_object ,
33610e00d17Sschwarze.Fn X509_EXTENSION_set_critical ,
33710e00d17Sschwarze.Fn X509_EXTENSION_set_data ,
33810e00d17Sschwarze.Fn X509_EXTENSION_get_object ,
33910e00d17Sschwarze.Fn X509_EXTENSION_get_critical ,
34010e00d17Sschwarzeand
34110e00d17Sschwarze.Fn X509_EXTENSION_get_data
342877d0413Sschwarzein SSLeay 0.8.0.
34310e00d17SschwarzeThese functions have been available since
344d9d184f2Sschwarze.Ox 2.4 .
345*a197a99eSschwarze.Pp
346*a197a99eSschwarze.Fn X509_supported_extension
347*a197a99eSschwarzefirst appeared in OpenSSL 0.9.7 and has been available since
348*a197a99eSschwarze.Ox 3.2 .
349