xref: /dflybsd-src/contrib/wpa_supplicant/src/tls/asn1.h (revision 3a84a4273475ed07d0ab1c2dfeffdfedef35d9cd)
16d49e1aeSJan Lentfer /*
26d49e1aeSJan Lentfer  * ASN.1 DER parsing
36d49e1aeSJan Lentfer  * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
46d49e1aeSJan Lentfer  *
53ff40c12SJohn Marino  * This software may be distributed under the terms of the BSD license.
63ff40c12SJohn Marino  * See README for more details.
76d49e1aeSJan Lentfer  */
86d49e1aeSJan Lentfer 
96d49e1aeSJan Lentfer #ifndef ASN1_H
106d49e1aeSJan Lentfer #define ASN1_H
116d49e1aeSJan Lentfer 
126d49e1aeSJan Lentfer #define ASN1_TAG_EOC		0x00 /* not used with DER */
136d49e1aeSJan Lentfer #define ASN1_TAG_BOOLEAN	0x01
146d49e1aeSJan Lentfer #define ASN1_TAG_INTEGER	0x02
156d49e1aeSJan Lentfer #define ASN1_TAG_BITSTRING	0x03
166d49e1aeSJan Lentfer #define ASN1_TAG_OCTETSTRING	0x04
176d49e1aeSJan Lentfer #define ASN1_TAG_NULL		0x05
186d49e1aeSJan Lentfer #define ASN1_TAG_OID		0x06
196d49e1aeSJan Lentfer #define ASN1_TAG_OBJECT_DESCRIPTOR	0x07 /* not yet parsed */
206d49e1aeSJan Lentfer #define ASN1_TAG_EXTERNAL	0x08 /* not yet parsed */
216d49e1aeSJan Lentfer #define ASN1_TAG_REAL		0x09 /* not yet parsed */
226d49e1aeSJan Lentfer #define ASN1_TAG_ENUMERATED	0x0A /* not yet parsed */
23*a1157835SDaniel Fojt #define ASN1_TAG_EMBEDDED_PDV	0x0B /* not yet parsed */
246d49e1aeSJan Lentfer #define ASN1_TAG_UTF8STRING	0x0C /* not yet parsed */
256d49e1aeSJan Lentfer #define ANS1_TAG_RELATIVE_OID	0x0D
266d49e1aeSJan Lentfer #define ASN1_TAG_SEQUENCE	0x10 /* shall be constructed */
276d49e1aeSJan Lentfer #define ASN1_TAG_SET		0x11
286d49e1aeSJan Lentfer #define ASN1_TAG_NUMERICSTRING	0x12 /* not yet parsed */
296d49e1aeSJan Lentfer #define ASN1_TAG_PRINTABLESTRING	0x13
306d49e1aeSJan Lentfer #define ASN1_TAG_TG1STRING	0x14 /* not yet parsed */
316d49e1aeSJan Lentfer #define ASN1_TAG_VIDEOTEXSTRING	0x15 /* not yet parsed */
326d49e1aeSJan Lentfer #define ASN1_TAG_IA5STRING	0x16
336d49e1aeSJan Lentfer #define ASN1_TAG_UTCTIME	0x17
346d49e1aeSJan Lentfer #define ASN1_TAG_GENERALIZEDTIME	0x18 /* not yet parsed */
356d49e1aeSJan Lentfer #define ASN1_TAG_GRAPHICSTRING	0x19 /* not yet parsed */
366d49e1aeSJan Lentfer #define ASN1_TAG_VISIBLESTRING	0x1A
376d49e1aeSJan Lentfer #define ASN1_TAG_GENERALSTRING	0x1B /* not yet parsed */
386d49e1aeSJan Lentfer #define ASN1_TAG_UNIVERSALSTRING	0x1C /* not yet parsed */
39*a1157835SDaniel Fojt #define ASN1_TAG_CHARACTERSTRING	0x1D /* not yet parsed */
40*a1157835SDaniel Fojt #define ASN1_TAG_BMPSTRING	0x1E /* not yet parsed */
416d49e1aeSJan Lentfer 
426d49e1aeSJan Lentfer #define ASN1_CLASS_UNIVERSAL		0
436d49e1aeSJan Lentfer #define ASN1_CLASS_APPLICATION		1
446d49e1aeSJan Lentfer #define ASN1_CLASS_CONTEXT_SPECIFIC	2
456d49e1aeSJan Lentfer #define ASN1_CLASS_PRIVATE		3
466d49e1aeSJan Lentfer 
476d49e1aeSJan Lentfer 
486d49e1aeSJan Lentfer struct asn1_hdr {
496d49e1aeSJan Lentfer 	const u8 *payload;
506d49e1aeSJan Lentfer 	u8 identifier, class, constructed;
516d49e1aeSJan Lentfer 	unsigned int tag, length;
526d49e1aeSJan Lentfer };
536d49e1aeSJan Lentfer 
546d49e1aeSJan Lentfer #define ASN1_MAX_OID_LEN 20
556d49e1aeSJan Lentfer struct asn1_oid {
566d49e1aeSJan Lentfer 	unsigned long oid[ASN1_MAX_OID_LEN];
576d49e1aeSJan Lentfer 	size_t len;
586d49e1aeSJan Lentfer };
596d49e1aeSJan Lentfer 
606d49e1aeSJan Lentfer 
616d49e1aeSJan Lentfer int asn1_get_next(const u8 *buf, size_t len, struct asn1_hdr *hdr);
623ff40c12SJohn Marino int asn1_parse_oid(const u8 *buf, size_t len, struct asn1_oid *oid);
636d49e1aeSJan Lentfer int asn1_get_oid(const u8 *buf, size_t len, struct asn1_oid *oid,
646d49e1aeSJan Lentfer 		 const u8 **next);
65*a1157835SDaniel Fojt void asn1_oid_to_str(const struct asn1_oid *oid, char *buf, size_t len);
666d49e1aeSJan Lentfer unsigned long asn1_bit_string_to_long(const u8 *buf, size_t len);
67*a1157835SDaniel Fojt int asn1_oid_equal(const struct asn1_oid *a, const struct asn1_oid *b);
68*a1157835SDaniel Fojt 
69*a1157835SDaniel Fojt extern struct asn1_oid asn1_sha1_oid;
70*a1157835SDaniel Fojt extern struct asn1_oid asn1_sha256_oid;
716d49e1aeSJan Lentfer 
726d49e1aeSJan Lentfer #endif /* ASN1_H */
73