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