disallow defining MP_DIGIT_BIT, only allow MP_8/16/31/32/64BIT
This commit is contained in:
parent
e82c42a80b
commit
9f607dd5eb
35
tommath.h
35
tommath.h
@ -43,6 +43,10 @@ extern "C" {
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MP_DIGIT_BIT
|
||||||
|
# error Defining MP_DIGIT_BIT is disallowed, use MP_8/16/31/32/64BIT
|
||||||
|
#endif
|
||||||
|
|
||||||
/* some default configurations.
|
/* some default configurations.
|
||||||
*
|
*
|
||||||
* A "mp_digit" must be able to hold MP_DIGIT_BIT + 1 bits
|
* A "mp_digit" must be able to hold MP_DIGIT_BIT + 1 bits
|
||||||
@ -51,37 +55,35 @@ extern "C" {
|
|||||||
* At the very least a mp_digit must be able to hold 7 bits
|
* At the very least a mp_digit must be able to hold 7 bits
|
||||||
* [any size beyond that is ok provided it doesn't overflow the data type]
|
* [any size beyond that is ok provided it doesn't overflow the data type]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef MP_8BIT
|
#ifdef MP_8BIT
|
||||||
typedef uint8_t mp_digit;
|
typedef uint8_t mp_digit;
|
||||||
typedef uint16_t private_mp_word;
|
typedef uint16_t private_mp_word;
|
||||||
# define MP_SIZEOF_MP_DIGIT 1
|
# define MP_DIGIT_BIT 7
|
||||||
# ifdef MP_DIGIT_BIT
|
|
||||||
# error You must not define MP_DIGIT_BIT when using MP_8BIT
|
|
||||||
# endif
|
|
||||||
#elif defined(MP_16BIT)
|
#elif defined(MP_16BIT)
|
||||||
typedef uint16_t mp_digit;
|
typedef uint16_t mp_digit;
|
||||||
typedef uint32_t private_mp_word;
|
typedef uint32_t private_mp_word;
|
||||||
# define MP_SIZEOF_MP_DIGIT 2
|
# define MP_DIGIT_BIT 15
|
||||||
# ifdef MP_DIGIT_BIT
|
|
||||||
# error You must not define MP_DIGIT_BIT when using MP_16BIT
|
|
||||||
# endif
|
|
||||||
#elif defined(MP_64BIT)
|
#elif defined(MP_64BIT)
|
||||||
/* for GCC only on supported platforms */
|
/* for GCC only on supported platforms */
|
||||||
typedef uint64_t mp_digit;
|
typedef uint64_t mp_digit;
|
||||||
typedef unsigned long private_mp_word __attribute__((mode(TI)));
|
typedef unsigned long private_mp_word __attribute__((mode(TI)));
|
||||||
# define MP_DIGIT_BIT 60
|
# define MP_DIGIT_BIT 60
|
||||||
#else
|
#else
|
||||||
/* this is the default case, 28-bit digits */
|
|
||||||
|
|
||||||
/* this is to make porting into LibTomCrypt easier :-) */
|
|
||||||
typedef uint32_t mp_digit;
|
typedef uint32_t mp_digit;
|
||||||
typedef uint64_t private_mp_word;
|
typedef uint64_t private_mp_word;
|
||||||
|
|
||||||
# ifdef MP_31BIT
|
# ifdef MP_31BIT
|
||||||
/* this is an extension that uses 31-bit digits */
|
/*
|
||||||
|
* This is an extension that uses 31-bit digits.
|
||||||
|
* Please be aware that not all functions support this size, especially s_mp_mul_digs_fast
|
||||||
|
* will be reduced to work on small numbers only:
|
||||||
|
* Up to 8 limbs, 248 bits instead of up to 512 limbs, 15872 bits with MP_28BIT.
|
||||||
|
*/
|
||||||
# define MP_DIGIT_BIT 31
|
# define MP_DIGIT_BIT 31
|
||||||
# else
|
# else
|
||||||
/* default case is 28-bit digits, defines MP_28BIT as a handy macro to test */
|
/* default case is 28-bit digits, defines MP_28BIT as a handy macro to test
|
||||||
|
* this is to make porting into LibTomCrypt easier :-)
|
||||||
|
*/
|
||||||
# define MP_DIGIT_BIT 28
|
# define MP_DIGIT_BIT 28
|
||||||
# define MP_28BIT
|
# define MP_28BIT
|
||||||
# endif
|
# endif
|
||||||
@ -90,10 +92,7 @@ typedef uint64_t private_mp_word;
|
|||||||
/* mp_word is a private type */
|
/* mp_word is a private type */
|
||||||
#define mp_word MP_DEPRECATED_PRAGMA("mp_word has been made private") private_mp_word
|
#define mp_word MP_DEPRECATED_PRAGMA("mp_word has been made private") private_mp_word
|
||||||
|
|
||||||
/* otherwise the bits per digit is calculated automatically from the size of a mp_digit */
|
#define MP_SIZEOF_MP_DIGIT (MP_DEPRECATED_PRAGMA("MP_SIZEOF_MP_DIGIT has been deprecated, use sizeof (mp_digit)") sizeof (mp_digit))
|
||||||
#ifndef MP_DIGIT_BIT
|
|
||||||
# define MP_DIGIT_BIT (((CHAR_BIT * MP_SIZEOF_MP_DIGIT) - 1)) /* bits per digit */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MP_MASK ((((mp_digit)1)<<((mp_digit)MP_DIGIT_BIT))-((mp_digit)1))
|
#define MP_MASK ((((mp_digit)1)<<((mp_digit)MP_DIGIT_BIT))-((mp_digit)1))
|
||||||
#define MP_DIGIT_MAX MP_MASK
|
#define MP_DIGIT_MAX MP_MASK
|
||||||
|
Loading…
Reference in New Issue
Block a user