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