20#ifndef FREERDP_CRYPTO_BER_H 
   21#define FREERDP_CRYPTO_BER_H 
   23#include <freerdp/api.h> 
   24#include <freerdp/types.h> 
   26#include <winpr/stream.h> 
   31#define BER_CLASS_MASK 0xC0 
   32#define BER_CLASS_UNIV 0x00  
   33#define BER_CLASS_APPL 0x40  
   34#define BER_CLASS_CTXT 0x80  
   35#define BER_CLASS_PRIV 0xC0  
   38#define BER_PC_MASK 0x20 
   39#define BER_PRIMITIVE 0x00  
   40#define BER_CONSTRUCT 0x20  
   43#define BER_TAG_MASK 0x1F 
   44#define BER_TAG_BOOLEAN 0x01 
   45#define BER_TAG_INTEGER 0x02 
   46#define BER_TAG_BIT_STRING 0x03 
   47#define BER_TAG_OCTET_STRING 0x04 
   48#define BER_TAG_OBJECT_IDENFIER 0x06 
   49#define BER_TAG_ENUMERATED 0x0A 
   50#define BER_TAG_SEQUENCE 0x10 
   51#define BER_TAG_SEQUENCE_OF 0x10 
   53#define BER_PC(_pc) (_pc ? BER_CONSTRUCT : BER_PRIMITIVE) 
   60  FREERDP_API BOOL ber_read_length(
wStream* s, 
size_t* length);
 
   61  FREERDP_API 
size_t ber_write_length(
wStream* s, 
size_t length);
 
   64  FREERDP_API 
size_t _ber_sizeof_length(
size_t length);
 
   65  FREERDP_API BOOL ber_read_universal_tag(
wStream* s, BYTE tag, BOOL pc);
 
   66  FREERDP_API 
size_t ber_write_universal_tag(
wStream* s, BYTE tag, BOOL pc);
 
   67  FREERDP_API BOOL ber_read_application_tag(
wStream* s, BYTE tag, 
size_t* length);
 
   68  FREERDP_API 
void ber_write_application_tag(
wStream* s, BYTE tag, 
size_t length);
 
   69  FREERDP_API BOOL ber_read_enumerated(
wStream* s, BYTE* enumerated, BYTE count);
 
   70  FREERDP_API 
void ber_write_enumerated(
wStream* s, BYTE enumerated, BYTE count);
 
   71  FREERDP_API BOOL ber_read_contextual_tag(
wStream* s, BYTE tag, 
size_t* length, BOOL pc);
 
   72  FREERDP_API 
size_t ber_write_contextual_tag(
wStream* s, BYTE tag, 
size_t length, BOOL pc);
 
   73  FREERDP_API 
size_t ber_sizeof_contextual_tag(
size_t length);
 
   74  FREERDP_API BOOL ber_read_sequence_tag(
wStream* s, 
size_t* length);
 
   75  FREERDP_API 
size_t ber_write_sequence_tag(
wStream* s, 
size_t length);
 
   76  FREERDP_API 
size_t ber_sizeof_sequence(
size_t length);
 
   77  FREERDP_API 
size_t ber_sizeof_sequence_tag(
size_t length);
 
   78  FREERDP_API BOOL ber_read_bit_string(
wStream* s, 
size_t* length, BYTE* padding);
 
   80  FREERDP_API BOOL ber_read_octet_string_tag(
wStream* s, 
size_t* length);
 
   81  FREERDP_API BOOL ber_read_octet_string(
wStream* s, BYTE** content, 
size_t* length);
 
   82  FREERDP_API 
size_t ber_write_octet_string_tag(
wStream* s, 
size_t length);
 
   83  FREERDP_API 
size_t ber_sizeof_octet_string(
size_t length);
 
   84  FREERDP_API 
size_t ber_sizeof_contextual_octet_string(
size_t length);
 
   85  FREERDP_API 
size_t ber_write_char_to_unicode_octet_string(
wStream* s, 
const char* str);
 
   86  FREERDP_API 
size_t ber_write_contextual_char_to_unicode_octet_string(
wStream* s, BYTE tag,
 
   88  FREERDP_API 
size_t ber_write_octet_string(
wStream* s, 
const BYTE* oct_str, 
size_t length);
 
   89  FREERDP_API BOOL ber_read_char_from_unicode_octet_string(
wStream* s, 
char** str);
 
   90  FREERDP_API BOOL ber_read_unicode_octet_string(
wStream* s, LPWSTR* str);
 
   91  FREERDP_API 
size_t ber_write_contextual_octet_string(
wStream* s, BYTE tag, 
const BYTE* oct_str,
 
   93  FREERDP_API 
size_t ber_write_contextual_unicode_octet_string(
wStream* s, BYTE tag, LPWSTR str);
 
   95  FREERDP_API BOOL ber_read_BOOL(
wStream* s, BOOL* value);
 
   96  FREERDP_API 
void ber_write_BOOL(
wStream* s, BOOL value);
 
   97  FREERDP_API BOOL ber_read_integer(
wStream* s, UINT32* value);
 
   98  FREERDP_API 
size_t ber_write_integer(
wStream* s, UINT32 value);
 
   99  FREERDP_API 
size_t ber_write_contextual_integer(
wStream* s, BYTE tag, UINT32 value);
 
  100  FREERDP_API BOOL ber_read_integer_length(
wStream* s, 
size_t* length);
 
  101  FREERDP_API 
size_t ber_sizeof_integer(UINT32 value);
 
  102  FREERDP_API 
size_t ber_sizeof_contextual_integer(UINT32 value);