version 0.3.33
[fms.git] / libs / libtomcrypt / headers / tomcrypt_custom.h
1 #ifndef TOMCRYPT_CUSTOM_H_\r
2 #define TOMCRYPT_CUSTOM_H_\r
3 \r
4 //#define LTC_SOURCE\r
5 \r
6 /* macros for various libc functions you can change for embedded targets */\r
7 #ifndef XMALLOC\r
8    #ifdef malloc \r
9    #define LTC_NO_PROTOTYPES\r
10    #endif\r
11 #define XMALLOC  malloc\r
12 #endif\r
13 #ifndef XREALLOC\r
14    #ifdef realloc \r
15    #define LTC_NO_PROTOTYPES\r
16    #endif\r
17 #define XREALLOC realloc\r
18 #endif\r
19 #ifndef XCALLOC\r
20    #ifdef calloc \r
21    #define LTC_NO_PROTOTYPES\r
22    #endif\r
23 #define XCALLOC  calloc\r
24 #endif\r
25 #ifndef XFREE\r
26    #ifdef free\r
27    #define LTC_NO_PROTOTYPES\r
28    #endif\r
29 #define XFREE    free\r
30 #endif\r
31 \r
32 #ifndef XMEMSET\r
33    #ifdef memset\r
34    #define LTC_NO_PROTOTYPES\r
35    #endif\r
36 #define XMEMSET  memset\r
37 #endif\r
38 #ifndef XMEMCPY\r
39    #ifdef memcpy\r
40    #define LTC_NO_PROTOTYPES\r
41    #endif\r
42 #define XMEMCPY  memcpy\r
43 #endif\r
44 #ifndef XMEMCMP\r
45    #ifdef memcmp \r
46    #define LTC_NO_PROTOTYPES\r
47    #endif\r
48 #define XMEMCMP  memcmp\r
49 #endif\r
50 #ifndef XSTRCMP\r
51    #ifdef strcmp\r
52    #define LTC_NO_PROTOTYPES\r
53    #endif\r
54 #define XSTRCMP strcmp\r
55 #endif\r
56 \r
57 #ifndef XCLOCK\r
58 #define XCLOCK   clock\r
59 #endif\r
60 #ifndef XCLOCKS_PER_SEC\r
61 #define XCLOCKS_PER_SEC CLOCKS_PER_SEC\r
62 #endif\r
63 \r
64 #ifndef XQSORT\r
65    #ifdef qsort\r
66    #define LTC_NO_PROTOTYPES\r
67    #endif\r
68 #define XQSORT qsort\r
69 #endif\r
70 \r
71 /* Easy button? */\r
72 #ifdef LTC_EASY\r
73    #define LTC_NO_CIPHERS\r
74    #define RIJNDAEL\r
75    #define BLOWFISH\r
76    #define DES\r
77    #define CAST5\r
78    \r
79    #define LTC_NO_MODES\r
80    #define LTC_ECB_MODE\r
81    #define LTC_CBC_MODE\r
82    #define LTC_CTR_MODE\r
83    \r
84    #define LTC_NO_HASHES\r
85    #define SHA1\r
86    #define SHA512\r
87    #define SHA384\r
88    #define SHA256\r
89    #define SHA224\r
90    \r
91    #define LTC_NO_MACS\r
92    #define HMAC\r
93    #define OMAC\r
94    #define CCM_MODE\r
95 \r
96    #define LTC_NO_PRNGS\r
97    #define SPRNG\r
98    #define YARROW\r
99    #define DEVRANDOM\r
100    #define TRY_URANDOM_FIRST\r
101       \r
102    #define LTC_NO_PK\r
103    #define MRSA\r
104    #define MECC\r
105 #endif   \r
106 \r
107 /* Use small code where possible */\r
108 /* #define LTC_SMALL_CODE */\r
109 \r
110 /* Enable self-test test vector checking */\r
111 #ifndef LTC_NO_TEST\r
112    #define LTC_TEST\r
113 #endif\r
114 \r
115 /* clean the stack of functions which put private information on stack */\r
116 /* #define LTC_CLEAN_STACK */\r
117 \r
118 /* disable all file related functions */\r
119 #define LTC_NO_FILE\r
120 \r
121 /* disable all forms of ASM */\r
122 /* #define LTC_NO_ASM */\r
123 \r
124 /* disable FAST mode */\r
125 /* #define LTC_NO_FAST */\r
126 \r
127 /* disable BSWAP on x86 */\r
128 /* #define LTC_NO_BSWAP */\r
129 \r
130 /* ---> Symmetric Block Ciphers <--- */\r
131 #define LTC_NO_CIPHERS\r
132 #ifndef LTC_NO_CIPHERS\r
133 \r
134 #define BLOWFISH\r
135 #define RC2\r
136 #define RC5\r
137 #define RC6\r
138 #define SAFERP\r
139 #define RIJNDAEL\r
140 #define XTEA\r
141 /* _TABLES tells it to use tables during setup, _SMALL means to use the smaller scheduled key format\r
142  * (saves 4KB of ram), _ALL_TABLES enables all tables during setup */\r
143 #define TWOFISH\r
144 #ifndef LTC_NO_TABLES\r
145    #define TWOFISH_TABLES\r
146    /* #define TWOFISH_ALL_TABLES */\r
147 #else\r
148    #define TWOFISH_SMALL\r
149 #endif\r
150 /* #define TWOFISH_SMALL */\r
151 /* DES includes EDE triple-DES */\r
152 #define DES\r
153 #define CAST5\r
154 #define NOEKEON\r
155 #define SKIPJACK\r
156 #define SAFER\r
157 #define KHAZAD\r
158 #define ANUBIS\r
159 #define ANUBIS_TWEAK\r
160 #define KSEED\r
161 #define LTC_KASUMI\r
162 \r
163 #endif /* LTC_NO_CIPHERS */\r
164 \r
165 \r
166 /* ---> Block Cipher Modes of Operation <--- */\r
167 #define LTC_NO_MODES\r
168 #ifndef LTC_NO_MODES\r
169 \r
170 #define LTC_CFB_MODE\r
171 #define LTC_OFB_MODE\r
172 #define LTC_ECB_MODE\r
173 #define LTC_CBC_MODE\r
174 #define LTC_CTR_MODE\r
175 \r
176 /* F8 chaining mode */\r
177 #define LTC_F8_MODE\r
178 \r
179 /* LRW mode */\r
180 #define LTC_LRW_MODE\r
181 #ifndef LTC_NO_TABLES\r
182    /* like GCM mode this will enable 16 8x128 tables [64KB] that make\r
183     * seeking very fast.  \r
184     */\r
185    #define LRW_TABLES\r
186 #endif\r
187 \r
188 #endif /* LTC_NO_MODES */\r
189 \r
190 /* ---> One-Way Hash Functions <--- */\r
191 #ifndef LTC_NO_HASHES \r
192 \r
193 //#define CHC_HASH\r
194 //#define WHIRLPOOL\r
195 //#define SHA512\r
196 //#define SHA384\r
197 //#define SHA256\r
198 //#define SHA224\r
199 //#define TIGER\r
200 #define SHA1\r
201 //#define MD5\r
202 //#define MD4\r
203 //#define MD2\r
204 //#define RIPEMD128\r
205 //#define RIPEMD160\r
206 //#define RIPEMD256\r
207 //#define RIPEMD320\r
208 \r
209 #endif /* LTC_NO_HASHES */\r
210 \r
211 /* ---> MAC functions <--- */\r
212 #define LTC_NO_MACS\r
213 #ifndef LTC_NO_MACS\r
214 \r
215 #define LTC_HMAC\r
216 #define LTC_OMAC\r
217 #define LTC_PMAC\r
218 #define LTC_XCBC\r
219 #define LTC_F9_MODE\r
220 #define PELICAN\r
221 \r
222 #if defined(PELICAN) && !defined(RIJNDAEL)\r
223    #error Pelican-MAC requires RIJNDAEL\r
224 #endif\r
225 \r
226 /* ---> Encrypt + Authenticate Modes <--- */\r
227 \r
228 #define EAX_MODE\r
229 #if defined(EAX_MODE) && !(defined(LTC_CTR_MODE) && defined(LTC_OMAC))\r
230    #error EAX_MODE requires CTR and OMAC mode\r
231 #endif\r
232 \r
233 #define OCB_MODE\r
234 #define CCM_MODE\r
235 #define GCM_MODE\r
236 \r
237 /* Use 64KiB tables */\r
238 #ifndef LTC_NO_TABLES\r
239    #define GCM_TABLES \r
240 #endif\r
241 \r
242 /* USE SSE2? requires GCC works on x86_32 and x86_64*/\r
243 #ifdef GCM_TABLES\r
244 /* #define GCM_TABLES_SSE2 */\r
245 #endif\r
246 \r
247 #endif /* LTC_NO_MACS */\r
248 \r
249 /* Various tidbits of modern neatoness */\r
250 //#define BASE64\r
251 \r
252 /* --> Pseudo Random Number Generators <--- */\r
253 #define LTC_NO_PRNGS\r
254 #ifndef LTC_NO_PRNGS\r
255 \r
256 /* Yarrow */\r
257 #define YARROW\r
258 /* which descriptor of AES to use?  */\r
259 /* 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] */\r
260 #define YARROW_AES 0\r
261 \r
262 #if defined(YARROW) && !defined(LTC_CTR_MODE)\r
263    #error YARROW requires LTC_CTR_MODE chaining mode to be defined!\r
264 #endif\r
265 \r
266 /* a PRNG that simply reads from an available system source */\r
267 #define SPRNG\r
268 \r
269 /* The RC4 stream cipher */\r
270 #define RC4\r
271 \r
272 /* Fortuna PRNG */\r
273 #define FORTUNA\r
274 /* reseed every N calls to the read function */\r
275 #define FORTUNA_WD    10\r
276 /* number of pools (4..32) can save a bit of ram by lowering the count */\r
277 #define FORTUNA_POOLS 32\r
278 \r
279 /* Greg's SOBER128 PRNG ;-0 */\r
280 #define SOBER128\r
281 \r
282 /* the *nix style /dev/random device */\r
283 #define DEVRANDOM\r
284 /* try /dev/urandom before trying /dev/random */\r
285 #define TRY_URANDOM_FIRST\r
286 \r
287 #endif /* LTC_NO_PRNGS */\r
288 \r
289 /* ---> math provider? <--- */\r
290 #ifndef LTC_NO_MATH\r
291 \r
292 /* LibTomMath */\r
293 #define LTM_DESC\r
294 \r
295 /* TomsFastMath */\r
296 /* #define TFM_DESC */\r
297 \r
298 #endif /* LTC_NO_MATH */\r
299 \r
300 /* ---> Public Key Crypto <--- */\r
301 #ifndef LTC_NO_PK\r
302 \r
303 /* Include RSA support */\r
304 #define MRSA\r
305 \r
306 /* Include Katja (a Rabin variant like RSA) */\r
307 /* #define MKAT */ \r
308 \r
309 /* Digital Signature Algorithm */\r
310 //#define MDSA\r
311 \r
312 /* ECC */\r
313 //#define MECC\r
314 \r
315 /* use Shamir's trick for point mul (speeds up signature verification) */\r
316 //#define LTC_ECC_SHAMIR\r
317 \r
318 #if defined(TFM_DESC) && defined(MECC)\r
319    #define MECC_ACCEL\r
320 #endif   \r
321 \r
322 /* do we want fixed point ECC */\r
323 /* #define MECC_FP */\r
324 \r
325 /* Timing Resistant? */\r
326 /* #define LTC_ECC_TIMING_RESISTANT */\r
327 \r
328 #endif /* LTC_NO_PK */\r
329 \r
330 /* PKCS #1 (RSA) and #5 (Password Handling) stuff */\r
331 #ifndef LTC_NO_PKCS\r
332 \r
333 #define PKCS_1\r
334 //#define PKCS_5\r
335 \r
336 /* Include ASN.1 DER (required by DSA/RSA) */\r
337 #define LTC_DER\r
338 \r
339 #endif /* LTC_NO_PKCS */\r
340 \r
341 /* cleanup */\r
342 \r
343 #ifdef MECC\r
344 /* Supported ECC Key Sizes */\r
345 #ifndef LTC_NO_CURVES\r
346    #define ECC112\r
347    #define ECC128\r
348    #define ECC160\r
349    #define ECC192\r
350    #define ECC224\r
351    #define ECC256\r
352    #define ECC384\r
353    #define ECC521\r
354 #endif\r
355 #endif\r
356 \r
357 #if defined(MECC) || defined(MRSA) || defined(MDSA) || defined(MKATJA)\r
358    /* Include the MPI functionality?  (required by the PK algorithms) */\r
359    #define MPI\r
360 #endif\r
361 \r
362 #ifdef MRSA\r
363    #define PKCS_1\r
364 #endif   \r
365 \r
366 #if defined(LTC_DER) && !defined(MPI) \r
367    #error ASN.1 DER requires MPI functionality\r
368 #endif\r
369 \r
370 #if (defined(MDSA) || defined(MRSA) || defined(MECC) || defined(MKATJA)) && !defined(LTC_DER)\r
371    #error PK requires ASN.1 DER functionality, make sure LTC_DER is enabled\r
372 #endif\r
373 \r
374 /* THREAD management */\r
375 #ifdef LTC_PTHREAD\r
376 \r
377 #include <pthread.h>\r
378 \r
379 #define LTC_MUTEX_GLOBAL(x)   pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER;\r
380 #define LTC_MUTEX_PROTO(x)    extern pthread_mutex_t x;\r
381 #define LTC_MUTEX_TYPE(x)     pthread_mutex_t x;\r
382 #define LTC_MUTEX_INIT(x)     pthread_mutex_init(x, NULL);\r
383 #define LTC_MUTEX_LOCK(x)     pthread_mutex_lock(x);\r
384 #define LTC_MUTEX_UNLOCK(x)   pthread_mutex_unlock(x);\r
385 \r
386 #else\r
387 \r
388 /* default no functions */\r
389 #define LTC_MUTEX_GLOBAL(x)\r
390 #define LTC_MUTEX_PROTO(x)\r
391 #define LTC_MUTEX_TYPE(x)\r
392 #define LTC_MUTEX_INIT(x)\r
393 #define LTC_MUTEX_LOCK(x)\r
394 #define LTC_MUTEX_UNLOCK(x)\r
395 \r
396 #endif\r
397 \r
398 /* Debuggers */\r
399 \r
400 /* define this if you use Valgrind, note: it CHANGES the way SOBER-128 and RC4 work (see the code) */\r
401 /* #define LTC_VALGRIND */\r
402 \r
403 #endif\r
404 \r
405 \r
406 \r
407 /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_custom.h,v $ */\r
408 /* $Revision: 1.66 $ */\r
409 /* $Date: 2006/12/04 02:50:11 $ */\r