1233294Sstas/* $Id$ */
272445Sassar
372445Sassar#include <stddef.h>
472445Sassar#include <time.h>
5233294Sstas#include <krb5-types.h>
672445Sassar
772445Sassar#ifndef __asn1_common_definitions__
872445Sassar#define __asn1_common_definitions__
972445Sassar
10178825Sdfrtypedef struct heim_integer {
1172445Sassar    size_t length;
1272445Sassar    void *data;
13178825Sdfr    int negative;
14178825Sdfr} heim_integer;
1572445Sassar
16178825Sdfrtypedef struct heim_octet_string {
17178825Sdfr    size_t length;
18178825Sdfr    void *data;
19178825Sdfr} heim_octet_string;
2072445Sassar
21178825Sdfrtypedef char *heim_general_string;
22178825Sdfrtypedef char *heim_utf8_string;
23233294Sstastypedef struct heim_octet_string heim_printable_string;
24233294Sstastypedef struct heim_octet_string heim_ia5_string;
25178825Sdfr
26178825Sdfrtypedef struct heim_bmp_string {
2790926Snectar    size_t length;
28178825Sdfr    uint16_t *data;
29178825Sdfr} heim_bmp_string;
30178825Sdfr
31178825Sdfrtypedef struct heim_universal_string {
32178825Sdfr    size_t length;
33178825Sdfr    uint32_t *data;
34178825Sdfr} heim_universal_string;
35178825Sdfr
36178825Sdfrtypedef char *heim_visible_string;
37178825Sdfr
38178825Sdfrtypedef struct heim_oid {
39178825Sdfr    size_t length;
4090926Snectar    unsigned *components;
41178825Sdfr} heim_oid;
4290926Snectar
43178825Sdfrtypedef struct heim_bit_string {
44178825Sdfr    size_t length;
45178825Sdfr    void *data;
46178825Sdfr} heim_bit_string;
47178825Sdfr
48178825Sdfrtypedef struct heim_octet_string heim_any;
49178825Sdfrtypedef struct heim_octet_string heim_any_set;
50178825Sdfr
51178825Sdfr#define ASN1_MALLOC_ENCODE(T, B, BL, S, L, R)                  \
52178825Sdfr  do {                                                         \
53178825Sdfr    (BL) = length_##T((S));                                    \
54178825Sdfr    (B) = malloc((BL));                                        \
55178825Sdfr    if((B) == NULL) {                                          \
56178825Sdfr      (R) = ENOMEM;                                            \
57178825Sdfr    } else {                                                   \
58178825Sdfr      (R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \
59178825Sdfr                       (S), (L));                              \
60178825Sdfr      if((R) != 0) {                                           \
61178825Sdfr        free((B));                                             \
62178825Sdfr        (B) = NULL;                                            \
63178825Sdfr      }                                                        \
64178825Sdfr    }                                                          \
65178825Sdfr  } while (0)
66178825Sdfr
67233294Sstas#ifdef _WIN32
68233294Sstas#ifndef ASN1_LIB
69233294Sstas#define ASN1EXP  __declspec(dllimport)
70233294Sstas#else
71233294Sstas#define ASN1EXP
7272445Sassar#endif
73233294Sstas#define ASN1CALL __stdcall
74233294Sstas#else
75233294Sstas#define ASN1EXP
76233294Sstas#define ASN1CALL
77233294Sstas#endif
78233294Sstas
79233294Sstas#endif
80