int ber_write_integer(STREAM* s, uint32 value) { ber_write_universal_tag(s, BER_TAG_INTEGER, false); if (value <= 0xFF) { ber_write_length(s, 1); stream_write_uint8(s, value); return 2; } else if (value <= 0xFFFF) { ber_write_length(s, 2); stream_write_uint16_be(s, value); return 3; } else if (value <= 0xFFFFFFFF) { ber_write_length(s, 4); stream_write_uint32_be(s, value); return 5; } return 0; }
int ber_write_octet_string(wStream* s, const BYTE* oct_str, int length) { int size = 0; size += ber_write_universal_tag(s, BER_TAG_OCTET_STRING, FALSE); size += ber_write_length(s, length); Stream_Write(s, oct_str, length); size += length; return size; }
void test_ber_write_universal_tag(void) { STREAM* s; s = stream_new(sizeof(ber_universal_tag_expected)); ber_write_universal_tag(s, 1, false); ASSERT_STREAM(s, (uint8*) ber_universal_tag_expected, sizeof(ber_universal_tag_expected)); stream_free(s); }
int ber_write_integer(wStream* s, UINT32 value) { if (value < 0x80) { ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE); ber_write_length(s, 1); Stream_Write_UINT8(s, value); return 3; } else if (value < 0x8000) { ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE); ber_write_length(s, 2); Stream_Write_UINT16_BE(s, value); return 4; } else if (value < 0x800000) { ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE); ber_write_length(s, 3); Stream_Write_UINT8(s, (value >> 16)); Stream_Write_UINT16_BE(s, (value & 0xFFFF)); return 5; }
int ber_write_integer(STREAM* s, uint32 value) { ber_write_universal_tag(s, BER_TAG_INTEGER, false); if (value <= 0xFF) { ber_write_length(s, 1); stream_write_uint8(s, value); return 2; } else if (value < 0xFF80) { ber_write_length(s, 2); stream_write_uint16_be(s, value); return 3; } else if (value < 0xFF8000) { ber_write_length(s, 3); stream_write_uint8(s, (value >> 16)); stream_write_uint16_be(s, (value & 0xFFFF)); return 4; }
int ber_write_integer(wStream* s, UINT32 value) { ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE); if (value <= 0xFF) { ber_write_length(s, 1); stream_write_BYTE(s, value); return 2; } else if (value < 0xFF80) { ber_write_length(s, 2); stream_write_UINT16_be(s, value); return 3; } else if (value < 0xFF8000) { ber_write_length(s, 3); stream_write_BYTE(s, (value >> 16)); stream_write_UINT16_be(s, (value & 0xFFFF)); return 4; }
void ber_write_boolean(STREAM* s, boolean value) { ber_write_universal_tag(s, BER_TAG_BOOLEAN, false); ber_write_length(s, 1); stream_write_uint8(s, (value == true) ? 0xFF : 0); }
int ber_write_octet_string_tag(STREAM* s, int length) { ber_write_universal_tag(s, BER_TAG_OCTET_STRING, false); ber_write_length(s, length); return 1 + _ber_skip_length(length); }
void ber_write_octet_string(STREAM* s, const uint8* oct_str, int length) { ber_write_universal_tag(s, BER_TAG_OCTET_STRING, false); ber_write_length(s, length); stream_write(s, oct_str, length); }
void ber_write_enumerated(STREAM* s, uint8 enumerated, uint8 count) { ber_write_universal_tag(s, BER_TAG_ENUMERATED, false); ber_write_length(s, 1); stream_write_uint8(s, enumerated); }
void ber_write_BOOL(wStream* s, BOOL value) { ber_write_universal_tag(s, BER_TAG_BOOLEAN, FALSE); ber_write_length(s, 1); Stream_Write_UINT8(s, (value == TRUE) ? 0xFF : 0); }
int ber_write_octet_string_tag(wStream* s, int length) { ber_write_universal_tag(s, BER_TAG_OCTET_STRING, FALSE); ber_write_length(s, length); return 1 + _ber_sizeof_length(length); }
void ber_write_enumerated(wStream* s, BYTE enumerated, BYTE count) { ber_write_universal_tag(s, BER_TAG_ENUMERATED, FALSE); ber_write_length(s, 1); Stream_Write_UINT8(s, enumerated); }
void ber_write_octet_string(wStream* s, const BYTE* oct_str, int length) { ber_write_universal_tag(s, BER_TAG_OCTET_STRING, FALSE); ber_write_length(s, length); stream_write(s, oct_str, length); }