xref: /openbsd/lib/libutil/ober_set_header.3 (revision 73471bf0)
1.\" $OpenBSD: ober_set_header.3,v 1.4 2021/08/29 19:00:20 schwarze Exp $
2.\"
3.\" Copyright (c) 2007, 2012 Reyk Floeter <reyk@openbsd.org>
4.\"
5.\" Permission to use, copy, modify, and distribute this software for any
6.\" purpose with or without fee is hereby granted, provided that the above
7.\" copyright notice and this permission notice appear in all copies.
8.\"
9.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16.\"
17.Dd $Mdocdate: August 29 2021 $
18.Dt OBER_SET_HEADER 3
19.Os
20.Sh NAME
21.Nm ober_set_header ,
22.Nm ober_calc_len ,
23.Nm ober_set_writecallback ,
24.Nm ober_link_elements ,
25.Nm ober_replace_elements ,
26.Nm ober_dup ,
27.Nm ober_unlink_elements ,
28.Nm ober_free_element ,
29.Nm ober_free_elements
30.Nd change and destroy ASN.1 objects for BER encoding
31.Sh SYNOPSIS
32.In sys/types.h
33.In ber.h
34.Ft "void"
35.Fn "ober_set_header" "struct ber_element *elm" "int class" "unsigned int type"
36.Ft "size_t"
37.Fn "ober_calc_len" "struct ber_element *root"
38.Ft "void"
39.Fo "ober_set_writecallback"
40.Fa "struct ber_element *elm"
41.Fa "void (*cb)(void *arg, size_t offs)"
42.Fa "void *arg"
43.Fc
44.Ft "void"
45.Fn "ober_link_elements" "struct ber_element *prev" "struct ber_element *elm"
46.Ft "void"
47.Fn "ober_replace_elements" "struct ber_element *prev" "struct ber_element *elm"
48.Ft "struct ber_element *"
49.Fn "ober_dup" "struct ber_element *orig"
50.Ft "struct ber_element *"
51.Fn "ober_unlink_elements" "struct ber_element *prev"
52.Ft "void"
53.Fn "ober_free_element" "struct ber_element *root"
54.Ft "void"
55.Fn "ober_free_elements" "struct ber_element *root"
56.Pp
57.Fd #define BER_TYPE_BOOLEAN			1
58.Fd #define BER_TYPE_INTEGER			2
59.Fd #define BER_TYPE_BITSTRING		3
60.Fd #define BER_TYPE_OCTETSTRING		4
61.Fd #define BER_TYPE_NULL			5
62.Fd #define BER_TYPE_OBJECT			6
63.Fd #define BER_TYPE_ENUMERATED		10
64.Fd #define BER_TYPE_SEQUENCE		16
65.Fd #define BER_TYPE_SET			17
66.Pp
67.Fd #define BER_TYPE_CONSTRUCTED		0x20
68.Pp
69.Fd #define BER_CLASS_UNIVERSAL		0x0
70.Fd #define BER_CLASS_UNIV			BER_CLASS_UNIVERSAL
71.Fd #define BER_CLASS_APPLICATION		0x1
72.Fd #define BER_CLASS_APP			BER_CLASS_APPLICATION
73.Fd #define BER_CLASS_CONTEXT		0x2
74.Fd #define BER_CLASS_PRIVATE		0x3
75.Sh DESCRIPTION
76.Fn ober_set_header
77sets the
78.Fa class
79and
80.Fa type
81of
82.Fa elm .
83.Pp
84.Fn ober_calc_len
85determines the total length of
86.Fa root .
87.Pp
88.Fn ober_set_writecallback
89registers the
90.Vt br_cb
91callback function.
92.Pp
93.Fn ober_link_elements
94links
95.Fa prev
96and
97.Fa elm .
98.Pp
99.Fn ober_replace_elements
100replaces
101.Fa prev
102with
103.Fa new
104and frees any dynamically allocated storage associated with
105.Fa prev .
106.Pp
107.Fn ober_dup
108duplicates an element and all linked elements.
109.Pp
110.Fn ober_unlink_elements
111unlinks
112.Fa prev .
113.Pp
114.Fn ober_free_element
115and
116.Fn ober_free_elements
117free any dynamically allocated storage associated with
118.Fa root .
119.Sh RETURN VALUES
120.Fn ober_calc_len
121returns the total length of a fully populated
122.Fa root
123containing one or more
124.Vt ber_element .
125.Pp
126.Fn ober_dup
127returns a pointer to the duplicated element or
128.Dv NULL
129on error.
130.Pp
131.Fn ober_unlink_elements
132returns a pointer to
133.Vt ber_element .
134.Sh SEE ALSO
135.Xr ober_add_string 3 ,
136.Xr ober_get_string 3 ,
137.Xr ober_oid_cmp 3 ,
138.Xr ober_read_elements 3
139.Sh STANDARDS
140ITU-T Recommendation X.690, also known as ISO/IEC 8825-1:
141Information technology - ASN.1 encoding rules.
142.Sh HISTORY
143.Fn ober_dup
144first appeared in
145.Ox 7.0 .
146.Pp
147The other functions first appeared as internal functions in
148.Xr snmpd 8
149in
150.Ox 4.2
151and were moved to libutil in
152.Ox 6.6 .
153.Sh AUTHORS
154.An -nosplit
155The BER library was written by
156.An Claudio Jeker Aq Mt claudio@openbsd.org ,
157.An Marc Balmer Aq Mt marc@openbsd.org
158and
159.An Reyk Floeter Aq Mt reyk@openbsd.org .
160