@@ -927,6 +927,7 @@ static const char *SPSP_2_100_LARGE[4] = {
927
927
"IjegdWjQLeX1ZQM0HVUUF3WEVhHXcFzF0sMiJU5hl" /* bases 2 - 101 */
928
928
};
929
929
930
+ #ifndef LTM_USE_ONLY_MR
930
931
/* Extra strong Lucas test with Baillie's parameters Q = 1, P = 3 */
931
932
static const uint32_t ESLPSP [] = {
932
933
989 , 3239 , 5777 , 10877 , 27971 , 29681 , 30739 , 31631 , 39059 , 72389 ,
@@ -944,6 +945,7 @@ static const uint32_t AESLPSP[] = {
944
945
1620673 , 1813601 , 1969109 , 2415739 , 2595329 , 2756837 , 3721549 ,
945
946
4269341 , 5192309 , 7045433 , 7226669 , 7265561
946
947
};
948
+ #endif
947
949
948
950
/* Some randomly choosen 200 decimal digit large primes (https://primes.utm.edu/lists/small/small2.html) */
949
951
static const char * medium_primes [10 ] = {
@@ -1078,7 +1080,7 @@ static int test_mp_prime_miller_rabin(void)
1078
1080
return EXIT_FAILURE ;
1079
1081
}
1080
1082
1081
-
1083
+ #ifndef LTM_USE_ONLY_MR
1082
1084
static int test_mp_prime_extra_strong_lucas (void )
1083
1085
{
1084
1086
mp_int a , b ;
@@ -1127,12 +1129,16 @@ static int test_mp_prime_extra_strong_lucas(void)
1127
1129
mp_clear_multi (& a , & b , NULL );
1128
1130
return EXIT_FAILURE ;
1129
1131
}
1132
+ #endif
1130
1133
1131
1134
static int test_mp_prime_is_prime (void )
1132
1135
{
1133
1136
int ix ;
1134
1137
mp_err e ;
1135
- bool cnt , fu ;
1138
+ bool cnt ;
1139
+ #ifndef LTM_USE_ONLY_MR
1140
+ bool fu ;
1141
+ #endif
1136
1142
1137
1143
mp_int a , b ;
1138
1144
DOR (mp_init_multi (& a , & b , NULL ));
@@ -1191,6 +1197,7 @@ static int test_mp_prime_is_prime(void)
1191
1197
DO (mp_prime_is_prime (& b , mp_prime_rabin_miller_trials (mp_count_bits (& b )), & cnt ));
1192
1198
/* large problem */
1193
1199
EXPECT (cnt );
1200
+ #ifndef LTM_USE_ONLY_MR
1194
1201
DO (mp_prime_frobenius_underwood (& b , & fu ));
1195
1202
EXPECT (fu );
1196
1203
if ((e != MP_OKAY ) || !cnt ) {
@@ -1202,8 +1209,9 @@ static int test_mp_prime_is_prime(void)
1202
1209
putchar ('\n' );
1203
1210
goto LBL_ERR ;
1204
1211
}
1205
-
1212
+ #endif
1206
1213
}
1214
+ #ifndef LTM_USE_ONLY_MR
1207
1215
/* Check regarding problem #143 */
1208
1216
DO (mp_read_radix (& a ,
1209
1217
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF" ,
@@ -1217,6 +1225,47 @@ static int test_mp_prime_is_prime(void)
1217
1225
putchar ('\n' );
1218
1226
goto LBL_ERR ;
1219
1227
}
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
+
1220
1269
1221
1270
mp_clear_multi (& a , & b , NULL );
1222
1271
return EXIT_SUCCESS ;
@@ -2708,7 +2757,9 @@ static int unit_tests(int argc, char **argv)
2708
2757
T1 (mp_montgomery_reduce , MP_MONTGOMERY_REDUCE ),
2709
2758
T1 (mp_root_n , MP_ROOT_N ),
2710
2759
T1 (mp_or , MP_OR ),
2760
+ #ifndef LTM_USE_ONLY_MR
2711
2761
T1 (mp_prime_extra_strong_lucas , MP_PRIME_EXTRA_STRONG_LUCAS ),
2762
+ #endif
2712
2763
T1 (mp_prime_miller_rabin , MP_PRIME_MILLER_RABIN ),
2713
2764
T1 (mp_prime_is_prime , MP_PRIME_IS_PRIME ),
2714
2765
T1 (mp_prime_next_prime , MP_PRIME_NEXT_PRIME ),
0 commit comments