Skip to content

File syn_asn1.h

FileList > crypto > syn_asn1.h

Go to the source code of this file

Zero-Heap ASN.1 DER (Distinguished Encoding Rules) TLV Parser.

  • #include <stdbool.h>
  • #include <stddef.h>
  • #include <stdint.h>

Classes

Type Name
struct SYN_ASN1_Element
Parsed ASN.1 TLV element header.

Public Functions

Type Name
bool syn_asn1_enter_container (const SYN_ASN1_Element * container, const uint8_t ** child_buf, size_t * child_len)
Unwraps a constructed container (SEQUENCE, SET, or context-specific tag) for child iteration.
bool syn_asn1_get_bit_string (const SYN_ASN1_Element * elem, const uint8_t ** bits_out, size_t * bit_len_out)
Extract Bit String payload (stripping unused bits count prefix byte).
bool syn_asn1_get_integer (const SYN_ASN1_Element * elem, const uint8_t ** int_out, size_t * int_len_out)
Extract raw integer bytes (stripping leading sign zero padding if present).
bool syn_asn1_match_oid (const SYN_ASN1_Element * elem, const uint8_t * expected_oid, size_t oid_len)
Compare ASN.1 Object Identifier (OID) against expected byte array.
bool syn_asn1_parse_element (const uint8_t * buf, size_t len, SYN_ASN1_Element * elem_out)
Parse a single ASN.1 DER TLV element from buffer.
bool syn_asn1_step (const uint8_t ** buf, size_t * len, SYN_ASN1_Element * elem_out)
Skip/advance past current TLV element in a DER buffer.

Macros

Type Name
define SYN_ASN1_CLASS_APPLICATION 0x40U
APPLICATION tag class (0x40).
define SYN_ASN1_CLASS_CONTEXT_SPECIFIC 0x80U
CONTEXT-SPECIFIC tag class (0x80).
define SYN_ASN1_CLASS_MASK 0xC0U
ASN.1 Tag Class / Form Masking.
define SYN_ASN1_CLASS_PRIVATE 0xC0U
PRIVATE tag class (0xC0).
define SYN_ASN1_CLASS_UNIVERSAL 0x00U
UNIVERSAL tag class (0x00).
define SYN_ASN1_CONSTRUCTED_MASK 0x20U
Mask for ASN.1 constructed form (bit 5).
define SYN_ASN1_TAG_BIT_STRING 0x03U
ASN.1 BIT STRING universal tag.
define SYN_ASN1_TAG_BOOLEAN 0x01U
ASN.1 Universal Tag Constants.
define SYN_ASN1_TAG_GENERALIZEDTIME 0x18U
ASN.1 GeneralizedTime universal tag.
define SYN_ASN1_TAG_INTEGER 0x02U
ASN.1 INTEGER universal tag.
define SYN_ASN1_TAG_NULL 0x05U
ASN.1 NULL universal tag.
define SYN_ASN1_TAG_NUM_MASK 0x1FU
Mask for ASN.1 tag number (lower 5 bits).
define SYN_ASN1_TAG_OCTET_STRING 0x04U
ASN.1 OCTET STRING universal tag.
define SYN_ASN1_TAG_OID 0x06U
ASN.1 OID universal tag.
define SYN_ASN1_TAG_SEQUENCE 0x30U
ASN.1 SEQUENCE universal tag.
define SYN_ASN1_TAG_SET 0x31U
ASN.1 SET universal tag.
define SYN_ASN1_TAG_UTCTIME 0x17U
ASN.1 UTCTime universal tag.

Public Functions Documentation

function syn_asn1_enter_container

Unwraps a constructed container (SEQUENCE, SET, or context-specific tag) for child iteration.

bool syn_asn1_enter_container (
    const SYN_ASN1_Element * container,
    const uint8_t ** child_buf,
    size_t * child_len
) 

Parameters:

  • container Pointer to container TLV element header.
  • child_buf [out] Sub-slice buffer pointer to container payload.
  • child_len [out] Length of container payload.

Returns:

true if element is constructed and valid payload extracted.


function syn_asn1_get_bit_string

Extract Bit String payload (stripping unused bits count prefix byte).

bool syn_asn1_get_bit_string (
    const SYN_ASN1_Element * elem,
    const uint8_t ** bits_out,
    size_t * bit_len_out
) 

Parameters:

  • elem Parsed ASN.1 BIT STRING element.
  • bits_out [out] Pointer to raw bit string bytes.
  • bit_len_out [out] Number of valid bits in payload.

Returns:

true on success.


function syn_asn1_get_integer

Extract raw integer bytes (stripping leading sign zero padding if present).

bool syn_asn1_get_integer (
    const SYN_ASN1_Element * elem,
    const uint8_t ** int_out,
    size_t * int_len_out
) 

