File syn_asn1.h¶
File List > crypto > syn_asn1.h
Go to the documentation of this file
#ifndef SYN_ASN1_H
#define SYN_ASN1_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SYN_ASN1_TAG_BOOLEAN 0x01U
#define SYN_ASN1_TAG_INTEGER 0x02U
#define SYN_ASN1_TAG_BIT_STRING 0x03U
#define SYN_ASN1_TAG_OCTET_STRING 0x04U
#define SYN_ASN1_TAG_NULL 0x05U
#define SYN_ASN1_TAG_OID 0x06U
#define SYN_ASN1_TAG_SEQUENCE 0x30U
#define SYN_ASN1_TAG_SET 0x31U
#define SYN_ASN1_TAG_UTCTIME 0x17U
#define SYN_ASN1_TAG_GENERALIZEDTIME 0x18U
#define SYN_ASN1_CLASS_MASK 0xC0U
#define SYN_ASN1_CONSTRUCTED_MASK 0x20U
#define SYN_ASN1_TAG_NUM_MASK 0x1FU
#define SYN_ASN1_CLASS_UNIVERSAL 0x00U
#define SYN_ASN1_CLASS_APPLICATION 0x40U
#define SYN_ASN1_CLASS_CONTEXT_SPECIFIC 0x80U
#define SYN_ASN1_CLASS_PRIVATE 0xC0U
typedef struct {
uint8_t tag;
uint8_t tag_class;
bool constructed;
uint8_t tag_number;
size_t length;
const uint8_t *value;
size_t header_len;
} SYN_ASN1_Element;
bool syn_asn1_parse_element(const uint8_t *buf, size_t len, SYN_ASN1_Element *elem_out);
bool syn_asn1_step(const uint8_t **buf, size_t *len, SYN_ASN1_Element *elem_out);
bool syn_asn1_enter_container(const SYN_ASN1_Element *container, const uint8_t **child_buf,
size_t *child_len);
bool syn_asn1_match_oid(const SYN_ASN1_Element *elem, const uint8_t *expected_oid, size_t oid_len);
bool syn_asn1_get_integer(const SYN_ASN1_Element *elem, const uint8_t **int_out,
size_t *int_len_out);
bool syn_asn1_get_bit_string(const SYN_ASN1_Element *elem, const uint8_t **bits_out,
size_t *bit_len_out);
#ifdef __cplusplus
}
#endif
#endif /* SYN_ASN1_H */