]> git.stg.codes - stg.git/blob - libs/smux/include/stg/der_encoder.h
More std::jthread stuff.
[stg.git] / libs / smux / include / stg / der_encoder.h
1 /*-
2  * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
3  * Redistribution and modifications are permitted subject to BSD license.
4  */
5 #ifndef _DER_ENCODER_H_
6 #define _DER_ENCODER_H_
7
8 #include <asn_application.h>
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 struct asn_TYPE_descriptor_s;   /* Forward declaration */
15
16 /*
17  * The DER encoder of any type. May be invoked by the application.
18  * Produces DER- and BER-compliant encoding. (DER is a subset of BER).
19  *
20  * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data
21  * produced by der_encode().
22  */
23 asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
24                           const void *struct_ptr, /* Structure to be encoded */
25                           asn_app_consume_bytes_f *consume_bytes_cb,
26                           void *app_key /* Arbitrary callback argument */
27 );
28
29 /* A variant of der_encode() which encodes data into the pre-allocated buffer */
30 asn_enc_rval_t der_encode_to_buffer(
31     const struct asn_TYPE_descriptor_s *type_descriptor,
32     const void *struct_ptr, /* Structure to be encoded */
33     void *buffer,           /* Pre-allocated buffer */
34     size_t buffer_size      /* Initial buffer size (maximum) */
35 );
36
37 /*
38  * Type of the generic DER encoder.
39  */
40 typedef asn_enc_rval_t(der_type_encoder_f)(
41     const struct asn_TYPE_descriptor_s *type_descriptor,
42     const void *struct_ptr, /* Structure to be encoded */
43     int tag_mode,           /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
44     ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
45     void *app_key /* Arbitrary callback argument */
46 );
47
48
49 /*******************************
50  * INTERNALLY USEFUL FUNCTIONS *
51  *******************************/
52
53 /*
54  * Write out leading TL[v] sequence according to the type definition.
55  */
56 ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor,
57                        size_t struct_length,
58                        int tag_mode,      /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
59                        int last_tag_form, /* {0,!0}: prim, constructed */
60                        ber_tlv_tag_t tag,
61                        asn_app_consume_bytes_f *consume_bytes_cb,
62                        void *app_key);
63
64 #ifdef __cplusplus
65 }
66 #endif
67
68 #endif  /* _DER_ENCODER_H_ */