PolarSSL v1.1.4
test_suite_mpi.c
Go to the documentation of this file.
1 #include "fct.h"
2 
3 #include <polarssl/bignum.h>
4 
5 #include <polarssl/config.h>
6 
7 #ifdef _MSC_VER
8 #include <basetsd.h>
9 typedef UINT32 uint32_t;
10 #else
11 #include <inttypes.h>
12 #endif
13 
14 /*
15  * 32-bit integer manipulation macros (big endian)
16  */
17 #ifndef GET_ULONG_BE
18 #define GET_ULONG_BE(n,b,i) \
19 { \
20  (n) = ( (unsigned long) (b)[(i) ] << 24 ) \
21  | ( (unsigned long) (b)[(i) + 1] << 16 ) \
22  | ( (unsigned long) (b)[(i) + 2] << 8 ) \
23  | ( (unsigned long) (b)[(i) + 3] ); \
24 }
25 #endif
26 
27 #ifndef PUT_ULONG_BE
28 #define PUT_ULONG_BE(n,b,i) \
29 { \
30  (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
31  (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
32  (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
33  (b)[(i) + 3] = (unsigned char) ( (n) ); \
34 }
35 #endif
36 
37 int unhexify(unsigned char *obuf, const char *ibuf)
38 {
39  unsigned char c, c2;
40  int len = strlen(ibuf) / 2;
41  assert(!(strlen(ibuf) %1)); // must be even number of bytes
42 
43  while (*ibuf != 0)
44  {
45  c = *ibuf++;
46  if( c >= '0' && c <= '9' )
47  c -= '0';
48  else if( c >= 'a' && c <= 'f' )
49  c -= 'a' - 10;
50  else if( c >= 'A' && c <= 'F' )
51  c -= 'A' - 10;
52  else
53  assert( 0 );
54 
55  c2 = *ibuf++;
56  if( c2 >= '0' && c2 <= '9' )
57  c2 -= '0';
58  else if( c2 >= 'a' && c2 <= 'f' )
59  c2 -= 'a' - 10;
60  else if( c2 >= 'A' && c2 <= 'F' )
61  c2 -= 'A' - 10;
62  else
63  assert( 0 );
64 
65  *obuf++ = ( c << 4 ) | c2;
66  }
67 
68  return len;
69 }
70 
71 void hexify(unsigned char *obuf, const unsigned char *ibuf, int len)
72 {
73  unsigned char l, h;
74 
75  while (len != 0)
76  {
77  h = (*ibuf) / 16;
78  l = (*ibuf) % 16;
79 
80  if( h < 10 )
81  *obuf++ = '0' + h;
82  else
83  *obuf++ = 'a' + h - 10;
84 
85  if( l < 10 )
86  *obuf++ = '0' + l;
87  else
88  *obuf++ = 'a' + l - 10;
89 
90  ++ibuf;
91  len--;
92  }
93 }
94 
104 static int rnd_std_rand( void *rng_state, unsigned char *output, size_t len )
105 {
106  size_t i;
107 
108  if( rng_state != NULL )
109  rng_state = NULL;
110 
111  for( i = 0; i < len; ++i )
112  output[i] = rand();
113 
114  return( 0 );
115 }
116 
122 static int rnd_zero_rand( void *rng_state, unsigned char *output, size_t len )
123 {
124  if( rng_state != NULL )
125  rng_state = NULL;
126 
127  memset( output, 0, len );
128 
129  return( 0 );
130 }
131 
132 typedef struct
133 {
134  unsigned char *buf;
135  size_t length;
136 } rnd_buf_info;
137 
149 static int rnd_buffer_rand( void *rng_state, unsigned char *output, size_t len )
150 {
151  rnd_buf_info *info = (rnd_buf_info *) rng_state;
152  size_t use_len;
153 
154  if( rng_state == NULL )
155  return( rnd_std_rand( NULL, output, len ) );
156 
157  use_len = len;
158  if( len > info->length )
159  use_len = info->length;
160 
161  if( use_len )
162  {
163  memcpy( output, info->buf, use_len );
164  info->buf += use_len;
165  info->length -= use_len;
166  }
167 
168  if( len - use_len > 0 )
169  return( rnd_std_rand( NULL, output + use_len, len - use_len ) );
170 
171  return( 0 );
172 }
173 
181 typedef struct
182 {
183  uint32_t key[16];
184  uint32_t v0, v1;
186 
195 static int rnd_pseudo_rand( void *rng_state, unsigned char *output, size_t len )
196 {
197  rnd_pseudo_info *info = (rnd_pseudo_info *) rng_state;
198  uint32_t i, *k, sum, delta=0x9E3779B9;
199  unsigned char result[4];
200 
201  if( rng_state == NULL )
202  return( rnd_std_rand( NULL, output, len ) );
203 
204  k = info->key;
205 
206  while( len > 0 )
207  {
208  size_t use_len = ( len > 4 ) ? 4 : len;
209  sum = 0;
210 
211  for( i = 0; i < 32; i++ )
212  {
213  info->v0 += (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]);
214  sum += delta;
215  info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ (sum + k[(sum>>11) & 3]);
216  }
217 
218  PUT_ULONG_BE( info->v0, result, 0 );
219  memcpy( output, result, use_len );
220  len -= use_len;
221  }
222 
223  return( 0 );
224 }
225 
226 
228 {
229 #ifdef POLARSSL_BIGNUM_C
230 
231 
232  FCT_SUITE_BGN(test_suite_mpi)
233  {
234 
235  FCT_TEST_BGN(base_test_mpi_read_write_string_1)
236  {
237  mpi X;
238  char str[1000];
239  size_t len = 100;
240 
241  mpi_init( &X );
242 
243  fct_chk( mpi_read_string( &X, 10, "128" ) == 0 );
244  if( 0 == 0 )
245  {
246  fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
247  if( 0 == 0 )
248  {
249  fct_chk( strcasecmp( str, "128" ) == 0 );
250  }
251  }
252 
253  mpi_free( &X );
254  }
255  FCT_TEST_END();
256 
257 
258  FCT_TEST_BGN(base_test_mpi_read_write_string_2)
259  {
260  mpi X;
261  char str[1000];
262  size_t len = 100;
263 
264  mpi_init( &X );
265 
266  fct_chk( mpi_read_string( &X, 10, "128" ) == 0 );
267  if( 0 == 0 )
268  {
269  fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
270  if( 0 == 0 )
271  {
272  fct_chk( strcasecmp( str, "80" ) == 0 );
273  }
274  }
275 
276  mpi_free( &X );
277  }
278  FCT_TEST_END();
279 
280 
281  FCT_TEST_BGN(base_test_mpi_read_write_string_3_read_zero)
282  {
283  mpi X;
284  char str[1000];
285  size_t len = 100;
286 
287  mpi_init( &X );
288 
289  fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
290  if( 0 == 0 )
291  {
292  fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
293  if( 0 == 0 )
294  {
295  fct_chk( strcasecmp( str, "0" ) == 0 );
296  }
297  }
298 
299  mpi_free( &X );
300  }
301  FCT_TEST_END();
302 
303 
304  FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_decimal)
305  {
306  mpi X;
307  char str[1000];
308  size_t len = 100;
309 
310  mpi_init( &X );
311 
312  fct_chk( mpi_read_string( &X, 10, "-23" ) == 0 );
313  if( 0 == 0 )
314  {
315  fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
316  if( 0 == 0 )
317  {
318  fct_chk( strcasecmp( str, "-23" ) == 0 );
319  }
320  }
321 
322  mpi_free( &X );
323  }
324  FCT_TEST_END();
325 
326 
327  FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_hex)
328  {
329  mpi X;
330  char str[1000];
331  size_t len = 100;
332 
333  mpi_init( &X );
334 
335  fct_chk( mpi_read_string( &X, 16, "-20" ) == 0 );
336  if( 0 == 0 )
337  {
338  fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
339  if( 0 == 0 )
340  {
341  fct_chk( strcasecmp( str, "-32" ) == 0 );
342  }
343  }
344 
345  mpi_free( &X );
346  }
347  FCT_TEST_END();
348 
349 
350  FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_decimal)
351  {
352  mpi X;
353  char str[1000];
354  size_t len = 100;
355 
356  mpi_init( &X );
357 
358  fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
359  if( 0 == 0 )
360  {
361  fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
362  if( 0 == 0 )
363  {
364  fct_chk( strcasecmp( str, "-23" ) == 0 );
365  }
366  }
367 
368  mpi_free( &X );
369  }
370  FCT_TEST_END();
371 
372 
373  FCT_TEST_BGN(test_mpi_read_write_string_1_invalid_character)
374  {
375  mpi X;
376  char str[1000];
377  size_t len = 100;
378 
379  mpi_init( &X );
380 
381  fct_chk( mpi_read_string( &X, 10, "a28" ) == POLARSSL_ERR_MPI_INVALID_CHARACTER );
383  {
384  fct_chk( mpi_write_string( &X, 0, str, &len ) == 0 );
385  if( 0 == 0 )
386  {
387  fct_chk( strcasecmp( str, "" ) == 0 );
388  }
389  }
390 
391  mpi_free( &X );
392  }
393  FCT_TEST_END();
394 
395 
396  FCT_TEST_BGN(test_mpi_read_write_string_2_illegal_input_radix)
397  {
398  mpi X;
399  char str[1000];
400  size_t len = 100;
401 
402  mpi_init( &X );
403 
404  fct_chk( mpi_read_string( &X, 19, "a28" ) == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
406  {
407  fct_chk( mpi_write_string( &X, 0, str, &len ) == 0 );
408  if( 0 == 0 )
409  {
410  fct_chk( strcasecmp( str, "" ) == 0 );
411  }
412  }
413 
414  mpi_free( &X );
415  }
416  FCT_TEST_END();
417 
418 
419  FCT_TEST_BGN(test_mpi_read_write_string_3_buffer_just_fits)
420  {
421  mpi X;
422  char str[1000];
423  size_t len = 4;
424 
425  mpi_init( &X );
426 
427  fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
428  if( 0 == 0 )
429  {
430  fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
431  if( 0 == 0 )
432  {
433  fct_chk( strcasecmp( str, "-23" ) == 0 );
434  }
435  }
436 
437  mpi_free( &X );
438  }
439  FCT_TEST_END();
440 
441 
442  FCT_TEST_BGN(test_mpi_read_write_string_4_buffer_too_small)
443  {
444  mpi X;
445  char str[1000];
446  size_t len = 3;
447 
448  mpi_init( &X );
449 
450  fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
451  if( 0 == 0 )
452  {
453  fct_chk( mpi_write_string( &X, 16, str, &len ) == POLARSSL_ERR_MPI_BUFFER_TOO_SMALL );
455  {
456  fct_chk( strcasecmp( str, "-23" ) == 0 );
457  }
458  }
459 
460  mpi_free( &X );
461  }
462  FCT_TEST_END();
463 
464 
465  FCT_TEST_BGN(test_mpi_read_write_string_5_illegal_output_radix)
466  {
467  mpi X;
468  char str[1000];
469  size_t len = 4;
470 
471  mpi_init( &X );
472 
473  fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
474  if( 0 == 0 )
475  {
476  fct_chk( mpi_write_string( &X, 17, str, &len ) == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
478  {
479  fct_chk( strcasecmp( str, "-23" ) == 0 );
480  }
481  }
482 
483  mpi_free( &X );
484  }
485  FCT_TEST_END();
486 
487 
488  FCT_TEST_BGN(test_mpi_read_write_string_6_output_radix_of_15)
489  {
490  mpi X;
491  char str[1000];
492  size_t len = 100;
493 
494  mpi_init( &X );
495 
496  fct_chk( mpi_read_string( &X, 10, "29" ) == 0 );
497  if( 0 == 0 )
498  {
499  fct_chk( mpi_write_string( &X, 15, str, &len ) == 0 );
500  if( 0 == 0 )
501  {
502  fct_chk( strcasecmp( str, "1e" ) == 0 );
503  }
504  }
505 
506  mpi_free( &X );
507  }
508  FCT_TEST_END();
509 
510 
511  FCT_TEST_BGN(test_mpi_read_write_string_7)
512  {
513  mpi X;
514  char str[1000];
515  size_t len = 200;
516 
517  mpi_init( &X );
518 
519  fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
520  if( 0 == 0 )
521  {
522  fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
523  if( 0 == 0 )
524  {
525  fct_chk( strcasecmp( str, "0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" ) == 0 );
526  }
527  }
528 
529  mpi_free( &X );
530  }
531  FCT_TEST_END();
532 
533 
534  FCT_TEST_BGN(base_test_mpi_read_binary_1)
535  {
536  mpi X;
537  unsigned char str[1000];
538  unsigned char buf[1000];
539  size_t len = 1000;
540  size_t input_len;
541 
542  mpi_init( &X );
543 
544  input_len = unhexify( buf, "0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" );
545 
546  fct_chk( mpi_read_binary( &X, buf, input_len ) == 0 );
547  fct_chk( mpi_write_string( &X, 10, (char *) str, &len ) == 0 );
548  fct_chk( strcmp( (char *) str, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
549 
550  mpi_free( &X );
551  }
552  FCT_TEST_END();
553 
554 
555  FCT_TEST_BGN(base_test_mpi_write_binary_1)
556  {
557  mpi X;
558  unsigned char str[1000];
559  unsigned char buf[1000];
560  size_t buflen;
561 
562  memset( buf, 0x00, 1000 );
563  memset( str, 0x00, 1000 );
564 
565  mpi_init( &X );
566 
567  fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
568 
569  buflen = mpi_size( &X );
570  if( buflen > 200 )
571  buflen = 200;
572 
573  fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
574  if( 0 == 0)
575  {
576  hexify( str, buf, buflen );
577 
578  fct_chk( strcasecmp( (char *) str, "0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" ) == 0 );
579  }
580 
581  mpi_free( &X );
582  }
583  FCT_TEST_END();
584 
585 
586  FCT_TEST_BGN(test_mpi_write_binary_1_buffer_just_fits)
587  {
588  mpi X;
589  unsigned char str[1000];
590  unsigned char buf[1000];
591  size_t buflen;
592 
593  memset( buf, 0x00, 1000 );
594  memset( str, 0x00, 1000 );
595 
596  mpi_init( &X );
597 
598  fct_chk( mpi_read_string( &X, 16, "123123123123123123123123123" ) == 0 );
599 
600  buflen = mpi_size( &X );
601  if( buflen > 14 )
602  buflen = 14;
603 
604  fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
605  if( 0 == 0)
606  {
607  hexify( str, buf, buflen );
608 
609  fct_chk( strcasecmp( (char *) str, "0123123123123123123123123123" ) == 0 );
610  }
611 
612  mpi_free( &X );
613  }
614  FCT_TEST_END();
615 
616 
617  FCT_TEST_BGN(test_mpi_write_binary_2_buffer_too_small)
618  {
619  mpi X;
620  unsigned char str[1000];
621  unsigned char buf[1000];
622  size_t buflen;
623 
624  memset( buf, 0x00, 1000 );
625  memset( str, 0x00, 1000 );
626 
627  mpi_init( &X );
628 
629  fct_chk( mpi_read_string( &X, 16, "123123123123123123123123123" ) == 0 );
630 
631  buflen = mpi_size( &X );
632  if( buflen > 13 )
633  buflen = 13;
634 
635  fct_chk( mpi_write_binary( &X, buf, buflen ) == POLARSSL_ERR_MPI_BUFFER_TOO_SMALL );
637  {
638  hexify( str, buf, buflen );
639 
640  fct_chk( strcasecmp( (char *) str, "123123123123123123123123123" ) == 0 );
641  }
642 
643  mpi_free( &X );
644  }
645  FCT_TEST_END();
646 
647 #ifdef POLARSSL_FS_IO
648 
649  FCT_TEST_BGN(base_test_mpi_read_file_1)
650  {
651  mpi X;
652  unsigned char str[1000];
653  unsigned char buf[1000];
654  size_t buflen;
655  FILE *file;
656 
657  memset( buf, 0x00, 1000 );
658  memset( str, 0x00, 1000 );
659 
660  mpi_init( &X );
661 
662  file = fopen( "data_files/mpi_10", "r" );
663  fct_chk( mpi_read_file( &X, 10, file ) == 0 );
664  fclose(file);
665 
666  if( 0 == 0 )
667  {
668  buflen = mpi_size( &X );
669  fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
670 
671  hexify( str, buf, buflen );
672 
673  fct_chk( strcasecmp( (char *) str, "01f55332c3a48b910f9942f6c914e58bef37a47ee45cb164a5b6b8d1006bf59a059c21449939ebebfdf517d2e1dbac88010d7b1f141e997bd6801ddaec9d05910f4f2de2b2c4d714e2c14a72fc7f17aa428d59c531627f09" ) == 0 );
674  }
675 
676  mpi_free( &X );
677  }
678  FCT_TEST_END();
679 #endif /* POLARSSL_FS_IO */
680 
681 #ifdef POLARSSL_FS_IO
682 
683  FCT_TEST_BGN(test_mpi_read_file_1_empty_file)
684  {
685  mpi X;
686  unsigned char str[1000];
687  unsigned char buf[1000];
688  size_t buflen;
689  FILE *file;
690 
691  memset( buf, 0x00, 1000 );
692  memset( str, 0x00, 1000 );
693 
694  mpi_init( &X );
695 
696  file = fopen( "data_files/hash_file_4", "r" );
697  fct_chk( mpi_read_file( &X, 10, file ) == POLARSSL_ERR_MPI_FILE_IO_ERROR );
698  fclose(file);
699 
701  {
702  buflen = mpi_size( &X );
703  fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
704 
705  hexify( str, buf, buflen );
706 
707  fct_chk( strcasecmp( (char *) str, "" ) == 0 );
708  }
709 
710  mpi_free( &X );
711  }
712  FCT_TEST_END();
713 #endif /* POLARSSL_FS_IO */
714 
715 #ifdef POLARSSL_FS_IO
716 
717  FCT_TEST_BGN(test_mpi_read_file_2_illegal_input)
718  {
719  mpi X;
720  unsigned char str[1000];
721  unsigned char buf[1000];
722  size_t buflen;
723  FILE *file;
724 
725  memset( buf, 0x00, 1000 );
726  memset( str, 0x00, 1000 );
727 
728  mpi_init( &X );
729 
730  file = fopen( "data_files/hash_file_3", "r" );
731  fct_chk( mpi_read_file( &X, 10, file ) == 0 );
732  fclose(file);
733 
734  if( 0 == 0 )
735  {
736  buflen = mpi_size( &X );
737  fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
738 
739  hexify( str, buf, buflen );
740 
741  fct_chk( strcasecmp( (char *) str, "" ) == 0 );
742  }
743 
744  mpi_free( &X );
745  }
746  FCT_TEST_END();
747 #endif /* POLARSSL_FS_IO */
748 
749 #ifdef POLARSSL_FS_IO
750 
751  FCT_TEST_BGN(test_mpi_read_file_3_input_too_big)
752  {
753  mpi X;
754  unsigned char str[1000];
755  unsigned char buf[1000];
756  size_t buflen;
757  FILE *file;
758 
759  memset( buf, 0x00, 1000 );
760  memset( str, 0x00, 1000 );
761 
762  mpi_init( &X );
763 
764  file = fopen( "data_files/mpi_too_big", "r" );
765  fct_chk( mpi_read_file( &X, 10, file ) == POLARSSL_ERR_MPI_BUFFER_TOO_SMALL );
766  fclose(file);
767 
769  {
770  buflen = mpi_size( &X );
771  fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
772 
773  hexify( str, buf, buflen );
774 
775  fct_chk( strcasecmp( (char *) str, "" ) == 0 );
776  }
777 
778  mpi_free( &X );
779  }
780  FCT_TEST_END();
781 #endif /* POLARSSL_FS_IO */
782 
783 #ifdef POLARSSL_FS_IO
784 
785  FCT_TEST_BGN(base_test_mpi_write_file_1)
786  {
787  mpi X, Y;
788  FILE *file_out, *file_in;
789 
790  mpi_init( &X ); mpi_init( &Y );
791 
792  fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
793 
794  file_out = fopen( "data_files/mpi_write", "w" );
795  fct_chk( file_out != NULL );
796  fct_chk( mpi_write_file( NULL, &X, 16, file_out ) == 0 );
797  fclose(file_out);
798 
799  file_in = fopen( "data_files/mpi_write", "r" );
800  fct_chk( file_in != NULL );
801  fct_chk( mpi_read_file( &Y, 16, file_in ) == 0 );
802  fclose(file_in);
803 
804  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
805 
806  mpi_free( &X ); mpi_free( &Y );
807  }
808  FCT_TEST_END();
809 #endif /* POLARSSL_FS_IO */
810 
811 
812  FCT_TEST_BGN(base_test_mpi_lsb_1)
813  {
814  mpi X;
815  mpi_init( &X );
816 
817  fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
818  fct_chk( mpi_lsb( &X ) == 2 );
819 
820  mpi_free( &X );
821  }
822  FCT_TEST_END();
823 
824 
825  FCT_TEST_BGN(base_test_mpi_lsb_2)
826  {
827  mpi X;
828  mpi_init( &X );
829 
830  fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
831  fct_chk( mpi_lsb( &X ) == 3 );
832 
833  mpi_free( &X );
834  }
835  FCT_TEST_END();
836 
837 
838  FCT_TEST_BGN(base_test_mpi_lsb_3)
839  {
840  mpi X;
841  mpi_init( &X );
842 
843  fct_chk( mpi_read_string( &X, 16, "24" ) == 0 );
844  fct_chk( mpi_lsb( &X ) == 2 );
845 
846  mpi_free( &X );
847  }
848  FCT_TEST_END();
849 
850 
851  FCT_TEST_BGN(base_test_mpi_lsb_4)
852  {
853  mpi X;
854  mpi_init( &X );
855 
856  fct_chk( mpi_read_string( &X, 16, "2000" ) == 0 );
857  fct_chk( mpi_lsb( &X ) == 13 );
858 
859  mpi_free( &X );
860  }
861  FCT_TEST_END();
862 
863 
864  FCT_TEST_BGN(base_test_mpi_msb_1)
865  {
866  mpi X;
867  mpi_init( &X );
868 
869  fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
870  fct_chk( mpi_msb( &X ) == 764 );
871 
872  mpi_free( &X );
873  }
874  FCT_TEST_END();
875 
876 
877  FCT_TEST_BGN(base_test_mpi_msb_2)
878  {
879  mpi X;
880  mpi_init( &X );
881 
882  fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
883  fct_chk( mpi_msb( &X ) == 5 );
884 
885  mpi_free( &X );
886  }
887  FCT_TEST_END();
888 
889 
890  FCT_TEST_BGN(base_test_mpi_msb_3)
891  {
892  mpi X;
893  mpi_init( &X );
894 
895  fct_chk( mpi_read_string( &X, 10, "1" ) == 0 );
896  fct_chk( mpi_msb( &X ) == 1 );
897 
898  mpi_free( &X );
899  }
900  FCT_TEST_END();
901 
902 
903  FCT_TEST_BGN(base_test_mpi_msb_4)
904  {
905  mpi X;
906  mpi_init( &X );
907 
908  fct_chk( mpi_read_string( &X, 10, "15" ) == 0 );
909  fct_chk( mpi_msb( &X ) == 4 );
910 
911  mpi_free( &X );
912  }
913  FCT_TEST_END();
914 
915 
916  FCT_TEST_BGN(base_test_mpi_msb_5)
917  {
918  mpi X;
919  mpi_init( &X );
920 
921  fct_chk( mpi_read_string( &X, 10, "16" ) == 0 );
922  fct_chk( mpi_msb( &X ) == 5 );
923 
924  mpi_free( &X );
925  }
926  FCT_TEST_END();
927 
928 
929  FCT_TEST_BGN(base_test_mpi_msb_6)
930  {
931  mpi X;
932  mpi_init( &X );
933 
934  fct_chk( mpi_read_string( &X, 10, "10" ) == 0 );
935  fct_chk( mpi_msb( &X ) == 4 );
936 
937  mpi_free( &X );
938  }
939  FCT_TEST_END();
940 
941 
942  FCT_TEST_BGN(base_test_mpi_msb_7)
943  {
944  mpi X;
945  mpi_init( &X );
946 
947  fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
948  fct_chk( mpi_msb( &X ) == 0 );
949 
950  mpi_free( &X );
951  }
952  FCT_TEST_END();
953 
954 
955  FCT_TEST_BGN(base_test_mpi_cmp_int_1)
956  {
957  mpi X;
958  mpi_init( &X );
959 
960  fct_chk( mpi_lset( &X, 693 ) == 0);
961  fct_chk( mpi_cmp_int( &X, 693 ) == 0);
962 
963  mpi_free( &X );
964  }
965  FCT_TEST_END();
966 
967 
968  FCT_TEST_BGN(base_test_mpi_cmp_int_2)
969  {
970  mpi X;
971  mpi_init( &X );
972 
973  fct_chk( mpi_lset( &X, 693 ) == 0);
974  fct_chk( mpi_cmp_int( &X, 692 ) == 1);
975 
976  mpi_free( &X );
977  }
978  FCT_TEST_END();
979 
980 
981  FCT_TEST_BGN(base_test_mpi_cmp_int_3)
982  {
983  mpi X;
984  mpi_init( &X );
985 
986  fct_chk( mpi_lset( &X, 693 ) == 0);
987  fct_chk( mpi_cmp_int( &X, 694 ) == -1);
988 
989  mpi_free( &X );
990  }
991  FCT_TEST_END();
992 
993 
994  FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_1)
995  {
996  mpi X;
997  mpi_init( &X );
998 
999  fct_chk( mpi_lset( &X, -2 ) == 0);
1000  fct_chk( mpi_cmp_int( &X, -2 ) == 0);
1001 
1002  mpi_free( &X );
1003  }
1004  FCT_TEST_END();
1005 
1006 
1007  FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_2)
1008  {
1009  mpi X;
1010  mpi_init( &X );
1011 
1012  fct_chk( mpi_lset( &X, -2 ) == 0);
1013  fct_chk( mpi_cmp_int( &X, -3 ) == 1);
1014 
1015  mpi_free( &X );
1016  }
1017  FCT_TEST_END();
1018 
1019 
1020  FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_3)
1021  {
1022  mpi X;
1023  mpi_init( &X );
1024 
1025  fct_chk( mpi_lset( &X, -2 ) == 0);
1026  fct_chk( mpi_cmp_int( &X, -1 ) == -1);
1027 
1028  mpi_free( &X );
1029  }
1030  FCT_TEST_END();
1031 
1032 
1033  FCT_TEST_BGN(base_test_mpi_cmp_mpi_1)
1034  {
1035  mpi X, Y;
1036  mpi_init( &X ); mpi_init( &Y );
1037 
1038  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
1039  fct_chk( mpi_read_string( &Y, 10, "693" ) == 0 );
1040  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
1041 
1042  mpi_free( &X ); mpi_free( &Y );
1043  }
1044  FCT_TEST_END();
1045 
1046 
1047  FCT_TEST_BGN(base_test_mpi_cmp_mpi_2)
1048  {
1049  mpi X, Y;
1050  mpi_init( &X ); mpi_init( &Y );
1051 
1052  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
1053  fct_chk( mpi_read_string( &Y, 10, "692" ) == 0 );
1054  fct_chk( mpi_cmp_mpi( &X, &Y ) == 1 );
1055 
1056  mpi_free( &X ); mpi_free( &Y );
1057  }
1058  FCT_TEST_END();
1059 
1060 
1061  FCT_TEST_BGN(base_test_mpi_cmp_mpi_3)
1062  {
1063  mpi X, Y;
1064  mpi_init( &X ); mpi_init( &Y );
1065 
1066  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
1067  fct_chk( mpi_read_string( &Y, 10, "694" ) == 0 );
1068  fct_chk( mpi_cmp_mpi( &X, &Y ) == -1 );
1069 
1070  mpi_free( &X ); mpi_free( &Y );
1071  }
1072  FCT_TEST_END();
1073 
1074 
1075  FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_1)
1076  {
1077  mpi X, Y;
1078  mpi_init( &X ); mpi_init( &Y );
1079 
1080  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1081  fct_chk( mpi_read_string( &Y, 10, "-2" ) == 0 );
1082  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
1083 
1084  mpi_free( &X ); mpi_free( &Y );
1085  }
1086  FCT_TEST_END();
1087 
1088 
1089  FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_2)
1090  {
1091  mpi X, Y;
1092  mpi_init( &X ); mpi_init( &Y );
1093 
1094  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1095  fct_chk( mpi_read_string( &Y, 10, "-3" ) == 0 );
1096  fct_chk( mpi_cmp_mpi( &X, &Y ) == 1 );
1097 
1098  mpi_free( &X ); mpi_free( &Y );
1099  }
1100  FCT_TEST_END();
1101 
1102 
1103  FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_3)
1104  {
1105  mpi X, Y;
1106  mpi_init( &X ); mpi_init( &Y );
1107 
1108  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1109  fct_chk( mpi_read_string( &Y, 10, "-1" ) == 0 );
1110  fct_chk( mpi_cmp_mpi( &X, &Y ) == -1 );
1111 
1112  mpi_free( &X ); mpi_free( &Y );
1113  }
1114  FCT_TEST_END();
1115 
1116 
1117  FCT_TEST_BGN(base_test_mpi_cmp_abs_1)
1118  {
1119  mpi X, Y;
1120  mpi_init( &X ); mpi_init( &Y );
1121 
1122  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
1123  fct_chk( mpi_read_string( &Y, 10, "693" ) == 0 );
1124  fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
1125 
1126  mpi_free( &X ); mpi_free( &Y );
1127  }
1128  FCT_TEST_END();
1129 
1130 
1131  FCT_TEST_BGN(base_test_mpi_cmp_abs_2)
1132  {
1133  mpi X, Y;
1134  mpi_init( &X ); mpi_init( &Y );
1135 
1136  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
1137  fct_chk( mpi_read_string( &Y, 10, "692" ) == 0 );
1138  fct_chk( mpi_cmp_abs( &X, &Y ) == 1 );
1139 
1140  mpi_free( &X ); mpi_free( &Y );
1141  }
1142  FCT_TEST_END();
1143 
1144 
1145  FCT_TEST_BGN(base_test_mpi_cmp_abs_3)
1146  {
1147  mpi X, Y;
1148  mpi_init( &X ); mpi_init( &Y );
1149 
1150  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
1151  fct_chk( mpi_read_string( &Y, 10, "694" ) == 0 );
1152  fct_chk( mpi_cmp_abs( &X, &Y ) == -1 );
1153 
1154  mpi_free( &X ); mpi_free( &Y );
1155  }
1156  FCT_TEST_END();
1157 
1158 
1159  FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_1)
1160  {
1161  mpi X, Y;
1162  mpi_init( &X ); mpi_init( &Y );
1163 
1164  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1165  fct_chk( mpi_read_string( &Y, 10, "-2" ) == 0 );
1166  fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
1167 
1168  mpi_free( &X ); mpi_free( &Y );
1169  }
1170  FCT_TEST_END();
1171 
1172 
1173  FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_2)
1174  {
1175  mpi X, Y;
1176  mpi_init( &X ); mpi_init( &Y );
1177 
1178  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1179  fct_chk( mpi_read_string( &Y, 10, "-3" ) == 0 );
1180  fct_chk( mpi_cmp_abs( &X, &Y ) == -1 );
1181 
1182  mpi_free( &X ); mpi_free( &Y );
1183  }
1184  FCT_TEST_END();
1185 
1186 
1187  FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_3)
1188  {
1189  mpi X, Y;
1190  mpi_init( &X ); mpi_init( &Y );
1191 
1192  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1193  fct_chk( mpi_read_string( &Y, 10, "-1" ) == 0 );
1194  fct_chk( mpi_cmp_abs( &X, &Y ) == 1 );
1195 
1196  mpi_free( &X ); mpi_free( &Y );
1197  }
1198  FCT_TEST_END();
1199 
1200 
1201  FCT_TEST_BGN(base_test_mpi_cmp_abs_zero_and_zero_4)
1202  {
1203  mpi X, Y;
1204  mpi_init( &X ); mpi_init( &Y );
1205 
1206  fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
1207  fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
1208  fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
1209 
1210  mpi_free( &X ); mpi_free( &Y );
1211  }
1212  FCT_TEST_END();
1213 
1214 
1215  FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_1)
1216  {
1217  mpi X, Y;
1218  mpi_init( &X ); mpi_init( &Y );
1219 
1220  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1221  fct_chk( mpi_read_string( &Y, 10, "2" ) == 0 );
1222  fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
1223 
1224  mpi_free( &X ); mpi_free( &Y );
1225  }
1226  FCT_TEST_END();
1227 
1228 
1229  FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_2)
1230  {
1231  mpi X, Y;
1232  mpi_init( &X ); mpi_init( &Y );
1233 
1234  fct_chk( mpi_read_string( &X, 10, "2" ) == 0 );
1235  fct_chk( mpi_read_string( &Y, 10, "-3" ) == 0 );
1236  fct_chk( mpi_cmp_abs( &X, &Y ) == -1 );
1237 
1238  mpi_free( &X ); mpi_free( &Y );
1239  }
1240  FCT_TEST_END();
1241 
1242 
1243  FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_3)
1244  {
1245  mpi X, Y;
1246  mpi_init( &X ); mpi_init( &Y );
1247 
1248  fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
1249  fct_chk( mpi_read_string( &Y, 10, "1" ) == 0 );
1250  fct_chk( mpi_cmp_abs( &X, &Y ) == 1 );
1251 
1252  mpi_free( &X ); mpi_free( &Y );
1253  }
1254  FCT_TEST_END();
1255 
1256 
1257  FCT_TEST_BGN(base_test_mpi_copy_1)
1258  {
1259  mpi X, Y, A;
1260  mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
1261 
1262  fct_chk( mpi_lset( &X, 0 ) == 0 );
1263  fct_chk( mpi_lset( &Y, 1500 ) == 0 );
1264  fct_chk( mpi_lset( &A, 1500 ) == 0 );
1265  fct_chk( mpi_cmp_mpi( &X, &Y ) != 0 );
1266  fct_chk( mpi_cmp_mpi( &Y, &A ) == 0 );
1267  fct_chk( mpi_copy( &Y, &X ) == 0 );
1268  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
1269  fct_chk( mpi_cmp_mpi( &Y, &A ) != 0 );
1270 
1271  mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
1272  }
1273  FCT_TEST_END();
1274 
1275 
1276  FCT_TEST_BGN(base_test_mpi_copy_self_1)
1277  {
1278  mpi X;
1279  mpi_init( &X );
1280 
1281  fct_chk( mpi_lset( &X, 14 ) == 0 );
1282  fct_chk( mpi_copy( &X, &X ) == 0 );
1283  fct_chk( mpi_cmp_int( &X, 14 ) == 0 );
1284 
1285  mpi_free( &X );
1286  }
1287  FCT_TEST_END();
1288 
1289 
1290  FCT_TEST_BGN(base_test_mpi_swap_1)
1291  {
1292  mpi X, Y, A;
1293  mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
1294 
1295  fct_chk( mpi_lset( &X, 0 ) == 0 );
1296  fct_chk( mpi_lset( &Y, 1500 ) == 0 );
1297  fct_chk( mpi_lset( &A, 0 ) == 0 );
1298  fct_chk( mpi_cmp_mpi( &X, &Y ) != 0 );
1299  fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
1300  mpi_swap( &X, &Y );
1301  fct_chk( mpi_cmp_mpi( &X, &Y ) != 0 );
1302  fct_chk( mpi_cmp_mpi( &Y, &A ) == 0 );
1303 
1304  mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
1305  }
1306  FCT_TEST_END();
1307 
1308 
1309  FCT_TEST_BGN(base_test_mpi_add_abs_1)
1310  {
1311  mpi X, Y, Z, A;
1312  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1313 
1314  fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
1315  fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
1316  fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
1317  fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
1318  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1319 
1320  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1321  }
1322  FCT_TEST_END();
1323 
1324 
1325  FCT_TEST_BGN(base_test_mpi_add_abs_2)
1326  {
1327  mpi X, Y, Z, A;
1328  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1329 
1330  fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
1331  fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
1332  fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
1333  fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
1334  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1335 
1336  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1337  }
1338  FCT_TEST_END();
1339 
1340 
1341  FCT_TEST_BGN(base_test_mpi_add_abs_3)
1342  {
1343  mpi X, Y, Z, A;
1344  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1345 
1346  fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
1347  fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
1348  fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
1349  fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
1350  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1351 
1352  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1353  }
1354  FCT_TEST_END();
1355 
1356 
1357  FCT_TEST_BGN(base_test_mpi_add_abs_4)
1358  {
1359  mpi X, Y, Z, A;
1360  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1361 
1362  fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
1363  fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
1364  fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
1365  fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
1366  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1367 
1368  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1369  }
1370  FCT_TEST_END();
1371 
1372 
1373  FCT_TEST_BGN(test_mpi_add_abs_1)
1374  {
1375  mpi X, Y, Z, A;
1376  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1377 
1378  fct_chk( mpi_read_string( &X, 10, "-643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
1379  fct_chk( mpi_read_string( &Y, 10, "56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
1380  fct_chk( mpi_read_string( &A, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
1381  fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
1382  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1383 
1384  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1385  }
1386  FCT_TEST_END();
1387 
1388 
1389  FCT_TEST_BGN(test_mpi_add_abs_2_add_to_first_value)
1390  {
1391  mpi X, Y, A;
1392  mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
1393 
1394  fct_chk( mpi_read_string( &X, 10, "123123" ) == 0 );
1395  fct_chk( mpi_read_string( &Y, 10, "123123" ) == 0 );
1396  fct_chk( mpi_read_string( &A, 10, "246246" ) == 0 );
1397  fct_chk( mpi_add_abs( &X, &X, &Y ) == 0 );
1398  fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
1399 
1400  mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
1401  }
1402  FCT_TEST_END();
1403 
1404 
1405  FCT_TEST_BGN(test_mpi_add_abs_3_add_to_second_value)
1406  {
1407  mpi X, Y, A;
1408  mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
1409 
1410  fct_chk( mpi_read_string( &X, 10, "123123" ) == 0 );
1411  fct_chk( mpi_read_string( &Y, 10, "123123" ) == 0 );
1412  fct_chk( mpi_read_string( &A, 10, "246246" ) == 0 );
1413  fct_chk( mpi_add_abs( &Y, &X, &Y ) == 0 );
1414  fct_chk( mpi_cmp_mpi( &Y, &A ) == 0 );
1415 
1416  mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
1417  }
1418  FCT_TEST_END();
1419 
1420 
1421  FCT_TEST_BGN(base_test_mpi_add_mpi_1)
1422  {
1423  mpi X, Y, Z, A;
1424  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1425 
1426  fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
1427  fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
1428  fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
1429  fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
1430  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1431 
1432  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1433  }
1434  FCT_TEST_END();
1435 
1436 
1437  FCT_TEST_BGN(base_test_mpi_add_mpi_2)
1438  {
1439  mpi X, Y, Z, A;
1440  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1441 
1442  fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
1443  fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
1444  fct_chk( mpi_read_string( &A, 10, "-11703147" ) == 0 );
1445  fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
1446  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1447 
1448  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1449  }
1450  FCT_TEST_END();
1451 
1452 
1453  FCT_TEST_BGN(base_test_mpi_add_mpi_3)
1454  {
1455  mpi X, Y, Z, A;
1456  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1457 
1458  fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
1459  fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
1460  fct_chk( mpi_read_string( &A, 10, "11703147" ) == 0 );
1461  fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
1462  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1463 
1464  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1465  }
1466  FCT_TEST_END();
1467 
1468 
1469  FCT_TEST_BGN(base_test_mpi_add_mpi_4)
1470  {
1471  mpi X, Y, Z, A;
1472  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1473 
1474  fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
1475  fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
1476  fct_chk( mpi_read_string( &A, 10, "-12988209" ) == 0 );
1477  fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
1478  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1479 
1480  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1481  }
1482  FCT_TEST_END();
1483 
1484 
1485  FCT_TEST_BGN(test_mpi_add_mpi_1)
1486  {
1487  mpi X, Y, Z, A;
1488  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1489 
1490  fct_chk( mpi_read_string( &X, 10, "203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
1491  fct_chk( mpi_read_string( &Y, 10, "531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
1492  fct_chk( mpi_read_string( &A, 10, "735829167410606161590850601304167976688497607296479119740072111384235241328747126510065763883532084601487937110881909725679916932621242907172467691556475037071866553361927361439411910627880345885122142692610250903804554267860479115964668998643528806263534149325837971432443181537363155848647445226342" ) == 0 );
1493  fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
1494  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1495 
1496  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1497  }
1498  FCT_TEST_END();
1499 
1500 
1501  FCT_TEST_BGN(test_mpi_add_mpi_2)
1502  {
1503  mpi X, Y, Z, A;
1504  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1505 
1506  fct_chk( mpi_read_string( &X, 10, "643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
1507  fct_chk( mpi_read_string( &Y, 10, "56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
1508  fct_chk( mpi_read_string( &A, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
1509  fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
1510  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1511 
1512  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1513  }
1514  FCT_TEST_END();
1515 
1516 
1517  FCT_TEST_BGN(test_mpi_add_int_1)
1518  {
1519  mpi X, Z, A;
1520  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
1521 
1522  fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1523  fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" ) == 0 );
1524  fct_chk( mpi_add_int( &Z, &X, 9871232 ) == 0 );
1525  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1526 
1527  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
1528  }
1529  FCT_TEST_END();
1530 
1531 
1532  FCT_TEST_BGN(test_mpi_add_int_2)
1533  {
1534  mpi X, Z, A;
1535  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
1536 
1537  fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1538  fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" ) == 0 );
1539  fct_chk( mpi_add_int( &Z, &X, -9871232 ) == 0 );
1540  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1541 
1542  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
1543  }
1544  FCT_TEST_END();
1545 
1546 
1547  FCT_TEST_BGN(base_test_mpi_sub_abs_1_test_with_larger_second_input)
1548  {
1549  mpi X, Y, Z, A;
1550  int res;
1551  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1552 
1553  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
1554  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
1555  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
1556 
1557  res = mpi_sub_abs( &Z, &X, &Y );
1558  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
1559  if( res == 0 )
1560  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1561 
1562  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1563  }
1564  FCT_TEST_END();
1565 
1566 
1567  FCT_TEST_BGN(base_test_mpi_sub_abs_2_test_with_larger_second_input)
1568  {
1569  mpi X, Y, Z, A;
1570  int res;
1571  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1572 
1573  fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
1574  fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
1575  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
1576 
1577  res = mpi_sub_abs( &Z, &X, &Y );
1578  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
1579  if( res == 0 )
1580  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1581 
1582  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1583  }
1584  FCT_TEST_END();
1585 
1586 
1587  FCT_TEST_BGN(base_test_mpi_sub_abs_3_test_with_larger_second_input)
1588  {
1589  mpi X, Y, Z, A;
1590  int res;
1591  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1592 
1593  fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
1594  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
1595  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
1596 
1597  res = mpi_sub_abs( &Z, &X, &Y );
1598  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
1599  if( res == 0 )
1600  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1601 
1602  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1603  }
1604  FCT_TEST_END();
1605 
1606 
1607  FCT_TEST_BGN(base_test_mpi_sub_abs_4_test_with_larger_second_input)
1608  {
1609  mpi X, Y, Z, A;
1610  int res;
1611  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1612 
1613  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
1614  fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
1615  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
1616 
1617  res = mpi_sub_abs( &Z, &X, &Y );
1618  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
1619  if( res == 0 )
1620  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1621 
1622  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1623  }
1624  FCT_TEST_END();
1625 
1626 
1627  FCT_TEST_BGN(base_test_mpi_sub_abs_1)
1628  {
1629  mpi X, Y, Z, A;
1630  int res;
1631  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1632 
1633  fct_chk( mpi_read_string( &X, 10, "7" ) == 0 );
1634  fct_chk( mpi_read_string( &Y, 10, "5" ) == 0 );
1635  fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
1636 
1637  res = mpi_sub_abs( &Z, &X, &Y );
1638  fct_chk( res == 0 );
1639  if( res == 0 )
1640  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1641 
1642  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1643  }
1644  FCT_TEST_END();
1645 
1646 
1647  FCT_TEST_BGN(base_test_mpi_sub_abs_2)
1648  {
1649  mpi X, Y, Z, A;
1650  int res;
1651  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1652 
1653  fct_chk( mpi_read_string( &X, 10, "-7" ) == 0 );
1654  fct_chk( mpi_read_string( &Y, 10, "-5" ) == 0 );
1655  fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
1656 
1657  res = mpi_sub_abs( &Z, &X, &Y );
1658  fct_chk( res == 0 );
1659  if( res == 0 )
1660  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1661 
1662  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1663  }
1664  FCT_TEST_END();
1665 
1666 
1667  FCT_TEST_BGN(base_test_mpi_sub_abs_3)
1668  {
1669  mpi X, Y, Z, A;
1670  int res;
1671  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1672 
1673  fct_chk( mpi_read_string( &X, 10, "-7" ) == 0 );
1674  fct_chk( mpi_read_string( &Y, 10, "5" ) == 0 );
1675  fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
1676 
1677  res = mpi_sub_abs( &Z, &X, &Y );
1678  fct_chk( res == 0 );
1679  if( res == 0 )
1680  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1681 
1682  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1683  }
1684  FCT_TEST_END();
1685 
1686 
1687  FCT_TEST_BGN(base_test_mpi_sub_abs_4)
1688  {
1689  mpi X, Y, Z, A;
1690  int res;
1691  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1692 
1693  fct_chk( mpi_read_string( &X, 10, "7" ) == 0 );
1694  fct_chk( mpi_read_string( &Y, 10, "-5" ) == 0 );
1695  fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
1696 
1697  res = mpi_sub_abs( &Z, &X, &Y );
1698  fct_chk( res == 0 );
1699  if( res == 0 )
1700  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1701 
1702  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1703  }
1704  FCT_TEST_END();
1705 
1706 
1707  FCT_TEST_BGN(test_mpi_sub_abs_1)
1708  {
1709  mpi X, Y, Z, A;
1710  int res;
1711  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1712 
1713  fct_chk( mpi_read_string( &X, 16, "FFFFFFFFFF" ) == 0 );
1714  fct_chk( mpi_read_string( &Y, 16, "01" ) == 0 );
1715  fct_chk( mpi_read_string( &A, 16, "FFFFFFFFFE" ) == 0 );
1716 
1717  res = mpi_sub_abs( &Z, &X, &Y );
1718  fct_chk( res == 0 );
1719  if( res == 0 )
1720  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1721 
1722  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1723  }
1724  FCT_TEST_END();
1725 
1726 
1727  FCT_TEST_BGN(test_mpi_sub_abs_2)
1728  {
1729  mpi X, Y, Z, A;
1730  int res;
1731  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1732 
1733  fct_chk( mpi_read_string( &X, 16, "FFFFFFFFF0" ) == 0 );
1734  fct_chk( mpi_read_string( &Y, 16, "01" ) == 0 );
1735  fct_chk( mpi_read_string( &A, 16, "FFFFFFFFEF" ) == 0 );
1736 
1737  res = mpi_sub_abs( &Z, &X, &Y );
1738  fct_chk( res == 0 );
1739  if( res == 0 )
1740  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1741 
1742  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1743  }
1744  FCT_TEST_END();
1745 
1746 
1747  FCT_TEST_BGN(test_mpi_sub_abs_3)
1748  {
1749  mpi X, Y, Z, A;
1750  int res;
1751  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1752 
1753  fct_chk( mpi_read_string( &X, 16, "FF00000000" ) == 0 );
1754  fct_chk( mpi_read_string( &Y, 16, "0F00000000" ) == 0 );
1755  fct_chk( mpi_read_string( &A, 16, "F000000000" ) == 0 );
1756 
1757  res = mpi_sub_abs( &Z, &X, &Y );
1758  fct_chk( res == 0 );
1759  if( res == 0 )
1760  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1761 
1762  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1763  }
1764  FCT_TEST_END();
1765 
1766 
1767  FCT_TEST_BGN(test_mpi_sub_abs_4)
1768  {
1769  mpi X, Y, Z, A;
1770  int res;
1771  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1772 
1773  fct_chk( mpi_read_string( &X, 16, "FF00000000" ) == 0 );
1774  fct_chk( mpi_read_string( &Y, 16, "0F00000001" ) == 0 );
1775  fct_chk( mpi_read_string( &A, 16, "EFFFFFFFFF" ) == 0 );
1776 
1777  res = mpi_sub_abs( &Z, &X, &Y );
1778  fct_chk( res == 0 );
1779  if( res == 0 )
1780  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1781 
1782  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1783  }
1784  FCT_TEST_END();
1785 
1786 
1787  FCT_TEST_BGN(base_test_mpi_sub_mpi_1_test_with_negative_result)
1788  {
1789  mpi X, Y, Z, A;
1790  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1791 
1792  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
1793  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
1794  fct_chk( mpi_read_string( &A, 10, "-2" ) == 0 );
1795  fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
1796  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1797 
1798  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1799  }
1800  FCT_TEST_END();
1801 
1802 
1803  FCT_TEST_BGN(base_test_mpi_sub_mpi_2_test_with_negative_inputs)
1804  {
1805  mpi X, Y, Z, A;
1806  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1807 
1808  fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
1809  fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
1810  fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
1811  fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
1812  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1813 
1814  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1815  }
1816  FCT_TEST_END();
1817 
1818 
1819  FCT_TEST_BGN(base_test_mpi_sub_mpi_3_test_with_negative_base)
1820  {
1821  mpi X, Y, Z, A;
1822  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1823 
1824  fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
1825  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
1826  fct_chk( mpi_read_string( &A, 10, "-12" ) == 0 );
1827  fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
1828  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1829 
1830  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1831  }
1832  FCT_TEST_END();
1833 
1834 
1835  FCT_TEST_BGN(base_test_mpi_sub_mpi_4_test_with_negative_substraction)
1836  {
1837  mpi X, Y, Z, A;
1838  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1839 
1840  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
1841  fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
1842  fct_chk( mpi_read_string( &A, 10, "12" ) == 0 );
1843  fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
1844  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1845 
1846  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1847  }
1848  FCT_TEST_END();
1849 
1850 
1851  FCT_TEST_BGN(test_mpi_sub_mpi_1)
1852  {
1853  mpi X, Y, Z, A;
1854  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1855 
1856  fct_chk( mpi_read_string( &X, 10, "531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
1857  fct_chk( mpi_read_string( &Y, 10, "203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
1858  fct_chk( mpi_read_string( &A, 10, "327915410697802206779318867446098822128109620667782593550526818477669115883344571244192531757243908254863191345527661966602498132304629772495811133247475640339722739829047287290977675016498600299425844468565678239514801901107826091797519355347660820341034314686165532823894621049756947818646317646096" ) == 0 );
1859  fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
1860  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1861 
1862  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1863  }
1864  FCT_TEST_END();
1865 
1866 
1867  FCT_TEST_BGN(test_mpi_sub_mpi_2_test_for_negative_result)
1868  {
1869  mpi X, Y, Z, A;
1870  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1871 
1872  fct_chk( mpi_read_string( &X, 10, "643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
1873  fct_chk( mpi_read_string( &Y, 10, "56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
1874  fct_chk( mpi_read_string( &A, 10, "-56125680981752282332854280306765380612153703983633407122513245677043323738275550803657221789827307780393959397039813808626161066208794210143732806809073537503708671504303382290292211925255014779394363592722015507193385383534937618" ) == 0 );
1875  fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
1876  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1877 
1878  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1879  }
1880  FCT_TEST_END();
1881 
1882 
1883  FCT_TEST_BGN(test_mpi_sub_int_1)
1884  {
1885  mpi X, Z, A;
1886  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
1887 
1888  fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1889  fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" ) == 0 );
1890  fct_chk( mpi_sub_int( &Z, &X, -9871232 ) == 0 );
1891  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1892 
1893  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
1894  }
1895  FCT_TEST_END();
1896 
1897 
1898  FCT_TEST_BGN(test_mpi_sub_int_2)
1899  {
1900  mpi X, Z, A;
1901  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
1902 
1903  fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1904  fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" ) == 0 );
1905  fct_chk( mpi_sub_int( &Z, &X, 9871232 ) == 0 );
1906  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1907 
1908  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
1909  }
1910  FCT_TEST_END();
1911 
1912 
1913  FCT_TEST_BGN(test_mpi_shift_l_1)
1914  {
1915  mpi X, A;
1916  mpi_init( &X ); mpi_init( &A );
1917 
1918  fct_chk( mpi_read_string( &X, 10, "64" ) == 0 );
1919  fct_chk( mpi_read_string( &A, 10, "128" ) == 0 );
1920  fct_chk( mpi_shift_l( &X, 1 ) == 0 );
1921  fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
1922 
1923  mpi_free( &X ); mpi_free( &A );
1924  }
1925  FCT_TEST_END();
1926 
1927 
1928  FCT_TEST_BGN(test_mpi_shift_l_2)
1929  {
1930  mpi X, A;
1931  mpi_init( &X ); mpi_init( &A );
1932 
1933  fct_chk( mpi_read_string( &X, 10, "658385546911733550164516088405238961461880256029834598831972039469421755117818013653494814438931957316403111689187691446941406788869098983929874080332195117465344344350008880118042764943201875870917468833709791733282363323948005998269792207" ) == 0 );
1934  fct_chk( mpi_read_string( &A, 10, "90487820548639020691922304619723076305400961610119884872723190678642804168382367856686134531865643066983017249846286450251272364365605022750900439437595355052945035915579216557330505438734955340526145476988250171181404966718289259743378883640981192704" ) == 0 );
1935  fct_chk( mpi_shift_l( &X, 37 ) == 0 );
1936  fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
1937 
1938  mpi_free( &X ); mpi_free( &A );
1939  }
1940  FCT_TEST_END();
1941 
1942 
1943  FCT_TEST_BGN(test_mpi_shift_r_1)
1944  {
1945  mpi X, A;
1946  mpi_init( &X ); mpi_init( &A );
1947 
1948  fct_chk( mpi_read_string( &X, 10, "128" ) == 0 );
1949  fct_chk( mpi_read_string( &A, 10, "64" ) == 0 );
1950  fct_chk( mpi_shift_r( &X, 1 ) == 0 );
1951  fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
1952 
1953  mpi_free( &X ); mpi_free( &A );
1954  }
1955  FCT_TEST_END();
1956 
1957 
1958  FCT_TEST_BGN(test_mpi_shift_r_2)
1959  {
1960  mpi X, A;
1961  mpi_init( &X ); mpi_init( &A );
1962 
1963  fct_chk( mpi_read_string( &X, 10, "120815570979701484704906977000760567182871429114712069861589084706550626575967516787438008593490722779337547394120718248995900363209947025063336882559539208430319216688889117222633155838468458047056355241515415159736436403445579777425189969" ) == 0 );
1964  fct_chk( mpi_read_string( &A, 10, "3433785053053426415343295076376096153094051405637175942660777670498379921354157795219578264137985649407981651226029903483433269093721578004287291678324982297860947730012217028349628999378309630601971640587504883789518896817457" ) == 0 );
1965  fct_chk( mpi_shift_r( &X, 45 ) == 0 );
1966  fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
1967 
1968  mpi_free( &X ); mpi_free( &A );
1969  }
1970  FCT_TEST_END();
1971 
1972 
1973  FCT_TEST_BGN(base_test_mpi_mul_mpi_1)
1974  {
1975  mpi X, Y, Z, A;
1976  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1977 
1978  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
1979  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
1980  fct_chk( mpi_read_string( &A, 10, "35" ) == 0 );
1981  fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
1982  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1983 
1984  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
1985  }
1986  FCT_TEST_END();
1987 
1988 
1989  FCT_TEST_BGN(base_test_mpi_mul_mpi_2)
1990  {
1991  mpi X, Y, Z, A;
1992  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
1993 
1994  fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
1995  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
1996  fct_chk( mpi_read_string( &A, 10, "-35" ) == 0 );
1997  fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
1998  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
1999 
2000  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2001  }
2002  FCT_TEST_END();
2003 
2004 
2005  FCT_TEST_BGN(base_test_mpi_mul_mpi_3)
2006  {
2007  mpi X, Y, Z, A;
2008  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2009 
2010  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
2011  fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
2012  fct_chk( mpi_read_string( &A, 10, "-35" ) == 0 );
2013  fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
2014  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2015 
2016  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2017  }
2018  FCT_TEST_END();
2019 
2020 
2021  FCT_TEST_BGN(base_test_mpi_mul_mpi_4)
2022  {
2023  mpi X, Y, Z, A;
2024  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2025 
2026  fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
2027  fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
2028  fct_chk( mpi_read_string( &A, 10, "35" ) == 0 );
2029  fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
2030  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2031 
2032  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2033  }
2034  FCT_TEST_END();
2035 
2036 
2037  FCT_TEST_BGN(test_mpi_mul_mpi_1)
2038  {
2039  mpi X, Y, Z, A;
2040  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2041 
2042  fct_chk( mpi_read_string( &X, 10, "28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537" ) == 0 );
2043  fct_chk( mpi_read_string( &Y, 10, "16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953" ) == 0 );
2044  fct_chk( mpi_read_string( &A, 10, "476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188761" ) == 0 );
2045  fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
2046  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2047 
2048  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2049  }
2050  FCT_TEST_END();
2051 
2052 
2053  FCT_TEST_BGN(test_mpi_mul_int_1)
2054  {
2055  mpi X, Z, A;
2056  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
2057 
2058  fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2059  fct_chk( mpi_read_string( &A, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2060  fct_chk( mpi_mul_int( &Z, &X, 9871232 ) == 0 );
2061  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2062 
2063  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
2064  }
2065  FCT_TEST_END();
2066 
2067 
2068  FCT_TEST_BGN(test_mpi_mul_int_2_unsigned_thus_failure)
2069  {
2070  mpi X, Z, A;
2071  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
2072 
2073  fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2074  fct_chk( mpi_read_string( &A, 10, "-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2075  fct_chk( mpi_mul_int( &Z, &X, -9871232 ) == 0 );
2076  fct_chk( mpi_cmp_mpi( &Z, &A ) != 0 );
2077 
2078  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
2079  }
2080  FCT_TEST_END();
2081 
2082 
2083  FCT_TEST_BGN(test_mpi_mul_int_3)
2084  {
2085  mpi X, Z, A;
2086  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
2087 
2088  fct_chk( mpi_read_string( &X, 10, "-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2089  fct_chk( mpi_read_string( &A, 10, "-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2090  fct_chk( mpi_mul_int( &Z, &X, 9871232 ) == 0 );
2091  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2092 
2093  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
2094  }
2095  FCT_TEST_END();
2096 
2097 
2098  FCT_TEST_BGN(test_mpi_mul_int_4_unsigned_thus_failure)
2099  {
2100  mpi X, Z, A;
2101  mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
2102 
2103  fct_chk( mpi_read_string( &X, 10, "-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2104  fct_chk( mpi_read_string( &A, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2105  fct_chk( mpi_mul_int( &Z, &X, -9871232 ) == 0 );
2106  fct_chk( mpi_cmp_mpi( &Z, &A ) != 0 );
2107 
2108  mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
2109  }
2110  FCT_TEST_END();
2111 
2112 
2113  FCT_TEST_BGN(base_test_mpi_div_mpi_1)
2114  {
2115  mpi X, Y, Q, R, A, B;
2116  int res;
2117  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2118  mpi_init( &A ); mpi_init( &B );
2119 
2120  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2121  fct_chk( mpi_read_string( &Y, 10, "13" ) == 0 );
2122  fct_chk( mpi_read_string( &A, 10, "76" ) == 0 );
2123  fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
2124  res = mpi_div_mpi( &Q, &R, &X, &Y );
2125  fct_chk( res == 0 );
2126  if( res == 0 )
2127  {
2128  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2129  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2130  }
2131 
2132  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2133  mpi_free( &A ); mpi_free( &B );
2134  }
2135  FCT_TEST_END();
2136 
2137 
2138  FCT_TEST_BGN(base_test_mpi_div_mpi_2_divide_by_zero)
2139  {
2140  mpi X, Y, Q, R, A, B;
2141  int res;
2142  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2143  mpi_init( &A ); mpi_init( &B );
2144 
2145  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2146  fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
2147  fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
2148  fct_chk( mpi_read_string( &B, 10, "1" ) == 0 );
2149  res = mpi_div_mpi( &Q, &R, &X, &Y );
2150  fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
2151  if( res == 0 )
2152  {
2153  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2154  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2155  }
2156 
2157  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2158  mpi_free( &A ); mpi_free( &B );
2159  }
2160  FCT_TEST_END();
2161 
2162 
2163  FCT_TEST_BGN(base_test_mpi_div_mpi_3)
2164  {
2165  mpi X, Y, Q, R, A, B;
2166  int res;
2167  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2168  mpi_init( &A ); mpi_init( &B );
2169 
2170  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2171  fct_chk( mpi_read_string( &Y, 10, "-13" ) == 0 );
2172  fct_chk( mpi_read_string( &A, 10, "-76" ) == 0 );
2173  fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
2174  res = mpi_div_mpi( &Q, &R, &X, &Y );
2175  fct_chk( res == 0 );
2176  if( res == 0 )
2177  {
2178  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2179  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2180  }
2181 
2182  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2183  mpi_free( &A ); mpi_free( &B );
2184  }
2185  FCT_TEST_END();
2186 
2187 
2188  FCT_TEST_BGN(test_mpi_div_mpi_1)
2189  {
2190  mpi X, Y, Q, R, A, B;
2191  int res;
2192  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2193  mpi_init( &A ); mpi_init( &B );
2194 
2195  fct_chk( mpi_read_string( &X, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2196  fct_chk( mpi_read_string( &Y, 10, "34" ) == 0 );
2197  fct_chk( mpi_read_string( &A, 10, "592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
2198  fct_chk( mpi_read_string( &B, 10, "26" ) == 0 );
2199  res = mpi_div_mpi( &Q, &R, &X, &Y );
2200  fct_chk( res == 0 );
2201  if( res == 0 )
2202  {
2203  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2204  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2205  }
2206 
2207  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2208  mpi_free( &A ); mpi_free( &B );
2209  }
2210  FCT_TEST_END();
2211 
2212 
2213  FCT_TEST_BGN(test_mpi_div_mpi_2)
2214  {
2215  mpi X, Y, Q, R, A, B;
2216  int res;
2217  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2218  mpi_init( &A ); mpi_init( &B );
2219 
2220  fct_chk( mpi_read_string( &X, 10, "476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188762" ) == 0 );
2221  fct_chk( mpi_read_string( &Y, 10, "28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537" ) == 0 );
2222  fct_chk( mpi_read_string( &A, 10, "16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953" ) == 0 );
2223  fct_chk( mpi_read_string( &B, 10, "1" ) == 0 );
2224  res = mpi_div_mpi( &Q, &R, &X, &Y );
2225  fct_chk( res == 0 );
2226  if( res == 0 )
2227  {
2228  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2229  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2230  }
2231 
2232  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2233  mpi_free( &A ); mpi_free( &B );
2234  }
2235  FCT_TEST_END();
2236 
2237 
2238  FCT_TEST_BGN(test_mpi_div_mpi_3)
2239  {
2240  mpi X, Y, Q, R, A, B;
2241  int res;
2242  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2243  mpi_init( &A ); mpi_init( &B );
2244 
2245  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2246  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
2247  fct_chk( mpi_read_string( &A, 10, "142" ) == 0 );
2248  fct_chk( mpi_read_string( &B, 10, "6" ) == 0 );
2249  res = mpi_div_mpi( &Q, &R, &X, &Y );
2250  fct_chk( res == 0 );
2251  if( res == 0 )
2252  {
2253  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2254  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2255  }
2256 
2257  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2258  mpi_free( &A ); mpi_free( &B );
2259  }
2260  FCT_TEST_END();
2261 
2262 
2263  FCT_TEST_BGN(test_mpi_div_mpi_4)
2264  {
2265  mpi X, Y, Q, R, A, B;
2266  int res;
2267  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
2268  mpi_init( &A ); mpi_init( &B );
2269 
2270  fct_chk( mpi_read_string( &X, 10, "777" ) == 0 );
2271  fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
2272  fct_chk( mpi_read_string( &A, 10, "111" ) == 0 );
2273  fct_chk( mpi_read_string( &B, 10, "0" ) == 0 );
2274  res = mpi_div_mpi( &Q, &R, &X, &Y );
2275  fct_chk( res == 0 );
2276  if( res == 0 )
2277  {
2278  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2279  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2280  }
2281 
2282  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
2283  mpi_free( &A ); mpi_free( &B );
2284  }
2285  FCT_TEST_END();
2286 
2287 
2288  FCT_TEST_BGN(base_test_mpi_div_int_1)
2289  {
2290  mpi X, Q, R, A, B;
2291  int res;
2292  mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
2293  mpi_init( &B );
2294 
2295  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2296  fct_chk( mpi_read_string( &A, 10, "76" ) == 0 );
2297  fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
2298  res = mpi_div_int( &Q, &R, &X, 13 );
2299  fct_chk( res == 0 );
2300  if( res == 0 )
2301  {
2302  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2303  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2304  }
2305 
2306  mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
2307  mpi_free( &B );
2308  }
2309  FCT_TEST_END();
2310 
2311 
2312  FCT_TEST_BGN(base_test_mpi_div_int_2_divide_by_zero)
2313  {
2314  mpi X, Q, R, A, B;
2315  int res;
2316  mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
2317  mpi_init( &B );
2318 
2319  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2320  fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
2321  fct_chk( mpi_read_string( &B, 10, "1" ) == 0 );
2322  res = mpi_div_int( &Q, &R, &X, 0 );
2323  fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
2324  if( res == 0 )
2325  {
2326  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2327  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2328  }
2329 
2330  mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
2331  mpi_free( &B );
2332  }
2333  FCT_TEST_END();
2334 
2335 
2336  FCT_TEST_BGN(base_test_mpi_div_int_3)
2337  {
2338  mpi X, Q, R, A, B;
2339  int res;
2340  mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
2341  mpi_init( &B );
2342 
2343  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2344  fct_chk( mpi_read_string( &A, 10, "-76" ) == 0 );
2345  fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
2346  res = mpi_div_int( &Q, &R, &X, -13 );
2347  fct_chk( res == 0 );
2348  if( res == 0 )
2349  {
2350  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2351  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2352  }
2353 
2354  mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
2355  mpi_free( &B );
2356  }
2357  FCT_TEST_END();
2358 
2359 
2360  FCT_TEST_BGN(test_mpi_div_int_1)
2361  {
2362  mpi X, Q, R, A, B;
2363  int res;
2364  mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
2365  mpi_init( &B );
2366 
2367  fct_chk( mpi_read_string( &X, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2368  fct_chk( mpi_read_string( &A, 10, "592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
2369  fct_chk( mpi_read_string( &B, 10, "26" ) == 0 );
2370  res = mpi_div_int( &Q, &R, &X, 34 );
2371  fct_chk( res == 0 );
2372  if( res == 0 )
2373  {
2374  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2375  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2376  }
2377 
2378  mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
2379  mpi_free( &B );
2380  }
2381  FCT_TEST_END();
2382 
2383 
2384  FCT_TEST_BGN(test_mpi_div_int_2)
2385  {
2386  mpi X, Q, R, A, B;
2387  int res;
2388  mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
2389  mpi_init( &B );
2390 
2391  fct_chk( mpi_read_string( &X, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2392  fct_chk( mpi_read_string( &A, 10, "-592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
2393  fct_chk( mpi_read_string( &B, 10, "26" ) == 0 );
2394  res = mpi_div_int( &Q, &R, &X, -34 );
2395  fct_chk( res == 0 );
2396  if( res == 0 )
2397  {
2398  fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
2399  fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
2400  }
2401 
2402  mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
2403  mpi_free( &B );
2404  }
2405  FCT_TEST_END();
2406 
2407 
2408  FCT_TEST_BGN(base_test_mpi_mod_mpi_1)
2409  {
2410  mpi X, Y, Z, A;
2411  int res;
2412  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2413 
2414  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2415  fct_chk( mpi_read_string( &Y, 10, "13" ) == 0 );
2416  fct_chk( mpi_read_string( &A, 10, "12" ) == 0 );
2417  res = mpi_mod_mpi( &Z, &X, &Y );
2418  fct_chk( res == 0 );
2419  if( res == 0 )
2420  {
2421  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2422  }
2423 
2424  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2425  }
2426  FCT_TEST_END();
2427 
2428 
2429  FCT_TEST_BGN(base_test_mpi_mod_mpi_2_divide_by_zero)
2430  {
2431  mpi X, Y, Z, A;
2432  int res;
2433  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2434 
2435  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2436  fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
2437  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
2438  res = mpi_mod_mpi( &Z, &X, &Y );
2439  fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
2440  if( res == 0 )
2441  {
2442  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2443  }
2444 
2445  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2446  }
2447  FCT_TEST_END();
2448 
2449 
2450  FCT_TEST_BGN(base_test_mpi_mod_mpi_3)
2451  {
2452  mpi X, Y, Z, A;
2453  int res;
2454  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2455 
2456  fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
2457  fct_chk( mpi_read_string( &Y, 10, "13" ) == 0 );
2458  fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
2459  res = mpi_mod_mpi( &Z, &X, &Y );
2460  fct_chk( res == 0 );
2461  if( res == 0 )
2462  {
2463  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2464  }
2465 
2466  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2467  }
2468  FCT_TEST_END();
2469 
2470 
2471  FCT_TEST_BGN(base_test_mpi_mod_mpi_4_negative_modulo)
2472  {
2473  mpi X, Y, Z, A;
2474  int res;
2475  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2476 
2477  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2478  fct_chk( mpi_read_string( &Y, 10, "-13" ) == 0 );
2479  fct_chk( mpi_read_string( &A, 10, "-1" ) == 0 );
2480  res = mpi_mod_mpi( &Z, &X, &Y );
2481  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
2482  if( res == 0 )
2483  {
2484  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2485  }
2486 
2487  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2488  }
2489  FCT_TEST_END();
2490 
2491 
2492  FCT_TEST_BGN(base_test_mpi_mod_mpi_5_negative_modulo)
2493  {
2494  mpi X, Y, Z, A;
2495  int res;
2496  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2497 
2498  fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
2499  fct_chk( mpi_read_string( &Y, 10, "-13" ) == 0 );
2500  fct_chk( mpi_read_string( &A, 10, "-12" ) == 0 );
2501  res = mpi_mod_mpi( &Z, &X, &Y );
2502  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
2503  if( res == 0 )
2504  {
2505  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2506  }
2507 
2508  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2509  }
2510  FCT_TEST_END();
2511 
2512 
2513  FCT_TEST_BGN(base_test_mpi_mod_int_1)
2514  {
2515  mpi X;
2516  int res;
2517  t_uint r;
2518  mpi_init( &X );
2519 
2520  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2521  res = mpi_mod_int( &r, &X, 13 );
2522  fct_chk( res == 0 );
2523  if( res == 0 )
2524  {
2525  fct_chk( r == 12 );
2526  }
2527 
2528  mpi_free( &X );
2529  }
2530  FCT_TEST_END();
2531 
2532 
2533  FCT_TEST_BGN(base_test_mpi_mod_int_2_divide_by_zero)
2534  {
2535  mpi X;
2536  int res;
2537  t_uint r;
2538  mpi_init( &X );
2539 
2540  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2541  res = mpi_mod_int( &r, &X, 0 );
2542  fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
2543  if( res == 0 )
2544  {
2545  fct_chk( r == 0 );
2546  }
2547 
2548  mpi_free( &X );
2549  }
2550  FCT_TEST_END();
2551 
2552 
2553  FCT_TEST_BGN(base_test_mpi_mod_int_3)
2554  {
2555  mpi X;
2556  int res;
2557  t_uint r;
2558  mpi_init( &X );
2559 
2560  fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
2561  res = mpi_mod_int( &r, &X, 13 );
2562  fct_chk( res == 0 );
2563  if( res == 0 )
2564  {
2565  fct_chk( r == 1 );
2566  }
2567 
2568  mpi_free( &X );
2569  }
2570  FCT_TEST_END();
2571 
2572 
2573  FCT_TEST_BGN(base_test_mpi_mod_int_4_negative_modulo)
2574  {
2575  mpi X;
2576  int res;
2577  t_uint r;
2578  mpi_init( &X );
2579 
2580  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2581  res = mpi_mod_int( &r, &X, -13 );
2582  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
2583  if( res == 0 )
2584  {
2585  fct_chk( r == 0 );
2586  }
2587 
2588  mpi_free( &X );
2589  }
2590  FCT_TEST_END();
2591 
2592 
2593  FCT_TEST_BGN(base_test_mpi_mod_int_5_negative_modulo)
2594  {
2595  mpi X;
2596  int res;
2597  t_uint r;
2598  mpi_init( &X );
2599 
2600  fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
2601  res = mpi_mod_int( &r, &X, -13 );
2602  fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
2603  if( res == 0 )
2604  {
2605  fct_chk( r == 0 );
2606  }
2607 
2608  mpi_free( &X );
2609  }
2610  FCT_TEST_END();
2611 
2612 
2613  FCT_TEST_BGN(base_test_mpi_mod_int_6_by_1)
2614  {
2615  mpi X;
2616  int res;
2617  t_uint r;
2618  mpi_init( &X );
2619 
2620  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2621  res = mpi_mod_int( &r, &X, 1 );
2622  fct_chk( res == 0 );
2623  if( res == 0 )
2624  {
2625  fct_chk( r == 0 );
2626  }
2627 
2628  mpi_free( &X );
2629  }
2630  FCT_TEST_END();
2631 
2632 
2633  FCT_TEST_BGN(base_test_mpi_mod_int_7_by_2)
2634  {
2635  mpi X;
2636  int res;
2637  t_uint r;
2638  mpi_init( &X );
2639 
2640  fct_chk( mpi_read_string( &X, 10, "1001" ) == 0 );
2641  res = mpi_mod_int( &r, &X, 2 );
2642  fct_chk( res == 0 );
2643  if( res == 0 )
2644  {
2645  fct_chk( r == 1 );
2646  }
2647 
2648  mpi_free( &X );
2649  }
2650  FCT_TEST_END();
2651 
2652 
2653  FCT_TEST_BGN(base_test_mpi_mod_int_8_by_2)
2654  {
2655  mpi X;
2656  int res;
2657  t_uint r;
2658  mpi_init( &X );
2659 
2660  fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
2661  res = mpi_mod_int( &r, &X, 2 );
2662  fct_chk( res == 0 );
2663  if( res == 0 )
2664  {
2665  fct_chk( r == 0 );
2666  }
2667 
2668  mpi_free( &X );
2669  }
2670  FCT_TEST_END();
2671 
2672 
2673  FCT_TEST_BGN(base_test_mpi_exp_mod_1)
2674  {
2675  mpi A, E, N, RR, Z, X;
2676  int res;
2677  mpi_init( &A ); mpi_init( &E ); mpi_init( &N );
2678  mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
2679 
2680  fct_chk( mpi_read_string( &A, 10, "23" ) == 0 );
2681  fct_chk( mpi_read_string( &E, 10, "13" ) == 0 );
2682  fct_chk( mpi_read_string( &N, 10, "29" ) == 0 );
2683  fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
2684 
2685  if( strlen( "" ) )
2686  fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
2687 
2688  res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
2689  fct_chk( res == 0 );
2690  if( res == 0 )
2691  {
2692  fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
2693  }
2694 
2695  mpi_free( &A ); mpi_free( &E ); mpi_free( &N );
2696  mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
2697  }
2698  FCT_TEST_END();
2699 
2700 
2701  FCT_TEST_BGN(base_test_mpi_exp_mod_2)
2702  {
2703  mpi A, E, N, RR, Z, X;
2704  int res;
2705  mpi_init( &A ); mpi_init( &E ); mpi_init( &N );
2706  mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
2707 
2708  fct_chk( mpi_read_string( &A, 10, "23" ) == 0 );
2709  fct_chk( mpi_read_string( &E, 10, "13" ) == 0 );
2710  fct_chk( mpi_read_string( &N, 10, "30" ) == 0 );
2711  fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
2712 
2713  if( strlen( "" ) )
2714  fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
2715 
2716  res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
2717  fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
2718  if( res == 0 )
2719  {
2720  fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
2721  }
2722 
2723  mpi_free( &A ); mpi_free( &E ); mpi_free( &N );
2724  mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
2725  }
2726  FCT_TEST_END();
2727 
2728 
2729  FCT_TEST_BGN(base_test_mpi_exp_mod_3)
2730  {
2731  mpi A, E, N, RR, Z, X;
2732  int res;
2733  mpi_init( &A ); mpi_init( &E ); mpi_init( &N );
2734  mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
2735 
2736  fct_chk( mpi_read_string( &A, 10, "23" ) == 0 );
2737  fct_chk( mpi_read_string( &E, 10, "13" ) == 0 );
2738  fct_chk( mpi_read_string( &N, 10, "-29" ) == 0 );
2739  fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
2740 
2741  if( strlen( "" ) )
2742  fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
2743 
2744  res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
2745  fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
2746  if( res == 0 )
2747  {
2748  fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
2749  }
2750 
2751  mpi_free( &A ); mpi_free( &E ); mpi_free( &N );
2752  mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
2753  }
2754  FCT_TEST_END();
2755 
2756 
2757  FCT_TEST_BGN(test_mpi_exp_mod_1)
2758  {
2759  mpi A, E, N, RR, Z, X;
2760  int res;
2761  mpi_init( &A ); mpi_init( &E ); mpi_init( &N );
2762  mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
2763 
2764  fct_chk( mpi_read_string( &A, 10, "433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847" ) == 0 );
2765  fct_chk( mpi_read_string( &E, 10, "5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721" ) == 0 );
2766  fct_chk( mpi_read_string( &N, 10, "583137007797276923956891216216022144052044091311388601652961409557516421612874571554415606746479105795833145583959622117418531166391184939066520869800857530421873250114773204354963864729386957427276448683092491947566992077136553066273207777134303397724679138833126700957" ) == 0 );
2767  fct_chk( mpi_read_string( &X, 10, "114597449276684355144920670007147953232659436380163461553186940113929777196018164149703566472936578890991049344459204199888254907113495794730452699842273939581048142004834330369483813876618772578869083248061616444392091693787039636316845512292127097865026290173004860736" ) == 0 );
2768 
2769  if( strlen( "" ) )
2770  fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
2771 
2772  res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
2773  fct_chk( res == 0 );
2774  if( res == 0 )
2775  {
2776  fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
2777  }
2778 
2779  mpi_free( &A ); mpi_free( &E ); mpi_free( &N );
2780  mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
2781  }
2782  FCT_TEST_END();
2783 
2784 
2785  FCT_TEST_BGN(base_test_gcd_1)
2786  {
2787  mpi A, X, Y, Z;
2788  mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
2789 
2790  fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
2791  fct_chk( mpi_read_string( &Y, 10, "609" ) == 0 );
2792  fct_chk( mpi_read_string( &A, 10, "21" ) == 0 );
2793  fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
2794  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2795 
2796  mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
2797  }
2798  FCT_TEST_END();
2799 
2800 
2801  FCT_TEST_BGN(base_test_gcd_2)
2802  {
2803  mpi A, X, Y, Z;
2804  mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
2805 
2806  fct_chk( mpi_read_string( &X, 10, "1764" ) == 0 );
2807  fct_chk( mpi_read_string( &Y, 10, "868" ) == 0 );
2808  fct_chk( mpi_read_string( &A, 10, "28" ) == 0 );
2809  fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
2810  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2811 
2812  mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
2813  }
2814  FCT_TEST_END();
2815 
2816 
2817  FCT_TEST_BGN(base_test_gcd_3)
2818  {
2819  mpi A, X, Y, Z;
2820  mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
2821 
2822  fct_chk( mpi_read_string( &X, 10, "768454923" ) == 0 );
2823  fct_chk( mpi_read_string( &Y, 10, "542167814" ) == 0 );
2824  fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
2825  fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
2826  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2827 
2828  mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
2829  }
2830  FCT_TEST_END();
2831 
2832 
2833  FCT_TEST_BGN(test_gcd_1)
2834  {
2835  mpi A, X, Y, Z;
2836  mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
2837 
2838  fct_chk( mpi_read_string( &X, 10, "433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847" ) == 0 );
2839  fct_chk( mpi_read_string( &Y, 10, "5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721" ) == 0 );
2840  fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
2841  fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
2842  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2843 
2844  mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
2845  }
2846  FCT_TEST_END();
2847 
2848 #ifdef POLARSSL_GENPRIME
2849 
2850  FCT_TEST_BGN(base_test_mpi_inv_mod_1)
2851  {
2852  mpi X, Y, Z, A;
2853  int res;
2854  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2855 
2856  fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
2857  fct_chk( mpi_read_string( &Y, 10, "11" ) == 0 );
2858  fct_chk( mpi_read_string( &A, 10, "4" ) == 0 );
2859  res = mpi_inv_mod( &Z, &X, &Y );
2860  fct_chk( res == 0 );
2861  if( res == 0 )
2862  {
2863  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2864  }
2865 
2866  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2867  }
2868  FCT_TEST_END();
2869 #endif /* POLARSSL_GENPRIME */
2870 
2871 #ifdef POLARSSL_GENPRIME
2872 
2873  FCT_TEST_BGN(base_test_mpi_inv_mod_2)
2874  {
2875  mpi X, Y, Z, A;
2876  int res;
2877  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2878 
2879  fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
2880  fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
2881  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
2882  res = mpi_inv_mod( &Z, &X, &Y );
2883  fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
2884  if( res == 0 )
2885  {
2886  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2887  }
2888 
2889  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2890  }
2891  FCT_TEST_END();
2892 #endif /* POLARSSL_GENPRIME */
2893 
2894 #ifdef POLARSSL_GENPRIME
2895 
2896  FCT_TEST_BGN(base_test_mpi_inv_mod_3)
2897  {
2898  mpi X, Y, Z, A;
2899  int res;
2900  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2901 
2902  fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
2903  fct_chk( mpi_read_string( &Y, 10, "-11" ) == 0 );
2904  fct_chk( mpi_read_string( &A, 10, "4" ) == 0 );
2905  res = mpi_inv_mod( &Z, &X, &Y );
2906  fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
2907  if( res == 0 )
2908  {
2909  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2910  }
2911 
2912  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2913  }
2914  FCT_TEST_END();
2915 #endif /* POLARSSL_GENPRIME */
2916 
2917 #ifdef POLARSSL_GENPRIME
2918 
2919  FCT_TEST_BGN(base_test_mpi_inv_mod_4)
2920  {
2921  mpi X, Y, Z, A;
2922  int res;
2923  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2924 
2925  fct_chk( mpi_read_string( &X, 10, "2" ) == 0 );
2926  fct_chk( mpi_read_string( &Y, 10, "4" ) == 0 );
2927  fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
2928  res = mpi_inv_mod( &Z, &X, &Y );
2929  fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
2930  if( res == 0 )
2931  {
2932  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2933  }
2934 
2935  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2936  }
2937  FCT_TEST_END();
2938 #endif /* POLARSSL_GENPRIME */
2939 
2940 #ifdef POLARSSL_GENPRIME
2941 
2942  FCT_TEST_BGN(test_mpi_inv_mod_1)
2943  {
2944  mpi X, Y, Z, A;
2945  int res;
2946  mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
2947 
2948  fct_chk( mpi_read_string( &X, 16, "aa4df5cb14b4c31237f98bd1faf527c283c2d0f3eec89718664ba33f9762907c" ) == 0 );
2949  fct_chk( mpi_read_string( &Y, 16, "fffbbd660b94412ae61ead9c2906a344116e316a256fd387874c6c675b1d587d" ) == 0 );
2950  fct_chk( mpi_read_string( &A, 16, "8d6a5c1d7adeae3e94b9bcd2c47e0d46e778bc8804a2cc25c02d775dc3d05b0c" ) == 0 );
2951  res = mpi_inv_mod( &Z, &X, &Y );
2952  fct_chk( res == 0 );
2953  if( res == 0 )
2954  {
2955  fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
2956  }
2957 
2958  mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
2959  }
2960  FCT_TEST_END();
2961 #endif /* POLARSSL_GENPRIME */
2962 
2963 #ifdef POLARSSL_GENPRIME
2964 
2965  FCT_TEST_BGN(base_test_mpi_is_prime_1)
2966  {
2967  mpi X;
2968  int res;
2969  mpi_init( &X );
2970 
2971  fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
2972  res = mpi_is_prime( &X, rnd_std_rand, NULL );
2973  fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
2974 
2975  mpi_free( &X );
2976  }
2977  FCT_TEST_END();
2978 #endif /* POLARSSL_GENPRIME */
2979 
2980 #ifdef POLARSSL_GENPRIME
2981 
2982  FCT_TEST_BGN(base_test_mpi_is_prime_2)
2983  {
2984  mpi X;
2985  int res;
2986  mpi_init( &X );
2987 
2988  fct_chk( mpi_read_string( &X, 10, "1" ) == 0 );
2989  res = mpi_is_prime( &X, rnd_std_rand, NULL );
2990  fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
2991 
2992  mpi_free( &X );
2993  }
2994  FCT_TEST_END();
2995 #endif /* POLARSSL_GENPRIME */
2996 
2997 #ifdef POLARSSL_GENPRIME
2998 
2999  FCT_TEST_BGN(base_test_mpi_is_prime_3)
3000  {
3001  mpi X;
3002  int res;
3003  mpi_init( &X );
3004 
3005  fct_chk( mpi_read_string( &X, 10, "2" ) == 0 );
3006  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3007  fct_chk( res == 0 );
3008 
3009  mpi_free( &X );
3010  }
3011  FCT_TEST_END();
3012 #endif /* POLARSSL_GENPRIME */
3013 
3014 #ifdef POLARSSL_GENPRIME
3015 
3016  FCT_TEST_BGN(base_test_mpi_is_prime_4)
3017  {
3018  mpi X;
3019  int res;
3020  mpi_init( &X );
3021 
3022  fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
3023  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3024  fct_chk( res == 0 );
3025 
3026  mpi_free( &X );
3027  }
3028  FCT_TEST_END();
3029 #endif /* POLARSSL_GENPRIME */
3030 
3031 #ifdef POLARSSL_GENPRIME
3032 
3033  FCT_TEST_BGN(base_test_mpi_is_prime_5)
3034  {
3035  mpi X;
3036  int res;
3037  mpi_init( &X );
3038 
3039  fct_chk( mpi_read_string( &X, 10, "4" ) == 0 );
3040  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3041  fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
3042 
3043  mpi_free( &X );
3044  }
3045  FCT_TEST_END();
3046 #endif /* POLARSSL_GENPRIME */
3047 
3048 #ifdef POLARSSL_GENPRIME
3049 
3050  FCT_TEST_BGN(base_test_mpi_is_prime_6)
3051  {
3052  mpi X;
3053  int res;
3054  mpi_init( &X );
3055 
3056  fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
3057  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3058  fct_chk( res == 0 );
3059 
3060  mpi_free( &X );
3061  }
3062  FCT_TEST_END();
3063 #endif /* POLARSSL_GENPRIME */
3064 
3065 #ifdef POLARSSL_GENPRIME
3066 
3067  FCT_TEST_BGN(base_test_mpi_is_prime_7)
3068  {
3069  mpi X;
3070  int res;
3071  mpi_init( &X );
3072 
3073  fct_chk( mpi_read_string( &X, 10, "27" ) == 0 );
3074  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3075  fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
3076 
3077  mpi_free( &X );
3078  }
3079  FCT_TEST_END();
3080 #endif /* POLARSSL_GENPRIME */
3081 
3082 #ifdef POLARSSL_GENPRIME
3083 
3084  FCT_TEST_BGN(base_test_mpi_is_prime_8)
3085  {
3086  mpi X;
3087  int res;
3088  mpi_init( &X );
3089 
3090  fct_chk( mpi_read_string( &X, 10, "47" ) == 0 );
3091  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3092  fct_chk( res == 0 );
3093 
3094  mpi_free( &X );
3095  }
3096  FCT_TEST_END();
3097 #endif /* POLARSSL_GENPRIME */
3098 
3099 #ifdef POLARSSL_GENPRIME
3100 
3101  FCT_TEST_BGN(test_mpi_is_prime_1)
3102  {
3103  mpi X;
3104  int res;
3105  mpi_init( &X );
3106 
3107  fct_chk( mpi_read_string( &X, 10, "827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099" ) == 0 );
3108  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3109  fct_chk( res == 0 );
3110 
3111  mpi_free( &X );
3112  }
3113  FCT_TEST_END();
3114 #endif /* POLARSSL_GENPRIME */
3115 
3116 #ifdef POLARSSL_GENPRIME
3117 
3118  FCT_TEST_BGN(test_mpi_is_prime_2)
3119  {
3120  mpi X;
3121  int res;
3122  mpi_init( &X );
3123 
3124  fct_chk( mpi_read_string( &X, 10, "827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912001" ) == 0 );
3125  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3126  fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
3127 
3128  mpi_free( &X );
3129  }
3130  FCT_TEST_END();
3131 #endif /* POLARSSL_GENPRIME */
3132 
3133 #ifdef POLARSSL_GENPRIME
3134 
3135  FCT_TEST_BGN(test_mpi_is_prime_3)
3136  {
3137  mpi X;
3138  int res;
3139  mpi_init( &X );
3140 
3141  fct_chk( mpi_read_string( &X, 10, "2833419889721787128217599" ) == 0 );
3142  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3143  fct_chk( res == 0 );
3144 
3145  mpi_free( &X );
3146  }
3147  FCT_TEST_END();
3148 #endif /* POLARSSL_GENPRIME */
3149 
3150 #ifdef POLARSSL_GENPRIME
3151 
3152  FCT_TEST_BGN(test_mpi_is_prime_4)
3153  {
3154  mpi X;
3155  int res;
3156  mpi_init( &X );
3157 
3158  fct_chk( mpi_read_string( &X, 10, "195845982777569926302400511" ) == 0 );
3159  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3160  fct_chk( res == 0 );
3161 
3162  mpi_free( &X );
3163  }
3164  FCT_TEST_END();
3165 #endif /* POLARSSL_GENPRIME */
3166 
3167 #ifdef POLARSSL_GENPRIME
3168 
3169  FCT_TEST_BGN(test_mpi_is_prime_5)
3170  {
3171  mpi X;
3172  int res;
3173  mpi_init( &X );
3174 
3175  fct_chk( mpi_read_string( &X, 10, "4776913109852041418248056622882488319" ) == 0 );
3176  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3177  fct_chk( res == 0 );
3178 
3179  mpi_free( &X );
3180  }
3181  FCT_TEST_END();
3182 #endif /* POLARSSL_GENPRIME */
3183 
3184 #ifdef POLARSSL_GENPRIME
3185 
3186  FCT_TEST_BGN(test_mpi_is_prime_5)
3187  {
3188  mpi X;
3189  int res;
3190  mpi_init( &X );
3191 
3192  fct_chk( mpi_read_string( &X, 10, "768614336404564651" ) == 0 );
3193  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3194  fct_chk( res == 0 );
3195 
3196  mpi_free( &X );
3197  }
3198  FCT_TEST_END();
3199 #endif /* POLARSSL_GENPRIME */
3200 
3201 #ifdef POLARSSL_GENPRIME
3202 
3203  FCT_TEST_BGN(test_mpi_is_prime_6)
3204  {
3205  mpi X;
3206  int res;
3207  mpi_init( &X );
3208 
3209  fct_chk( mpi_read_string( &X, 10, "201487636602438195784363" ) == 0 );
3210  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3211  fct_chk( res == 0 );
3212 
3213  mpi_free( &X );
3214  }
3215  FCT_TEST_END();
3216 #endif /* POLARSSL_GENPRIME */
3217 
3218 #ifdef POLARSSL_GENPRIME
3219 
3220  FCT_TEST_BGN(test_mpi_is_prime_7)
3221  {
3222  mpi X;
3223  int res;
3224  mpi_init( &X );
3225 
3226  fct_chk( mpi_read_string( &X, 10, "845100400152152934331135470251" ) == 0 );
3227  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3228  fct_chk( res == 0 );
3229 
3230  mpi_free( &X );
3231  }
3232  FCT_TEST_END();
3233 #endif /* POLARSSL_GENPRIME */
3234 
3235 #ifdef POLARSSL_GENPRIME
3236 
3237  FCT_TEST_BGN(test_mpi_is_prime_8)
3238  {
3239  mpi X;
3240  int res;
3241  mpi_init( &X );
3242 
3243  fct_chk( mpi_read_string( &X, 10, "56713727820156410577229101238628035243" ) == 0 );
3244  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3245  fct_chk( res == 0 );
3246 
3247  mpi_free( &X );
3248  }
3249  FCT_TEST_END();
3250 #endif /* POLARSSL_GENPRIME */
3251 
3252 #ifdef POLARSSL_GENPRIME
3253 
3254  FCT_TEST_BGN(test_mpi_is_prime_9)
3255  {
3256  mpi X;
3257  int res;
3258  mpi_init( &X );
3259 
3260  fct_chk( mpi_read_string( &X, 10, "203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
3261  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3262  fct_chk( res == 0 );
3263 
3264  mpi_free( &X );
3265  }
3266  FCT_TEST_END();
3267 #endif /* POLARSSL_GENPRIME */
3268 
3269 #ifdef POLARSSL_GENPRIME
3270 
3271  FCT_TEST_BGN(test_mpi_is_prime_10)
3272  {
3273  mpi X;
3274  int res;
3275  mpi_init( &X );
3276 
3277  fct_chk( mpi_read_string( &X, 10, "531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
3278  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3279  fct_chk( res == 0 );
3280 
3281  mpi_free( &X );
3282  }
3283  FCT_TEST_END();
3284 #endif /* POLARSSL_GENPRIME */
3285 
3286 #ifdef POLARSSL_GENPRIME
3287 
3288  FCT_TEST_BGN(test_mpi_is_prime_11)
3289  {
3290  mpi X;
3291  int res;
3292  mpi_init( &X );
3293 
3294  fct_chk( mpi_read_string( &X, 10, "319705304701141539155720137200974664666792526059405792539680974929469783512821793995613718943171723765238853752439032835985158829038528214925658918372196742089464683960239919950882355844766055365179937610326127675178857306260955550407044463370239890187189750909036833976197804646589380690779463976173" ) == 0 );
3295  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3296  fct_chk( res == 0 );
3297 
3298  mpi_free( &X );
3299  }
3300  FCT_TEST_END();
3301 #endif /* POLARSSL_GENPRIME */
3302 
3303 #ifdef POLARSSL_GENPRIME
3304 
3305  FCT_TEST_BGN(test_mpi_is_prime_12)
3306  {
3307  mpi X;
3308  int res;
3309  mpi_init( &X );
3310 
3311  fct_chk( mpi_read_string( &X, 10, "200603822195324642393516294012917598972967449320074999667103434371470616000652036570009912021332527788252300901905236578801044680456930305350440933538867383130165841118050781326291059830545891570648243241795871" ) == 0 );
3312  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3313  fct_chk( res == 0 );
3314 
3315  mpi_free( &X );
3316  }
3317  FCT_TEST_END();
3318 #endif /* POLARSSL_GENPRIME */
3319 
3320 #ifdef POLARSSL_GENPRIME
3321 
3322  FCT_TEST_BGN(test_mpi_is_prime_13)
3323  {
3324  mpi X;
3325  int res;
3326  mpi_init( &X );
3327 
3328  fct_chk( mpi_read_string( &X, 10, "827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099" ) == 0 );
3329  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3330  fct_chk( res == 0 );
3331 
3332  mpi_free( &X );
3333  }
3334  FCT_TEST_END();
3335 #endif /* POLARSSL_GENPRIME */
3336 
3337 #ifdef POLARSSL_GENPRIME
3338 
3339  FCT_TEST_BGN(test_mpi_is_prime_14)
3340  {
3341  mpi X;
3342  int res;
3343  mpi_init( &X );
3344 
3345  fct_chk( mpi_read_string( &X, 10, "964274047248418797145090983157197980855078966882276492572788532954904112655338439361306213898569516593744267391754033306465125919199692703323878557833023573312685002670662846477592597659826113460619815244721311" ) == 0 );
3346  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3347  fct_chk( res == 0 );
3348 
3349  mpi_free( &X );
3350  }
3351  FCT_TEST_END();
3352 #endif /* POLARSSL_GENPRIME */
3353 
3354 #ifdef POLARSSL_GENPRIME
3355 
3356  FCT_TEST_BGN(test_mpi_is_prime_15)
3357  {
3358  mpi X;
3359  int res;
3360  mpi_init( &X );
3361 
3362  fct_chk( mpi_read_string( &X, 10, "170141183460469231731687303715884105727" ) == 0 );
3363  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3364  fct_chk( res == 0 );
3365 
3366  mpi_free( &X );
3367  }
3368  FCT_TEST_END();
3369 #endif /* POLARSSL_GENPRIME */
3370 
3371 #ifdef POLARSSL_GENPRIME
3372 
3373  FCT_TEST_BGN(test_mpi_is_prime_16)
3374  {
3375  mpi X;
3376  int res;
3377  mpi_init( &X );
3378 
3379  fct_chk( mpi_read_string( &X, 10, "2147483647" ) == 0 );
3380  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3381  fct_chk( res == 0 );
3382 
3383  mpi_free( &X );
3384  }
3385  FCT_TEST_END();
3386 #endif /* POLARSSL_GENPRIME */
3387 
3388 #ifdef POLARSSL_GENPRIME
3389 
3390  FCT_TEST_BGN(test_mpi_is_prime_17)
3391  {
3392  mpi X;
3393  int res;
3394  mpi_init( &X );
3395 
3396  fct_chk( mpi_read_string( &X, 10, "961748941" ) == 0 );
3397  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3398  fct_chk( res == 0 );
3399 
3400  mpi_free( &X );
3401  }
3402  FCT_TEST_END();
3403 #endif /* POLARSSL_GENPRIME */
3404 
3405 #ifdef POLARSSL_GENPRIME
3406 
3407  FCT_TEST_BGN(test_mpi_is_prime_18)
3408  {
3409  mpi X;
3410  int res;
3411  mpi_init( &X );
3412 
3413  fct_chk( mpi_read_string( &X, 10, "179424691" ) == 0 );
3414  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3415  fct_chk( res == 0 );
3416 
3417  mpi_free( &X );
3418  }
3419  FCT_TEST_END();
3420 #endif /* POLARSSL_GENPRIME */
3421 
3422 #ifdef POLARSSL_GENPRIME
3423 
3424  FCT_TEST_BGN(test_mpi_is_prime_19)
3425  {
3426  mpi X;
3427  int res;
3428  mpi_init( &X );
3429 
3430  fct_chk( mpi_read_string( &X, 10, "32452867" ) == 0 );
3431  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3432  fct_chk( res == 0 );
3433 
3434  mpi_free( &X );
3435  }
3436  FCT_TEST_END();
3437 #endif /* POLARSSL_GENPRIME */
3438 
3439 #ifdef POLARSSL_GENPRIME
3440 
3441  FCT_TEST_BGN(test_mpi_is_prime_20)
3442  {
3443  mpi X;
3444  int res;
3445  mpi_init( &X );
3446 
3447  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3448  res = mpi_is_prime( &X, rnd_std_rand, NULL );
3449  fct_chk( res == 0 );
3450 
3451  mpi_free( &X );
3452  }
3453  FCT_TEST_END();
3454 #endif /* POLARSSL_GENPRIME */
3455 
3456 
3457  FCT_TEST_BGN(test_bit_getting_value_bit_25)
3458  {
3459  mpi X;
3460  mpi_init( &X );
3461  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3462  fct_chk( mpi_get_bit( &X, 25 ) == 1 );
3463 
3464  mpi_free( &X );
3465  }
3466  FCT_TEST_END();
3467 
3468 
3469  FCT_TEST_BGN(test_bit_getting_larger_but_same_limb)
3470  {
3471  mpi X;
3472  mpi_init( &X );
3473  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3474  fct_chk( mpi_get_bit( &X, 26 ) == 0 );
3475 
3476  mpi_free( &X );
3477  }
3478  FCT_TEST_END();
3479 
3480 
3481  FCT_TEST_BGN(test_bit_getting_larger_and_non_existing_limb)
3482  {
3483  mpi X;
3484  mpi_init( &X );
3485  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3486  fct_chk( mpi_get_bit( &X, 500 ) == 0 );
3487 
3488  mpi_free( &X );
3489  }
3490  FCT_TEST_END();
3491 
3492 
3493  FCT_TEST_BGN(test_bit_getting_value_bit_24)
3494  {
3495  mpi X;
3496  mpi_init( &X );
3497  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3498  fct_chk( mpi_get_bit( &X, 24 ) == 0 );
3499 
3500  mpi_free( &X );
3501  }
3502  FCT_TEST_END();
3503 
3504 
3505  FCT_TEST_BGN(test_bit_getting_value_bit_23)
3506  {
3507  mpi X;
3508  mpi_init( &X );
3509  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3510  fct_chk( mpi_get_bit( &X, 23 ) == 1 );
3511 
3512  mpi_free( &X );
3513  }
3514  FCT_TEST_END();
3515 
3516 
3517  FCT_TEST_BGN(test_bit_set_change_existing_value_with_a_1)
3518  {
3519  mpi X, Y;
3520  mpi_init( &X ); mpi_init( &Y );
3521 
3522  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3523  fct_chk( mpi_read_string( &Y, 10, "66756903" ) == 0 );
3524  fct_chk( mpi_set_bit( &X, 24, 1 ) == 0 );
3525  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
3526 
3527  mpi_free( &X );
3528  }
3529  FCT_TEST_END();
3530 
3531 
3532  FCT_TEST_BGN(test_bit_set_change_existing_value_with_a_0)
3533  {
3534  mpi X, Y;
3535  mpi_init( &X ); mpi_init( &Y );
3536 
3537  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3538  fct_chk( mpi_read_string( &Y, 10, "16425255" ) == 0 );
3539  fct_chk( mpi_set_bit( &X, 25, 0 ) == 0 );
3540  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
3541 
3542  mpi_free( &X );
3543  }
3544  FCT_TEST_END();
3545 
3546 
3547  FCT_TEST_BGN(test_bit_set_add_above_existing_limbs_with_a_0)
3548  {
3549  mpi X, Y;
3550  mpi_init( &X ); mpi_init( &Y );
3551 
3552  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3553  fct_chk( mpi_read_string( &Y, 10, "49979687" ) == 0 );
3554  fct_chk( mpi_set_bit( &X, 80, 0 ) == 0 );
3555  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
3556 
3557  mpi_free( &X );
3558  }
3559  FCT_TEST_END();
3560 
3561 
3562  FCT_TEST_BGN(test_bit_set_add_above_existing_limbs_with_a_1)
3563  {
3564  mpi X, Y;
3565  mpi_init( &X ); mpi_init( &Y );
3566 
3567  fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
3568  fct_chk( mpi_read_string( &Y, 10, "1208925819614629224685863" ) == 0 );
3569  fct_chk( mpi_set_bit( &X, 80, 1 ) == 0 );
3570  fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
3571 
3572  mpi_free( &X );
3573  }
3574  FCT_TEST_END();
3575 
3576 #ifdef POLARSSL_SELF_TEST
3577 
3578  FCT_TEST_BGN(mpi_selftest)
3579  {
3580  fct_chk( mpi_self_test( 0 ) == 0 );
3581  }
3582  FCT_TEST_END();
3583 #endif /* POLARSSL_SELF_TEST */
3584 
3585  }
3586  FCT_SUITE_END();
3587 
3588 #endif /* POLARSSL_BIGNUM_C */
3589 
3590 }
3591 FCT_END();
3592