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)
61 FREERDP_API BOOL ber_read_length(
wStream* s,
size_t* length);
63 FREERDP_API
size_t ber_write_length(
wStream* s,
size_t length);
68 FREERDP_API
size_t _ber_sizeof_length(
size_t length);
71 FREERDP_API BOOL ber_read_universal_tag(
wStream* s, BYTE tag, BOOL pc);
73 FREERDP_API
size_t ber_write_universal_tag(
wStream* s, BYTE tag, BOOL pc);
76 FREERDP_API BOOL ber_read_application_tag(
wStream* s, BYTE tag,
size_t* length);
78 FREERDP_API
void ber_write_application_tag(
wStream* s, BYTE tag,
size_t length);
81 FREERDP_API BOOL ber_read_enumerated(
wStream* s, BYTE* enumerated, BYTE count);
83 FREERDP_API
void ber_write_enumerated(
wStream* s, BYTE enumerated, BYTE count);
86 FREERDP_API BOOL ber_read_contextual_tag(
wStream* s, BYTE tag,
size_t* length, BOOL pc);
88 FREERDP_API
size_t ber_write_contextual_tag(
wStream* s, BYTE tag,
size_t length, BOOL pc);
91 FREERDP_API
size_t ber_sizeof_contextual_tag(
size_t length);
94 FREERDP_API BOOL ber_read_sequence_tag(
wStream* s,
size_t* length);
96 FREERDP_API
size_t ber_write_sequence_tag(
wStream* s,
size_t length);
99 FREERDP_API
size_t ber_sizeof_sequence(
size_t length);
102 FREERDP_API
size_t ber_sizeof_sequence_tag(
size_t length);
105 FREERDP_API BOOL ber_read_bit_string(
wStream* s,
size_t* length, BYTE* padding);
108 FREERDP_API BOOL ber_read_octet_string_tag(
wStream* s,
size_t* length);
111 FREERDP_API BOOL ber_read_octet_string(
wStream* s, BYTE** content,
size_t* length);
113 FREERDP_API
size_t ber_write_octet_string_tag(
wStream* s,
size_t length);
116 FREERDP_API
size_t ber_sizeof_octet_string(
size_t length);
119 FREERDP_API
size_t ber_sizeof_contextual_octet_string(
size_t length);
121 FREERDP_API
size_t ber_write_char_to_unicode_octet_string(
wStream* s,
const char* str);
123 FREERDP_API
size_t ber_write_contextual_char_to_unicode_octet_string(
wStream* s, BYTE tag,
124 const char* oct_str);
126 FREERDP_API
size_t ber_write_octet_string(
wStream* s,
const BYTE* oct_str,
size_t length);
129 FREERDP_API BOOL ber_read_char_from_unicode_octet_string(
wStream* s,
char** str);
132 FREERDP_API BOOL ber_read_unicode_octet_string(
wStream* s, LPWSTR* str);
134 FREERDP_API
size_t ber_write_contextual_octet_string(
wStream* s, BYTE tag,
const BYTE* oct_str,
137 FREERDP_API
size_t ber_write_contextual_unicode_octet_string(
wStream* s, BYTE tag, LPWSTR str);
140 FREERDP_API BOOL ber_read_BOOL(
wStream* s, BOOL* value);
142 FREERDP_API
void ber_write_BOOL(
wStream* s, BOOL value);
145 FREERDP_API BOOL ber_read_integer(
wStream* s, UINT32* value);
147 FREERDP_API
size_t ber_write_integer(
wStream* s, UINT32 value);
149 FREERDP_API
size_t ber_write_contextual_integer(
wStream* s, BYTE tag, UINT32 value);
152 FREERDP_API BOOL ber_read_integer_length(
wStream* s,
size_t* length);
155 FREERDP_API
size_t ber_sizeof_integer(UINT32 value);
158 FREERDP_API
size_t ber_sizeof_contextual_integer(UINT32 value);