4
4
#include <unistd.h>
5
5
#include <inttypes.h>
6
6
7
- #define MP_WUR
8
7
#include <tommath.h>
9
8
10
9
#ifdef IOWNANATHLON
26
25
#define MP_TIMING_VERSION "-" MP_VERSION
27
26
#endif
28
27
28
+ #define CHECK_OK (x ) do { mp_err err; if ((err = (x)) != MP_OKAY) { fprintf(stderr, "%d: CHECK_OK(%s) failed: %s\n", __LINE__, #x, mp_error_to_string(err)); exit(EXIT_FAILURE); } }while(0)
29
+
29
30
static void ndraw (const mp_int * a , const char * name )
30
31
{
31
32
char buf [4096 ];
32
33
33
34
printf ("%s: " , name );
34
- mp_to_radix (a , buf , sizeof (buf ), NULL , 64 );
35
+ CHECK_OK ( mp_to_radix (a , buf , sizeof (buf ), NULL , 64 ) );
35
36
printf ("%s\n" , buf );
36
37
}
37
38
@@ -90,7 +91,7 @@ static uint64_t TIMFUNC(void)
90
91
#endif
91
92
}
92
93
93
- #define DO2 (x ) x; x
94
+ #define DO2 (x ) do { mp_err err = x; err = x; (void)err; }while(0)
94
95
#define DO4 (x ) DO2(x); DO2(x)
95
96
#define DO8 (x ) DO4(x); DO4(x)
96
97
@@ -140,12 +141,12 @@ int main(int argc, char **argv)
140
141
int n , cnt , ix , old_kara_m , old_kara_s , old_toom_m , old_toom_s ;
141
142
unsigned rr ;
142
143
143
- mp_init (& a );
144
- mp_init (& b );
145
- mp_init (& c );
146
- mp_init (& d );
147
- mp_init (& e );
148
- mp_init (& f );
144
+ CHECK_OK ( mp_init (& a ) );
145
+ CHECK_OK ( mp_init (& b ) );
146
+ CHECK_OK ( mp_init (& c ) );
147
+ CHECK_OK ( mp_init (& d ) );
148
+ CHECK_OK ( mp_init (& e ) );
149
+ CHECK_OK ( mp_init (& f ) );
149
150
150
151
srand (LTM_TIMING_RAND_SEED );
151
152
@@ -161,14 +162,14 @@ int main(int argc, char **argv)
161
162
for (m = 0 ; m < 2 ; ++ m ) {
162
163
if (m == 0 ) {
163
164
name = " Arnault" ;
164
- mp_read_radix (& a ,
165
- "91xLNF3roobhzgTzoFIG6P13ZqhOVYSN60Fa7Cj2jVR1g0k89zdahO9/kAiRprpfO1VAp1aBHucLFV/qLKLFb+zonV7R2Vxp1K13ClwUXStpV0oxTNQVjwybmFb5NBEHImZ6V7P6+udRJuH8VbMEnS0H8/pSqQrg82OoQQ2fPpAk6G1hkjqoCv5s/Yr" ,
166
- 64 );
165
+ CHECK_OK ( mp_read_radix (& a ,
166
+ "91xLNF3roobhzgTzoFIG6P13ZqhOVYSN60Fa7Cj2jVR1g0k89zdahO9/kAiRprpfO1VAp1aBHucLFV/qLKLFb+zonV7R2Vxp1K13ClwUXStpV0oxTNQVjwybmFb5NBEHImZ6V7P6+udRJuH8VbMEnS0H8/pSqQrg82OoQQ2fPpAk6G1hkjqoCv5s/Yr" ,
167
+ 64 ) );
167
168
} else {
168
169
name = "2^1119 + 53" ;
169
170
mp_set (& a ,1u );
170
- mp_mul_2d (& a ,1119 ,& a );
171
- mp_add_d (& a ,53 ,& a );
171
+ CHECK_OK ( mp_mul_2d (& a ,1119 ,& a ) );
172
+ CHECK_OK ( mp_add_d (& a ,53 ,& a ) );
172
173
}
173
174
cnt = mp_prime_rabin_miller_trials (mp_count_bits (& a ));
174
175
ix = - cnt ;
@@ -197,8 +198,8 @@ int main(int argc, char **argv)
197
198
log = FOPEN ("logs/add" MP_TIMING_VERSION ".log" , "w" );
198
199
for (cnt = 8 ; cnt <= 128 ; cnt += 8 ) {
199
200
SLEEP ;
200
- mp_rand (& a , cnt );
201
- mp_rand (& b , cnt );
201
+ CHECK_OK ( mp_rand (& a , cnt ) );
202
+ CHECK_OK ( mp_rand (& b , cnt ) );
202
203
DO8 (mp_add (& a , & b , & c ));
203
204
rr = 0u ;
204
205
tt = UINT64_MAX ;
@@ -222,8 +223,8 @@ int main(int argc, char **argv)
222
223
log = FOPEN ("logs/sub" MP_TIMING_VERSION ".log" , "w" );
223
224
for (cnt = 8 ; cnt <= 128 ; cnt += 8 ) {
224
225
SLEEP ;
225
- mp_rand (& a , cnt );
226
- mp_rand (& b , cnt );
226
+ CHECK_OK ( mp_rand (& a , cnt ) );
227
+ CHECK_OK ( mp_rand (& b , cnt ) );
227
228
DO8 (mp_sub (& a , & b , & c ));
228
229
rr = 0u ;
229
230
tt = UINT64_MAX ;
@@ -263,8 +264,8 @@ int main(int argc, char **argv)
263
264
"logs/mult_toom" MP_TIMING_VERSION ".log" , "w" );
264
265
for (cnt = 4 ; cnt <= (10240 / MP_DIGIT_BIT ); cnt += 2 ) {
265
266
SLEEP ;
266
- mp_rand (& a , cnt );
267
- mp_rand (& b , cnt );
267
+ CHECK_OK ( mp_rand (& a , cnt ) );
268
+ CHECK_OK ( mp_rand (& b , cnt ) );
268
269
DO8 (mp_mul (& a , & b , & c ));
269
270
rr = 0u ;
270
271
tt = UINT64_MAX ;
@@ -287,7 +288,7 @@ int main(int argc, char **argv)
287
288
"logs/sqr_toom" MP_TIMING_VERSION ".log" , "w" );
288
289
for (cnt = 4 ; cnt <= (10240 / MP_DIGIT_BIT ); cnt += 2 ) {
289
290
SLEEP ;
290
- mp_rand (& a , cnt );
291
+ CHECK_OK ( mp_rand (& a , cnt ) );
291
292
DO8 (mp_sqr (& a , & b ));
292
293
rr = 0u ;
293
294
tt = UINT64_MAX ;
@@ -348,15 +349,15 @@ int main(int argc, char **argv)
348
349
logd = FOPEN ("logs/expt_2kl" MP_TIMING_VERSION ".log" , "w" );
349
350
for (n = 0 ; primes [n ] != NULL ; n ++ ) {
350
351
SLEEP ;
351
- mp_read_radix (& a , primes [n ], 10 );
352
+ CHECK_OK ( mp_read_radix (& a , primes [n ], 10 ) );
352
353
mp_zero (& b );
353
354
for (rr = 0 ; rr < (unsigned ) mp_count_bits (& a ); rr ++ ) {
354
- mp_mul_2 (& b , & b );
355
+ CHECK_OK ( mp_mul_2 (& b , & b ) );
355
356
b .dp [0 ] |= lbit ();
356
357
b .used += 1 ;
357
358
}
358
- mp_sub_d (& a , 1uL , & c );
359
- mp_mod (& b , & c , & b );
359
+ CHECK_OK ( mp_sub_d (& a , 1uL , & c ) );
360
+ CHECK_OK ( mp_mod (& b , & c , & b ) );
360
361
mp_set (& c , 3uL );
361
362
DO8 (mp_exptmod (& c , & b , & a , & d ));
362
363
rr = 0u ;
@@ -368,10 +369,10 @@ int main(int argc, char **argv)
368
369
if (tt > gg )
369
370
tt = gg ;
370
371
} while (++ rr < 10u );
371
- mp_sub_d (& a , 1uL , & e );
372
- mp_sub (& e , & b , & b );
373
- mp_exptmod (& c , & b , & a , & e ); /* c^(p-1-b) mod a */
374
- mp_mulmod (& e , & d , & a , & d ); /* c^b * c^(p-1-b) == c^p-1 == 1 */
372
+ CHECK_OK ( mp_sub_d (& a , 1uL , & e ) );
373
+ CHECK_OK ( mp_sub (& e , & b , & b ) );
374
+ CHECK_OK ( mp_exptmod (& c , & b , & a , & e ) ); /* c^(p-1-b) mod a */
375
+ CHECK_OK ( mp_mulmod (& e , & d , & a , & d ) ); /* c^b * c^(p-1-b) == c^p-1 == 1 */
375
376
if (mp_cmp_d (& d , 1uL ) != MP_EQ ) {
376
377
printf ("Different (%d)!!!\n" , mp_count_bits (& a ));
377
378
draw (& d );
@@ -393,12 +394,12 @@ int main(int argc, char **argv)
393
394
log = FOPEN ("logs/invmod" MP_TIMING_VERSION ".log" , "w" );
394
395
for (cnt = 4 ; cnt <= 32 ; cnt += 4 ) {
395
396
SLEEP ;
396
- mp_rand (& a , cnt );
397
- mp_rand (& b , cnt );
397
+ CHECK_OK ( mp_rand (& a , cnt ) );
398
+ CHECK_OK ( mp_rand (& b , cnt ) );
398
399
399
400
do {
400
- mp_add_d (& b , 1uL , & b );
401
- mp_gcd (& a , & b , & c );
401
+ CHECK_OK ( mp_add_d (& b , 1uL , & b ) );
402
+ CHECK_OK ( mp_gcd (& a , & b , & c ) );
402
403
} while (mp_cmp_d (& c , 1uL ) != MP_EQ );
403
404
404
405
DO2 (mp_invmod (& b , & a , & c ));
@@ -411,7 +412,7 @@ int main(int argc, char **argv)
411
412
if (tt > gg )
412
413
tt = gg ;
413
414
} while (++ rr < 1000u );
414
- mp_mulmod (& b , & c , & a , & d );
415
+ CHECK_OK ( mp_mulmod (& b , & c , & a , & d ) );
415
416
if (mp_cmp_d (& d , 1uL ) != MP_EQ ) {
416
417
printf ("Failed to invert\n" );
417
418
return 0 ;
0 commit comments