00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef ASN1_H
00016 #define ASN1_H
00017
00018 #define ASN1_TAG_EOC 0x00
00019 #define ASN1_TAG_BOOLEAN 0x01
00020 #define ASN1_TAG_INTEGER 0x02
00021 #define ASN1_TAG_BITSTRING 0x03
00022 #define ASN1_TAG_OCTETSTRING 0x04
00023 #define ASN1_TAG_NULL 0x05
00024 #define ASN1_TAG_OID 0x06
00025 #define ASN1_TAG_OBJECT_DESCRIPTOR 0x07
00026 #define ASN1_TAG_EXTERNAL 0x08
00027 #define ASN1_TAG_REAL 0x09
00028 #define ASN1_TAG_ENUMERATED 0x0A
00029 #define ASN1_TAG_UTF8STRING 0x0C
00030 #define ANS1_TAG_RELATIVE_OID 0x0D
00031 #define ASN1_TAG_SEQUENCE 0x10
00032 #define ASN1_TAG_SET 0x11
00033 #define ASN1_TAG_NUMERICSTRING 0x12
00034 #define ASN1_TAG_PRINTABLESTRING 0x13
00035 #define ASN1_TAG_TG1STRING 0x14
00036 #define ASN1_TAG_VIDEOTEXSTRING 0x15
00037 #define ASN1_TAG_IA5STRING 0x16
00038 #define ASN1_TAG_UTCTIME 0x17
00039 #define ASN1_TAG_GENERALIZEDTIME 0x18
00040 #define ASN1_TAG_GRAPHICSTRING 0x19
00041 #define ASN1_TAG_VISIBLESTRING 0x1A
00042 #define ASN1_TAG_GENERALSTRING 0x1B
00043 #define ASN1_TAG_UNIVERSALSTRING 0x1C
00044 #define ASN1_TAG_BMPSTRING 0x1D
00045
00046 #define ASN1_CLASS_UNIVERSAL 0
00047 #define ASN1_CLASS_APPLICATION 1
00048 #define ASN1_CLASS_CONTEXT_SPECIFIC 2
00049 #define ASN1_CLASS_PRIVATE 3
00050
00051
00052 struct asn1_hdr {
00053 const u8 *payload;
00054 u8 identifier, class, constructed;
00055 unsigned int tag, length;
00056 };
00057
00058 #define ASN1_MAX_OID_LEN 20
00059 struct asn1_oid {
00060 unsigned long oid[ASN1_MAX_OID_LEN];
00061 size_t len;
00062 };
00063
00064
00065 int asn1_get_next(const u8 *buf, size_t len, struct asn1_hdr *hdr);
00066 int asn1_parse_oid(const u8 *buf, size_t len, struct asn1_oid *oid);
00067 int asn1_get_oid(const u8 *buf, size_t len, struct asn1_oid *oid,
00068 const u8 **next);
00069 void asn1_oid_to_str(struct asn1_oid *oid, char *buf, size_t len);
00070 unsigned long asn1_bit_string_to_long(const u8 *buf, size_t len);
00071
00072 #endif