Files
Cnomicon/include/asn1oer.h
2021-01-22 10:16:20 -05:00

112 lines
4.3 KiB
C

#ifndef __ASN1OER_INCLUDE__
#define __ASN1OER_INCLUDE__
/******************************************************************************
* includes
*****************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <memory.h>
#include "embtypes.h"
#include "asn1common.h"
/******************************************************************************
* defines
*****************************************************************************/
#define oer_get_error(O) ((O)->error)
#define oer_get_bytes_consumed(O) asn1_get_bytes_consumed(O)
#define oer_init_extension(E) asn1_init_extension(E)
#define oer_init_bitstream(E) asn1_init_bitstream(E)
#define oer_get_signed_value(U,B,O) (((int64_t)uper_get_bits_stream(U,B))-O)
#define oer_get_unsigned_value(U,B) uper_get_bits_stream(U,B)
#define oer_get_char_value(O) ((int8_t)(oer_get_value(O,1)))
#define oer_get_int8_value(O) ((int8_t)(oer_get_value(O,1)))
#define oer_get_byte_value(O) ((uint8_t)(oer_get_value(O,1)))
#define oer_get_uint8_value(O) ((uint8_t)(oer_get_value(O,1)))
#define oer_get_short_value(O) ((int16_t)(oer_get_value(O,2)))
#define oer_get_int16_value(O) ((int16_t)(oer_get_value(O,2)))
#define oer_get_word_value(O) ((uint16_t)(oer_get_value(O,2)))
#define oer_get_uint16_value(O) ((uint16_t)(oer_get_value(O,2)))
#define oer_get_long_value(O) ((int32_t)(oer_get_value(O,4)))
#define oer_get_int32_value(O) ((int32_t)(oer_get_value(O,4)))
#define oer_get_dword_value(O) ((uint32_t)(oer_get_value(O,4)))
#define oer_get_uint32_value(O) ((uint32_t)(oer_get_value(O,4)))
#define oer_get_llong_value(O) ((int64_t)oer_get_value(O,8))
#define oer_get_int64_value(O) ((int64_t)oer_get_value(O,8))
#define oer_get_qword_value(O) ((uint64_t)oer_get_value(O,8))
#define oer_get_uint64_value(O) ((uint64_t)oer_get_value(O,8))
#define oer_get_string(O,B,N,X) oer_get_octet_stream(O,B,N,X)
#define oer_put_string(O,B,L,N,X) oer_put_octet_stream(O,B,L,N,X)
#define OER_Stream ASN1_Stream
#define OER_Extension ASN1_Extension
#define OER_BitStream ASN1_BitStream
/******************************************************************************
* structs & typedefs
*****************************************************************************/
/******************************************************************************
* function prototypes
*****************************************************************************/
/* export C functions to C++ */
#ifdef __cplusplus
extern "C" {
#endif
void oer_init_stream(OER_Stream *strm, uint8_t *ptr, uint max);
OER_Stream *uper_alloc_stream(uint8_t *ptr, uint max);
void oer_free_stream(OER_Stream *oer);
// DECODE
uint oer_get_length(OER_Stream *oer, uint *value);
uint64_t oer_get_value(OER_Stream *oer, uint size);
uint oer_get_data(OER_Stream *oer, uint8_t *data, uint max);
// ENCODE
uint oer_put_length(OER_Stream *oer, uint value);
void oer_put_value(OER_Stream *oer, uint64_t value, uint size);
void oer_put_data(OER_Stream *oer, uint8_t *data, uint length);
// EXTENSIONS
uint oer_get_extension(OER_Stream *uper, OER_Extension *ext, uint nbits, uint ellipses);
uint oer_get_ext_ellipses(OER_Extension *ext);
uint oer_get_ext_optional(OER_Extension *ext, uint bit);
uint oer_get_ext_length(OER_Stream *uper, OER_Extension *ext);
uint oer_get_ext_skip(OER_Stream *uper, OER_Extension *ext);
void oer_put_extension(OER_Stream *uper, OER_Extension *ext);
void oer_set_ext_ellipses(OER_Extension *ext);
void oer_set_ext_length(OER_Extension *ext, uint len);
void oer_set_ext_optional(OER_Extension *ext, uint option, uint val, uint nbits);
// OCTET
uint oer_get_octet_stream(OER_Stream *ptr, uint8_t *buf, uint min, uint max);
void oer_put_octet_stream(OER_Stream *ptr, uint8_t *buf, uint len, uint min, uint max);
// BIT STREAM
uint64_t oer_get_bitstream(OER_Stream *ptr, OER_BitStream *bs, uint max);
uint64_t oer_get_bit_bitstream(OER_BitStream *bs, uint bit);
void oer_put_bitstream(OER_Stream *ptr, OER_BitStream *bs);
void oer_set_bit_bitstream(OER_BitStream *bs, uint bit, uint max);
void oer_set_bits_bitstream(OER_BitStream *bs, uint64_t value, uint max);
#ifdef __cplusplus
}
#endif
/******************************************************************************
* Macros
* ***************************************************************************/
#endif