Better SPA message validation upon SPA decrypt/decode.
[fwknop.git] / lib / fko_common.h
1 /*
2  *****************************************************************************
3  *
4  * File:    fko_common.h
5  *
6  * Author:  Damien S. Stuart
7  *
8  * Purpose: Common header for libfko source files.
9  *
10  * Copyright 2009-2010 Damien Stuart (dstuart@dstuart.org)
11  *
12  *  License (GNU Public License):
13  *
14  *  This program is free software; you can redistribute it and/or
15  *  modify it under the terms of the GNU General Public License
16  *  as published by the Free Software Foundation; either version 2
17  *  of the License, or (at your option) any later version.
18  *
19  *  This program is distributed in the hope that it will be useful,
20  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  *  GNU General Public License for more details.
23  *
24  *  You should have received a copy of the GNU General Public License
25  *  along with this program; if not, write to the Free Software
26  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
27  *  USA
28  *
29  *****************************************************************************
30 */
31 #ifndef FKO_COMMON_H
32 #define FKO_COMMON_H 1
33
34 #if HAVE_CONFIG_H
35   #include "config.h"
36 #endif
37
38 #include <stdio.h>
39 #include <sys/types.h>
40
41 #if STDC_HEADERS
42   #include <stdlib.h>
43   #include <string.h>
44 #elif HAVE_STRINGS_H
45   #include <strings.h>
46 #endif /*STDC_HEADERS*/
47
48 #if HAVE_UNISTD_H
49   #include <unistd.h>
50 #endif
51
52 #if HAVE_CTYPE_H
53   #include <ctype.h> /* Using this for isdigit() */
54 #else
55   /* Fall-back does not account for locale */
56   #define isdigit(c) (c >= 48 && c <= 57)
57 #endif
58
59 #ifdef WIN32
60   /* These are needed for the digest code under windows.
61   */
62   typedef unsigned __int8   uint8_t;
63   typedef unsigned __int32      uint32_t;
64   typedef unsigned __int64      uint64_t;
65
66   #define strdup _strdup
67 #else
68   #if HAVE_STDINT_H
69     #include <stdint.h>
70   #endif
71 #endif
72
73 /* Work out endianess (sp?)
74 */
75 #if HAVE_ENDIAN_H       /* Should cover most Linux systems */
76   #include <endian.h>
77   #define BYTEORDER __BYTE_ORDER
78 #elif HAVE_SYS_ENDIAN_H /* FreeBSD has a sys/endian.h */
79   #include <sys/endian.h>
80   #define BYTEORDER _BYTE_ORDER
81 #elif HAVE_SYS_BYTEORDER_H /* Solaris (v10 at least) seems to have this */
82   #include <sys/byteorder.h>
83   #if defined(_BIG_ENDIAN)
84     #define BYTEORDER 4321
85   #elif defined(_LITTLE_ENDIAN)
86     #define BYTEORDER 1234
87   #else
88     #error unable to determine BYTEORDER
89   #endif
90 #endif
91
92 #ifdef WIN32
93   #include <time.h>
94 #else
95   #ifdef HAVE_SYS_TIME_H
96     #include <sys/time.h>
97     #ifdef TIME_WITH_SYS_TIME
98       #include <time.h>
99     #endif
100   #endif
101 #endif
102
103 /* Convenient macros for wrapping sections in 'extern "C" {' constructs.
104 */
105 #ifdef __cplusplus
106   #define BEGIN_C_DECLS extern "C" {
107   #define END_C_DECLS   }
108 #else /* !__cplusplus */
109   #define BEGIN_C_DECLS
110   #define END_C_DECLS
111 #endif /* __cplusplus */
112
113 /* Pull in gpgme.h if we have it.
114 */
115 #if HAVE_LIBGPGME
116   #include <gpgme.h>
117 #endif
118
119 #include "fko_util.h"
120 #include "fko_limits.h"
121 #include "fko_state.h"
122 #include "fko_context.h"
123 #include "fko_message.h"
124
125 /* Try to cover for those that do not have bzero.
126 */
127 #if !HAVE_BZERO && HAVE_MEMSET
128 # define bzero(buf, bytes)      ((void) memset (buf, 0, bytes))
129 #endif
130
131 #endif /* FKO_COMMON_H */
132
133 /***EOF***/