* first bits of decoding facility information elements
[asterisk/asterisk.git] / channels / misdn / asn1.h
1 #ifndef __ASN1_H__
2 #define __ASN1_H__
3
4 #include <asm/types.h>
5
6 /*
7 ** ASN.1 Tags
8 */
9
10 #define ASN1_TAG_BOOLEAN           (0x01)
11 #define ASN1_TAG_INTEGER           (0x02)
12 #define ASN1_TAG_BIT_STRING        (0x03)
13 #define ASN1_TAG_OCTET_STRING      (0x04)
14 #define ASN1_TAG_NULL              (0x05)
15 #define ASN1_TAG_OBJECT_IDENTIFIER (0x06)
16 #define ASN1_TAG_ENUM              (0x0a)
17 #define ASN1_TAG_SEQUENCE          (0x30)
18 #define ASN1_TAG_SET               (0x31)
19 #define ASN1_TAG_NUMERIC_STRING    (0x12)
20 #define ASN1_TAG_PRINTABLE_STRING  (0x13)
21 #define ASN1_TAG_IA5_STRING        (0x16)
22 #define ASN1_TAG_UTC_TIME          (0x17)
23 #define ASN1_TAG_CONSTRUCTED       (0x20)
24 #define ASN1_TAG_CONTEXT_SPECIFIC  (0x80)
25 #define ASN1_TAG_EXPLICIT          (0x100)
26 #define ASN1_TAG_OPT               (0x200)
27 #define ASN1_NOT_TAGGED            (0x400)
28
29 /*
30 ** ASN.1 Encoding
31 */
32
33 #define enc_null(dest) _enc_null(dest,ASN1_TAG_NULL)
34 #define enc_bool(dest,i) _enc_bool(dest,i,ASN1_TAG_BOOLEAN)
35 #define enc_int(dest,i) _enc_int(dest,i,ASN1_TAG_INTEGER)
36 #define enc_enum(dest,i) _enc_enum(dest,i,ASN1_TAG_ENUM)
37 #define enc_num_string(dest,num,len) _enc_num_string(dest,num,len,ASN1_TAG_NUMERIC_STRING)
38 #define enc_sequence_start(dest,id) _enc_sequence_start(dest,id,ASN1_TAG_SEQUENCE)
39 #define enc_sequence_end(dest,id) _enc_sequence_end(dest,id,ASN1_TAG_SEQUENCE)
40
41 int _enc_null (__u8 *dest, int tag);
42 int _enc_bool (__u8 *dest, __u32 i, int tag);
43 int _enc_int (__u8 *dest, __u32 i, int tag);
44 int _enc_enum (__u8 *dest, __u32 i, int tag);
45 int _enc_num_string (__u8 *dest, __u8 *nd, __u8 len, int tag);
46 int _enc_sequence_start (__u8 *dest, __u8 **id, int tag);
47 int _enc_sequence_end (__u8 *dest, __u8 *id, int tag_dummy);
48
49 /*
50 ** ASN.1 Decoding
51 */
52
53 #define dec_null(p, end) _dec_null (p, end, NULL);
54 #define dec_bool(p, end,i) _dec_bool (p, end, i, NULL)
55 #define dec_int(p, end,i) _dec_int (p, end, i, NULL)
56 #define dec_enum(p, end,i) _dec_enum (p, end, i, NULL)
57 #define dec_num_string(p, end,str) _dec_num_string (p, end, str, NULL)
58 #define dec_octet_string(p, end,str) _dec_octet_string (p, end, str, NULL)
59 #define dec_sequence(p, end) _dec_sequence (p, end, NULL)
60
61 int _dec_null (__u8 *p, __u8 *end, int *tag);
62 int _dec_bool (__u8 *p, __u8 *end, int *i, int *tag);
63 int _dec_int (__u8 *p, __u8 *end, int *i, int *tag);
64 int _dec_enum (__u8 *p, __u8 *end, int *i, int *tag);
65 int _dec_num_string (__u8 *p, __u8 *end, char *str, int *tag);
66 int _dec_octet_string (__u8 *p, __u8 *end, char *str, int *tag);
67 int _dec_sequence (__u8 *p, __u8 *end, int *tag);
68
69 int dec_len (__u8 *p, int *len);
70
71 #endif
72