Path: blob/master/libs/tomcrypt/src/headers/tomcrypt_cfg.h
5971 views
/* LibTomCrypt, modular cryptographic library -- Tom St Denis1*2* LibTomCrypt is a library that provides various cryptographic3* algorithms in a highly modular and flexible manner.4*5* The library is free for all purposes without any express6* guarantee it works.7*/89/* This is the build config file.10*11* With this you can setup what to inlcude/exclude automatically during any build. Just comment12* out the line that #define's the word for the thing you want to remove. phew!13*/1415#ifndef TOMCRYPT_CFG_H16#define TOMCRYPT_CFG_H1718#if defined(_WIN32) || defined(_MSC_VER)19#define LTC_CALL __cdecl20#elif !defined(LTC_CALL)21#define LTC_CALL22#endif2324#ifndef LTC_EXPORT25#define LTC_EXPORT26#endif2728/* certain platforms use macros for these, making the prototypes broken */29#ifndef LTC_NO_PROTOTYPES3031/* you can change how memory allocation works ... */32LTC_EXPORT void * LTC_CALL XMALLOC(size_t n);33LTC_EXPORT void * LTC_CALL XREALLOC(void *p, size_t n);34LTC_EXPORT void * LTC_CALL XCALLOC(size_t n, size_t s);35LTC_EXPORT void LTC_CALL XFREE(void *p);3637LTC_EXPORT void LTC_CALL XQSORT(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));383940/* change the clock function too */41LTC_EXPORT clock_t LTC_CALL XCLOCK(void);4243/* various other functions */44LTC_EXPORT void * LTC_CALL XMEMCPY(void *dest, const void *src, size_t n);45LTC_EXPORT int LTC_CALL XMEMCMP(const void *s1, const void *s2, size_t n);46LTC_EXPORT void * LTC_CALL XMEMSET(void *s, int c, size_t n);4748LTC_EXPORT int LTC_CALL XSTRCMP(const char *s1, const char *s2);4950#endif5152/* some compilers do not like "inline" (or maybe "static inline"), namely: HP cc, IBM xlc */53#if defined(__HP_cc) || defined(__xlc__)54#define LTC_INLINE55#elif defined(_MSC_VER)56#define LTC_INLINE __inline57#else58#define LTC_INLINE inline59#endif6061/* type of argument checking, 0=default, 1=fatal and 2=error+continue, 3=nothing */62#ifndef ARGTYPE63#define ARGTYPE 464#endif6566#undef LTC_ENCRYPT67#define LTC_ENCRYPT 068#undef LTC_DECRYPT69#define LTC_DECRYPT 17071/* Controls endianess and size of registers. Leave uncommented to get platform neutral [slower] code72*73* Note: in order to use the optimized macros your platform must support unaligned 32 and 64 bit read/writes.74* The x86 platforms allow this but some others [ARM for instance] do not. On those platforms you **MUST**75* use the portable [slower] macros.76*/77/* detect x86/i386 32bit */78#if defined(__i386__) || defined(__i386) || defined(_M_IX86)79#define ENDIAN_LITTLE80#define ENDIAN_32BITWORD81#define LTC_FAST82#endif8384/* detect amd64/x64 */85#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64)86#define ENDIAN_LITTLE87#define ENDIAN_64BITWORD88#define LTC_FAST89#endif9091/* detect PPC32 */92#if defined(LTC_PPC32)93#define ENDIAN_BIG94#define ENDIAN_32BITWORD95#define LTC_FAST96#endif9798/* detects MIPS R5900 processors (PS2) */99#if (defined(__R5900) || defined(R5900) || defined(__R5900__)) && (defined(_mips) || defined(__mips__) || defined(mips))100#define ENDIAN_64BITWORD101#if defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)102#define ENDIAN_BIG103#endif104#define ENDIAN_LITTLE105#endif106#endif107108/* detect AIX */109#if defined(_AIX) && defined(_BIG_ENDIAN)110#define ENDIAN_BIG111#if defined(__LP64__) || defined(_ARCH_PPC64)112#define ENDIAN_64BITWORD113#else114#define ENDIAN_32BITWORD115#endif116#endif117118/* detect HP-UX */119#if defined(__hpux) || defined(__hpux__)120#define ENDIAN_BIG121#if defined(__ia64) || defined(__ia64__) || defined(__LP64__)122#define ENDIAN_64BITWORD123#else124#define ENDIAN_32BITWORD125#endif126#endif127128/* detect Apple OS X */129#if defined(__APPLE__) && defined(__MACH__)130#if defined(__LITTLE_ENDIAN__) || defined(__x86_64__)131#define ENDIAN_LITTLE132#else133#define ENDIAN_BIG134#endif135#if defined(__LP64__) || defined(__x86_64__)136#define ENDIAN_64BITWORD137#else138#define ENDIAN_32BITWORD139#endif140#endif141142/* detect SPARC and SPARC64 */143#if defined(__sparc__) || defined(__sparc)144#define ENDIAN_BIG145#if defined(__arch64__) || defined(__sparcv9) || defined(__sparc_v9__)146#define ENDIAN_64BITWORD147#else148#define ENDIAN_32BITWORD149#endif150#endif151152/* detect IBM S390(x) */153#if defined(__s390x__) || defined(__s390__)154#define ENDIAN_BIG155#if defined(__s390x__)156#define ENDIAN_64BITWORD157#else158#define ENDIAN_32BITWORD159#endif160#endif161162/* detect PPC64 */163#if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)164#define ENDIAN_64BITWORD165#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__166#define ENDIAN_BIG167#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__168#define ENDIAN_LITTLE169#endif170#define LTC_FAST171#endif172173/* endianness fallback */174#if !defined(ENDIAN_BIG) && !defined(ENDIAN_LITTLE)175#if defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN || \176defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || \177defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ || \178defined(__BIG_ENDIAN__) || \179defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \180defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)181#define ENDIAN_BIG182#elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN || \183defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \184defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || \185defined(__LITTLE_ENDIAN__) || \186defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \187defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)188#define ENDIAN_LITTLE189#else190#error Cannot detect endianness191#endif192#endif193194/* ulong64: 64-bit data type */195#ifdef _MSC_VER196#define CONST64(n) n ## ui64197typedef unsigned __int64 ulong64;198#else199#define CONST64(n) n ## ULL200typedef unsigned long long ulong64;201#endif202203/* ulong32: "32-bit at least" data type */204#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || \205defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || \206defined(__s390x__) || defined(__arch64__) || defined(__aarch64__) || \207defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || \208defined(__ia64) || defined(__ia64__) || defined(__itanium__) || defined(_M_IA64) || \209defined(__LP64__) || defined(_LP64) || defined(__64BIT__)210typedef unsigned ulong32;211#if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD)212#define ENDIAN_64BITWORD213#endif214#else215typedef unsigned long ulong32;216#if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD)217#define ENDIAN_32BITWORD218#endif219#endif220221#if defined(ENDIAN_64BITWORD) && !defined(_MSC_VER)222typedef unsigned long long ltc_mp_digit;223#else224typedef unsigned long ltc_mp_digit;225#endif226227/* No asm is a quick way to disable anything "not portable" */228#ifdef LTC_NO_ASM229#define ENDIAN_NEUTRAL230#undef ENDIAN_32BITWORD231#undef ENDIAN_64BITWORD232#undef LTC_FAST233#define LTC_NO_ROLC234#define LTC_NO_BSWAP235#endif236237/* No LTC_FAST if: explicitly disabled OR non-gcc/non-clang compiler OR old gcc OR using -ansi -std=c99 */238#if defined(LTC_NO_FAST) || (__GNUC__ < 4) || defined(__STRICT_ANSI__)239#undef LTC_FAST240#endif241242#ifdef LTC_FAST243#define LTC_FAST_TYPE_PTR_CAST(x) ((LTC_FAST_TYPE*)(void*)(x))244#ifdef ENDIAN_64BITWORD245typedef ulong64 __attribute__((__may_alias__)) LTC_FAST_TYPE;246#else247typedef ulong32 __attribute__((__may_alias__)) LTC_FAST_TYPE;248#endif249#endif250251#if !defined(ENDIAN_NEUTRAL) && (defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) && !(defined(ENDIAN_32BITWORD) || defined(ENDIAN_64BITWORD))252#error You must specify a word size as well as endianess in tomcrypt_cfg.h253#endif254255#if !(defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE))256#define ENDIAN_NEUTRAL257#endif258259#if (defined(ENDIAN_32BITWORD) && defined(ENDIAN_64BITWORD))260#error Cannot be 32 and 64 bit words...261#endif262263/* gcc 4.3 and up has a bswap builtin; detect it by gcc version.264* clang also supports the bswap builtin, and although clang pretends265* to be gcc (macro-wise, anyway), clang pretends to be a version266* prior to gcc 4.3, so we can't detect bswap that way. Instead,267* clang has a __has_builtin mechanism that can be used to check268* for builtins:269* http://clang.llvm.org/docs/LanguageExtensions.html#feature_check */270#ifndef __has_builtin271#define __has_builtin(x) 0272#endif273#if !defined(LTC_NO_BSWAP) && defined(__GNUC__) && \274((__GNUC__ * 100 + __GNUC_MINOR__ >= 403) || \275(__has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64)))276#define LTC_HAVE_BSWAP_BUILTIN277#endif278279280