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