]>
Commit | Line | Data |
---|---|---|
6fc6879b JM |
1 | /* |
2 | * ASN.1 DER parsing | |
3 | * Copyright (c) 2006, Jouni Malinen <j@w1.fi> | |
4 | * | |
0f3d578e JM |
5 | * This software may be distributed under the terms of the BSD license. |
6 | * See README for more details. | |
6fc6879b JM |
7 | */ |
8 | ||
9 | #ifndef ASN1_H | |
10 | #define ASN1_H | |
11 | ||
12 | #define ASN1_TAG_EOC 0x00 /* not used with DER */ | |
13 | #define ASN1_TAG_BOOLEAN 0x01 | |
14 | #define ASN1_TAG_INTEGER 0x02 | |
15 | #define ASN1_TAG_BITSTRING 0x03 | |
16 | #define ASN1_TAG_OCTETSTRING 0x04 | |
17 | #define ASN1_TAG_NULL 0x05 | |
18 | #define ASN1_TAG_OID 0x06 | |
19 | #define ASN1_TAG_OBJECT_DESCRIPTOR 0x07 /* not yet parsed */ | |
20 | #define ASN1_TAG_EXTERNAL 0x08 /* not yet parsed */ | |
21 | #define ASN1_TAG_REAL 0x09 /* not yet parsed */ | |
22 | #define ASN1_TAG_ENUMERATED 0x0A /* not yet parsed */ | |
f6a62df8 | 23 | #define ASN1_TAG_EMBEDDED_PDV 0x0B /* not yet parsed */ |
6fc6879b JM |
24 | #define ASN1_TAG_UTF8STRING 0x0C /* not yet parsed */ |
25 | #define ANS1_TAG_RELATIVE_OID 0x0D | |
26 | #define ASN1_TAG_SEQUENCE 0x10 /* shall be constructed */ | |
27 | #define ASN1_TAG_SET 0x11 | |
28 | #define ASN1_TAG_NUMERICSTRING 0x12 /* not yet parsed */ | |
29 | #define ASN1_TAG_PRINTABLESTRING 0x13 | |
30 | #define ASN1_TAG_TG1STRING 0x14 /* not yet parsed */ | |
31 | #define ASN1_TAG_VIDEOTEXSTRING 0x15 /* not yet parsed */ | |
32 | #define ASN1_TAG_IA5STRING 0x16 | |
33 | #define ASN1_TAG_UTCTIME 0x17 | |
34 | #define ASN1_TAG_GENERALIZEDTIME 0x18 /* not yet parsed */ | |
35 | #define ASN1_TAG_GRAPHICSTRING 0x19 /* not yet parsed */ | |
36 | #define ASN1_TAG_VISIBLESTRING 0x1A | |
37 | #define ASN1_TAG_GENERALSTRING 0x1B /* not yet parsed */ | |
38 | #define ASN1_TAG_UNIVERSALSTRING 0x1C /* not yet parsed */ | |
f6a62df8 JM |
39 | #define ASN1_TAG_CHARACTERSTRING 0x1D /* not yet parsed */ |
40 | #define ASN1_TAG_BMPSTRING 0x1E /* not yet parsed */ | |
6fc6879b JM |
41 | |
42 | #define ASN1_CLASS_UNIVERSAL 0 | |
43 | #define ASN1_CLASS_APPLICATION 1 | |
44 | #define ASN1_CLASS_CONTEXT_SPECIFIC 2 | |
45 | #define ASN1_CLASS_PRIVATE 3 | |
46 | ||
47 | ||
48 | struct asn1_hdr { | |
49 | const u8 *payload; | |
50 | u8 identifier, class, constructed; | |
51 | unsigned int tag, length; | |
52 | }; | |
53 | ||
54 | #define ASN1_MAX_OID_LEN 20 | |
55 | struct asn1_oid { | |
56 | unsigned long oid[ASN1_MAX_OID_LEN]; | |
57 | size_t len; | |
58 | }; | |
59 | ||
60 | ||
61 | int asn1_get_next(const u8 *buf, size_t len, struct asn1_hdr *hdr); | |
efe22727 | 62 | int asn1_parse_oid(const u8 *buf, size_t len, struct asn1_oid *oid); |
6fc6879b JM |
63 | int asn1_get_oid(const u8 *buf, size_t len, struct asn1_oid *oid, |
64 | const u8 **next); | |
d3811845 | 65 | void asn1_oid_to_str(const struct asn1_oid *oid, char *buf, size_t len); |
6fc6879b | 66 | unsigned long asn1_bit_string_to_long(const u8 *buf, size_t len); |
d3811845 | 67 | int asn1_oid_equal(const struct asn1_oid *a, const struct asn1_oid *b); |
3393d94d | 68 | int asn1_get_integer(const u8 *buf, size_t len, int *integer, const u8 **next); |
f7f2843c JM |
69 | int asn1_get_sequence(const u8 *buf, size_t len, struct asn1_hdr *hdr, |
70 | const u8 **next); | |
d3811845 JM |
71 | |
72 | extern struct asn1_oid asn1_sha1_oid; | |
73 | extern struct asn1_oid asn1_sha256_oid; | |
6fc6879b JM |
74 | |
75 | #endif /* ASN1_H */ |