// This file was extracted from the TCG Published // Trusted Platform Module Library // Part 4: Supporting Routines // Family "2.0" // Level 00 Revision 01.16 // October 30, 2014 #ifndef RSA_H #define RSA_H // // This value is used to set the size of the table that is searched by the prime iterator. This is used during // the generation of different primes. The smaller tables are used when generating smaller primes. // extern const UINT16 primeTableBytes; // // The following define determines how large the prime number difference table will be defined. The value of // 13 will allocate the maximum size table which allows generation of the first 6542 primes which is all the // primes less than 2^16. #define PRIME_DIFF_TABLE_512_BYTE_PAGES 13 // // This set of macros used the value above to set the table size. // #ifndef PRIME_DIFF_TABLE_512_BYTE_PAGES # define PRIME_DIFF_TABLE_512_BYTE_PAGES 4 #endif #ifdef PRIME_DIFF_TABLE_512_BYTE_PAGES # if PRIME_DIFF_TABLE_512_BYTE_PAGES > 12 # define PRIME_DIFF_TABLE_BYTES 6542 # else # if PRIME_DIFF_TABLE_512_BYTE_PAGES <= 0 # define PRIME_DIFF_TABLE_BYTES 512 # else # define PRIME_DIFF_TABLE_BYTES (PRIME_DIFF_TABLE_512_BYTE_PAGES * 512) # endif # endif #endif extern const BYTE primeDiffTable [PRIME_DIFF_TABLE_BYTES]; // // This determines the number of bits in the sieve field This must be a power of two. // #define FIELD_POWER 14 // This is the only value in this group that should be // changed #define FIELD_BITS (1 << FIELD_POWER) #define MAX_FIELD_SIZE ((FIELD_BITS / 8) + 1) // // This is the pre-sieved table. It already has the bits for multiples of 3, 5, and 7 cleared. // #define SEED_VALUES_SIZE 105 const extern BYTE seedValues[SEED_VALUES_SIZE]; // // This allows determination of the number of bits that are set in a byte without having to count them // individually. // const extern BYTE bitsInByte[256]; // // This is the iterator structure for accessing the compressed prime number table. The expectation is that // values will need to be accesses sequentially. This tries to save some data access. // typedef struct { UINT32 lastPrime; UINT32 index; UINT32 final; } PRIME_ITERATOR; #ifdef RSA_INSTRUMENT # define INSTRUMENT_SET(a, b) ((a) = (b)) # define INSTRUMENT_ADD(a, b) (a) = (a) + (b) # define INSTRUMENT_INC(a) (a) = (a) + 1 extern UINT32 failedAtIteration[10]; extern UINT32 MillerRabinTrials; extern UINT32 totalFieldsSieved; extern UINT32 emptyFieldsSieved; extern UINT32 noPrimeFields; extern UINT32 primesChecked; extern UINT16 lastSievePrime; #else # define INSTRUMENT_SET(a, b) # define INSTRUMENT_ADD(a, b) # define INSTRUMENT_INC(a) #endif #ifdef RSA_DEBUG extern UINT16 defaultFieldSize; #define NUM_PRIMES 2047 extern const __int16 primes[NUM_PRIMES]; #else #define defaultFieldSize MAX_FIELD_SIZE #endif #endif