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; }
void ber_write_application_tag(STREAM* s, uint8 tag, int length) { if (tag > 30) { stream_write_uint8(s, (BER_CLASS_APPL | BER_CONSTRUCT) | BER_TAG_MASK); stream_write_uint8(s, tag); ber_write_length(s, length); } else { stream_write_uint8(s, (BER_CLASS_APPL | BER_CONSTRUCT) | (BER_TAG_MASK & tag)); ber_write_length(s, length); } }
void ber_write_application_tag(wStream* s, BYTE tag, int length) { if (tag > 30) { Stream_Write_UINT8(s, (BER_CLASS_APPL | BER_CONSTRUCT) | BER_TAG_MASK); Stream_Write_UINT8(s, tag); ber_write_length(s, length); } else { Stream_Write_UINT8(s, (BER_CLASS_APPL | BER_CONSTRUCT) | (BER_TAG_MASK & tag)); ber_write_length(s, length); } }
void test_ber_write_length(void) { STREAM *s1, *s2; s1 = stream_new(sizeof(ber_length_expected_1)); s2 = stream_new(sizeof(ber_length_expected_2)); ber_write_length(s1, 64); ASSERT_STREAM(s1, (uint8*) ber_length_expected_1, sizeof(ber_length_expected_1)); ber_write_length(s2, 404); ASSERT_STREAM(s2, (uint8*) ber_length_expected_2, sizeof(ber_length_expected_2)); stream_free(s1); stream_free(s2); }
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; }
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; }
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) { 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; }
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); }
int ber_write_sequence_tag(STREAM* s, int length) { stream_write_uint8(s, (BER_CLASS_UNIV | BER_CONSTRUCT) | (BER_TAG_MASK & BER_TAG_SEQUENCE)); return ber_write_length(s, length) + 1; }
int ber_write_contextual_tag(STREAM* s, uint8 tag, int length, boolean pc) { stream_write_uint8(s, (BER_CLASS_CTXT | BER_PC(pc)) | (BER_TAG_MASK & tag)); return ber_write_length(s, length) + 1; }
int ber_write_contextual_tag(wStream* s, BYTE tag, int length, BOOL pc) { Stream_Write_UINT8(s, (BER_CLASS_CTXT | BER_PC(pc)) | (BER_TAG_MASK & tag)); return 1 + ber_write_length(s, length); }
int ber_write_sequence_tag(wStream* s, int length) { Stream_Write_UINT8(s, (BER_CLASS_UNIV | BER_CONSTRUCT) | (BER_TAG_MASK & BER_TAG_SEQUENCE)); return 1 + ber_write_length(s, length); }
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); }
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); }
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(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); }
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); }
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_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_contextual_tag(wStream* s, BYTE tag, int length, BOOL pc) { stream_write_BYTE(s, (BER_CLASS_CTXT | BER_PC(pc)) | (BER_TAG_MASK & tag)); return ber_write_length(s, length) + 1; }