]> pd.if.org Git - zpackage/blob - libtomcrypt/src/headers/tomcrypt_cfg.h
commit files needed for zpm-fetchurl
[zpackage] / libtomcrypt / src / headers / tomcrypt_cfg.h
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
2  *
3  * LibTomCrypt is a library that provides various cryptographic
4  * algorithms in a highly modular and flexible manner.
5  *
6  * The library is free for all purposes without any express
7  * guarantee it works.
8  */
9
10 /* This is the build config file.
11  *
12  * With this you can setup what to inlcude/exclude automatically during any
13  * build.  Just comment out the line that #define's the word for the thing you
14  * want to remove.  phew!
15  */
16
17 #ifndef TOMCRYPT_CFG_H
18 #define TOMCRYPT_CFG_H
19
20 #if defined(_WIN32) || defined(_MSC_VER)
21    #define LTC_CALL __cdecl
22 #elif !defined(LTC_CALL)
23    #define LTC_CALL
24 #endif
25
26 #ifndef LTC_EXPORT
27    #define LTC_EXPORT
28 #endif
29
30 /* certain platforms use macros for these, making the prototypes broken */
31 #ifndef LTC_NO_PROTOTYPES
32
33 /* you can change how memory allocation works ... */
34 LTC_EXPORT void * LTC_CALL XMALLOC(size_t n);
35 LTC_EXPORT void * LTC_CALL XREALLOC(void *p, size_t n);
36 LTC_EXPORT void * LTC_CALL XCALLOC(size_t n, size_t s);
37 LTC_EXPORT void LTC_CALL XFREE(void *p);
38
39 LTC_EXPORT void LTC_CALL XQSORT(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));
40
41
42 /* change the clock function too */
43 LTC_EXPORT clock_t LTC_CALL XCLOCK(void);
44
45 /* various other functions */
46 LTC_EXPORT void * LTC_CALL XMEMCPY(void *dest, const void *src, size_t n);
47 LTC_EXPORT int   LTC_CALL XMEMCMP(const void *s1, const void *s2, size_t n);
48 LTC_EXPORT void * LTC_CALL XMEMSET(void *s, int c, size_t n);
49
50 LTC_EXPORT int   LTC_CALL XSTRCMP(const char *s1, const char *s2);
51
52 #endif
53
54 /* some compilers do not like "inline" (or maybe "static inline"), namely: HP
55  * cc, IBM xlc */
56 #if defined(__HP_cc) || defined(__xlc__)
57    #define LTC_INLINE
58 #elif defined(_MSC_VER)
59    #define LTC_INLINE __inline
60 #else
61    #define LTC_INLINE inline
62 #endif
63
64 /* type of argument checking, 0=default, 1=fatal and 2=error+continue, 3=nothing */
65 #ifndef ARGTYPE
66    #define ARGTYPE  0
67 #endif
68
69 #undef LTC_ENCRYPT
70 #define LTC_ENCRYPT 0
71 #undef LTC_DECRYPT
72 #define LTC_DECRYPT 1
73
74 /* Controls endianess and size of registers.  Leave uncommented to get platform neutral [slower] code
75  *
76  * Note: in order to use the optimized macros your platform must support unaligned 32 and 64 bit read/writes.
77  * The x86 platforms allow this but some others [ARM for instance] do not.  On those platforms you **MUST**
78  * use the portable [slower] macros.
79  */
80 /* detect x86/i386 32bit */
81 #if defined(__i386__) || defined(__i386) || defined(_M_IX86)
82    #define ENDIAN_LITTLE
83    #define ENDIAN_32BITWORD
84    #define LTC_FAST
85 #endif
86
87 /* detect amd64/x64 */
88 #if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64)
89    #define ENDIAN_LITTLE
90    #define ENDIAN_64BITWORD
91    #define LTC_FAST
92 #endif
93
94 /* detect PPC32 */
95 #if defined(LTC_PPC32)
96    #define ENDIAN_BIG
97    #define ENDIAN_32BITWORD
98    #define LTC_FAST
99 #endif
100
101 /* detects MIPS R5900 processors (PS2) */
102 #if (defined(__R5900) || defined(R5900) || defined(__R5900__)) && (defined(_mips) || defined(__mips__) || defined(mips))
103    #define ENDIAN_64BITWORD
104    #if defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
105      #define ENDIAN_BIG
106    #endif
107      #define ENDIAN_LITTLE
108    #endif
109 #endif
110
111 /* detect AIX */
112 #if defined(_AIX) && defined(_BIG_ENDIAN)
113   #define ENDIAN_BIG
114   #if defined(__LP64__) || defined(_ARCH_PPC64)
115     #define ENDIAN_64BITWORD
116   #else
117     #define ENDIAN_32BITWORD
118   #endif
119 #endif
120
121 /* detect HP-UX */
122 #if defined(__hpux) || defined(__hpux__)
123   #define ENDIAN_BIG
124   #if defined(__ia64) || defined(__ia64__) || defined(__LP64__)
125     #define ENDIAN_64BITWORD
126   #else
127     #define ENDIAN_32BITWORD
128   #endif
129 #endif
130
131 /* detect Apple OS X */
132 #if defined(__APPLE__) && defined(__MACH__)
133   #if defined(__LITTLE_ENDIAN__) || defined(__x86_64__)
134     #define ENDIAN_LITTLE
135   #else
136     #define ENDIAN_BIG
137   #endif
138   #if defined(__LP64__) || defined(__x86_64__)
139     #define ENDIAN_64BITWORD
140   #else
141     #define ENDIAN_32BITWORD
142   #endif
143 #endif
144
145 /* detect SPARC and SPARC64 */
146 #if defined(__sparc__) || defined(__sparc)
147   #define ENDIAN_BIG
148   #if defined(__arch64__) || defined(__sparcv9) || defined(__sparc_v9__)
149     #define ENDIAN_64BITWORD
150   #else
151     #define ENDIAN_32BITWORD
152   #endif
153 #endif
154
155 /* detect IBM S390(x) */
156 #if defined(__s390x__) || defined(__s390__)
157   #define ENDIAN_BIG
158   #if defined(__s390x__)
159     #define ENDIAN_64BITWORD
160   #else
161     #define ENDIAN_32BITWORD
162   #endif
163 #endif
164
165 /* detect PPC64 */
166 #if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)
167    #define ENDIAN_64BITWORD
168    #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
169       #define ENDIAN_BIG
170    #elif  __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
171       #define ENDIAN_LITTLE
172    #endif
173    #define LTC_FAST
174 #endif
175
176 /* endianness fallback */
177 #if !defined(ENDIAN_BIG) && !defined(ENDIAN_LITTLE)
178   #if defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN || \
179       defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || \
180       defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ || \
181       defined(__BIG_ENDIAN__) || \
182       defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \
183       defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
184     #define ENDIAN_BIG
185   #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN || \
186       defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \
187       defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || \
188       defined(__LITTLE_ENDIAN__) || \
189       defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \
190       defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)
191     #define ENDIAN_LITTLE
192   #else
193     #error Cannot detect endianness
194   #endif
195 #endif
196
197 /* ulong64: 64-bit data type */
198 #ifdef _MSC_VER
199    #define CONST64(n) n ## ui64
200    typedef unsigned __int64 ulong64;
201 #else
202    #define CONST64(n) n ## ULL
203    typedef unsigned long long ulong64;
204 #endif
205
206 /* ulong32: "32-bit at least" data type */
207 #if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || \
208     defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || \
209     defined(__s390x__) || defined(__arch64__) || defined(__aarch64__) || \
210     defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || \
211     defined(__ia64) || defined(__ia64__) || defined(__itanium__) || defined(_M_IA64) || \
212     defined(__LP64__) || defined(_LP64) || defined(__64BIT__)
213    typedef unsigned ulong32;
214    #if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD)
215      #define ENDIAN_64BITWORD
216    #endif
217 #else
218    typedef unsigned long ulong32;
219    #if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD)
220      #define ENDIAN_32BITWORD
221    #endif
222 #endif
223
224 #if defined(ENDIAN_64BITWORD) && !defined(_MSC_VER)
225 typedef unsigned long long ltc_mp_digit;
226 #else
227 typedef unsigned long ltc_mp_digit;
228 #endif
229
230 /* No asm is a quick way to disable anything "not portable" */
231 #ifdef LTC_NO_ASM
232    #define ENDIAN_NEUTRAL
233    #undef ENDIAN_32BITWORD
234    #undef ENDIAN_64BITWORD
235    #undef LTC_FAST
236    #define LTC_NO_ROLC
237    #define LTC_NO_BSWAP
238 #endif
239
240 /* No LTC_FAST if: explicitly disabled OR non-gcc/non-clang compiler OR old gcc OR using -ansi -std=c99 */
241 #if defined(LTC_NO_FAST) || (__GNUC__ < 4) || defined(__STRICT_ANSI__)
242    #undef LTC_FAST
243 #endif
244
245 #ifdef LTC_FAST
246    #define LTC_FAST_TYPE_PTR_CAST(x) ((LTC_FAST_TYPE*)(void*)(x))
247    #ifdef ENDIAN_64BITWORD
248    typedef ulong64 __attribute__((__may_alias__)) LTC_FAST_TYPE;
249    #else
250    typedef ulong32 __attribute__((__may_alias__)) LTC_FAST_TYPE;
251    #endif
252 #endif
253
254 #if !defined(ENDIAN_NEUTRAL) && (defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) && !(defined(ENDIAN_32BITWORD) || defined(ENDIAN_64BITWORD))
255    #error You must specify a word size as well as endianess in tomcrypt_cfg.h
256 #endif
257
258 #if !(defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE))
259    #define ENDIAN_NEUTRAL
260 #endif
261
262 #if (defined(ENDIAN_32BITWORD) && defined(ENDIAN_64BITWORD))
263    #error Cannot be 32 and 64 bit words...
264 #endif
265
266 /* gcc 4.3 and up has a bswap builtin; detect it by gcc version.
267  * clang also supports the bswap builtin, and although clang pretends
268  * to be gcc (macro-wise, anyway), clang pretends to be a version
269  * prior to gcc 4.3, so we can't detect bswap that way.  Instead,
270  * clang has a __has_builtin mechanism that can be used to check
271  * for builtins:
272  * http://clang.llvm.org/docs/LanguageExtensions.html#feature_check */
273 #ifndef __has_builtin
274    #define __has_builtin(x) 0
275 #endif
276 #if !defined(LTC_NO_BSWAP) && defined(__GNUC__) &&                      \
277    ((__GNUC__ * 100 + __GNUC_MINOR__ >= 403) ||                         \
278     (__has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64)))
279    #define LTC_HAVE_BSWAP_BUILTIN
280 #endif
281
282
283 /* ref:         $Format:%D$ */
284 /* git commit:  $Format:%H$ */
285 /* commit time: $Format:%ai$ */