121 lines
4.9 KiB
C
121 lines
4.9 KiB
C
#ifndef __ASN1UPER_INCLUDE__
|
|
#define __ASN1UPER_INCLUDE__
|
|
|
|
/******************************************************************************
|
|
* includes
|
|
*****************************************************************************/
|
|
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <sys/types.h>
|
|
#include <memory.h>
|
|
|
|
#include "embtypes.h"
|
|
#include "asn1common.h"
|
|
|
|
/******************************************************************************
|
|
* defines
|
|
*****************************************************************************/
|
|
|
|
#define uper_get_error(S) ((S)->error)
|
|
#define uper_get_bits_consumed(U) asn1_get_bits_consumed(U)
|
|
#define uper_get_bytes_consumed(U) asn1_get_bytes_consumed(U)
|
|
|
|
#define uper_get_bits_length(U,S) (uper_get_bits_stream(U,S)+1)
|
|
#define uper_put_bits_length(U,L,S) uper_put_bits_stream(U,(L)-1,S)
|
|
|
|
#define uper_get_seq_length(U,S) (uper_get_bits_stream(U,S)+1)
|
|
|
|
#define uper_init_extension(E) asn1_init_extension(E)
|
|
#define uper_init_bitstream(E) asn1_init_bitstream(E)
|
|
|
|
#define uper_get_signed_value(U,B,O) (((int64_t)uper_get_bits_stream(U,B))-O)
|
|
#define uper_get_unsigned_value(U,B) uper_get_bits_stream(U,B)
|
|
|
|
#define uper_get_char_value(O) ((int8_t)(uper_get_value(O,1)))
|
|
#define uper_get_int8_value(O) ((int8_t)(uper_get_value(O,1)))
|
|
#define uper_get_byte_value(O) ((uint8_t)(uper_get_value(O,1)))
|
|
#define uper_get_uint8_value(O) ((uint8_t)(uper_get_value(O,1)))
|
|
|
|
#define uper_get_short_value(O) ((int16_t)(uper_get_value(O,2)))
|
|
#define uper_get_int16_value(O) ((int16_t)(uper_get_value(O,2)))
|
|
#define uper_get_word_value(O) ((uint16_t)(uper_get_value(O,2)))
|
|
#define uper_get_uint16_value(O) ((uint16_t)(uper_get_value(O,2)))
|
|
|
|
#define uper_get_long_value(O) ((int32_t)(uper_get_value(O,4)))
|
|
#define uper_get_int32_value(O) ((int32_t)(uper_get_value(O,4)))
|
|
#define uper_get_dword_value(O) ((uint32_t)(uper_get_value(O,4)))
|
|
#define uper_get_uint32_value(O) ((uint32_t)(uper_get_value(O,4)))
|
|
|
|
#define uper_get_llong_value(O) ((int64_t)uper_get_value(O,8))
|
|
#define uper_get_int64_value(O) ((int64_t)uper_get_value(O,8))
|
|
#define uper_get_qword_value(O) ((uint64_t)uper_get_value(O,8))
|
|
#define uper_get_uint64_value(O) ((uint64_t)uper_get_value(O,8))
|
|
|
|
#define uper_get_string(O,B,N,X) uper_get_octet_stream(O,B,N,X)
|
|
#define uper_put_string(O,B,L,N,X) uper_put_octet_stream(O,B,L,N,X)
|
|
|
|
#define UPER_Stream ASN1_Stream
|
|
#define UPER_Extension ASN1_Extension
|
|
#define UPER_BitStream ASN1_BitStream
|
|
|
|
/******************************************************************************
|
|
* structs & typedefs
|
|
*****************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* function prototypes
|
|
*****************************************************************************/
|
|
/* export C functions to C++ */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void uper_init_stream(UPER_Stream *strm, uint8_t *ptr, uint max);
|
|
UPER_Stream *uper_alloc_stream(uint8_t *ptr, uint max);
|
|
void uper_free_stream(UPER_Stream *oer);
|
|
|
|
// DECODE
|
|
uint uper_get_bit_direct(const uint8_t *pkt, uint bit);
|
|
uint64_t uper_get_bits_direct(const uint8_t *pkt, uint bit, uint bits);
|
|
uint64_t uper_get_bits_stream(UPER_Stream *ptr, uint bits);
|
|
uint64_t uper_get_bits_stream_reverse(UPER_Stream *ptr, uint nbits);
|
|
uint uper_get_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes);
|
|
|
|
// ENCODE
|
|
void uper_put_bit_direct(uint8_t *pkt, uint val, uint bit);
|
|
void uper_put_bits_direct(uint8_t *pkt, uint64_t value, uint bit, uint bits);
|
|
void uper_put_bits_stream(UPER_Stream *uper, uint64_t value, uint bits);
|
|
void uper_put_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes);
|
|
|
|
// EXTENSIONS
|
|
uint uper_get_extension(UPER_Stream *uper, UPER_Extension *ext, uint nbits, uint ellipses);
|
|
uint uper_get_ext_ellipses(UPER_Extension *ext);
|
|
uint uper_get_ext_optional(UPER_Extension *ext, uint bit);
|
|
uint uper_get_ext_length(UPER_Stream *uper, UPER_Extension *ext);
|
|
uint uper_get_ext_skip(UPER_Stream *uper, UPER_Extension *ext);
|
|
void uper_put_extension(UPER_Stream *uper, UPER_Extension *ext);
|
|
void uper_set_ext_ellipses(UPER_Extension *ext);
|
|
void uper_set_ext_length(UPER_Extension *ext, uint len);
|
|
void uper_set_ext_optional(UPER_Extension *ext, uint option, uint val, uint nbits);
|
|
|
|
// OCTET
|
|
uint uper_get_octet_stream(UPER_Stream *ptr, uint8_t *buf, uint min, uint max);
|
|
void uper_put_octet_stream(UPER_Stream *uper, uint8_t *buf, uint len, uint min, uint max);
|
|
|
|
// BIT STREAM
|
|
uint64_t uper_get_bitstream(UPER_Stream *uper, UPER_BitStream *bs, uint max);
|
|
uint64_t uper_get_bit_bitstream(UPER_BitStream *bs, uint bit);
|
|
void uper_put_bitstream(UPER_Stream *uper, UPER_BitStream *bs);
|
|
void uper_set_bit_bitstream(UPER_BitStream *bs, uint bit, uint max);
|
|
void uper_set_bits_bitstream(UPER_BitStream *bs, uint64_t value, uint max);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
/******************************************************************************
|
|
* Macros
|
|
* ***************************************************************************/
|
|
|
|
#endif
|