asn1.h
DER/ASN.1 implementation \par License: GNU GPL v3.0 \par Reference: ITU-T X.690 (DER Encoding Rules)
- Author
Anthony Cagliano
Enums
-
enum tls_asn1_tags
Values:
-
enumerator ASN1_RESVD
RESERVED.
-
enumerator ASN1_BOOLEAN
defines a BOOLEAN object
-
enumerator ASN1_INTEGER
defines an INTEGER object
-
enumerator ASN1_BITSTRING
defines a BIT STRING object
-
enumerator ASN1_OCTETSTRING
defines an OCTET STRING object
-
enumerator ASN1_NULL
defines a NULL object (0 size, no data)
-
enumerator ASN1_OBJECTID
defines an OBJECT IDENTIFIER
-
enumerator ASN1_OBJECTDESC
defines an OBJECT DESCRIPTION
-
enumerator ASN1_INSTANCE
defines an INSTANCE
-
enumerator ASN1_REAL
defines a REAL object
-
enumerator ASN1_ENUMERATED
-
enumerator ASN1_EMBEDDEDPDV
-
enumerator ASN1_UTF8STRING
-
enumerator ASN1_RELATIVEOID
-
enumerator ASN1_SEQUENCE
defines a SEQUENCE
-
enumerator ASN1_SET
defines a SET
-
enumerator ASN1_NUMERICSTRING
-
enumerator ASN1_PRINTABLESTRING
-
enumerator ASN1_TELETEXSTRING
-
enumerator ASN1_VIDEOTEXSTRING
-
enumerator ASN1_IA5STRING
-
enumerator ASN1_UTCTIME
-
enumerator ASN1_GENERALIZEDTIME
-
enumerator ASN1_GRAPHICSTRING
-
enumerator ASN1_VISIBLESTRING
-
enumerator ASN1_GENERALSTRING
-
enumerator ASN1_UNIVERSALSTRING
-
enumerator ASN1_CHARSTRING
-
enumerator ASN1_BMPSTRING
-
enumerator ASN1_RESVD
-
enum tls_asn1_classes
Values:
-
enumerator ASN1_UNIVERSAL
tags defined in the ASN.1 standard.
Most use cases on calc will be this.
-
enumerator ASN1_APPLICATION
tags unique to a particular application.
-
enumerator ASN1_CONTEXTSPEC
tags that need to be identified within a particular, well-definded context.
-
enumerator ASN1_PRIVATE
reserved for use by a specific entity for their applications.
-
enumerator ASN1_UNIVERSAL
Functions
-
bool tls_asn1_cursor_init(struct tls_asn1_cursor *cursor, const uint8_t *data, size_t len)
Initialize a cursor over a DER buffer.
- Parameters:
cursor – Cursor to initialize.
data – Pointer to first DER byte.
len – Number of bytes available from
data.
- Returns:
true on success, false on invalid arguments.
-
bool tls_asn1_next(struct tls_asn1_cursor *cursor, struct tls_asn1_tlv *out)
Parse the next TLV from a cursor and advance it.
Note
This API intentionally uses a single boolean return value. Callers that need strict error distinction should track expected structure while parsing (for example: required fields missing before false => parse failure).
- Parameters:
cursor – Active cursor.
out – Output TLV descriptor.
- Returns:
true if one TLV was parsed successfully.
- Returns:
false if:
cursor reached end of data (normal iteration completion), or
input is malformed (invalid DER length/overflow/truncated TLV), or
arguments are invalid.
-
bool tls_asn1_child_cursor(const struct tls_asn1_tlv *parent, struct tls_asn1_cursor *child)
Create a cursor for a constructed parent TLV’s value bytes.
Note
Call this only when tls_asn1_tag_constructed(parent->tag) is true.
- Parameters:
parent – Parent TLV from tls_asn1_next().
child – Output child cursor spanning only parent’s content.
- Returns:
true on success.
- Returns:
false if:
parentis not constructed, orarguments are invalid.
-
uint8_t tls_asn1_tag_number(uint8_t tag)
Extract low 5-bit ASN.1 tag number from raw tag byte.
-
uint8_t tls_asn1_tag_class(uint8_t tag)
Extract class bits (ASN1_UNIVERSAL/APPLICATION/CONTEXTSPEC/PRIVATE).
-
bool tls_asn1_tag_constructed(uint8_t tag)
Return true if constructed form bit is set on raw tag byte.
-
struct tls_asn1_serialization
- #include <asn1.h>
-
struct tls_asn1_tlv
- #include <asn1.h>
One parsed DER TLV item.
This describes a single ASN.1 element in Tag-Length-Value form. Pointers reference the original input buffer; no copies are made.
Public Members
-
const uint8_t *tlv
Pointer to the tag byte (start of full TLV).
-
const uint8_t *value
Pointer to content bytes only (value payload).
-
size_t len
Content length in bytes (value payload size).
-
size_t header_len
Header size in bytes (tag + DER length bytes).
-
uint8_t tag
Raw one-byte ASN.1 tag (class/form/number).
-
const uint8_t *tlv
-
struct tls_asn1_cursor
- #include <asn1.h>
Forward-only iterator state over a DER byte span.
Typical usage:
Call tls_asn1_cursor_init() once for a DER buffer.
Repeatedly call tls_asn1_next() until it returns false.
For constructed TLVs (SEQUENCE/SET/context constructed), call tls_asn1_child_cursor() to iterate nested elements.