1/* $NetBSD: asn1-common.h,v 1.2 2017/01/28 21:31:45 christos Exp $ */
2
3/* Id */
4
5#include <stddef.h>
6#include <time.h>
7#include <krb5/krb5-types.h>
8
9#ifndef __asn1_common_definitions__
10#define __asn1_common_definitions__
11
12#ifndef __HEIM_BASE_DATA__
13#define __HEIM_BASE_DATA__ 1
14struct heim_base_data {
15 size_t length;
16 void *data;
17};
18#endif
19
20typedef struct heim_integer {
21 size_t length;
22 void *data;
23 int negative;
24} heim_integer;
25
26typedef struct heim_base_data heim_octet_string;
27
28typedef char *heim_general_string;
29typedef char *heim_utf8_string;
30typedef struct heim_base_data heim_printable_string;
31typedef struct heim_base_data heim_ia5_string;
32
33typedef struct heim_bmp_string {
34 size_t length;
35 uint16_t *data;
36} heim_bmp_string;
37
38typedef struct heim_universal_string {
39 size_t length;
40 uint32_t *data;
41} heim_universal_string;
42
43typedef char *heim_visible_string;
44
45typedef struct heim_oid {
46 size_t length;
47 unsigned *components;
48} heim_oid;
49
50typedef struct heim_bit_string {
51 size_t length;
52 void *data;
53} heim_bit_string;
54
55typedef struct heim_base_data heim_any;
56typedef struct heim_base_data heim_any_set;
57
58#define ASN1_MALLOC_ENCODE(T, B, BL, S, L, R) \
59 do { \
60 (BL) = length_##T((S)); \
61 (B) = malloc((BL)); \
62 if((B) == NULL) { \
63 (R) = ENOMEM; \
64 } else { \
65 (R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \
66 (S), (L)); \
67 if((R) != 0) { \
68 free((B)); \
69 (B) = NULL; \
70 } \
71 } \
72 } while (0)
73
74#ifdef _WIN32
75#ifndef ASN1_LIB
76#define ASN1EXP __declspec(dllimport)
77#else
78#define ASN1EXP
79#endif
80#define ASN1CALL __stdcall
81#else
82#define ASN1EXP
83#define ASN1CALL
84#endif
85
86#endif
87