xref: /freebsd/crypto/heimdal/lib/asn1/asn1-common.h (revision c19800e8)
1c19800e8SDoug Rabson /* $Id$ */
25e9cd1aeSAssar Westerlund 
35e9cd1aeSAssar Westerlund #include <stddef.h>
45e9cd1aeSAssar Westerlund #include <time.h>
55e9cd1aeSAssar Westerlund #include <krb5-types.h>
65e9cd1aeSAssar Westerlund 
75e9cd1aeSAssar Westerlund #ifndef __asn1_common_definitions__
85e9cd1aeSAssar Westerlund #define __asn1_common_definitions__
9c19800e8SDoug Rabson 
105e9cd1aeSAssar Westerlund typedef struct heim_integer {
115e9cd1aeSAssar Westerlund     size_t length;
12c19800e8SDoug Rabson     void *data;
13c19800e8SDoug Rabson     int negative;
145e9cd1aeSAssar Westerlund } heim_integer;
15c19800e8SDoug Rabson 
16c19800e8SDoug Rabson typedef struct heim_octet_string {
17c19800e8SDoug Rabson     size_t length;
18c19800e8SDoug Rabson     void *data;
195e9cd1aeSAssar Westerlund } heim_octet_string;
20c19800e8SDoug Rabson 
21c19800e8SDoug Rabson typedef char *heim_general_string;
22c19800e8SDoug Rabson typedef char *heim_utf8_string;
23c19800e8SDoug Rabson typedef struct heim_octet_string heim_printable_string;
24c19800e8SDoug Rabson typedef struct heim_octet_string heim_ia5_string;
25c19800e8SDoug Rabson 
26c19800e8SDoug Rabson typedef struct heim_bmp_string {
27c19800e8SDoug Rabson     size_t length;
28c19800e8SDoug Rabson     uint16_t *data;
29c19800e8SDoug Rabson } heim_bmp_string;
30c19800e8SDoug Rabson 
31c19800e8SDoug Rabson typedef struct heim_universal_string {
32c19800e8SDoug Rabson     size_t length;
33c19800e8SDoug Rabson     uint32_t *data;
34c19800e8SDoug Rabson } heim_universal_string;
35c19800e8SDoug Rabson 
36c19800e8SDoug Rabson typedef char *heim_visible_string;
37c19800e8SDoug Rabson 
384137ff4cSJacques Vidrine typedef struct heim_oid {
394137ff4cSJacques Vidrine     size_t length;
40c19800e8SDoug Rabson     unsigned *components;
41c19800e8SDoug Rabson } heim_oid;
42c19800e8SDoug Rabson 
43c19800e8SDoug Rabson typedef struct heim_bit_string {
44c19800e8SDoug Rabson     size_t length;
45c19800e8SDoug Rabson     void *data;
46c19800e8SDoug Rabson } heim_bit_string;
47c19800e8SDoug Rabson 
48c19800e8SDoug Rabson typedef struct heim_octet_string heim_any;
49c19800e8SDoug Rabson typedef struct heim_octet_string heim_any_set;
50c19800e8SDoug Rabson 
51c19800e8SDoug Rabson #define ASN1_MALLOC_ENCODE(T, B, BL, S, L, R)                  \
52c19800e8SDoug Rabson   do {                                                         \
53c19800e8SDoug Rabson     (BL) = length_##T((S));                                    \
54c19800e8SDoug Rabson     (B) = malloc((BL));                                        \
55c19800e8SDoug Rabson     if((B) == NULL) {                                          \
56c19800e8SDoug Rabson       (R) = ENOMEM;                                            \
57c19800e8SDoug Rabson     } else {                                                   \
58c19800e8SDoug Rabson       (R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \
59c19800e8SDoug Rabson                        (S), (L));                              \
60c19800e8SDoug Rabson       if((R) != 0) {                                           \
61c19800e8SDoug Rabson         free((B));                                             \
62c19800e8SDoug Rabson         (B) = NULL;                                            \
63c19800e8SDoug Rabson       }                                                        \
64c19800e8SDoug Rabson     }                                                          \
654137ff4cSJacques Vidrine   } while (0)
665e9cd1aeSAssar Westerlund 
67 #ifdef _WIN32
68 #ifndef ASN1_LIB
69 #define ASN1EXP  __declspec(dllimport)
70 #else
71 #define ASN1EXP
72 #endif
73 #define ASN1CALL __stdcall
74 #else
75 #define ASN1EXP
76 #define ASN1CALL
77 #endif
78 
79 #endif
80