OBJ_nid2obj.3 revision 279265
Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)

Standard preamble:
========================================================================
..
..
.. Set up some character translations and predefined strings. \*(-- will
give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
double quote, and \*(R" will give a right double quote. \*(C+ will
give a nicer C++. Capital omega is used to do unbreakable dashes and
therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
nothing in troff, for use with C<>.
.tr \(*W- . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\}
Escape single quotes in literal strings from groff's Unicode transform.

If the F register is turned on, we'll generate index entries on stderr for
titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
entries marked with X<> in POD. Of course, you'll have to process the
output yourself in some meaningful fashion.

Avoid warning from groff about undefined register 'F'.
.. .nr rF 0 . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF
Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] .\} . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents . \" corrections for vroff . \" for low resolution devices (crt and lpr) \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} ========================================================================

Title "OBJ_nid2obj 3"
OBJ_nid2obj 3 "2015-01-08" "0.9.8zd" "OpenSSL"
For nroff, turn off justification. Always turn off hyphenation; it makes
way too many mistakes in technical documents.
"NAME"
OBJ_nid2obj, OBJ_nid2ln, OBJ_nid2sn, OBJ_obj2nid, OBJ_txt2nid, OBJ_ln2nid, OBJ_sn2nid, OBJ_cmp, OBJ_dup, OBJ_txt2obj, OBJ_obj2txt, OBJ_create, OBJ_cleanup - ASN1 object utility functions
"SYNOPSIS"
Header "SYNOPSIS" .Vb 1 #include <openssl/objects.h> \& ASN1_OBJECT * OBJ_nid2obj(int n); const char * OBJ_nid2ln(int n); const char * OBJ_nid2sn(int n); \& int OBJ_obj2nid(const ASN1_OBJECT *o); int OBJ_ln2nid(const char *ln); int OBJ_sn2nid(const char *sn); \& int OBJ_txt2nid(const char *s); \& ASN1_OBJECT * OBJ_txt2obj(const char *s, int no_name); int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); \& int OBJ_cmp(const ASN1_OBJECT *a,const ASN1_OBJECT *b); ASN1_OBJECT * OBJ_dup(const ASN1_OBJECT *o); \& int OBJ_create(const char *oid,const char *sn,const char *ln); void OBJ_cleanup(void); .Ve
"DESCRIPTION"
Header "DESCRIPTION" The \s-1ASN1\s0 object utility functions process \s-1ASN1_OBJECT\s0 structures which are a representation of the \s-1ASN1 OBJECT IDENTIFIER \s0(\s-1OID\s0) type.

\fIOBJ_nid2obj(), OBJ_nid2ln() and OBJ_nid2sn() convert the \s-1NID \s0n to an \s-1ASN1_OBJECT\s0 structure, its long name and its short name respectively, or \s-1NULL\s0 is an error occurred.

\fIOBJ_obj2nid(), OBJ_ln2nid(), OBJ_sn2nid() return the corresponding \s-1NID\s0 for the object o, the long name <ln> or the short name <sn> respectively or NID_undef if an error occurred.

\fIOBJ_txt2nid() returns \s-1NID\s0 corresponding to text string <s>. s can be a long name, a short name or the numerical respresentation of an object.

\fIOBJ_txt2obj() converts the text string s into an \s-1ASN1_OBJECT\s0 structure. If no_name is 0 then long names and short names will be interpreted as well as numerical forms. If no_name is 1 only the numerical form is acceptable.

\fIOBJ_obj2txt() converts the \s-1ASN1_OBJECT\s0 a into a textual representation. The representation is written as a null terminated string to buf at most buf_len bytes are written, truncating the result if necessary. The total amount of space required is returned. If no_name is 0 then if the object has a long or short name then that will be used, otherwise the numerical form will be used. If no_name is 1 then the numerical form will always be used.

\fIOBJ_cmp() compares a to b. If the two are identical 0 is returned.

\fIOBJ_dup() returns a copy of o.

\fIOBJ_create() adds a new object to the internal table. oid is the numerical form of the object, sn the short name and ln the long name. A new \s-1NID\s0 is returned for the created object.

\fIOBJ_cleanup() cleans up OpenSSLs internal object table: this should be called before an application exits if any new objects were added using OBJ_create().

"NOTES"
Header "NOTES" Objects in OpenSSL can have a short name, a long name and a numerical identifier (\s-1NID\s0) associated with them. A standard set of objects is represented in an internal table. The appropriate values are defined in the header file objects.h.

For example the \s-1OID\s0 for commonName has the following definitions:

.Vb 3 #define SN_commonName "CN" #define LN_commonName "commonName" #define NID_commonName 13 .Ve

New objects can be added by calling OBJ_create().

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.

Objects which are not in the table have the \s-1NID\s0 value NID_undef.

Objects do not need to be in the internal tables to be processed, the functions OBJ_txt2obj() and OBJ_obj2txt() can process the numerical form of an \s-1OID.\s0

"EXAMPLES"
Header "EXAMPLES" Create an object for commonName:

.Vb 2 ASN1_OBJECT *o; o = OBJ_nid2obj(NID_commonName); .Ve

Check if an object is commonName

.Vb 2 if (OBJ_obj2nid(obj) == NID_commonName) /* Do something */ .Ve

Create a new \s-1NID\s0 and initialize an object from it:

.Vb 3 int new_nid; ASN1_OBJECT *obj; new_nid = OBJ_create("1.2.3.4", "NewOID", "New Object Identifier"); \& obj = OBJ_nid2obj(new_nid); .Ve

Create a new object directly:

.Vb 1 obj = OBJ_txt2obj("1.2.3.4", 1); .Ve

"BUGS"
Header "BUGS" \fIOBJ_obj2txt() is awkward and messy to use: it doesn't follow the convention of other OpenSSL functions where the buffer can be set to \s-1NULL\s0 to determine the amount of data that should be written. Instead buf must point to a valid buffer and buf_len should be set to a positive value. A buffer length of 80 should be more than enough to handle any \s-1OID\s0 encountered in practice.
"RETURN VALUES"
Header "RETURN VALUES" \fIOBJ_nid2obj() returns an \s-1ASN1_OBJECT\s0 structure or \s-1NULL\s0 is an error occurred.

\fIOBJ_nid2ln() and OBJ_nid2sn() returns a valid string or \s-1NULL\s0 on error.

\fIOBJ_obj2nid(), OBJ_ln2nid(), OBJ_sn2nid() and OBJ_txt2nid() return a \s-1NID\s0 or NID_undef on error.

"SEE ALSO"
Header "SEE ALSO" \fIERR_get_error\|(3)
"HISTORY"
Header "HISTORY" \s-1TBA\s0