Parameters:

  • elem Parsed ASN.1 INTEGER element.
  • int_out [out] Pointer to integer payload bytes.
  • int_len_out [out] Length of integer payload bytes.

Returns:

true on success.


function syn_asn1_match_oid

Compare ASN.1 Object Identifier (OID) against expected byte array.

bool syn_asn1_match_oid (
    const SYN_ASN1_Element * elem,
    const uint8_t * expected_oid,
    size_t oid_len
) 

Parameters:

  • elem Parsed ASN.1 OID element.
  • expected_oid Expected encoded OID payload bytes.
  • oid_len Length of expected OID payload bytes.

Returns:

true if OIDs match.


function syn_asn1_parse_element

Parse a single ASN.1 DER TLV element from buffer.

bool syn_asn1_parse_element (
    const uint8_t * buf,
    size_t len,
    SYN_ASN1_Element * elem_out
) 

Parameters:

  • buf Data buffer.
  • len Length of available bytes in buffer.
  • elem_out [out] Output parsed element.

Returns:

true if valid TLV element parsed, false on truncation or encoding error.


function syn_asn1_step

Skip/advance past current TLV element in a DER buffer.

bool syn_asn1_step (
    const uint8_t ** buf,
    size_t * len,
    SYN_ASN1_Element * elem_out
) 

Parameters:

  • buf Pointer to buffer pointer (updated on success).
  • len Pointer to available length (updated on success).
  • elem_out [out] Optional parsed element header.

Returns:

true on success.


Macro Definition Documentation

define SYN_ASN1_CLASS_APPLICATION

APPLICATION tag class (0x40).

#define SYN_ASN1_CLASS_APPLICATION `0x40U`


define SYN_ASN1_CLASS_CONTEXT_SPECIFIC

CONTEXT-SPECIFIC tag class (0x80).

#define SYN_ASN1_CLASS_CONTEXT_SPECIFIC `0x80U`


define SYN_ASN1_CLASS_MASK

ASN.1 Tag Class / Form Masking.

#define SYN_ASN1_CLASS_MASK `0xC0U`

Mask for ASN.1 tag class (top 2 bits).


define SYN_ASN1_CLASS_PRIVATE

PRIVATE tag class (0xC0).

#define SYN_ASN1_CLASS_PRIVATE `0xC0U`


define SYN_ASN1_CLASS_UNIVERSAL

UNIVERSAL tag class (0x00).

#define SYN_ASN1_CLASS_UNIVERSAL `0x00U`


define SYN_ASN1_CONSTRUCTED_MASK

Mask for ASN.1 constructed form (bit 5).

#define SYN_ASN1_CONSTRUCTED_MASK `0x20U`


define SYN_ASN1_TAG_BIT_STRING

ASN.1 BIT STRING universal tag.

#define SYN_ASN1_TAG_BIT_STRING `0x03U`


define SYN_ASN1_TAG_BOOLEAN

ASN.1 Universal Tag Constants.

#define SYN_ASN1_TAG_BOOLEAN `0x01U`

ASN.1 BOOLEAN universal tag.


define SYN_ASN1_TAG_GENERALIZEDTIME

ASN.1 GeneralizedTime universal tag.

#define SYN_ASN1_TAG_GENERALIZEDTIME `0x18U`


define SYN_ASN1_TAG_INTEGER

ASN.1 INTEGER universal tag.

#define SYN_ASN1_TAG_INTEGER `0x02U`


define SYN_ASN1_TAG_NULL

ASN.1 NULL universal tag.

#define SYN_ASN1_TAG_NULL `0x05U`


define SYN_ASN1_TAG_NUM_MASK

Mask for ASN.1 tag number (lower 5 bits).

#define SYN_ASN1_TAG_NUM_MASK `0x1FU`


define SYN_ASN1_TAG_OCTET_STRING

ASN.1 OCTET STRING universal tag.

#define SYN_ASN1_TAG_OCTET_STRING `0x04U`


define SYN_ASN1_TAG_OID

ASN.1 OID universal tag.

#define SYN_ASN1_TAG_OID `0x06U`


define SYN_ASN1_TAG_SEQUENCE

ASN.1 SEQUENCE universal tag.

#define SYN_ASN1_TAG_SEQUENCE `0x30U`


define SYN_ASN1_TAG_SET

ASN.1 SET universal tag.

#define SYN_ASN1_TAG_SET `0x31U`


define SYN_ASN1_TAG_UTCTIME

ASN.1 UTCTime universal tag.

#define SYN_ASN1_TAG_UTCTIME `0x17U`



The documentation for this class was generated from the following file src/syntropic/crypto/syn_asn1.h