Path: blob/master/libs/tomcrypt/src/headers/tomcrypt_custom.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#ifndef TOMCRYPT_CUSTOM_H_10#define TOMCRYPT_CUSTOM_H_1112/* macros for various libc functions you can change for embedded targets */13#ifndef XMALLOC14#define XMALLOC malloc15#endif16#ifndef XREALLOC17#define XREALLOC realloc18#endif19#ifndef XCALLOC20#define XCALLOC calloc21#endif22#ifndef XFREE23#define XFREE free24#endif2526#ifndef XMEMSET27#define XMEMSET memset28#endif29#ifndef XMEMCPY30#define XMEMCPY memcpy31#endif32#ifndef XMEMMOVE33#define XMEMMOVE memmove34#endif35#ifndef XMEMCMP36#define XMEMCMP memcmp37#endif38/* A memory compare function that has to run in constant time,39* c.f. mem_neq() API summary.40*/41#ifndef XMEM_NEQ42#define XMEM_NEQ mem_neq43#endif44#ifndef XSTRCMP45#define XSTRCMP strcmp46#endif4748#ifndef XCLOCK49#define XCLOCK clock50#endif5152#ifndef XQSORT53#define XQSORT qsort54#endif5556#if ( defined(malloc) || defined(realloc) || defined(calloc) || defined(free) || \57defined(memset) || defined(memcpy) || defined(memcmp) || defined(strcmp) || \58defined(clock) || defined(qsort) ) && !defined(LTC_NO_PROTOTYPES)59#define LTC_NO_PROTOTYPES60#endif6162/* shortcut to disable automatic inclusion */63#if defined LTC_NOTHING && !defined LTC_EASY64#define LTC_NO_CIPHERS65#define LTC_NO_MODES66#define LTC_NO_HASHES67#define LTC_NO_MACS68#define LTC_NO_PRNGS69#define LTC_NO_PK70#define LTC_NO_PKCS71#define LTC_NO_MISC72#endif /* LTC_NOTHING */7374/* Easy button? */75#ifdef LTC_EASY76#define LTC_NO_CIPHERS77#define LTC_RIJNDAEL78#define LTC_BLOWFISH79#define LTC_DES80#define LTC_CAST58182#define LTC_NO_MODES83#define LTC_ECB_MODE84#define LTC_CBC_MODE85#define LTC_CTR_MODE8687#define LTC_NO_HASHES88#define LTC_SHA189#define LTC_SHA390#define LTC_SHA51291#define LTC_SHA38492#define LTC_SHA25693#define LTC_SHA22494#define LTC_HASH_HELPERS9596#define LTC_NO_MACS97#define LTC_HMAC98#define LTC_OMAC99#define LTC_CCM_MODE100101#define LTC_NO_PRNGS102#define LTC_SPRNG103#define LTC_YARROW104#define LTC_DEVRANDOM105#define LTC_TRY_URANDOM_FIRST106#define LTC_RNG_GET_BYTES107#define LTC_RNG_MAKE_PRNG108109#define LTC_NO_PK110#define LTC_MRSA111#define LTC_MECC112113#define LTC_NO_MISC114#define LTC_BASE64115#endif116117/* The minimal set of functionality to run the tests */118#ifdef LTC_MINIMAL119#define LTC_RIJNDAEL120#define LTC_SHA256121#define LTC_YARROW122#define LTC_CTR_MODE123124#define LTC_RNG_MAKE_PRNG125#define LTC_RNG_GET_BYTES126#define LTC_DEVRANDOM127#define LTC_TRY_URANDOM_FIRST128129#undef LTC_NO_FILE130#endif131132/* Enable self-test test vector checking */133#ifndef LTC_NO_TEST134#define LTC_TEST135#endif136/* Enable extended self-tests */137/* #define LTC_TEST_EXT */138139/* Use small code where possible */140/* #define LTC_SMALL_CODE */141142/* clean the stack of functions which put private information on stack */143/* #define LTC_CLEAN_STACK */144145/* disable all file related functions */146#define LTC_NO_FILE147148/* disable all forms of ASM */149/* #define LTC_NO_ASM */150151/* disable FAST mode */152/* #define LTC_NO_FAST */153154/* disable BSWAP on x86 */155/* #define LTC_NO_BSWAP */156157/* ---> math provider? <--- */158#ifndef LTC_NO_MATH159160/* LibTomMath */161#define LTM_DESC162163/* TomsFastMath */164/* #define TFM_DESC */165166/* GNU Multiple Precision Arithmetic Library */167/* #define GMP_DESC */168169#endif /* LTC_NO_MATH */170171/* ---> Symmetric Block Ciphers <--- */172#ifndef LTC_NO_CIPHERS173174#define LTC_BLOWFISH175#define LTC_RC2176#define LTC_RC5177#define LTC_RC6178#define LTC_SAFERP179#define LTC_RIJNDAEL180#define LTC_XTEA181/* _TABLES tells it to use tables during setup, _SMALL means to use the smaller scheduled key format182* (saves 4KB of ram), _ALL_TABLES enables all tables during setup */183#define LTC_TWOFISH184#ifndef LTC_NO_TABLES185#define LTC_TWOFISH_TABLES186/* #define LTC_TWOFISH_ALL_TABLES */187#else188#define LTC_TWOFISH_SMALL189#endif190/* #define LTC_TWOFISH_SMALL */191/* LTC_DES includes EDE triple-DES */192#define LTC_DES193#define LTC_CAST5194#define LTC_NOEKEON195#define LTC_SKIPJACK196#define LTC_SAFER197#define LTC_KHAZAD198#define LTC_ANUBIS199#define LTC_ANUBIS_TWEAK200#define LTC_KSEED201#define LTC_KASUMI202#define LTC_MULTI2203#define LTC_CAMELLIA204205/* stream ciphers */206#define LTC_CHACHA207#define LTC_RC4_STREAM208#define LTC_SOBER128_STREAM209210#endif /* LTC_NO_CIPHERS */211212213/* ---> Block Cipher Modes of Operation <--- */214#ifndef LTC_NO_MODES215216#define LTC_CFB_MODE217#define LTC_OFB_MODE218#define LTC_ECB_MODE219#define LTC_CBC_MODE220#define LTC_CTR_MODE221222/* F8 chaining mode */223#define LTC_F8_MODE224225/* LRW mode */226#define LTC_LRW_MODE227#ifndef LTC_NO_TABLES228/* like GCM mode this will enable 16 8x128 tables [64KB] that make229* seeking very fast.230*/231#define LTC_LRW_TABLES232#endif233234/* XTS mode */235#define LTC_XTS_MODE236237#endif /* LTC_NO_MODES */238239/* ---> One-Way Hash Functions <--- */240#ifndef LTC_NO_HASHES241242#define LTC_CHC_HASH243#define LTC_WHIRLPOOL244#define LTC_SHA3245#define LTC_SHA512246#define LTC_SHA512_256247#define LTC_SHA512_224248#define LTC_SHA384249#define LTC_SHA256250#define LTC_SHA224251#define LTC_TIGER252#define LTC_SHA1253#define LTC_MD5254#define LTC_MD4255#define LTC_MD2256#define LTC_RIPEMD128257#define LTC_RIPEMD160258#define LTC_RIPEMD256259#define LTC_RIPEMD320260#define LTC_BLAKE2S261#define LTC_BLAKE2B262263#define LTC_HASH_HELPERS264265#endif /* LTC_NO_HASHES */266267268/* ---> MAC functions <--- */269#ifndef LTC_NO_MACS270271#define LTC_HMAC272#define LTC_OMAC273#define LTC_PMAC274#define LTC_XCBC275#define LTC_F9_MODE276#define LTC_PELICAN277#define LTC_POLY1305278#define LTC_BLAKE2SMAC279#define LTC_BLAKE2BMAC280281/* ---> Encrypt + Authenticate Modes <--- */282283#define LTC_EAX_MODE284285#define LTC_OCB_MODE286#define LTC_OCB3_MODE287#define LTC_CCM_MODE288#define LTC_GCM_MODE289#define LTC_CHACHA20POLY1305_MODE290291/* Use 64KiB tables */292#ifndef LTC_NO_TABLES293#define LTC_GCM_TABLES294#endif295296/* USE SSE2? requires GCC works on x86_32 and x86_64*/297#ifdef LTC_GCM_TABLES298/* #define LTC_GCM_TABLES_SSE2 */299#endif300301#endif /* LTC_NO_MACS */302303304/* --> Pseudo Random Number Generators <--- */305#ifndef LTC_NO_PRNGS306307/* Yarrow */308#define LTC_YARROW309310/* a PRNG that simply reads from an available system source */311#define LTC_SPRNG312313/* The RC4 stream cipher based PRNG */314#define LTC_RC4315316/* The ChaCha20 stream cipher based PRNG */317#define LTC_CHACHA20_PRNG318319/* Fortuna PRNG */320#define LTC_FORTUNA321322/* Greg's SOBER128 stream cipher based PRNG */323#define LTC_SOBER128324325/* the *nix style /dev/random device */326#define LTC_DEVRANDOM327/* try /dev/urandom before trying /dev/random328* are you sure you want to disable this? http://www.2uo.de/myths-about-urandom/ */329#define LTC_TRY_URANDOM_FIRST330/* rng_get_bytes() */331#define LTC_RNG_GET_BYTES332/* rng_make_prng() */333#define LTC_RNG_MAKE_PRNG334335/* enable the ltc_rng hook to integrate e.g. embedded hardware RNG's easily */336/* #define LTC_PRNG_ENABLE_LTC_RNG */337338#endif /* LTC_NO_PRNGS */339340#ifdef LTC_YARROW341342/* which descriptor of AES to use? */343/* 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] */344#ifdef ENCRYPT_ONLY345#define LTC_YARROW_AES 0346#else347#define LTC_YARROW_AES 2348#endif349350#endif351352#ifdef LTC_FORTUNA353354#ifndef LTC_FORTUNA_WD355/* reseed every N calls to the read function */356#define LTC_FORTUNA_WD 10357#endif358359#ifndef LTC_FORTUNA_POOLS360/* number of pools (4..32) can save a bit of ram by lowering the count */361#define LTC_FORTUNA_POOLS 32362#endif363364#endif /* LTC_FORTUNA */365366367/* ---> Public Key Crypto <--- */368#ifndef LTC_NO_PK369370/* Include RSA support */371#define LTC_MRSA372373/* Include Diffie-Hellman support */374/* is_prime fails for GMP */375#define LTC_MDH376/* Supported Key Sizes */377#define LTC_DH768378#define LTC_DH1024379#define LTC_DH1536380#define LTC_DH2048381382#ifndef TFM_DESC383/* tfm has a problem in fp_isprime for larger key sizes */384#define LTC_DH3072385#define LTC_DH4096386#define LTC_DH6144387#define LTC_DH8192388#endif389390/* Include Katja (a Rabin variant like RSA) */391/* #define LTC_MKAT */392393/* Digital Signature Algorithm */394#define LTC_MDSA395396/* ECC */397#define LTC_MECC398399/* use Shamir's trick for point mul (speeds up signature verification) */400#define LTC_ECC_SHAMIR401402#if defined(TFM_DESC) && defined(LTC_MECC)403#define LTC_MECC_ACCEL404#endif405406/* do we want fixed point ECC */407/* #define LTC_MECC_FP */408409#endif /* LTC_NO_PK */410411#if defined(LTC_MRSA) && !defined(LTC_NO_RSA_BLINDING)412/* Enable RSA blinding when doing private key operations by default */413#define LTC_RSA_BLINDING414#endif /* LTC_NO_RSA_BLINDING */415416#if defined(LTC_MRSA) && !defined(LTC_NO_RSA_CRT_HARDENING)417/* Enable RSA CRT hardening when doing private key operations by default */418#define LTC_RSA_CRT_HARDENING419#endif /* LTC_NO_RSA_CRT_HARDENING */420421#if defined(LTC_MECC) && !defined(LTC_NO_ECC_TIMING_RESISTANT)422/* Enable ECC timing resistant version by default */423#define LTC_ECC_TIMING_RESISTANT424#endif425426/* PKCS #1 (RSA) and #5 (Password Handling) stuff */427#ifndef LTC_NO_PKCS428429#define LTC_PKCS_1430#define LTC_PKCS_5431432/* Include ASN.1 DER (required by DSA/RSA) */433#define LTC_DER434435#endif /* LTC_NO_PKCS */436437/* misc stuff */438#ifndef LTC_NO_MISC439440/* Various tidbits of modern neatoness */441#define LTC_BASE64442/* ... and it's URL safe version */443#define LTC_BASE64_URL444445/* Keep LTC_NO_HKDF for compatibility reasons446* superseeded by LTC_NO_MISC*/447#ifndef LTC_NO_HKDF448/* HKDF Key Derivation/Expansion stuff */449#define LTC_HKDF450#endif /* LTC_NO_HKDF */451452#define LTC_ADLER32453454#define LTC_CRC32455456#endif /* LTC_NO_MISC */457458/* cleanup */459460#ifdef LTC_MECC461/* Supported ECC Key Sizes */462#ifndef LTC_NO_CURVES463#define LTC_ECC112464#define LTC_ECC128465#define LTC_ECC160466#define LTC_ECC192467#define LTC_ECC224468#define LTC_ECC256469#define LTC_ECC384470#define LTC_ECC521471#endif472#endif473474#if defined(LTC_DER)475#ifndef LTC_DER_MAX_RECURSION476/* Maximum recursion limit when processing nested ASN.1 types. */477#define LTC_DER_MAX_RECURSION 30478#endif479#endif480481#if defined(LTC_MECC) || defined(LTC_MRSA) || defined(LTC_MDSA) || defined(LTC_MKAT)482/* Include the MPI functionality? (required by the PK algorithms) */483#define LTC_MPI484485#ifndef LTC_PK_MAX_RETRIES486/* iterations limit for retry-loops */487#define LTC_PK_MAX_RETRIES 20488#endif489#endif490491#ifdef LTC_MRSA492#define LTC_PKCS_1493#endif494495#if defined(LTC_PELICAN) && !defined(LTC_RIJNDAEL)496#error Pelican-MAC requires LTC_RIJNDAEL497#endif498499#if defined(LTC_EAX_MODE) && !(defined(LTC_CTR_MODE) && defined(LTC_OMAC))500#error LTC_EAX_MODE requires CTR and LTC_OMAC mode501#endif502503#if defined(LTC_YARROW) && !defined(LTC_CTR_MODE)504#error LTC_YARROW requires LTC_CTR_MODE chaining mode to be defined!505#endif506507#if defined(LTC_DER) && !defined(LTC_MPI)508#error ASN.1 DER requires MPI functionality509#endif510511#if (defined(LTC_MDSA) || defined(LTC_MRSA) || defined(LTC_MECC) || defined(LTC_MKAT)) && !defined(LTC_DER)512#error PK requires ASN.1 DER functionality, make sure LTC_DER is enabled513#endif514515#if defined(LTC_CHACHA20POLY1305_MODE) && (!defined(LTC_CHACHA) || !defined(LTC_POLY1305))516#error LTC_CHACHA20POLY1305_MODE requires LTC_CHACHA + LTC_POLY1305517#endif518519#if defined(LTC_CHACHA20_PRNG) && !defined(LTC_CHACHA)520#error LTC_CHACHA20_PRNG requires LTC_CHACHA521#endif522523#if defined(LTC_RC4) && !defined(LTC_RC4_STREAM)524#error LTC_RC4 requires LTC_RC4_STREAM525#endif526527#if defined(LTC_SOBER128) && !defined(LTC_SOBER128_STREAM)528#error LTC_SOBER128 requires LTC_SOBER128_STREAM529#endif530531#if defined(LTC_BLAKE2SMAC) && !defined(LTC_BLAKE2S)532#error LTC_BLAKE2SMAC requires LTC_BLAKE2S533#endif534535#if defined(LTC_BLAKE2BMAC) && !defined(LTC_BLAKE2B)536#error LTC_BLAKE2BMAC requires LTC_BLAKE2B537#endif538539#if defined(LTC_SPRNG) && !defined(LTC_RNG_GET_BYTES)540#error LTC_SPRNG requires LTC_RNG_GET_BYTES541#endif542543#if defined(LTC_NO_MATH) && (defined(LTM_DESC) || defined(TFM_DESC) || defined(GMP_DESC))544#error LTC_NO_MATH defined, but also a math descriptor545#endif546547/* THREAD management */548#ifdef LTC_PTHREAD549550#include <pthread.h>551552#define LTC_MUTEX_GLOBAL(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER;553#define LTC_MUTEX_PROTO(x) extern pthread_mutex_t x;554#define LTC_MUTEX_TYPE(x) pthread_mutex_t x;555#define LTC_MUTEX_INIT(x) LTC_ARGCHK(pthread_mutex_init(x, NULL) == 0);556#define LTC_MUTEX_LOCK(x) LTC_ARGCHK(pthread_mutex_lock(x) == 0);557#define LTC_MUTEX_UNLOCK(x) LTC_ARGCHK(pthread_mutex_unlock(x) == 0);558#define LTC_MUTEX_DESTROY(x) LTC_ARGCHK(pthread_mutex_destroy(x) == 0);559560#else561562/* default no functions */563#define LTC_MUTEX_GLOBAL(x)564#define LTC_MUTEX_PROTO(x)565#define LTC_MUTEX_TYPE(x)566#define LTC_MUTEX_INIT(x)567#define LTC_MUTEX_LOCK(x)568#define LTC_MUTEX_UNLOCK(x)569#define LTC_MUTEX_DESTROY(x)570571#endif572573/* Debuggers */574575/* define this if you use Valgrind, note: it CHANGES the way SOBER-128 and RC4 work (see the code) */576/* #define LTC_VALGRIND */577578#endif579580#ifndef LTC_NO_FILE581/* buffer size for reading from a file via fread(..) */582#ifndef LTC_FILE_READ_BUFSIZE583#define LTC_FILE_READ_BUFSIZE 8192584#endif585#endif586587588