tommath_superclass.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /* LibTomMath, multiple-precision integer library -- Tom St Denis */
  2. /* SPDX-License-Identifier: Unlicense */
  3. /* super class file for PK algos */
  4. /* default ... include all MPI */
  5. #ifndef LTM_NOTHING
  6. #define LTM_ALL
  7. #endif
  8. /* RSA only (does not support DH/DSA/ECC) */
  9. /* #define SC_RSA_1 */
  10. /* #define SC_RSA_1_WITH_TESTS */
  11. /* For reference.... On an Athlon64 optimizing for speed...
  12. LTM's mpi.o with all functions [striped] is 142KiB in size.
  13. */
  14. #ifdef SC_RSA_1_WITH_TESTS
  15. # define BN_MP_ERROR_TO_STRING_C
  16. # define BN_MP_FREAD_C
  17. # define BN_MP_FWRITE_C
  18. # define BN_MP_INCR_C
  19. # define BN_MP_ISEVEN_C
  20. # define BN_MP_ISODD_C
  21. # define BN_MP_NEG_C
  22. # define BN_MP_PRIME_FROBENIUS_UNDERWOOD_C
  23. # define BN_MP_RADIX_SIZE_C
  24. # define BN_MP_RAND_C
  25. # define BN_MP_REDUCE_C
  26. # define BN_MP_REDUCE_2K_L_C
  27. # define BN_MP_FROM_SBIN_C
  28. # define BN_MP_ROOT_U32_C
  29. # define BN_MP_SET_L_C
  30. # define BN_MP_SET_UL_C
  31. # define BN_MP_SBIN_SIZE_C
  32. # define BN_MP_TO_RADIX_C
  33. # define BN_MP_TO_SBIN_C
  34. # define BN_S_MP_RAND_JENKINS_C
  35. # define BN_S_MP_RAND_PLATFORM_C
  36. #endif
  37. /* Works for RSA only, mpi.o is 68KiB */
  38. #if defined(SC_RSA_1) || defined (SC_RSA_1_WITH_TESTS)
  39. # define BN_CUTOFFS_C
  40. # define BN_MP_ADDMOD_C
  41. # define BN_MP_CLEAR_MULTI_C
  42. # define BN_MP_EXPTMOD_C
  43. # define BN_MP_GCD_C
  44. # define BN_MP_INIT_MULTI_C
  45. # define BN_MP_INVMOD_C
  46. # define BN_MP_LCM_C
  47. # define BN_MP_MOD_C
  48. # define BN_MP_MOD_D_C
  49. # define BN_MP_MULMOD_C
  50. # define BN_MP_PRIME_IS_PRIME_C
  51. # define BN_MP_PRIME_RABIN_MILLER_TRIALS_C
  52. # define BN_MP_PRIME_RAND_C
  53. # define BN_MP_RADIX_SMAP_C
  54. # define BN_MP_SET_INT_C
  55. # define BN_MP_SHRINK_C
  56. # define BN_MP_TO_UNSIGNED_BIN_C
  57. # define BN_MP_UNSIGNED_BIN_SIZE_C
  58. # define BN_PRIME_TAB_C
  59. # define BN_S_MP_REVERSE_C
  60. /* other modifiers */
  61. # define BN_MP_DIV_SMALL /* Slower division, not critical */
  62. /* here we are on the last pass so we turn things off. The functions classes are still there
  63. * but we remove them specifically from the build. This also invokes tweaks in functions
  64. * like removing support for even moduli, etc...
  65. */
  66. # ifdef LTM_LAST
  67. # undef BN_MP_DR_IS_MODULUS_C
  68. # undef BN_MP_DR_SETUP_C
  69. # undef BN_MP_DR_REDUCE_C
  70. # undef BN_MP_DIV_3_C
  71. # undef BN_MP_REDUCE_2K_SETUP_C
  72. # undef BN_MP_REDUCE_2K_C
  73. # undef BN_MP_REDUCE_IS_2K_C
  74. # undef BN_MP_REDUCE_SETUP_C
  75. # undef BN_S_MP_BALANCE_MUL_C
  76. # undef BN_S_MP_EXPTMOD_C
  77. # undef BN_S_MP_INVMOD_FAST_C
  78. # undef BN_S_MP_KARATSUBA_MUL_C
  79. # undef BN_S_MP_KARATSUBA_SQR_C
  80. # undef BN_S_MP_MUL_HIGH_DIGS_C
  81. # undef BN_S_MP_MUL_HIGH_DIGS_FAST_C
  82. # undef BN_S_MP_TOOM_MUL_C
  83. # undef BN_S_MP_TOOM_SQR_C
  84. # ifndef SC_RSA_1_WITH_TESTS
  85. # undef BN_MP_REDUCE_C
  86. # endif
  87. /* To safely undefine these you have to make sure your RSA key won't exceed the Comba threshold
  88. * which is roughly 255 digits [7140 bits for 32-bit machines, 15300 bits for 64-bit machines]
  89. * which means roughly speaking you can handle upto 2536-bit RSA keys with these defined without
  90. * trouble.
  91. */
  92. # undef BN_MP_MONTGOMERY_REDUCE_C
  93. # undef BN_S_MP_MUL_DIGS_C
  94. # undef BN_S_MP_SQR_C
  95. # endif
  96. #endif