@@ -927,6 +927,7 @@ static const char *SPSP_2_100_LARGE[4] = {
927927 "IjegdWjQLeX1ZQM0HVUUF3WEVhHXcFzF0sMiJU5hl" /* bases 2 - 101 */
928928};
929929
930+ #ifndef LTM_USE_ONLY_MR
930931/* Extra strong Lucas test with Baillie's parameters Q = 1, P = 3 */
931932static const uint32_t ESLPSP [] = {
932933 989 , 3239 , 5777 , 10877 , 27971 , 29681 , 30739 , 31631 , 39059 , 72389 ,
@@ -944,6 +945,7 @@ static const uint32_t AESLPSP[] = {
944945 1620673 , 1813601 , 1969109 , 2415739 , 2595329 , 2756837 , 3721549 ,
945946 4269341 , 5192309 , 7045433 , 7226669 , 7265561
946947};
948+ #endif
947949
948950/* Some randomly choosen 200 decimal digit large primes (https://primes.utm.edu/lists/small/small2.html) */
949951static const char * medium_primes [10 ] = {
@@ -1078,7 +1080,7 @@ static int test_mp_prime_miller_rabin(void)
10781080 return EXIT_FAILURE ;
10791081}
10801082
1081-
1083+ #ifndef LTM_USE_ONLY_MR
10821084static int test_mp_prime_extra_strong_lucas (void )
10831085{
10841086 mp_int a , b ;
@@ -1127,12 +1129,16 @@ static int test_mp_prime_extra_strong_lucas(void)
11271129 mp_clear_multi (& a , & b , NULL );
11281130 return EXIT_FAILURE ;
11291131}
1132+ #endif
11301133
11311134static int test_mp_prime_is_prime (void )
11321135{
11331136 int ix ;
11341137 mp_err e ;
1135- bool cnt , fu ;
1138+ bool cnt ;
1139+ #ifndef LTM_USE_ONLY_MR
1140+ bool fu ;
1141+ #endif
11361142
11371143 mp_int a , b ;
11381144 DOR (mp_init_multi (& a , & b , NULL ));
@@ -1191,6 +1197,7 @@ static int test_mp_prime_is_prime(void)
11911197 DO (mp_prime_is_prime (& b , mp_prime_rabin_miller_trials (mp_count_bits (& b )), & cnt ));
11921198 /* large problem */
11931199 EXPECT (cnt );
1200+ #ifndef LTM_USE_ONLY_MR
11941201 DO (mp_prime_frobenius_underwood (& b , & fu ));
11951202 EXPECT (fu );
11961203 if ((e != MP_OKAY ) || !cnt ) {
@@ -1202,8 +1209,9 @@ static int test_mp_prime_is_prime(void)
12021209 putchar ('\n' );
12031210 goto LBL_ERR ;
12041211 }
1205-
1212+ #endif
12061213 }
1214+ #ifndef LTM_USE_ONLY_MR
12071215 /* Check regarding problem #143 */
12081216 DO (mp_read_radix (& a ,
12091217 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF" ,
@@ -1217,6 +1225,47 @@ static int test_mp_prime_is_prime(void)
12171225 putchar ('\n' );
12181226 goto LBL_ERR ;
12191227 }
1228+ #endif
1229+ /* Check deterministic tests */
1230+ #ifdef LTM_USE_ONLY_MR
1231+ #if ((defined S_MP_PRIME_IS_DIVISIBLE_C ) && (MP_PRIME_TAB_SIZE >= 256 ))
1232+ /* 2-SPRP 4188889 = 431 * 9719 < 2^22 */
1233+ DO (mp_read_radix (& a ,"4188889" ,10 ));
1234+ DO (mp_prime_is_prime (& a , 0 , & cnt ));
1235+ EXPECT (cnt == false);
1236+ /* Last prime < 2^22 */
1237+ DO (mp_read_radix (& a ,"4194301" ,10 ));
1238+ DO (mp_prime_is_prime (& a , 0 , & cnt ));
1239+ EXPECT (cnt == true);
1240+ /* 2,3-SPRP 6787327 = 1303 * 5209 < 2^23 */
1241+ DO (mp_read_radix (& a ,"6787327" ,10 ));
1242+ DO (mp_prime_is_prime (& a , 0 , & cnt ));
1243+ EXPECT (cnt == false);
1244+ /* Last prime < 2^23 */
1245+ DO (mp_read_radix (& a ,"8388593" ,10 ));
1246+ DO (mp_prime_is_prime (& a , 0 , & cnt ));
1247+ EXPECT (cnt == true);
1248+
1249+ /* 2,3,1459-SPRP < 2^32*/
1250+ DO (mp_read_radix (& a ,"1518290707" ,10 ));
1251+ DO (mp_prime_is_prime (& a , -1 , & cnt ));
1252+ EXPECT (cnt == false);
1253+ #endif
1254+ /* 2,3,7,61-SPRP < 2^43*/
1255+ DO (mp_read_radix (& a ,"7038007247701" ,10 ));
1256+ DO (mp_prime_is_prime (& a , -1 , & cnt ));
1257+ EXPECT (cnt == false);
1258+
1259+ /* 2,325,9375,28178,450775,9780504-SPRP < 2^64
1260+ which is also a
1261+ 2,3,325,9375,28178,450775,9780504-SPRP
1262+ */
1263+ DO (mp_read_radix (& a ,"18411296009130176041" ,10 ));
1264+ DO (mp_prime_is_prime (& a , -1 , & cnt ));
1265+ EXPECT (cnt == false);
1266+
1267+ #endif
1268+
12201269
12211270 mp_clear_multi (& a , & b , NULL );
12221271 return EXIT_SUCCESS ;
@@ -2708,7 +2757,9 @@ static int unit_tests(int argc, char **argv)
27082757 T1 (mp_montgomery_reduce , MP_MONTGOMERY_REDUCE ),
27092758 T1 (mp_root_n , MP_ROOT_N ),
27102759 T1 (mp_or , MP_OR ),
2760+ #ifndef LTM_USE_ONLY_MR
27112761 T1 (mp_prime_extra_strong_lucas , MP_PRIME_EXTRA_STRONG_LUCAS ),
2762+ #endif
27122763 T1 (mp_prime_miller_rabin , MP_PRIME_MILLER_RABIN ),
27132764 T1 (mp_prime_is_prime , MP_PRIME_IS_PRIME ),
27142765 T1 (mp_prime_next_prime , MP_PRIME_NEXT_PRIME ),
0 commit comments