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);
62 FREERDP_API
size_t _ber_sizeof_length(
size_t length);
63 FREERDP_API BOOL ber_read_universal_tag(
wStream* s, BYTE tag, BOOL pc);
64 FREERDP_API
size_t ber_write_universal_tag(
wStream* s, BYTE tag, BOOL pc);
65 FREERDP_API BOOL ber_read_application_tag(
wStream* s, BYTE tag,
size_t* length);
66 FREERDP_API
void ber_write_application_tag(
wStream* s, BYTE tag,
size_t length);
67 FREERDP_API BOOL ber_read_enumerated(
wStream* s, BYTE* enumerated, BYTE count);
68 FREERDP_API
void ber_write_enumerated(
wStream* s, BYTE enumerated, BYTE count);
69 FREERDP_API BOOL ber_read_contextual_tag(
wStream* s, BYTE tag,
size_t* length, BOOL pc);
70 FREERDP_API
size_t ber_write_contextual_tag(
wStream* s, BYTE tag,
size_t length, BOOL pc);
71 FREERDP_API
size_t ber_sizeof_contextual_tag(
size_t length);
72 FREERDP_API BOOL ber_read_sequence_tag(
wStream* s,
size_t* length);
73 FREERDP_API
size_t ber_write_sequence_tag(
wStream* s,
size_t length);
74 FREERDP_API
size_t ber_sizeof_sequence(
size_t length);
75 FREERDP_API
size_t ber_sizeof_sequence_tag(
size_t length);
76 FREERDP_API BOOL ber_read_bit_string(
wStream* s,
size_t* length, BYTE* padding);
78 FREERDP_API BOOL ber_read_octet_string_tag(
wStream* s,
size_t* length);
79 FREERDP_API BOOL ber_read_octet_string(
wStream* s, BYTE** content,
size_t* length);
80 FREERDP_API
size_t ber_write_octet_string_tag(
wStream* s,
size_t length);
81 FREERDP_API
size_t ber_sizeof_octet_string(
size_t length);
82 FREERDP_API
size_t ber_sizeof_contextual_octet_string(
size_t length);
83 FREERDP_API
size_t ber_write_char_to_unicode_octet_string(
wStream* s,
const char* str);
84 FREERDP_API
size_t ber_write_contextual_char_to_unicode_octet_string(
wStream* s, BYTE tag,
86 FREERDP_API
size_t ber_write_octet_string(
wStream* s,
const BYTE* oct_str,
size_t length);
87 FREERDP_API BOOL ber_read_char_from_unicode_octet_string(
wStream* s,
char** str);
88 FREERDP_API BOOL ber_read_unicode_octet_string(
wStream* s, LPWSTR* str);
89 FREERDP_API
size_t ber_write_contextual_octet_string(
wStream* s, BYTE tag,
const BYTE* oct_str,
91 FREERDP_API
size_t ber_write_contextual_unicode_octet_string(
wStream* s, BYTE tag, LPWSTR str);
93 FREERDP_API BOOL ber_read_BOOL(
wStream* s, BOOL* value);
94 FREERDP_API
void ber_write_BOOL(
wStream* s, BOOL value);
95 FREERDP_API BOOL ber_read_integer(
wStream* s, UINT32* value);
96 FREERDP_API
size_t ber_write_integer(
wStream* s, UINT32 value);
97 FREERDP_API
size_t ber_write_contextual_integer(
wStream* s, BYTE tag, UINT32 value);
98 FREERDP_API BOOL ber_read_integer_length(
wStream* s,
size_t* length);
99 FREERDP_API
size_t ber_sizeof_integer(UINT32 value);
100 FREERDP_API
size_t ber_sizeof_contextual_integer(UINT32 value);