• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // This file was extracted from the TCG Published
2 // Trusted Platform Module Library
3 // Part 4: Supporting Routines
4 // Family "2.0"
5 // Level 00 Revision 01.16
6 // October 30, 2014
7 
8 #ifndef        RSA_H
9 #define        RSA_H
10 //
11 //       This value is used to set the size of the table that is searched by the prime iterator. This is used during
12 //       the generation of different primes. The smaller tables are used when generating smaller primes.
13 //
14 extern const UINT16        primeTableBytes;
15 //
16 //       The following define determines how large the prime number difference table will be defined. The value of
17 //       13 will allocate the maximum size table which allows generation of the first 6542 primes which is all the
18 //       primes less than 2^16.
19 #define PRIME_DIFF_TABLE_512_BYTE_PAGES                  13
20 //
21 //     This set of macros used the value above to set the table size.
22 //
23 #ifndef PRIME_DIFF_TABLE_512_BYTE_PAGES
24 #   define PRIME_DIFF_TABLE_512_BYTE_PAGES      4
25 #endif
26 #ifdef PRIME_DIFF_TABLE_512_BYTE_PAGES
27 #   if PRIME_DIFF_TABLE_512_BYTE_PAGES > 12
28 #        define PRIME_DIFF_TABLE_BYTES 6542
29 #   else
30 #        if PRIME_DIFF_TABLE_512_BYTE_PAGES <= 0
31 #             define PRIME_DIFF_TABLE_BYTES 512
32 #        else
33 #             define PRIME_DIFF_TABLE_BYTES (PRIME_DIFF_TABLE_512_BYTE_PAGES * 512)
34 #        endif
35 #   endif
36 #endif
37 extern const BYTE primeDiffTable [PRIME_DIFF_TABLE_BYTES];
38 //
39 //     This determines the number of bits in the sieve field This must be a power of two.
40 //
41 #define FIELD_POWER            14  // This is the only value in this group that should be
42                                   // changed
43 #define FIELD_BITS             (1 << FIELD_POWER)
44 #define MAX_FIELD_SIZE             ((FIELD_BITS / 8) + 1)
45 //
46 //     This is the pre-sieved table. It already has the bits for multiples of 3, 5, and 7 cleared.
47 //
48 #define SEED_VALUES_SIZE                    105
49 const extern BYTE                           seedValues[SEED_VALUES_SIZE];
50 //
51 //     This allows determination of the number of bits that are set in a byte without having to count them
52 //     individually.
53 //
54 const extern BYTE                           bitsInByte[256];
55 //
56 //     This is the iterator structure for accessing the compressed prime number table. The expectation is that
57 //     values will need to be accesses sequentially. This tries to save some data access.
58 //
59 typedef struct {
60    UINT32       lastPrime;
61    UINT32       index;
62    UINT32       final;
63 } PRIME_ITERATOR;
64 #ifdef RSA_INSTRUMENT
65 #   define INSTRUMENT_SET(a, b) ((a) = (b))
66 #   define INSTRUMENT_ADD(a, b) (a) = (a) + (b)
67 #   define INSTRUMENT_INC(a)     (a) = (a) + 1
68 extern UINT32 failedAtIteration[10];
69 extern UINT32 MillerRabinTrials;
70 extern UINT32 totalFieldsSieved;
71 extern UINT32 emptyFieldsSieved;
72 extern UINT32 noPrimeFields;
73 extern UINT32 primesChecked;
74 extern UINT16    lastSievePrime;
75 #else
76 #   define INSTRUMENT_SET(a, b)
77 #   define INSTRUMENT_ADD(a, b)
78 #   define INSTRUMENT_INC(a)
79 #endif
80 #ifdef RSA_DEBUG
81 extern UINT16    defaultFieldSize;
82 #define NUM_PRIMES                2047
83 extern const __int16              primes[NUM_PRIMES];
84 #else
85 #define defaultFieldSize          MAX_FIELD_SIZE
86 #endif
87 #endif
88