2023-07-21 21:32:25 +00:00
|
|
|
.\" $OpenBSD: OBJ_nid2obj.3,v 1.20 2023/07/21 05:02:53 tb Exp $
|
2023-04-30 01:15:27 +00:00
|
|
|
.\" full merge up to: OpenSSL c264592d May 14 11:28:00 2006 +0000
|
|
|
|
.\" selective merge up to: OpenSSL 35fd9953 May 28 14:49:38 2019 +0200
|
|
|
|
.\"
|
|
|
|
.\" This file is a derived work.
|
|
|
|
.\" The changes are covered by the following Copyright and license:
|
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 2017, 2021 Ingo Schwarze <schwarze@openbsd.org>
|
|
|
|
.\"
|
|
|
|
.\" Permission to use, copy, modify, and distribute this software for any
|
|
|
|
.\" purpose with or without fee is hereby granted, provided that the above
|
|
|
|
.\" copyright notice and this permission notice appear in all copies.
|
|
|
|
.\"
|
|
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
.\"
|
|
|
|
.\" The original file was written by Dr. Stephen Henson <steve@openssl.org>.
|
|
|
|
.\" Copyright (c) 2002, 2006, 2016 The OpenSSL Project.
|
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\"
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\"
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in
|
|
|
|
.\" the documentation and/or other materials provided with the
|
|
|
|
.\" distribution.
|
|
|
|
.\"
|
|
|
|
.\" 3. All advertising materials mentioning features or use of this
|
|
|
|
.\" software must display the following acknowledgment:
|
|
|
|
.\" "This product includes software developed by the OpenSSL Project
|
|
|
|
.\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
|
|
.\"
|
|
|
|
.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
|
|
.\" endorse or promote products derived from this software without
|
|
|
|
.\" prior written permission. For written permission, please contact
|
|
|
|
.\" openssl-core@openssl.org.
|
|
|
|
.\"
|
|
|
|
.\" 5. Products derived from this software may not be called "OpenSSL"
|
|
|
|
.\" nor may "OpenSSL" appear in their names without prior written
|
|
|
|
.\" permission of the OpenSSL Project.
|
|
|
|
.\"
|
|
|
|
.\" 6. Redistributions of any form whatsoever must retain the following
|
|
|
|
.\" acknowledgment:
|
|
|
|
.\" "This product includes software developed by the OpenSSL Project
|
|
|
|
.\" for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
|
|
.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
|
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
|
|
.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
|
|
.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
|
|
.\" OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
.\"
|
2023-07-21 21:32:25 +00:00
|
|
|
.Dd $Mdocdate: July 21 2023 $
|
2023-04-30 01:15:27 +00:00
|
|
|
.Dt OBJ_NID2OBJ 3
|
|
|
|
.Os
|
|
|
|
.Sh NAME
|
|
|
|
.Nm OBJ_nid2obj ,
|
|
|
|
.Nm OBJ_nid2ln ,
|
|
|
|
.Nm OBJ_nid2sn ,
|
|
|
|
.Nm OBJ_obj2nid ,
|
|
|
|
.Nm OBJ_ln2nid ,
|
|
|
|
.Nm OBJ_sn2nid ,
|
|
|
|
.Nm OBJ_txt2nid ,
|
|
|
|
.Nm OBJ_txt2obj ,
|
|
|
|
.Nm OBJ_obj2txt ,
|
|
|
|
.Nm OBJ_cmp ,
|
|
|
|
.Nm OBJ_dup ,
|
|
|
|
.Nm i2t_ASN1_OBJECT ,
|
|
|
|
.Nm i2a_ASN1_OBJECT
|
|
|
|
.Nd inspect and create ASN.1 object identifiers
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
.In openssl/objects.h
|
|
|
|
.Ft ASN1_OBJECT *
|
|
|
|
.Fo OBJ_nid2obj
|
|
|
|
.Fa "int n"
|
|
|
|
.Fc
|
|
|
|
.Ft const char *
|
|
|
|
.Fo OBJ_nid2ln
|
|
|
|
.Fa "int n"
|
|
|
|
.Fc
|
|
|
|
.Ft const char *
|
|
|
|
.Fo OBJ_nid2sn
|
|
|
|
.Fa "int n"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo OBJ_obj2nid
|
|
|
|
.Fa "const ASN1_OBJECT *o"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo OBJ_ln2nid
|
|
|
|
.Fa "const char *ln"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo OBJ_sn2nid
|
|
|
|
.Fa "const char *sn"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo OBJ_txt2nid
|
|
|
|
.Fa "const char *s"
|
|
|
|
.Fc
|
|
|
|
.Ft ASN1_OBJECT *
|
|
|
|
.Fo OBJ_txt2obj
|
|
|
|
.Fa "const char *s"
|
|
|
|
.Fa "int no_name"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo OBJ_obj2txt
|
|
|
|
.Fa "char *buf"
|
|
|
|
.Fa "int buf_len"
|
|
|
|
.Fa "const ASN1_OBJECT *a"
|
|
|
|
.Fa "int no_name"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo OBJ_cmp
|
|
|
|
.Fa "const ASN1_OBJECT *a"
|
|
|
|
.Fa "const ASN1_OBJECT *b"
|
|
|
|
.Fc
|
|
|
|
.Ft ASN1_OBJECT *
|
|
|
|
.Fo OBJ_dup
|
|
|
|
.Fa "const ASN1_OBJECT *o"
|
|
|
|
.Fc
|
|
|
|
.In openssl/asn1.h
|
|
|
|
.Ft int
|
|
|
|
.Fo i2t_ASN1_OBJECT
|
|
|
|
.Fa "char *buf"
|
|
|
|
.Fa "int buf_len"
|
|
|
|
.Fa "const ASN1_OBJECT *a"
|
|
|
|
.Fc
|
|
|
|
.Ft int
|
|
|
|
.Fo i2a_ASN1_OBJECT
|
|
|
|
.Fa "BIO *out_bio"
|
|
|
|
.Fa "const ASN1_OBJECT *a"
|
|
|
|
.Fc
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
The ASN.1 object utility functions process
|
|
|
|
.Vt ASN1_OBJECT
|
|
|
|
structures which are a representation of the ASN.1 OBJECT IDENTIFIER
|
|
|
|
(OID) type.
|
|
|
|
For convenience, OIDs are usually represented in source code as
|
|
|
|
numeric identifiers, or NIDs.
|
|
|
|
OpenSSL has an internal table of OIDs that are generated when the
|
|
|
|
library is built, and their corresponding NIDs are available as
|
|
|
|
defined constants.
|
|
|
|
For the functions below, application code should treat all returned
|
|
|
|
values \(em OIDs, NIDs, or names \(em as constants.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_nid2obj ,
|
|
|
|
.Fn OBJ_nid2ln ,
|
|
|
|
and
|
|
|
|
.Fn OBJ_nid2sn
|
|
|
|
convert the NID
|
|
|
|
.Fa n
|
|
|
|
to an
|
|
|
|
.Vt ASN1_OBJECT
|
|
|
|
structure, its long name, and its short name, respectively, or return
|
|
|
|
.Dv NULL
|
|
|
|
if an error occurred.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_obj2nid ,
|
|
|
|
.Fn OBJ_ln2nid ,
|
|
|
|
and
|
|
|
|
.Fn OBJ_sn2nid
|
|
|
|
return the corresponding NID for the object
|
|
|
|
.Fa o ,
|
|
|
|
the long name
|
|
|
|
.Fa ln ,
|
|
|
|
or the short name
|
|
|
|
.Fa sn ,
|
|
|
|
respectively, or
|
|
|
|
.Dv NID_undef
|
|
|
|
if an error occurred.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_txt2nid
|
|
|
|
returns the NID corresponding to text string
|
|
|
|
.Fa s .
|
|
|
|
.Fa s
|
|
|
|
can be a long name, a short name, or the numerical representation
|
|
|
|
of an object.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_txt2obj
|
|
|
|
converts the text string
|
|
|
|
.Fa s
|
|
|
|
into an
|
|
|
|
.Vt ASN1_OBJECT
|
|
|
|
structure.
|
|
|
|
If
|
|
|
|
.Fa no_name
|
|
|
|
is 0 then long names and short names will be interpreted as well as
|
|
|
|
numerical forms.
|
|
|
|
If
|
|
|
|
.Fa no_name
|
|
|
|
is 1, only the numerical form is acceptable.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_obj2txt
|
|
|
|
converts the
|
|
|
|
.Vt ASN1_OBJECT
|
|
|
|
.Fa a
|
|
|
|
into a textual representation.
|
|
|
|
The representation is written as a NUL terminated string to
|
|
|
|
.Fa buf .
|
|
|
|
At most
|
|
|
|
.Fa buf_len
|
|
|
|
bytes are written, truncating the result if necessary.
|
|
|
|
The total amount of space required is returned.
|
|
|
|
If
|
|
|
|
.Fa no_name
|
|
|
|
is 0 and the object has a long or short name, then that will be used,
|
|
|
|
otherwise the numerical form will be used.
|
|
|
|
.Pp
|
|
|
|
.Fn i2t_ASN1_OBJECT
|
|
|
|
is the same as
|
|
|
|
.Fn OBJ_obj2txt
|
|
|
|
with
|
|
|
|
.Fa no_name
|
|
|
|
set to 0.
|
|
|
|
.Pp
|
|
|
|
.Fn i2a_ASN1_OBJECT
|
|
|
|
writes a textual representation of
|
|
|
|
.Fa a
|
|
|
|
to
|
|
|
|
.Fa out_bio
|
|
|
|
using
|
|
|
|
.Xr BIO_write 3 .
|
|
|
|
It does not write a terminating NUL byte.
|
|
|
|
If
|
|
|
|
.Fa a
|
|
|
|
is
|
|
|
|
.Dv NULL
|
|
|
|
or contains no data, it writes the 4-byte string
|
|
|
|
.Qq NULL .
|
|
|
|
If
|
|
|
|
.Fn i2t_ASN1_OBJECT
|
|
|
|
fails,
|
|
|
|
.Fn i2a_ASN1_OBJECT
|
|
|
|
writes the 9-byte string
|
|
|
|
.Qq <INVALID> .
|
|
|
|
Otherwise, it writes the string constructed with
|
|
|
|
.Fn i2t_ASN1_OBJECT .
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_cmp
|
|
|
|
compares
|
|
|
|
.Fa a
|
|
|
|
to
|
|
|
|
.Fa b .
|
|
|
|
If the two are identical, 0 is returned.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_dup
|
|
|
|
returns a deep copy of
|
|
|
|
.Fa o
|
|
|
|
if
|
|
|
|
.Fa o
|
|
|
|
is marked as dynamically allocated.
|
|
|
|
The new object and all data contained in it is marked as dynamically
|
|
|
|
allocated.
|
|
|
|
If
|
|
|
|
.Fa o
|
|
|
|
is not marked as dynamically allocated,
|
|
|
|
.Fn OBJ_dup
|
|
|
|
just returns
|
|
|
|
.Fa o
|
|
|
|
itself.
|
|
|
|
.Pp
|
|
|
|
Objects can have a short name, a long name, and a numerical
|
|
|
|
identifier (NID) associated with them.
|
|
|
|
A standard set of objects is represented in an internal table.
|
|
|
|
The appropriate values are defined in the header file
|
|
|
|
.In openssl/objects.h .
|
|
|
|
.Pp
|
|
|
|
For example, the OID for commonName has the following definitions:
|
|
|
|
.Bd -literal
|
|
|
|
#define SN_commonName "CN"
|
|
|
|
#define LN_commonName "commonName"
|
|
|
|
#define NID_commonName 13
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
New objects can be added by calling
|
|
|
|
.Xr OBJ_create 3 .
|
|
|
|
.Pp
|
|
|
|
Table objects have certain advantages over other objects: for example
|
|
|
|
their NIDs can be used in a C language switch statement.
|
|
|
|
They are also static constant structures which are shared: that is there
|
|
|
|
is only a single constant structure for each table object.
|
|
|
|
.Pp
|
|
|
|
Objects which are not in the table have the NID value
|
|
|
|
.Dv NID_undef .
|
|
|
|
.Pp
|
|
|
|
Objects do not need to be in the internal tables to be processed:
|
|
|
|
the functions
|
|
|
|
.Fn OBJ_txt2obj
|
|
|
|
and
|
|
|
|
.Fn OBJ_obj2txt
|
|
|
|
can process the numerical form of an OID.
|
|
|
|
.Sh RETURN VALUES
|
|
|
|
.Fn OBJ_nid2obj ,
|
|
|
|
.Fn OBJ_txt2obj ,
|
|
|
|
and
|
|
|
|
.Fn OBJ_dup
|
|
|
|
return an
|
|
|
|
.Vt ASN1_OBJECT
|
|
|
|
object or
|
|
|
|
.Dv NULL
|
|
|
|
if an error occurs.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_nid2ln
|
|
|
|
and
|
|
|
|
.Fn OBJ_nid2sn
|
|
|
|
return a valid string or
|
|
|
|
.Dv NULL
|
|
|
|
on error.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_obj2nid ,
|
|
|
|
.Fn OBJ_ln2nid ,
|
|
|
|
.Fn OBJ_sn2nid ,
|
|
|
|
and
|
|
|
|
.Fn OBJ_txt2nid
|
|
|
|
return a NID or
|
|
|
|
.Dv NID_undef
|
|
|
|
on error.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_obj2txt
|
|
|
|
and
|
|
|
|
.Fn i2t_ASN1_OBJECT
|
|
|
|
return the amount of space required in bytes,
|
|
|
|
including the terminating NUL byte.
|
|
|
|
.Pp
|
|
|
|
.Fn i2a_ASN1_OBJECT
|
|
|
|
returns the number of bytes written, even if
|
|
|
|
.Fa a
|
|
|
|
is invalid or contains invalid data,
|
|
|
|
but a negative value if memory allocation or a write operation fails.
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_cmp
|
|
|
|
returns 0 if the contents of
|
|
|
|
.Fa a
|
|
|
|
and
|
|
|
|
.Fa b
|
|
|
|
are identical, or non-zero otherwise.
|
|
|
|
.Pp
|
|
|
|
In some cases of failure of
|
|
|
|
.Fn OBJ_nid2obj ,
|
|
|
|
.Fn OBJ_nid2ln ,
|
|
|
|
.Fn OBJ_nid2sn ,
|
|
|
|
.Fn OBJ_txt2nid ,
|
|
|
|
.Fn OBJ_txt2obj ,
|
|
|
|
.Fn OBJ_obj2txt ,
|
|
|
|
.Fn OBJ_dup ,
|
|
|
|
.Fn i2t_ASN1_OBJECT ,
|
|
|
|
and
|
|
|
|
.Fn i2a_ASN1_OBJECT ,
|
|
|
|
the reason can be determined with
|
|
|
|
.Xr ERR_get_error 3 .
|
|
|
|
.Sh EXAMPLES
|
|
|
|
Create an object for
|
|
|
|
.Sy commonName :
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
ASN1_OBJECT *o;
|
|
|
|
o = OBJ_nid2obj(NID_commonName);
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
Check if an object is
|
|
|
|
.Sy commonName :
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
if (OBJ_obj2nid(obj) == NID_commonName)
|
|
|
|
/* Do something */
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
Create a new object directly:
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
obj = OBJ_txt2obj("1.2.3.4", 1);
|
|
|
|
.Ed
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr ASN1_OBJECT_new 3 ,
|
|
|
|
.Xr BIO_new 3 ,
|
|
|
|
.Xr d2i_ASN1_OBJECT 3 ,
|
|
|
|
.Xr OBJ_create 3 ,
|
|
|
|
.Xr OBJ_NAME_add 3
|
|
|
|
.Sh HISTORY
|
|
|
|
.Fn OBJ_nid2obj ,
|
|
|
|
.Fn OBJ_nid2ln ,
|
|
|
|
.Fn OBJ_nid2sn ,
|
|
|
|
.Fn OBJ_obj2nid ,
|
|
|
|
.Fn OBJ_ln2nid ,
|
|
|
|
.Fn OBJ_sn2nid ,
|
|
|
|
.Fn OBJ_txt2nid ,
|
|
|
|
.Fn OBJ_cmp ,
|
|
|
|
and
|
|
|
|
.Fn OBJ_dup
|
|
|
|
first appeared in SSLeay 0.5.1.
|
|
|
|
.Fn i2a_ASN1_OBJECT
|
|
|
|
first appeared in SSLeay 0.6.0, and
|
|
|
|
.Fn i2t_ASN1_OBJECT
|
|
|
|
in SSLeay 0.9.0.
|
|
|
|
All these functions have been available since
|
|
|
|
.Ox 2.4 .
|
|
|
|
.Pp
|
|
|
|
.Fn OBJ_txt2obj
|
|
|
|
first appeared in OpenSSL 0.9.2b.
|
|
|
|
.Fn OBJ_obj2txt
|
|
|
|
first appeared in OpenSSL 0.9.4.
|
|
|
|
Both functions have been available since
|
|
|
|
.Ox 2.6 .
|
|
|
|
.Sh BUGS
|
|
|
|
.Fn OBJ_obj2txt
|
|
|
|
is awkward and messy to use: it doesn't follow the convention of other
|
|
|
|
OpenSSL functions where the buffer can be set to
|
|
|
|
.Dv NULL
|
|
|
|
to determine the amount of data that should be written.
|
|
|
|
Instead
|
|
|
|
.Fa buf
|
|
|
|
must point to a valid buffer and
|
|
|
|
.Fa buf_len
|
|
|
|
should be set to a positive value.
|
|
|
|
A buffer length of 80 should be more than enough to handle any OID
|
|
|
|
encountered in practice.
|