PolarSSL v1.1.4
test_suite_mpi.c
Go to the documentation of this file.
00001 #include "fct.h"
00002 
00003 #include <polarssl/bignum.h>
00004 
00005 #include <polarssl/config.h>
00006 
00007 #ifdef _MSC_VER
00008 #include <basetsd.h>
00009 typedef UINT32 uint32_t;
00010 #else
00011 #include <inttypes.h>
00012 #endif
00013 
00014 /*
00015  * 32-bit integer manipulation macros (big endian)
00016  */
00017 #ifndef GET_ULONG_BE
00018 #define GET_ULONG_BE(n,b,i)                             \
00019 {                                                       \
00020     (n) = ( (unsigned long) (b)[(i)    ] << 24 )        \
00021         | ( (unsigned long) (b)[(i) + 1] << 16 )        \
00022         | ( (unsigned long) (b)[(i) + 2] <<  8 )        \
00023         | ( (unsigned long) (b)[(i) + 3]       );       \
00024 }
00025 #endif
00026 
00027 #ifndef PUT_ULONG_BE
00028 #define PUT_ULONG_BE(n,b,i)                             \
00029 {                                                       \
00030     (b)[(i)    ] = (unsigned char) ( (n) >> 24 );       \
00031     (b)[(i) + 1] = (unsigned char) ( (n) >> 16 );       \
00032     (b)[(i) + 2] = (unsigned char) ( (n) >>  8 );       \
00033     (b)[(i) + 3] = (unsigned char) ( (n)       );       \
00034 }
00035 #endif
00036 
00037 int unhexify(unsigned char *obuf, const char *ibuf)
00038 {
00039     unsigned char c, c2;
00040     int len = strlen(ibuf) / 2;
00041     assert(!(strlen(ibuf) %1)); // must be even number of bytes
00042 
00043     while (*ibuf != 0)
00044     {
00045         c = *ibuf++;
00046         if( c >= '0' && c <= '9' )
00047             c -= '0';
00048         else if( c >= 'a' && c <= 'f' )
00049             c -= 'a' - 10;
00050         else if( c >= 'A' && c <= 'F' )
00051             c -= 'A' - 10;
00052         else
00053             assert( 0 );
00054 
00055         c2 = *ibuf++;
00056         if( c2 >= '0' && c2 <= '9' )
00057             c2 -= '0';
00058         else if( c2 >= 'a' && c2 <= 'f' )
00059             c2 -= 'a' - 10;
00060         else if( c2 >= 'A' && c2 <= 'F' )
00061             c2 -= 'A' - 10;
00062         else
00063             assert( 0 );
00064 
00065         *obuf++ = ( c << 4 ) | c2;
00066     }
00067 
00068     return len;
00069 }
00070 
00071 void hexify(unsigned char *obuf, const unsigned char *ibuf, int len)
00072 {
00073     unsigned char l, h;
00074 
00075     while (len != 0)
00076     {
00077         h = (*ibuf) / 16;
00078         l = (*ibuf) % 16;
00079 
00080         if( h < 10 )
00081             *obuf++ = '0' + h;
00082         else
00083             *obuf++ = 'a' + h - 10;
00084 
00085         if( l < 10 )
00086             *obuf++ = '0' + l;
00087         else
00088             *obuf++ = 'a' + l - 10;
00089 
00090         ++ibuf;
00091         len--;
00092     }
00093 }
00094 
00104 static int rnd_std_rand( void *rng_state, unsigned char *output, size_t len )
00105 {
00106     size_t i;
00107 
00108     if( rng_state != NULL )
00109         rng_state  = NULL;
00110 
00111     for( i = 0; i < len; ++i )
00112         output[i] = rand();
00113 
00114     return( 0 );
00115 }
00116 
00122 static int rnd_zero_rand( void *rng_state, unsigned char *output, size_t len )
00123 {
00124     if( rng_state != NULL )
00125         rng_state  = NULL;
00126 
00127     memset( output, 0, len );
00128 
00129     return( 0 );
00130 }
00131 
00132 typedef struct
00133 {
00134     unsigned char *buf;
00135     size_t length;
00136 } rnd_buf_info;
00137 
00149 static int rnd_buffer_rand( void *rng_state, unsigned char *output, size_t len )
00150 {
00151     rnd_buf_info *info = (rnd_buf_info *) rng_state;
00152     size_t use_len;
00153 
00154     if( rng_state == NULL )
00155         return( rnd_std_rand( NULL, output, len ) );
00156 
00157     use_len = len;
00158     if( len > info->length )
00159         use_len = info->length;
00160 
00161     if( use_len )
00162     {
00163         memcpy( output, info->buf, use_len );
00164         info->buf += use_len;
00165         info->length -= use_len;
00166     }
00167 
00168     if( len - use_len > 0 )
00169         return( rnd_std_rand( NULL, output + use_len, len - use_len ) );
00170 
00171     return( 0 );
00172 }
00173 
00181 typedef struct
00182 {
00183     uint32_t key[16];
00184     uint32_t v0, v1;
00185 } rnd_pseudo_info;
00186 
00195 static int rnd_pseudo_rand( void *rng_state, unsigned char *output, size_t len )
00196 {
00197     rnd_pseudo_info *info = (rnd_pseudo_info *) rng_state;
00198     uint32_t i, *k, sum, delta=0x9E3779B9;
00199     unsigned char result[4];
00200 
00201     if( rng_state == NULL )
00202         return( rnd_std_rand( NULL, output, len ) );
00203 
00204     k = info->key;
00205 
00206     while( len > 0 )
00207     {
00208         size_t use_len = ( len > 4 ) ? 4 : len;
00209         sum = 0;
00210 
00211         for( i = 0; i < 32; i++ )
00212         {
00213             info->v0 += (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]);
00214             sum += delta;
00215             info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ (sum + k[(sum>>11) & 3]);
00216         }
00217 
00218         PUT_ULONG_BE( info->v0, result, 0 );
00219         memcpy( output, result, use_len );
00220         len -= use_len;
00221     }
00222 
00223     return( 0 );
00224 }
00225 
00226 
00227 FCT_BGN()
00228 {
00229 #ifdef POLARSSL_BIGNUM_C
00230 
00231 
00232     FCT_SUITE_BGN(test_suite_mpi)
00233     {
00234 
00235         FCT_TEST_BGN(base_test_mpi_read_write_string_1)
00236         {
00237             mpi X;
00238             char str[1000];
00239             size_t len = 100;
00240         
00241             mpi_init( &X );
00242         
00243             fct_chk( mpi_read_string( &X, 10, "128" ) == 0 );
00244             if( 0 == 0 )
00245             {
00246                 fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
00247                 if( 0 == 0 )
00248                 {
00249                     fct_chk( strcasecmp( str, "128" ) == 0 );
00250                 }
00251             }
00252         
00253             mpi_free( &X );
00254         }
00255         FCT_TEST_END();
00256 
00257 
00258         FCT_TEST_BGN(base_test_mpi_read_write_string_2)
00259         {
00260             mpi X;
00261             char str[1000];
00262             size_t len = 100;
00263         
00264             mpi_init( &X );
00265         
00266             fct_chk( mpi_read_string( &X, 10, "128" ) == 0 );
00267             if( 0 == 0 )
00268             {
00269                 fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
00270                 if( 0 == 0 )
00271                 {
00272                     fct_chk( strcasecmp( str, "80" ) == 0 );
00273                 }
00274             }
00275         
00276             mpi_free( &X );
00277         }
00278         FCT_TEST_END();
00279 
00280 
00281         FCT_TEST_BGN(base_test_mpi_read_write_string_3_read_zero)
00282         {
00283             mpi X;
00284             char str[1000];
00285             size_t len = 100;
00286         
00287             mpi_init( &X );
00288         
00289             fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
00290             if( 0 == 0 )
00291             {
00292                 fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
00293                 if( 0 == 0 )
00294                 {
00295                     fct_chk( strcasecmp( str, "0" ) == 0 );
00296                 }
00297             }
00298         
00299             mpi_free( &X );
00300         }
00301         FCT_TEST_END();
00302 
00303 
00304         FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_decimal)
00305         {
00306             mpi X;
00307             char str[1000];
00308             size_t len = 100;
00309         
00310             mpi_init( &X );
00311         
00312             fct_chk( mpi_read_string( &X, 10, "-23" ) == 0 );
00313             if( 0 == 0 )
00314             {
00315                 fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
00316                 if( 0 == 0 )
00317                 {
00318                     fct_chk( strcasecmp( str, "-23" ) == 0 );
00319                 }
00320             }
00321         
00322             mpi_free( &X );
00323         }
00324         FCT_TEST_END();
00325 
00326 
00327         FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_hex)
00328         {
00329             mpi X;
00330             char str[1000];
00331             size_t len = 100;
00332         
00333             mpi_init( &X );
00334         
00335             fct_chk( mpi_read_string( &X, 16, "-20" ) == 0 );
00336             if( 0 == 0 )
00337             {
00338                 fct_chk( mpi_write_string( &X, 10, str, &len ) == 0 );
00339                 if( 0 == 0 )
00340                 {
00341                     fct_chk( strcasecmp( str, "-32" ) == 0 );
00342                 }
00343             }
00344         
00345             mpi_free( &X );
00346         }
00347         FCT_TEST_END();
00348 
00349 
00350         FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_decimal)
00351         {
00352             mpi X;
00353             char str[1000];
00354             size_t len = 100;
00355         
00356             mpi_init( &X );
00357         
00358             fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
00359             if( 0 == 0 )
00360             {
00361                 fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
00362                 if( 0 == 0 )
00363                 {
00364                     fct_chk( strcasecmp( str, "-23" ) == 0 );
00365                 }
00366             }
00367         
00368             mpi_free( &X );
00369         }
00370         FCT_TEST_END();
00371 
00372 
00373         FCT_TEST_BGN(test_mpi_read_write_string_1_invalid_character)
00374         {
00375             mpi X;
00376             char str[1000];
00377             size_t len = 100;
00378         
00379             mpi_init( &X );
00380         
00381             fct_chk( mpi_read_string( &X, 10, "a28" ) == POLARSSL_ERR_MPI_INVALID_CHARACTER );
00382             if( POLARSSL_ERR_MPI_INVALID_CHARACTER == 0 )
00383             {
00384                 fct_chk( mpi_write_string( &X, 0, str, &len ) == 0 );
00385                 if( 0 == 0 )
00386                 {
00387                     fct_chk( strcasecmp( str, "" ) == 0 );
00388                 }
00389             }
00390         
00391             mpi_free( &X );
00392         }
00393         FCT_TEST_END();
00394 
00395 
00396         FCT_TEST_BGN(test_mpi_read_write_string_2_illegal_input_radix)
00397         {
00398             mpi X;
00399             char str[1000];
00400             size_t len = 100;
00401         
00402             mpi_init( &X );
00403         
00404             fct_chk( mpi_read_string( &X, 19, "a28" ) == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
00405             if( POLARSSL_ERR_MPI_BAD_INPUT_DATA == 0 )
00406             {
00407                 fct_chk( mpi_write_string( &X, 0, str, &len ) == 0 );
00408                 if( 0 == 0 )
00409                 {
00410                     fct_chk( strcasecmp( str, "" ) == 0 );
00411                 }
00412             }
00413         
00414             mpi_free( &X );
00415         }
00416         FCT_TEST_END();
00417 
00418 
00419         FCT_TEST_BGN(test_mpi_read_write_string_3_buffer_just_fits)
00420         {
00421             mpi X;
00422             char str[1000];
00423             size_t len = 4;
00424         
00425             mpi_init( &X );
00426         
00427             fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
00428             if( 0 == 0 )
00429             {
00430                 fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
00431                 if( 0 == 0 )
00432                 {
00433                     fct_chk( strcasecmp( str, "-23" ) == 0 );
00434                 }
00435             }
00436         
00437             mpi_free( &X );
00438         }
00439         FCT_TEST_END();
00440 
00441 
00442         FCT_TEST_BGN(test_mpi_read_write_string_4_buffer_too_small)
00443         {
00444             mpi X;
00445             char str[1000];
00446             size_t len = 3;
00447         
00448             mpi_init( &X );
00449         
00450             fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
00451             if( 0 == 0 )
00452             {
00453                 fct_chk( mpi_write_string( &X, 16, str, &len ) == POLARSSL_ERR_MPI_BUFFER_TOO_SMALL );
00454                 if( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL == 0 )
00455                 {
00456                     fct_chk( strcasecmp( str, "-23" ) == 0 );
00457                 }
00458             }
00459         
00460             mpi_free( &X );
00461         }
00462         FCT_TEST_END();
00463 
00464 
00465         FCT_TEST_BGN(test_mpi_read_write_string_5_illegal_output_radix)
00466         {
00467             mpi X;
00468             char str[1000];
00469             size_t len = 4;
00470         
00471             mpi_init( &X );
00472         
00473             fct_chk( mpi_read_string( &X, 16, "-23" ) == 0 );
00474             if( 0 == 0 )
00475             {
00476                 fct_chk( mpi_write_string( &X, 17, str, &len ) == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
00477                 if( POLARSSL_ERR_MPI_BAD_INPUT_DATA == 0 )
00478                 {
00479                     fct_chk( strcasecmp( str, "-23" ) == 0 );
00480                 }
00481             }
00482         
00483             mpi_free( &X );
00484         }
00485         FCT_TEST_END();
00486 
00487 
00488         FCT_TEST_BGN(test_mpi_read_write_string_6_output_radix_of_15)
00489         {
00490             mpi X;
00491             char str[1000];
00492             size_t len = 100;
00493         
00494             mpi_init( &X );
00495         
00496             fct_chk( mpi_read_string( &X, 10, "29" ) == 0 );
00497             if( 0 == 0 )
00498             {
00499                 fct_chk( mpi_write_string( &X, 15, str, &len ) == 0 );
00500                 if( 0 == 0 )
00501                 {
00502                     fct_chk( strcasecmp( str, "1e" ) == 0 );
00503                 }
00504             }
00505         
00506             mpi_free( &X );
00507         }
00508         FCT_TEST_END();
00509 
00510 
00511         FCT_TEST_BGN(test_mpi_read_write_string_7)
00512         {
00513             mpi X;
00514             char str[1000];
00515             size_t len = 200;
00516         
00517             mpi_init( &X );
00518         
00519             fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
00520             if( 0 == 0 )
00521             {
00522                 fct_chk( mpi_write_string( &X, 16, str, &len ) == 0 );
00523                 if( 0 == 0 )
00524                 {
00525                     fct_chk( strcasecmp( str, "0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" ) == 0 );
00526                 }
00527             }
00528         
00529             mpi_free( &X );
00530         }
00531         FCT_TEST_END();
00532 
00533 
00534         FCT_TEST_BGN(base_test_mpi_read_binary_1)
00535         {
00536             mpi X;
00537             unsigned char str[1000];
00538             unsigned char buf[1000];
00539             size_t len = 1000;
00540             size_t input_len;
00541         
00542             mpi_init( &X );
00543         
00544             input_len = unhexify( buf, "0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" );
00545         
00546             fct_chk( mpi_read_binary( &X, buf, input_len ) == 0 );
00547             fct_chk( mpi_write_string( &X, 10, (char *) str, &len ) == 0 );
00548             fct_chk( strcmp( (char *) str, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
00549         
00550             mpi_free( &X );
00551         }
00552         FCT_TEST_END();
00553 
00554 
00555         FCT_TEST_BGN(base_test_mpi_write_binary_1)
00556         {
00557             mpi X;
00558             unsigned char str[1000];
00559             unsigned char buf[1000];
00560             size_t buflen;
00561         
00562             memset( buf, 0x00, 1000 );
00563             memset( str, 0x00, 1000 );
00564         
00565             mpi_init( &X );
00566         
00567             fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
00568             
00569             buflen = mpi_size( &X );
00570             if( buflen > 200 )
00571                 buflen = 200;
00572         
00573             fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
00574             if( 0 == 0)
00575             {
00576                 hexify( str, buf, buflen );
00577         
00578                 fct_chk( strcasecmp( (char *) str, "0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" ) == 0 );
00579             }
00580         
00581             mpi_free( &X );
00582         }
00583         FCT_TEST_END();
00584 
00585 
00586         FCT_TEST_BGN(test_mpi_write_binary_1_buffer_just_fits)
00587         {
00588             mpi X;
00589             unsigned char str[1000];
00590             unsigned char buf[1000];
00591             size_t buflen;
00592         
00593             memset( buf, 0x00, 1000 );
00594             memset( str, 0x00, 1000 );
00595         
00596             mpi_init( &X );
00597         
00598             fct_chk( mpi_read_string( &X, 16, "123123123123123123123123123" ) == 0 );
00599             
00600             buflen = mpi_size( &X );
00601             if( buflen > 14 )
00602                 buflen = 14;
00603         
00604             fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
00605             if( 0 == 0)
00606             {
00607                 hexify( str, buf, buflen );
00608         
00609                 fct_chk( strcasecmp( (char *) str, "0123123123123123123123123123" ) == 0 );
00610             }
00611         
00612             mpi_free( &X );
00613         }
00614         FCT_TEST_END();
00615 
00616 
00617         FCT_TEST_BGN(test_mpi_write_binary_2_buffer_too_small)
00618         {
00619             mpi X;
00620             unsigned char str[1000];
00621             unsigned char buf[1000];
00622             size_t buflen;
00623         
00624             memset( buf, 0x00, 1000 );
00625             memset( str, 0x00, 1000 );
00626         
00627             mpi_init( &X );
00628         
00629             fct_chk( mpi_read_string( &X, 16, "123123123123123123123123123" ) == 0 );
00630             
00631             buflen = mpi_size( &X );
00632             if( buflen > 13 )
00633                 buflen = 13;
00634         
00635             fct_chk( mpi_write_binary( &X, buf, buflen ) == POLARSSL_ERR_MPI_BUFFER_TOO_SMALL );
00636             if( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL == 0)
00637             {
00638                 hexify( str, buf, buflen );
00639         
00640                 fct_chk( strcasecmp( (char *) str, "123123123123123123123123123" ) == 0 );
00641             }
00642         
00643             mpi_free( &X );
00644         }
00645         FCT_TEST_END();
00646 
00647 #ifdef POLARSSL_FS_IO
00648 
00649         FCT_TEST_BGN(base_test_mpi_read_file_1)
00650         {
00651             mpi X;
00652             unsigned char str[1000];
00653             unsigned char buf[1000];
00654             size_t buflen;
00655             FILE *file;
00656         
00657             memset( buf, 0x00, 1000 );
00658             memset( str, 0x00, 1000 );
00659         
00660             mpi_init( &X );
00661         
00662             file = fopen( "data_files/mpi_10", "r" );
00663             fct_chk( mpi_read_file( &X, 10, file ) == 0 );
00664             fclose(file);
00665         
00666             if( 0 == 0 )
00667             {
00668                 buflen = mpi_size( &X );
00669                 fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
00670         
00671                 hexify( str, buf, buflen );
00672         
00673                 fct_chk( strcasecmp( (char *) str, "01f55332c3a48b910f9942f6c914e58bef37a47ee45cb164a5b6b8d1006bf59a059c21449939ebebfdf517d2e1dbac88010d7b1f141e997bd6801ddaec9d05910f4f2de2b2c4d714e2c14a72fc7f17aa428d59c531627f09" ) == 0 );
00674             }
00675         
00676             mpi_free( &X );
00677         }
00678         FCT_TEST_END();
00679 #endif /* POLARSSL_FS_IO */
00680 
00681 #ifdef POLARSSL_FS_IO
00682 
00683         FCT_TEST_BGN(test_mpi_read_file_1_empty_file)
00684         {
00685             mpi X;
00686             unsigned char str[1000];
00687             unsigned char buf[1000];
00688             size_t buflen;
00689             FILE *file;
00690         
00691             memset( buf, 0x00, 1000 );
00692             memset( str, 0x00, 1000 );
00693         
00694             mpi_init( &X );
00695         
00696             file = fopen( "data_files/hash_file_4", "r" );
00697             fct_chk( mpi_read_file( &X, 10, file ) == POLARSSL_ERR_MPI_FILE_IO_ERROR );
00698             fclose(file);
00699         
00700             if( POLARSSL_ERR_MPI_FILE_IO_ERROR == 0 )
00701             {
00702                 buflen = mpi_size( &X );
00703                 fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
00704         
00705                 hexify( str, buf, buflen );
00706         
00707                 fct_chk( strcasecmp( (char *) str, "" ) == 0 );
00708             }
00709         
00710             mpi_free( &X );
00711         }
00712         FCT_TEST_END();
00713 #endif /* POLARSSL_FS_IO */
00714 
00715 #ifdef POLARSSL_FS_IO
00716 
00717         FCT_TEST_BGN(test_mpi_read_file_2_illegal_input)
00718         {
00719             mpi X;
00720             unsigned char str[1000];
00721             unsigned char buf[1000];
00722             size_t buflen;
00723             FILE *file;
00724         
00725             memset( buf, 0x00, 1000 );
00726             memset( str, 0x00, 1000 );
00727         
00728             mpi_init( &X );
00729         
00730             file = fopen( "data_files/hash_file_3", "r" );
00731             fct_chk( mpi_read_file( &X, 10, file ) == 0 );
00732             fclose(file);
00733         
00734             if( 0 == 0 )
00735             {
00736                 buflen = mpi_size( &X );
00737                 fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
00738         
00739                 hexify( str, buf, buflen );
00740         
00741                 fct_chk( strcasecmp( (char *) str, "" ) == 0 );
00742             }
00743         
00744             mpi_free( &X );
00745         }
00746         FCT_TEST_END();
00747 #endif /* POLARSSL_FS_IO */
00748 
00749 #ifdef POLARSSL_FS_IO
00750 
00751         FCT_TEST_BGN(test_mpi_read_file_3_input_too_big)
00752         {
00753             mpi X;
00754             unsigned char str[1000];
00755             unsigned char buf[1000];
00756             size_t buflen;
00757             FILE *file;
00758         
00759             memset( buf, 0x00, 1000 );
00760             memset( str, 0x00, 1000 );
00761         
00762             mpi_init( &X );
00763         
00764             file = fopen( "data_files/mpi_too_big", "r" );
00765             fct_chk( mpi_read_file( &X, 10, file ) == POLARSSL_ERR_MPI_BUFFER_TOO_SMALL );
00766             fclose(file);
00767         
00768             if( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL == 0 )
00769             {
00770                 buflen = mpi_size( &X );
00771                 fct_chk( mpi_write_binary( &X, buf, buflen ) == 0 );
00772         
00773                 hexify( str, buf, buflen );
00774         
00775                 fct_chk( strcasecmp( (char *) str, "" ) == 0 );
00776             }
00777         
00778             mpi_free( &X );
00779         }
00780         FCT_TEST_END();
00781 #endif /* POLARSSL_FS_IO */
00782 
00783 #ifdef POLARSSL_FS_IO
00784 
00785         FCT_TEST_BGN(base_test_mpi_write_file_1)
00786         {
00787             mpi X, Y;
00788             FILE *file_out, *file_in;
00789         
00790             mpi_init( &X ); mpi_init( &Y );
00791         
00792             fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
00793         
00794             file_out = fopen( "data_files/mpi_write", "w" );
00795             fct_chk( file_out != NULL );
00796             fct_chk( mpi_write_file( NULL, &X, 16, file_out ) == 0 );
00797             fclose(file_out);
00798         
00799             file_in = fopen( "data_files/mpi_write", "r" );
00800             fct_chk( file_in != NULL );
00801             fct_chk( mpi_read_file( &Y, 16, file_in ) == 0 );
00802             fclose(file_in);
00803         
00804             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
00805         
00806             mpi_free( &X ); mpi_free( &Y );
00807         }
00808         FCT_TEST_END();
00809 #endif /* POLARSSL_FS_IO */
00810 
00811 
00812         FCT_TEST_BGN(base_test_mpi_lsb_1)
00813         {
00814             mpi X;
00815             mpi_init( &X );
00816         
00817             fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
00818             fct_chk( mpi_lsb( &X ) == 2 );
00819         
00820             mpi_free( &X );
00821         }
00822         FCT_TEST_END();
00823 
00824 
00825         FCT_TEST_BGN(base_test_mpi_lsb_2)
00826         {
00827             mpi X;
00828             mpi_init( &X );
00829         
00830             fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
00831             fct_chk( mpi_lsb( &X ) == 3 );
00832         
00833             mpi_free( &X );
00834         }
00835         FCT_TEST_END();
00836 
00837 
00838         FCT_TEST_BGN(base_test_mpi_lsb_3)
00839         {
00840             mpi X;
00841             mpi_init( &X );
00842         
00843             fct_chk( mpi_read_string( &X, 16, "24" ) == 0 );
00844             fct_chk( mpi_lsb( &X ) == 2 );
00845         
00846             mpi_free( &X );
00847         }
00848         FCT_TEST_END();
00849 
00850 
00851         FCT_TEST_BGN(base_test_mpi_lsb_4)
00852         {
00853             mpi X;
00854             mpi_init( &X );
00855         
00856             fct_chk( mpi_read_string( &X, 16, "2000" ) == 0 );
00857             fct_chk( mpi_lsb( &X ) == 13 );
00858         
00859             mpi_free( &X );
00860         }
00861         FCT_TEST_END();
00862 
00863 
00864         FCT_TEST_BGN(base_test_mpi_msb_1)
00865         {
00866             mpi X;
00867             mpi_init( &X );
00868         
00869             fct_chk( mpi_read_string( &X, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
00870             fct_chk( mpi_msb( &X ) == 764 );
00871         
00872             mpi_free( &X );
00873         }
00874         FCT_TEST_END();
00875 
00876 
00877         FCT_TEST_BGN(base_test_mpi_msb_2)
00878         {
00879             mpi X;
00880             mpi_init( &X );
00881         
00882             fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
00883             fct_chk( mpi_msb( &X ) == 5 );
00884         
00885             mpi_free( &X );
00886         }
00887         FCT_TEST_END();
00888 
00889 
00890         FCT_TEST_BGN(base_test_mpi_msb_3)
00891         {
00892             mpi X;
00893             mpi_init( &X );
00894         
00895             fct_chk( mpi_read_string( &X, 10, "1" ) == 0 );
00896             fct_chk( mpi_msb( &X ) == 1 );
00897         
00898             mpi_free( &X );
00899         }
00900         FCT_TEST_END();
00901 
00902 
00903         FCT_TEST_BGN(base_test_mpi_msb_4)
00904         {
00905             mpi X;
00906             mpi_init( &X );
00907         
00908             fct_chk( mpi_read_string( &X, 10, "15" ) == 0 );
00909             fct_chk( mpi_msb( &X ) == 4 );
00910         
00911             mpi_free( &X );
00912         }
00913         FCT_TEST_END();
00914 
00915 
00916         FCT_TEST_BGN(base_test_mpi_msb_5)
00917         {
00918             mpi X;
00919             mpi_init( &X );
00920         
00921             fct_chk( mpi_read_string( &X, 10, "16" ) == 0 );
00922             fct_chk( mpi_msb( &X ) == 5 );
00923         
00924             mpi_free( &X );
00925         }
00926         FCT_TEST_END();
00927 
00928 
00929         FCT_TEST_BGN(base_test_mpi_msb_6)
00930         {
00931             mpi X;
00932             mpi_init( &X );
00933         
00934             fct_chk( mpi_read_string( &X, 10, "10" ) == 0 );
00935             fct_chk( mpi_msb( &X ) == 4 );
00936         
00937             mpi_free( &X );
00938         }
00939         FCT_TEST_END();
00940 
00941 
00942         FCT_TEST_BGN(base_test_mpi_msb_7)
00943         {
00944             mpi X;
00945             mpi_init( &X );
00946         
00947             fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
00948             fct_chk( mpi_msb( &X ) == 0 );
00949         
00950             mpi_free( &X );
00951         }
00952         FCT_TEST_END();
00953 
00954 
00955         FCT_TEST_BGN(base_test_mpi_cmp_int_1)
00956         {
00957             mpi X;
00958             mpi_init( &X  );
00959         
00960             fct_chk( mpi_lset( &X, 693 ) == 0);
00961             fct_chk( mpi_cmp_int( &X, 693 ) == 0);
00962         
00963             mpi_free( &X );
00964         }
00965         FCT_TEST_END();
00966 
00967 
00968         FCT_TEST_BGN(base_test_mpi_cmp_int_2)
00969         {
00970             mpi X;
00971             mpi_init( &X  );
00972         
00973             fct_chk( mpi_lset( &X, 693 ) == 0);
00974             fct_chk( mpi_cmp_int( &X, 692 ) == 1);
00975         
00976             mpi_free( &X );
00977         }
00978         FCT_TEST_END();
00979 
00980 
00981         FCT_TEST_BGN(base_test_mpi_cmp_int_3)
00982         {
00983             mpi X;
00984             mpi_init( &X  );
00985         
00986             fct_chk( mpi_lset( &X, 693 ) == 0);
00987             fct_chk( mpi_cmp_int( &X, 694 ) == -1);
00988         
00989             mpi_free( &X );
00990         }
00991         FCT_TEST_END();
00992 
00993 
00994         FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_1)
00995         {
00996             mpi X;
00997             mpi_init( &X  );
00998         
00999             fct_chk( mpi_lset( &X, -2 ) == 0);
01000             fct_chk( mpi_cmp_int( &X, -2 ) == 0);
01001         
01002             mpi_free( &X );
01003         }
01004         FCT_TEST_END();
01005 
01006 
01007         FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_2)
01008         {
01009             mpi X;
01010             mpi_init( &X  );
01011         
01012             fct_chk( mpi_lset( &X, -2 ) == 0);
01013             fct_chk( mpi_cmp_int( &X, -3 ) == 1);
01014         
01015             mpi_free( &X );
01016         }
01017         FCT_TEST_END();
01018 
01019 
01020         FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_3)
01021         {
01022             mpi X;
01023             mpi_init( &X  );
01024         
01025             fct_chk( mpi_lset( &X, -2 ) == 0);
01026             fct_chk( mpi_cmp_int( &X, -1 ) == -1);
01027         
01028             mpi_free( &X );
01029         }
01030         FCT_TEST_END();
01031 
01032 
01033         FCT_TEST_BGN(base_test_mpi_cmp_mpi_1)
01034         {
01035             mpi X, Y;
01036             mpi_init( &X ); mpi_init( &Y );
01037         
01038             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
01039             fct_chk( mpi_read_string( &Y, 10, "693" ) == 0 );
01040             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
01041         
01042             mpi_free( &X ); mpi_free( &Y );
01043         }
01044         FCT_TEST_END();
01045 
01046 
01047         FCT_TEST_BGN(base_test_mpi_cmp_mpi_2)
01048         {
01049             mpi X, Y;
01050             mpi_init( &X ); mpi_init( &Y );
01051         
01052             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
01053             fct_chk( mpi_read_string( &Y, 10, "692" ) == 0 );
01054             fct_chk( mpi_cmp_mpi( &X, &Y ) == 1 );
01055         
01056             mpi_free( &X ); mpi_free( &Y );
01057         }
01058         FCT_TEST_END();
01059 
01060 
01061         FCT_TEST_BGN(base_test_mpi_cmp_mpi_3)
01062         {
01063             mpi X, Y;
01064             mpi_init( &X ); mpi_init( &Y );
01065         
01066             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
01067             fct_chk( mpi_read_string( &Y, 10, "694" ) == 0 );
01068             fct_chk( mpi_cmp_mpi( &X, &Y ) == -1 );
01069         
01070             mpi_free( &X ); mpi_free( &Y );
01071         }
01072         FCT_TEST_END();
01073 
01074 
01075         FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_1)
01076         {
01077             mpi X, Y;
01078             mpi_init( &X ); mpi_init( &Y );
01079         
01080             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01081             fct_chk( mpi_read_string( &Y, 10, "-2" ) == 0 );
01082             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
01083         
01084             mpi_free( &X ); mpi_free( &Y );
01085         }
01086         FCT_TEST_END();
01087 
01088 
01089         FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_2)
01090         {
01091             mpi X, Y;
01092             mpi_init( &X ); mpi_init( &Y );
01093         
01094             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01095             fct_chk( mpi_read_string( &Y, 10, "-3" ) == 0 );
01096             fct_chk( mpi_cmp_mpi( &X, &Y ) == 1 );
01097         
01098             mpi_free( &X ); mpi_free( &Y );
01099         }
01100         FCT_TEST_END();
01101 
01102 
01103         FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_3)
01104         {
01105             mpi X, Y;
01106             mpi_init( &X ); mpi_init( &Y );
01107         
01108             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01109             fct_chk( mpi_read_string( &Y, 10, "-1" ) == 0 );
01110             fct_chk( mpi_cmp_mpi( &X, &Y ) == -1 );
01111         
01112             mpi_free( &X ); mpi_free( &Y );
01113         }
01114         FCT_TEST_END();
01115 
01116 
01117         FCT_TEST_BGN(base_test_mpi_cmp_abs_1)
01118         {
01119             mpi X, Y;
01120             mpi_init( &X ); mpi_init( &Y );
01121         
01122             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
01123             fct_chk( mpi_read_string( &Y, 10, "693" ) == 0 );
01124             fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
01125         
01126             mpi_free( &X ); mpi_free( &Y );
01127         }
01128         FCT_TEST_END();
01129 
01130 
01131         FCT_TEST_BGN(base_test_mpi_cmp_abs_2)
01132         {
01133             mpi X, Y;
01134             mpi_init( &X ); mpi_init( &Y );
01135         
01136             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
01137             fct_chk( mpi_read_string( &Y, 10, "692" ) == 0 );
01138             fct_chk( mpi_cmp_abs( &X, &Y ) == 1 );
01139         
01140             mpi_free( &X ); mpi_free( &Y );
01141         }
01142         FCT_TEST_END();
01143 
01144 
01145         FCT_TEST_BGN(base_test_mpi_cmp_abs_3)
01146         {
01147             mpi X, Y;
01148             mpi_init( &X ); mpi_init( &Y );
01149         
01150             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
01151             fct_chk( mpi_read_string( &Y, 10, "694" ) == 0 );
01152             fct_chk( mpi_cmp_abs( &X, &Y ) == -1 );
01153         
01154             mpi_free( &X ); mpi_free( &Y );
01155         }
01156         FCT_TEST_END();
01157 
01158 
01159         FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_1)
01160         {
01161             mpi X, Y;
01162             mpi_init( &X ); mpi_init( &Y );
01163         
01164             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01165             fct_chk( mpi_read_string( &Y, 10, "-2" ) == 0 );
01166             fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
01167         
01168             mpi_free( &X ); mpi_free( &Y );
01169         }
01170         FCT_TEST_END();
01171 
01172 
01173         FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_2)
01174         {
01175             mpi X, Y;
01176             mpi_init( &X ); mpi_init( &Y );
01177         
01178             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01179             fct_chk( mpi_read_string( &Y, 10, "-3" ) == 0 );
01180             fct_chk( mpi_cmp_abs( &X, &Y ) == -1 );
01181         
01182             mpi_free( &X ); mpi_free( &Y );
01183         }
01184         FCT_TEST_END();
01185 
01186 
01187         FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_3)
01188         {
01189             mpi X, Y;
01190             mpi_init( &X ); mpi_init( &Y );
01191         
01192             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01193             fct_chk( mpi_read_string( &Y, 10, "-1" ) == 0 );
01194             fct_chk( mpi_cmp_abs( &X, &Y ) == 1 );
01195         
01196             mpi_free( &X ); mpi_free( &Y );
01197         }
01198         FCT_TEST_END();
01199 
01200 
01201         FCT_TEST_BGN(base_test_mpi_cmp_abs_zero_and_zero_4)
01202         {
01203             mpi X, Y;
01204             mpi_init( &X ); mpi_init( &Y );
01205         
01206             fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
01207             fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
01208             fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
01209         
01210             mpi_free( &X ); mpi_free( &Y );
01211         }
01212         FCT_TEST_END();
01213 
01214 
01215         FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_1)
01216         {
01217             mpi X, Y;
01218             mpi_init( &X ); mpi_init( &Y );
01219         
01220             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01221             fct_chk( mpi_read_string( &Y, 10, "2" ) == 0 );
01222             fct_chk( mpi_cmp_abs( &X, &Y ) == 0 );
01223         
01224             mpi_free( &X ); mpi_free( &Y );
01225         }
01226         FCT_TEST_END();
01227 
01228 
01229         FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_2)
01230         {
01231             mpi X, Y;
01232             mpi_init( &X ); mpi_init( &Y );
01233         
01234             fct_chk( mpi_read_string( &X, 10, "2" ) == 0 );
01235             fct_chk( mpi_read_string( &Y, 10, "-3" ) == 0 );
01236             fct_chk( mpi_cmp_abs( &X, &Y ) == -1 );
01237         
01238             mpi_free( &X ); mpi_free( &Y );
01239         }
01240         FCT_TEST_END();
01241 
01242 
01243         FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_3)
01244         {
01245             mpi X, Y;
01246             mpi_init( &X ); mpi_init( &Y );
01247         
01248             fct_chk( mpi_read_string( &X, 10, "-2" ) == 0 );
01249             fct_chk( mpi_read_string( &Y, 10, "1" ) == 0 );
01250             fct_chk( mpi_cmp_abs( &X, &Y ) == 1 );
01251         
01252             mpi_free( &X ); mpi_free( &Y );
01253         }
01254         FCT_TEST_END();
01255 
01256 
01257         FCT_TEST_BGN(base_test_mpi_copy_1)
01258         {
01259             mpi X, Y, A;
01260             mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
01261         
01262             fct_chk( mpi_lset( &X, 0 ) == 0 );
01263             fct_chk( mpi_lset( &Y, 1500 ) == 0 );
01264             fct_chk( mpi_lset( &A, 1500 ) == 0 );
01265             fct_chk( mpi_cmp_mpi( &X, &Y ) != 0 );
01266             fct_chk( mpi_cmp_mpi( &Y, &A ) == 0 );
01267             fct_chk( mpi_copy( &Y, &X ) == 0 );
01268             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
01269             fct_chk( mpi_cmp_mpi( &Y, &A ) != 0 );
01270         
01271             mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
01272         }
01273         FCT_TEST_END();
01274 
01275 
01276         FCT_TEST_BGN(base_test_mpi_copy_self_1)
01277         {
01278             mpi X;
01279             mpi_init( &X );
01280         
01281             fct_chk( mpi_lset( &X, 14 ) == 0 );
01282             fct_chk( mpi_copy( &X, &X ) == 0 );
01283             fct_chk( mpi_cmp_int( &X, 14 ) == 0 );
01284         
01285             mpi_free( &X );
01286         }
01287         FCT_TEST_END();
01288 
01289 
01290         FCT_TEST_BGN(base_test_mpi_swap_1)
01291         {
01292             mpi X, Y, A;
01293             mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
01294         
01295             fct_chk( mpi_lset( &X, 0 ) == 0 );
01296             fct_chk( mpi_lset( &Y, 1500 ) == 0 );
01297             fct_chk( mpi_lset( &A, 0 ) == 0 );
01298             fct_chk( mpi_cmp_mpi( &X, &Y ) != 0 );
01299             fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
01300             mpi_swap( &X, &Y );
01301             fct_chk( mpi_cmp_mpi( &X, &Y ) != 0 );
01302             fct_chk( mpi_cmp_mpi( &Y, &A ) == 0 );
01303         
01304             mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
01305         }
01306         FCT_TEST_END();
01307 
01308 
01309         FCT_TEST_BGN(base_test_mpi_add_abs_1)
01310         {
01311             mpi X, Y, Z, A;
01312             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01313         
01314             fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
01315             fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
01316             fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
01317             fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
01318             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01319         
01320             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01321         }
01322         FCT_TEST_END();
01323 
01324 
01325         FCT_TEST_BGN(base_test_mpi_add_abs_2)
01326         {
01327             mpi X, Y, Z, A;
01328             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01329         
01330             fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
01331             fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
01332             fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
01333             fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
01334             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01335         
01336             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01337         }
01338         FCT_TEST_END();
01339 
01340 
01341         FCT_TEST_BGN(base_test_mpi_add_abs_3)
01342         {
01343             mpi X, Y, Z, A;
01344             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01345         
01346             fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
01347             fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
01348             fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
01349             fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
01350             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01351         
01352             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01353         }
01354         FCT_TEST_END();
01355 
01356 
01357         FCT_TEST_BGN(base_test_mpi_add_abs_4)
01358         {
01359             mpi X, Y, Z, A;
01360             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01361         
01362             fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
01363             fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
01364             fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
01365             fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
01366             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01367         
01368             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01369         }
01370         FCT_TEST_END();
01371 
01372 
01373         FCT_TEST_BGN(test_mpi_add_abs_1)
01374         {
01375             mpi X, Y, Z, A;
01376             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01377         
01378             fct_chk( mpi_read_string( &X, 10, "-643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
01379             fct_chk( mpi_read_string( &Y, 10, "56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
01380             fct_chk( mpi_read_string( &A, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
01381             fct_chk( mpi_add_abs( &Z, &X, &Y ) == 0 );
01382             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01383         
01384             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01385         }
01386         FCT_TEST_END();
01387 
01388 
01389         FCT_TEST_BGN(test_mpi_add_abs_2_add_to_first_value)
01390         {
01391             mpi X, Y, A;
01392             mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
01393         
01394             fct_chk( mpi_read_string( &X, 10, "123123" ) == 0 );
01395             fct_chk( mpi_read_string( &Y, 10, "123123" ) == 0 );
01396             fct_chk( mpi_read_string( &A, 10, "246246" ) == 0 );
01397             fct_chk( mpi_add_abs( &X, &X, &Y ) == 0 );
01398             fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
01399         
01400             mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
01401         }
01402         FCT_TEST_END();
01403 
01404 
01405         FCT_TEST_BGN(test_mpi_add_abs_3_add_to_second_value)
01406         {
01407             mpi X, Y, A;
01408             mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
01409         
01410             fct_chk( mpi_read_string( &X, 10, "123123" ) == 0 );
01411             fct_chk( mpi_read_string( &Y, 10, "123123" ) == 0 );
01412             fct_chk( mpi_read_string( &A, 10, "246246" ) == 0 );
01413             fct_chk( mpi_add_abs( &Y, &X, &Y ) == 0 );
01414             fct_chk( mpi_cmp_mpi( &Y, &A ) == 0 );
01415         
01416             mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
01417         }
01418         FCT_TEST_END();
01419 
01420 
01421         FCT_TEST_BGN(base_test_mpi_add_mpi_1)
01422         {
01423             mpi X, Y, Z, A;
01424             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01425         
01426             fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
01427             fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
01428             fct_chk( mpi_read_string( &A, 10, "12988209" ) == 0 );
01429             fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
01430             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01431         
01432             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01433         }
01434         FCT_TEST_END();
01435 
01436 
01437         FCT_TEST_BGN(base_test_mpi_add_mpi_2)
01438         {
01439             mpi X, Y, Z, A;
01440             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01441         
01442             fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
01443             fct_chk( mpi_read_string( &Y, 10, "642531" ) == 0 );
01444             fct_chk( mpi_read_string( &A, 10, "-11703147" ) == 0 );
01445             fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
01446             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01447         
01448             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01449         }
01450         FCT_TEST_END();
01451 
01452 
01453         FCT_TEST_BGN(base_test_mpi_add_mpi_3)
01454         {
01455             mpi X, Y, Z, A;
01456             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01457         
01458             fct_chk( mpi_read_string( &X, 10, "12345678" ) == 0 );
01459             fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
01460             fct_chk( mpi_read_string( &A, 10, "11703147" ) == 0 );
01461             fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
01462             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01463         
01464             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01465         }
01466         FCT_TEST_END();
01467 
01468 
01469         FCT_TEST_BGN(base_test_mpi_add_mpi_4)
01470         {
01471             mpi X, Y, Z, A;
01472             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01473         
01474             fct_chk( mpi_read_string( &X, 10, "-12345678" ) == 0 );
01475             fct_chk( mpi_read_string( &Y, 10, "-642531" ) == 0 );
01476             fct_chk( mpi_read_string( &A, 10, "-12988209" ) == 0 );
01477             fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
01478             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01479         
01480             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01481         }
01482         FCT_TEST_END();
01483 
01484 
01485         FCT_TEST_BGN(test_mpi_add_mpi_1)
01486         {
01487             mpi X, Y, Z, A;
01488             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01489         
01490             fct_chk( mpi_read_string( &X, 10, "203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
01491             fct_chk( mpi_read_string( &Y, 10, "531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
01492             fct_chk( mpi_read_string( &A, 10, "735829167410606161590850601304167976688497607296479119740072111384235241328747126510065763883532084601487937110881909725679916932621242907172467691556475037071866553361927361439411910627880345885122142692610250903804554267860479115964668998643528806263534149325837971432443181537363155848647445226342" ) == 0 );
01493             fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
01494             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01495         
01496             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01497         }
01498         FCT_TEST_END();
01499 
01500 
01501         FCT_TEST_BGN(test_mpi_add_mpi_2)
01502         {
01503             mpi X, Y, Z, A;
01504             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01505         
01506             fct_chk( mpi_read_string( &X, 10, "643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
01507             fct_chk( mpi_read_string( &Y, 10, "56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
01508             fct_chk( mpi_read_string( &A, 10, "56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
01509             fct_chk( mpi_add_mpi( &Z, &X, &Y ) == 0 );
01510             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01511         
01512             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01513         }
01514         FCT_TEST_END();
01515 
01516 
01517         FCT_TEST_BGN(test_mpi_add_int_1)
01518         {
01519             mpi X, Z, A;
01520             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
01521         
01522             fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
01523             fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" ) == 0 );
01524             fct_chk( mpi_add_int( &Z, &X, 9871232 ) == 0 );
01525             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01526         
01527             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
01528         }
01529         FCT_TEST_END();
01530 
01531 
01532         FCT_TEST_BGN(test_mpi_add_int_2)
01533         {
01534             mpi X, Z, A;
01535             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
01536         
01537             fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
01538             fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" ) == 0 );
01539             fct_chk( mpi_add_int( &Z, &X, -9871232 ) == 0 );
01540             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01541         
01542             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
01543         }
01544         FCT_TEST_END();
01545 
01546 
01547         FCT_TEST_BGN(base_test_mpi_sub_abs_1_test_with_larger_second_input)
01548         {
01549             mpi X, Y, Z, A;
01550             int res;
01551             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01552         
01553             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
01554             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
01555             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
01556             
01557             res = mpi_sub_abs( &Z, &X, &Y );
01558             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
01559             if( res == 0 )
01560                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01561         
01562             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01563         }
01564         FCT_TEST_END();
01565 
01566 
01567         FCT_TEST_BGN(base_test_mpi_sub_abs_2_test_with_larger_second_input)
01568         {
01569             mpi X, Y, Z, A;
01570             int res;
01571             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01572         
01573             fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
01574             fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
01575             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
01576             
01577             res = mpi_sub_abs( &Z, &X, &Y );
01578             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
01579             if( res == 0 )
01580                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01581         
01582             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01583         }
01584         FCT_TEST_END();
01585 
01586 
01587         FCT_TEST_BGN(base_test_mpi_sub_abs_3_test_with_larger_second_input)
01588         {
01589             mpi X, Y, Z, A;
01590             int res;
01591             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01592         
01593             fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
01594             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
01595             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
01596             
01597             res = mpi_sub_abs( &Z, &X, &Y );
01598             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
01599             if( res == 0 )
01600                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01601         
01602             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01603         }
01604         FCT_TEST_END();
01605 
01606 
01607         FCT_TEST_BGN(base_test_mpi_sub_abs_4_test_with_larger_second_input)
01608         {
01609             mpi X, Y, Z, A;
01610             int res;
01611             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01612         
01613             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
01614             fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
01615             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
01616             
01617             res = mpi_sub_abs( &Z, &X, &Y );
01618             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
01619             if( res == 0 )
01620                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01621         
01622             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01623         }
01624         FCT_TEST_END();
01625 
01626 
01627         FCT_TEST_BGN(base_test_mpi_sub_abs_1)
01628         {
01629             mpi X, Y, Z, A;
01630             int res;
01631             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01632         
01633             fct_chk( mpi_read_string( &X, 10, "7" ) == 0 );
01634             fct_chk( mpi_read_string( &Y, 10, "5" ) == 0 );
01635             fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
01636             
01637             res = mpi_sub_abs( &Z, &X, &Y );
01638             fct_chk( res == 0 );
01639             if( res == 0 )
01640                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01641         
01642             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01643         }
01644         FCT_TEST_END();
01645 
01646 
01647         FCT_TEST_BGN(base_test_mpi_sub_abs_2)
01648         {
01649             mpi X, Y, Z, A;
01650             int res;
01651             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01652         
01653             fct_chk( mpi_read_string( &X, 10, "-7" ) == 0 );
01654             fct_chk( mpi_read_string( &Y, 10, "-5" ) == 0 );
01655             fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
01656             
01657             res = mpi_sub_abs( &Z, &X, &Y );
01658             fct_chk( res == 0 );
01659             if( res == 0 )
01660                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01661         
01662             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01663         }
01664         FCT_TEST_END();
01665 
01666 
01667         FCT_TEST_BGN(base_test_mpi_sub_abs_3)
01668         {
01669             mpi X, Y, Z, A;
01670             int res;
01671             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01672         
01673             fct_chk( mpi_read_string( &X, 10, "-7" ) == 0 );
01674             fct_chk( mpi_read_string( &Y, 10, "5" ) == 0 );
01675             fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
01676             
01677             res = mpi_sub_abs( &Z, &X, &Y );
01678             fct_chk( res == 0 );
01679             if( res == 0 )
01680                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01681         
01682             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01683         }
01684         FCT_TEST_END();
01685 
01686 
01687         FCT_TEST_BGN(base_test_mpi_sub_abs_4)
01688         {
01689             mpi X, Y, Z, A;
01690             int res;
01691             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01692         
01693             fct_chk( mpi_read_string( &X, 10, "7" ) == 0 );
01694             fct_chk( mpi_read_string( &Y, 10, "-5" ) == 0 );
01695             fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
01696             
01697             res = mpi_sub_abs( &Z, &X, &Y );
01698             fct_chk( res == 0 );
01699             if( res == 0 )
01700                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01701         
01702             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01703         }
01704         FCT_TEST_END();
01705 
01706 
01707         FCT_TEST_BGN(test_mpi_sub_abs_1)
01708         {
01709             mpi X, Y, Z, A;
01710             int res;
01711             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01712         
01713             fct_chk( mpi_read_string( &X, 16, "FFFFFFFFFF" ) == 0 );
01714             fct_chk( mpi_read_string( &Y, 16, "01" ) == 0 );
01715             fct_chk( mpi_read_string( &A, 16, "FFFFFFFFFE" ) == 0 );
01716             
01717             res = mpi_sub_abs( &Z, &X, &Y );
01718             fct_chk( res == 0 );
01719             if( res == 0 )
01720                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01721         
01722             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01723         }
01724         FCT_TEST_END();
01725 
01726 
01727         FCT_TEST_BGN(test_mpi_sub_abs_2)
01728         {
01729             mpi X, Y, Z, A;
01730             int res;
01731             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01732         
01733             fct_chk( mpi_read_string( &X, 16, "FFFFFFFFF0" ) == 0 );
01734             fct_chk( mpi_read_string( &Y, 16, "01" ) == 0 );
01735             fct_chk( mpi_read_string( &A, 16, "FFFFFFFFEF" ) == 0 );
01736             
01737             res = mpi_sub_abs( &Z, &X, &Y );
01738             fct_chk( res == 0 );
01739             if( res == 0 )
01740                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01741         
01742             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01743         }
01744         FCT_TEST_END();
01745 
01746 
01747         FCT_TEST_BGN(test_mpi_sub_abs_3)
01748         {
01749             mpi X, Y, Z, A;
01750             int res;
01751             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01752         
01753             fct_chk( mpi_read_string( &X, 16, "FF00000000" ) == 0 );
01754             fct_chk( mpi_read_string( &Y, 16, "0F00000000" ) == 0 );
01755             fct_chk( mpi_read_string( &A, 16, "F000000000" ) == 0 );
01756             
01757             res = mpi_sub_abs( &Z, &X, &Y );
01758             fct_chk( res == 0 );
01759             if( res == 0 )
01760                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01761         
01762             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01763         }
01764         FCT_TEST_END();
01765 
01766 
01767         FCT_TEST_BGN(test_mpi_sub_abs_4)
01768         {
01769             mpi X, Y, Z, A;
01770             int res;
01771             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01772         
01773             fct_chk( mpi_read_string( &X, 16, "FF00000000" ) == 0 );
01774             fct_chk( mpi_read_string( &Y, 16, "0F00000001" ) == 0 );
01775             fct_chk( mpi_read_string( &A, 16, "EFFFFFFFFF" ) == 0 );
01776             
01777             res = mpi_sub_abs( &Z, &X, &Y );
01778             fct_chk( res == 0 );
01779             if( res == 0 )
01780                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01781         
01782             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01783         }
01784         FCT_TEST_END();
01785 
01786 
01787         FCT_TEST_BGN(base_test_mpi_sub_mpi_1_test_with_negative_result)
01788         {
01789             mpi X, Y, Z, A;
01790             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01791         
01792             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
01793             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
01794             fct_chk( mpi_read_string( &A, 10, "-2" ) == 0 );
01795             fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
01796             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01797         
01798             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01799         }
01800         FCT_TEST_END();
01801 
01802 
01803         FCT_TEST_BGN(base_test_mpi_sub_mpi_2_test_with_negative_inputs)
01804         {
01805             mpi X, Y, Z, A;
01806             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01807         
01808             fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
01809             fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
01810             fct_chk( mpi_read_string( &A, 10, "2" ) == 0 );
01811             fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
01812             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01813         
01814             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01815         }
01816         FCT_TEST_END();
01817 
01818 
01819         FCT_TEST_BGN(base_test_mpi_sub_mpi_3_test_with_negative_base)
01820         {
01821             mpi X, Y, Z, A;
01822             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01823         
01824             fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
01825             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
01826             fct_chk( mpi_read_string( &A, 10, "-12" ) == 0 );
01827             fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
01828             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01829         
01830             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01831         }
01832         FCT_TEST_END();
01833 
01834 
01835         FCT_TEST_BGN(base_test_mpi_sub_mpi_4_test_with_negative_substraction)
01836         {
01837             mpi X, Y, Z, A;
01838             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01839         
01840             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
01841             fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
01842             fct_chk( mpi_read_string( &A, 10, "12" ) == 0 );
01843             fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
01844             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01845         
01846             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01847         }
01848         FCT_TEST_END();
01849 
01850 
01851         FCT_TEST_BGN(test_mpi_sub_mpi_1)
01852         {
01853             mpi X, Y, Z, A;
01854             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01855         
01856             fct_chk( mpi_read_string( &X, 10, "531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
01857             fct_chk( mpi_read_string( &Y, 10, "203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
01858             fct_chk( mpi_read_string( &A, 10, "327915410697802206779318867446098822128109620667782593550526818477669115883344571244192531757243908254863191345527661966602498132304629772495811133247475640339722739829047287290977675016498600299425844468565678239514801901107826091797519355347660820341034314686165532823894621049756947818646317646096" ) == 0 );
01859             fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
01860             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01861         
01862             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01863         }
01864         FCT_TEST_END();
01865 
01866 
01867         FCT_TEST_BGN(test_mpi_sub_mpi_2_test_for_negative_result)
01868         {
01869             mpi X, Y, Z, A;
01870             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01871         
01872             fct_chk( mpi_read_string( &X, 10, "643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
01873             fct_chk( mpi_read_string( &Y, 10, "56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
01874             fct_chk( mpi_read_string( &A, 10, "-56125680981752282332854280306765380612153703983633407122513245677043323738275550803657221789827307780393959397039813808626161066208794210143732806809073537503708671504303382290292211925255014779394363592722015507193385383534937618" ) == 0 );
01875             fct_chk( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
01876             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01877         
01878             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01879         }
01880         FCT_TEST_END();
01881 
01882 
01883         FCT_TEST_BGN(test_mpi_sub_int_1)
01884         {
01885             mpi X, Z, A;
01886             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
01887         
01888             fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
01889             fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" ) == 0 );
01890             fct_chk( mpi_sub_int( &Z, &X, -9871232 ) == 0 );
01891             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01892         
01893             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
01894         }
01895         FCT_TEST_END();
01896 
01897 
01898         FCT_TEST_BGN(test_mpi_sub_int_2)
01899         {
01900             mpi X, Z, A;
01901             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
01902         
01903             fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
01904             fct_chk( mpi_read_string( &A, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" ) == 0 );
01905             fct_chk( mpi_sub_int( &Z, &X, 9871232 ) == 0 );
01906             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01907         
01908             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
01909         }
01910         FCT_TEST_END();
01911 
01912 
01913         FCT_TEST_BGN(test_mpi_shift_l_1)
01914         {
01915             mpi X, A;
01916             mpi_init( &X ); mpi_init( &A );
01917         
01918             fct_chk( mpi_read_string( &X, 10, "64" ) == 0 );
01919             fct_chk( mpi_read_string( &A, 10, "128" ) == 0 );
01920             fct_chk( mpi_shift_l( &X, 1 ) == 0 );
01921             fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
01922         
01923             mpi_free( &X ); mpi_free( &A );
01924         }
01925         FCT_TEST_END();
01926 
01927 
01928         FCT_TEST_BGN(test_mpi_shift_l_2)
01929         {
01930             mpi X, A;
01931             mpi_init( &X ); mpi_init( &A );
01932         
01933             fct_chk( mpi_read_string( &X, 10, "658385546911733550164516088405238961461880256029834598831972039469421755117818013653494814438931957316403111689187691446941406788869098983929874080332195117465344344350008880118042764943201875870917468833709791733282363323948005998269792207" ) == 0 );
01934             fct_chk( mpi_read_string( &A, 10, "90487820548639020691922304619723076305400961610119884872723190678642804168382367856686134531865643066983017249846286450251272364365605022750900439437595355052945035915579216557330505438734955340526145476988250171181404966718289259743378883640981192704" ) == 0 );
01935             fct_chk( mpi_shift_l( &X, 37 ) == 0 );
01936             fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
01937         
01938             mpi_free( &X ); mpi_free( &A );
01939         }
01940         FCT_TEST_END();
01941 
01942 
01943         FCT_TEST_BGN(test_mpi_shift_r_1)
01944         {
01945             mpi X, A;
01946             mpi_init( &X ); mpi_init( &A );
01947         
01948             fct_chk( mpi_read_string( &X, 10, "128" ) == 0 );
01949             fct_chk( mpi_read_string( &A, 10, "64" ) == 0 );
01950             fct_chk( mpi_shift_r( &X, 1 ) == 0 );
01951             fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
01952         
01953             mpi_free( &X ); mpi_free( &A );
01954         }
01955         FCT_TEST_END();
01956 
01957 
01958         FCT_TEST_BGN(test_mpi_shift_r_2)
01959         {
01960             mpi X, A;
01961             mpi_init( &X ); mpi_init( &A );
01962         
01963             fct_chk( mpi_read_string( &X, 10, "120815570979701484704906977000760567182871429114712069861589084706550626575967516787438008593490722779337547394120718248995900363209947025063336882559539208430319216688889117222633155838468458047056355241515415159736436403445579777425189969" ) == 0 );
01964             fct_chk( mpi_read_string( &A, 10, "3433785053053426415343295076376096153094051405637175942660777670498379921354157795219578264137985649407981651226029903483433269093721578004287291678324982297860947730012217028349628999378309630601971640587504883789518896817457" ) == 0 );
01965             fct_chk( mpi_shift_r( &X, 45 ) == 0 );
01966             fct_chk( mpi_cmp_mpi( &X, &A ) == 0 );
01967         
01968             mpi_free( &X ); mpi_free( &A );
01969         }
01970         FCT_TEST_END();
01971 
01972 
01973         FCT_TEST_BGN(base_test_mpi_mul_mpi_1)
01974         {
01975             mpi X, Y, Z, A;
01976             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01977         
01978             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
01979             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
01980             fct_chk( mpi_read_string( &A, 10, "35" ) == 0 );
01981             fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
01982             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01983         
01984             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
01985         }
01986         FCT_TEST_END();
01987 
01988 
01989         FCT_TEST_BGN(base_test_mpi_mul_mpi_2)
01990         {
01991             mpi X, Y, Z, A;
01992             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
01993         
01994             fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
01995             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
01996             fct_chk( mpi_read_string( &A, 10, "-35" ) == 0 );
01997             fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
01998             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
01999         
02000             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02001         }
02002         FCT_TEST_END();
02003 
02004 
02005         FCT_TEST_BGN(base_test_mpi_mul_mpi_3)
02006         {
02007             mpi X, Y, Z, A;
02008             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02009         
02010             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
02011             fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
02012             fct_chk( mpi_read_string( &A, 10, "-35" ) == 0 );
02013             fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
02014             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02015         
02016             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02017         }
02018         FCT_TEST_END();
02019 
02020 
02021         FCT_TEST_BGN(base_test_mpi_mul_mpi_4)
02022         {
02023             mpi X, Y, Z, A;
02024             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02025         
02026             fct_chk( mpi_read_string( &X, 10, "-5" ) == 0 );
02027             fct_chk( mpi_read_string( &Y, 10, "-7" ) == 0 );
02028             fct_chk( mpi_read_string( &A, 10, "35" ) == 0 );
02029             fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
02030             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02031         
02032             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02033         }
02034         FCT_TEST_END();
02035 
02036 
02037         FCT_TEST_BGN(test_mpi_mul_mpi_1)
02038         {
02039             mpi X, Y, Z, A;
02040             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02041         
02042             fct_chk( mpi_read_string( &X, 10, "28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537" ) == 0 );
02043             fct_chk( mpi_read_string( &Y, 10, "16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953" ) == 0 );
02044             fct_chk( mpi_read_string( &A, 10, "476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188761" ) == 0 );
02045             fct_chk( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
02046             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02047         
02048             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02049         }
02050         FCT_TEST_END();
02051 
02052 
02053         FCT_TEST_BGN(test_mpi_mul_int_1)
02054         {
02055             mpi X, Z, A;
02056             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
02057         
02058             fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
02059             fct_chk( mpi_read_string( &A, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02060             fct_chk( mpi_mul_int( &Z, &X, 9871232 ) == 0 );
02061             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02062         
02063             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
02064         }
02065         FCT_TEST_END();
02066 
02067 
02068         FCT_TEST_BGN(test_mpi_mul_int_2_unsigned_thus_failure)
02069         {
02070             mpi X, Z, A;
02071             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
02072         
02073             fct_chk( mpi_read_string( &X, 10, "2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
02074             fct_chk( mpi_read_string( &A, 10, "-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02075             fct_chk( mpi_mul_int( &Z, &X, -9871232 ) == 0 );
02076             fct_chk( mpi_cmp_mpi( &Z, &A ) != 0 );
02077         
02078             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
02079         }
02080         FCT_TEST_END();
02081 
02082 
02083         FCT_TEST_BGN(test_mpi_mul_int_3)
02084         {
02085             mpi X, Z, A;
02086             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
02087         
02088             fct_chk( mpi_read_string( &X, 10, "-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
02089             fct_chk( mpi_read_string( &A, 10, "-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02090             fct_chk( mpi_mul_int( &Z, &X, 9871232 ) == 0 );
02091             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02092         
02093             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
02094         }
02095         FCT_TEST_END();
02096 
02097 
02098         FCT_TEST_BGN(test_mpi_mul_int_4_unsigned_thus_failure)
02099         {
02100             mpi X, Z, A;
02101             mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
02102         
02103             fct_chk( mpi_read_string( &X, 10, "-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
02104             fct_chk( mpi_read_string( &A, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02105             fct_chk( mpi_mul_int( &Z, &X, -9871232 ) == 0 );
02106             fct_chk( mpi_cmp_mpi( &Z, &A ) != 0 );
02107         
02108             mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
02109         }
02110         FCT_TEST_END();
02111 
02112 
02113         FCT_TEST_BGN(base_test_mpi_div_mpi_1)
02114         {
02115             mpi X, Y, Q, R, A, B;
02116             int res;
02117             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02118             mpi_init( &A ); mpi_init( &B );
02119         
02120             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02121             fct_chk( mpi_read_string( &Y, 10, "13" ) == 0 );
02122             fct_chk( mpi_read_string( &A, 10, "76" ) == 0 );
02123             fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
02124             res = mpi_div_mpi( &Q, &R, &X, &Y );
02125             fct_chk( res == 0 );
02126             if( res == 0 )
02127             {
02128                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02129                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02130             }
02131         
02132             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02133             mpi_free( &A ); mpi_free( &B );
02134         }
02135         FCT_TEST_END();
02136 
02137 
02138         FCT_TEST_BGN(base_test_mpi_div_mpi_2_divide_by_zero)
02139         {
02140             mpi X, Y, Q, R, A, B;
02141             int res;
02142             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02143             mpi_init( &A ); mpi_init( &B );
02144         
02145             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02146             fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
02147             fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
02148             fct_chk( mpi_read_string( &B, 10, "1" ) == 0 );
02149             res = mpi_div_mpi( &Q, &R, &X, &Y );
02150             fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
02151             if( res == 0 )
02152             {
02153                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02154                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02155             }
02156         
02157             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02158             mpi_free( &A ); mpi_free( &B );
02159         }
02160         FCT_TEST_END();
02161 
02162 
02163         FCT_TEST_BGN(base_test_mpi_div_mpi_3)
02164         {
02165             mpi X, Y, Q, R, A, B;
02166             int res;
02167             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02168             mpi_init( &A ); mpi_init( &B );
02169         
02170             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02171             fct_chk( mpi_read_string( &Y, 10, "-13" ) == 0 );
02172             fct_chk( mpi_read_string( &A, 10, "-76" ) == 0 );
02173             fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
02174             res = mpi_div_mpi( &Q, &R, &X, &Y );
02175             fct_chk( res == 0 );
02176             if( res == 0 )
02177             {
02178                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02179                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02180             }
02181         
02182             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02183             mpi_free( &A ); mpi_free( &B );
02184         }
02185         FCT_TEST_END();
02186 
02187 
02188         FCT_TEST_BGN(test_mpi_div_mpi_1)
02189         {
02190             mpi X, Y, Q, R, A, B;
02191             int res;
02192             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02193             mpi_init( &A ); mpi_init( &B );
02194         
02195             fct_chk( mpi_read_string( &X, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02196             fct_chk( mpi_read_string( &Y, 10, "34" ) == 0 );
02197             fct_chk( mpi_read_string( &A, 10, "592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
02198             fct_chk( mpi_read_string( &B, 10, "26" ) == 0 );
02199             res = mpi_div_mpi( &Q, &R, &X, &Y );
02200             fct_chk( res == 0 );
02201             if( res == 0 )
02202             {
02203                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02204                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02205             }
02206         
02207             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02208             mpi_free( &A ); mpi_free( &B );
02209         }
02210         FCT_TEST_END();
02211 
02212 
02213         FCT_TEST_BGN(test_mpi_div_mpi_2)
02214         {
02215             mpi X, Y, Q, R, A, B;
02216             int res;
02217             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02218             mpi_init( &A ); mpi_init( &B );
02219         
02220             fct_chk( mpi_read_string( &X, 10, "476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188762" ) == 0 );
02221             fct_chk( mpi_read_string( &Y, 10, "28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537" ) == 0 );
02222             fct_chk( mpi_read_string( &A, 10, "16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953" ) == 0 );
02223             fct_chk( mpi_read_string( &B, 10, "1" ) == 0 );
02224             res = mpi_div_mpi( &Q, &R, &X, &Y );
02225             fct_chk( res == 0 );
02226             if( res == 0 )
02227             {
02228                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02229                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02230             }
02231         
02232             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02233             mpi_free( &A ); mpi_free( &B );
02234         }
02235         FCT_TEST_END();
02236 
02237 
02238         FCT_TEST_BGN(test_mpi_div_mpi_3)
02239         {
02240             mpi X, Y, Q, R, A, B;
02241             int res;
02242             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02243             mpi_init( &A ); mpi_init( &B );
02244         
02245             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02246             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
02247             fct_chk( mpi_read_string( &A, 10, "142" ) == 0 );
02248             fct_chk( mpi_read_string( &B, 10, "6" ) == 0 );
02249             res = mpi_div_mpi( &Q, &R, &X, &Y );
02250             fct_chk( res == 0 );
02251             if( res == 0 )
02252             {
02253                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02254                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02255             }
02256         
02257             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02258             mpi_free( &A ); mpi_free( &B );
02259         }
02260         FCT_TEST_END();
02261 
02262 
02263         FCT_TEST_BGN(test_mpi_div_mpi_4)
02264         {
02265             mpi X, Y, Q, R, A, B;
02266             int res;
02267             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
02268             mpi_init( &A ); mpi_init( &B );
02269         
02270             fct_chk( mpi_read_string( &X, 10, "777" ) == 0 );
02271             fct_chk( mpi_read_string( &Y, 10, "7" ) == 0 );
02272             fct_chk( mpi_read_string( &A, 10, "111" ) == 0 );
02273             fct_chk( mpi_read_string( &B, 10, "0" ) == 0 );
02274             res = mpi_div_mpi( &Q, &R, &X, &Y );
02275             fct_chk( res == 0 );
02276             if( res == 0 )
02277             {
02278                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02279                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02280             }
02281         
02282             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
02283             mpi_free( &A ); mpi_free( &B );
02284         }
02285         FCT_TEST_END();
02286 
02287 
02288         FCT_TEST_BGN(base_test_mpi_div_int_1)
02289         {
02290             mpi X, Q, R, A, B;
02291             int res;
02292             mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
02293             mpi_init( &B );
02294         
02295             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02296             fct_chk( mpi_read_string( &A, 10, "76" ) == 0 );
02297             fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
02298             res = mpi_div_int( &Q, &R, &X, 13 );
02299             fct_chk( res == 0 );
02300             if( res == 0 )
02301             {
02302                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02303                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02304             }
02305         
02306             mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
02307             mpi_free( &B );
02308         }
02309         FCT_TEST_END();
02310 
02311 
02312         FCT_TEST_BGN(base_test_mpi_div_int_2_divide_by_zero)
02313         {
02314             mpi X, Q, R, A, B;
02315             int res;
02316             mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
02317             mpi_init( &B );
02318         
02319             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02320             fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
02321             fct_chk( mpi_read_string( &B, 10, "1" ) == 0 );
02322             res = mpi_div_int( &Q, &R, &X, 0 );
02323             fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
02324             if( res == 0 )
02325             {
02326                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02327                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02328             }
02329         
02330             mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
02331             mpi_free( &B );
02332         }
02333         FCT_TEST_END();
02334 
02335 
02336         FCT_TEST_BGN(base_test_mpi_div_int_3)
02337         {
02338             mpi X, Q, R, A, B;
02339             int res;
02340             mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
02341             mpi_init( &B );
02342         
02343             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02344             fct_chk( mpi_read_string( &A, 10, "-76" ) == 0 );
02345             fct_chk( mpi_read_string( &B, 10, "12" ) == 0 );
02346             res = mpi_div_int( &Q, &R, &X, -13 );
02347             fct_chk( res == 0 );
02348             if( res == 0 )
02349             {
02350                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02351                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02352             }
02353         
02354             mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
02355             mpi_free( &B );
02356         }
02357         FCT_TEST_END();
02358 
02359 
02360         FCT_TEST_BGN(test_mpi_div_int_1)
02361         {
02362             mpi X, Q, R, A, B;
02363             int res;
02364             mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
02365             mpi_init( &B );
02366         
02367             fct_chk( mpi_read_string( &X, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02368             fct_chk( mpi_read_string( &A, 10, "592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
02369             fct_chk( mpi_read_string( &B, 10, "26" ) == 0 );
02370             res = mpi_div_int( &Q, &R, &X, 34 );
02371             fct_chk( res == 0 );
02372             if( res == 0 )
02373             {
02374                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02375                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02376             }
02377         
02378             mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
02379             mpi_free( &B );
02380         }
02381         FCT_TEST_END();
02382 
02383 
02384         FCT_TEST_BGN(test_mpi_div_int_2)
02385         {
02386             mpi X, Q, R, A, B;
02387             int res;
02388             mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
02389             mpi_init( &B );
02390         
02391             fct_chk( mpi_read_string( &X, 10, "20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
02392             fct_chk( mpi_read_string( &A, 10, "-592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
02393             fct_chk( mpi_read_string( &B, 10, "26" ) == 0 );
02394             res = mpi_div_int( &Q, &R, &X, -34 );
02395             fct_chk( res == 0 );
02396             if( res == 0 )
02397             {
02398                 fct_chk( mpi_cmp_mpi( &Q, &A ) == 0 );
02399                 fct_chk( mpi_cmp_mpi( &R, &B ) == 0 );
02400             }
02401         
02402             mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
02403             mpi_free( &B );
02404         }
02405         FCT_TEST_END();
02406 
02407 
02408         FCT_TEST_BGN(base_test_mpi_mod_mpi_1)
02409         {
02410             mpi X, Y, Z, A;
02411             int res;
02412             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02413         
02414             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02415             fct_chk( mpi_read_string( &Y, 10, "13" ) == 0 );
02416             fct_chk( mpi_read_string( &A, 10, "12" ) == 0 );
02417             res = mpi_mod_mpi( &Z, &X, &Y );
02418             fct_chk( res == 0 );
02419             if( res == 0 )
02420             {
02421                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02422             }
02423         
02424             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02425         }
02426         FCT_TEST_END();
02427 
02428 
02429         FCT_TEST_BGN(base_test_mpi_mod_mpi_2_divide_by_zero)
02430         {
02431             mpi X, Y, Z, A;
02432             int res;
02433             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02434         
02435             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02436             fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
02437             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
02438             res = mpi_mod_mpi( &Z, &X, &Y );
02439             fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
02440             if( res == 0 )
02441             {
02442                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02443             }
02444         
02445             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02446         }
02447         FCT_TEST_END();
02448 
02449 
02450         FCT_TEST_BGN(base_test_mpi_mod_mpi_3)
02451         {
02452             mpi X, Y, Z, A;
02453             int res;
02454             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02455         
02456             fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
02457             fct_chk( mpi_read_string( &Y, 10, "13" ) == 0 );
02458             fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
02459             res = mpi_mod_mpi( &Z, &X, &Y );
02460             fct_chk( res == 0 );
02461             if( res == 0 )
02462             {
02463                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02464             }
02465         
02466             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02467         }
02468         FCT_TEST_END();
02469 
02470 
02471         FCT_TEST_BGN(base_test_mpi_mod_mpi_4_negative_modulo)
02472         {
02473             mpi X, Y, Z, A;
02474             int res;
02475             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02476         
02477             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02478             fct_chk( mpi_read_string( &Y, 10, "-13" ) == 0 );
02479             fct_chk( mpi_read_string( &A, 10, "-1" ) == 0 );
02480             res = mpi_mod_mpi( &Z, &X, &Y );
02481             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
02482             if( res == 0 )
02483             {
02484                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02485             }
02486         
02487             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02488         }
02489         FCT_TEST_END();
02490 
02491 
02492         FCT_TEST_BGN(base_test_mpi_mod_mpi_5_negative_modulo)
02493         {
02494             mpi X, Y, Z, A;
02495             int res;
02496             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02497         
02498             fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
02499             fct_chk( mpi_read_string( &Y, 10, "-13" ) == 0 );
02500             fct_chk( mpi_read_string( &A, 10, "-12" ) == 0 );
02501             res = mpi_mod_mpi( &Z, &X, &Y );
02502             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
02503             if( res == 0 )
02504             {
02505                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02506             }
02507         
02508             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02509         }
02510         FCT_TEST_END();
02511 
02512 
02513         FCT_TEST_BGN(base_test_mpi_mod_int_1)
02514         {
02515             mpi X;
02516             int res;
02517             t_uint r;
02518             mpi_init( &X );
02519         
02520             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02521             res = mpi_mod_int( &r, &X, 13 );
02522             fct_chk( res == 0 );
02523             if( res == 0 )
02524             {
02525                 fct_chk( r == 12 );
02526             }
02527         
02528             mpi_free( &X );
02529         }
02530         FCT_TEST_END();
02531 
02532 
02533         FCT_TEST_BGN(base_test_mpi_mod_int_2_divide_by_zero)
02534         {
02535             mpi X;
02536             int res;
02537             t_uint r;
02538             mpi_init( &X );
02539         
02540             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02541             res = mpi_mod_int( &r, &X, 0 );
02542             fct_chk( res == POLARSSL_ERR_MPI_DIVISION_BY_ZERO );
02543             if( res == 0 )
02544             {
02545                 fct_chk( r == 0 );
02546             }
02547         
02548             mpi_free( &X );
02549         }
02550         FCT_TEST_END();
02551 
02552 
02553         FCT_TEST_BGN(base_test_mpi_mod_int_3)
02554         {
02555             mpi X;
02556             int res;
02557             t_uint r;
02558             mpi_init( &X );
02559         
02560             fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
02561             res = mpi_mod_int( &r, &X, 13 );
02562             fct_chk( res == 0 );
02563             if( res == 0 )
02564             {
02565                 fct_chk( r == 1 );
02566             }
02567         
02568             mpi_free( &X );
02569         }
02570         FCT_TEST_END();
02571 
02572 
02573         FCT_TEST_BGN(base_test_mpi_mod_int_4_negative_modulo)
02574         {
02575             mpi X;
02576             int res;
02577             t_uint r;
02578             mpi_init( &X );
02579         
02580             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02581             res = mpi_mod_int( &r, &X, -13 );
02582             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
02583             if( res == 0 )
02584             {
02585                 fct_chk( r == 0 );
02586             }
02587         
02588             mpi_free( &X );
02589         }
02590         FCT_TEST_END();
02591 
02592 
02593         FCT_TEST_BGN(base_test_mpi_mod_int_5_negative_modulo)
02594         {
02595             mpi X;
02596             int res;
02597             t_uint r;
02598             mpi_init( &X );
02599         
02600             fct_chk( mpi_read_string( &X, 10, "-1000" ) == 0 );
02601             res = mpi_mod_int( &r, &X, -13 );
02602             fct_chk( res == POLARSSL_ERR_MPI_NEGATIVE_VALUE );
02603             if( res == 0 )
02604             {
02605                 fct_chk( r == 0 );
02606             }
02607         
02608             mpi_free( &X );
02609         }
02610         FCT_TEST_END();
02611 
02612 
02613         FCT_TEST_BGN(base_test_mpi_mod_int_6_by_1)
02614         {
02615             mpi X;
02616             int res;
02617             t_uint r;
02618             mpi_init( &X );
02619         
02620             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02621             res = mpi_mod_int( &r, &X, 1 );
02622             fct_chk( res == 0 );
02623             if( res == 0 )
02624             {
02625                 fct_chk( r == 0 );
02626             }
02627         
02628             mpi_free( &X );
02629         }
02630         FCT_TEST_END();
02631 
02632 
02633         FCT_TEST_BGN(base_test_mpi_mod_int_7_by_2)
02634         {
02635             mpi X;
02636             int res;
02637             t_uint r;
02638             mpi_init( &X );
02639         
02640             fct_chk( mpi_read_string( &X, 10, "1001" ) == 0 );
02641             res = mpi_mod_int( &r, &X, 2 );
02642             fct_chk( res == 0 );
02643             if( res == 0 )
02644             {
02645                 fct_chk( r == 1 );
02646             }
02647         
02648             mpi_free( &X );
02649         }
02650         FCT_TEST_END();
02651 
02652 
02653         FCT_TEST_BGN(base_test_mpi_mod_int_8_by_2)
02654         {
02655             mpi X;
02656             int res;
02657             t_uint r;
02658             mpi_init( &X );
02659         
02660             fct_chk( mpi_read_string( &X, 10, "1000" ) == 0 );
02661             res = mpi_mod_int( &r, &X, 2 );
02662             fct_chk( res == 0 );
02663             if( res == 0 )
02664             {
02665                 fct_chk( r == 0 );
02666             }
02667         
02668             mpi_free( &X );
02669         }
02670         FCT_TEST_END();
02671 
02672 
02673         FCT_TEST_BGN(base_test_mpi_exp_mod_1)
02674         {
02675             mpi A, E, N, RR, Z, X;
02676             int res;
02677             mpi_init( &A  ); mpi_init( &E ); mpi_init( &N );
02678             mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
02679         
02680             fct_chk( mpi_read_string( &A, 10, "23" ) == 0 );
02681             fct_chk( mpi_read_string( &E, 10, "13" ) == 0 );
02682             fct_chk( mpi_read_string( &N, 10, "29" ) == 0 );
02683             fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
02684         
02685             if( strlen( "" ) )
02686                 fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
02687         
02688             res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
02689             fct_chk( res == 0 );
02690             if( res == 0 )
02691             {
02692                 fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
02693             }
02694         
02695             mpi_free( &A  ); mpi_free( &E ); mpi_free( &N );
02696             mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
02697         }
02698         FCT_TEST_END();
02699 
02700 
02701         FCT_TEST_BGN(base_test_mpi_exp_mod_2)
02702         {
02703             mpi A, E, N, RR, Z, X;
02704             int res;
02705             mpi_init( &A  ); mpi_init( &E ); mpi_init( &N );
02706             mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
02707         
02708             fct_chk( mpi_read_string( &A, 10, "23" ) == 0 );
02709             fct_chk( mpi_read_string( &E, 10, "13" ) == 0 );
02710             fct_chk( mpi_read_string( &N, 10, "30" ) == 0 );
02711             fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
02712         
02713             if( strlen( "" ) )
02714                 fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
02715         
02716             res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
02717             fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
02718             if( res == 0 )
02719             {
02720                 fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
02721             }
02722         
02723             mpi_free( &A  ); mpi_free( &E ); mpi_free( &N );
02724             mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
02725         }
02726         FCT_TEST_END();
02727 
02728 
02729         FCT_TEST_BGN(base_test_mpi_exp_mod_3)
02730         {
02731             mpi A, E, N, RR, Z, X;
02732             int res;
02733             mpi_init( &A  ); mpi_init( &E ); mpi_init( &N );
02734             mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
02735         
02736             fct_chk( mpi_read_string( &A, 10, "23" ) == 0 );
02737             fct_chk( mpi_read_string( &E, 10, "13" ) == 0 );
02738             fct_chk( mpi_read_string( &N, 10, "-29" ) == 0 );
02739             fct_chk( mpi_read_string( &X, 10, "24" ) == 0 );
02740         
02741             if( strlen( "" ) )
02742                 fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
02743         
02744             res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
02745             fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
02746             if( res == 0 )
02747             {
02748                 fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
02749             }
02750         
02751             mpi_free( &A  ); mpi_free( &E ); mpi_free( &N );
02752             mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
02753         }
02754         FCT_TEST_END();
02755 
02756 
02757         FCT_TEST_BGN(test_mpi_exp_mod_1)
02758         {
02759             mpi A, E, N, RR, Z, X;
02760             int res;
02761             mpi_init( &A  ); mpi_init( &E ); mpi_init( &N );
02762             mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
02763         
02764             fct_chk( mpi_read_string( &A, 10, "433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847" ) == 0 );
02765             fct_chk( mpi_read_string( &E, 10, "5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721" ) == 0 );
02766             fct_chk( mpi_read_string( &N, 10, "583137007797276923956891216216022144052044091311388601652961409557516421612874571554415606746479105795833145583959622117418531166391184939066520869800857530421873250114773204354963864729386957427276448683092491947566992077136553066273207777134303397724679138833126700957" ) == 0 );
02767             fct_chk( mpi_read_string( &X, 10, "114597449276684355144920670007147953232659436380163461553186940113929777196018164149703566472936578890991049344459204199888254907113495794730452699842273939581048142004834330369483813876618772578869083248061616444392091693787039636316845512292127097865026290173004860736" ) == 0 );
02768         
02769             if( strlen( "" ) )
02770                 fct_chk( mpi_read_string( &RR, 10, "" ) == 0 );
02771         
02772             res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
02773             fct_chk( res == 0 );
02774             if( res == 0 )
02775             {
02776                 fct_chk( mpi_cmp_mpi( &Z, &X ) == 0 );
02777             }
02778         
02779             mpi_free( &A  ); mpi_free( &E ); mpi_free( &N );
02780             mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
02781         }
02782         FCT_TEST_END();
02783 
02784 
02785         FCT_TEST_BGN(base_test_gcd_1)
02786         {
02787             mpi A, X, Y, Z;
02788             mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
02789         
02790             fct_chk( mpi_read_string( &X, 10, "693" ) == 0 );
02791             fct_chk( mpi_read_string( &Y, 10, "609" ) == 0 );
02792             fct_chk( mpi_read_string( &A, 10, "21" ) == 0 );
02793             fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
02794             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02795         
02796             mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
02797         }
02798         FCT_TEST_END();
02799 
02800 
02801         FCT_TEST_BGN(base_test_gcd_2)
02802         {
02803             mpi A, X, Y, Z;
02804             mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
02805         
02806             fct_chk( mpi_read_string( &X, 10, "1764" ) == 0 );
02807             fct_chk( mpi_read_string( &Y, 10, "868" ) == 0 );
02808             fct_chk( mpi_read_string( &A, 10, "28" ) == 0 );
02809             fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
02810             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02811         
02812             mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
02813         }
02814         FCT_TEST_END();
02815 
02816 
02817         FCT_TEST_BGN(base_test_gcd_3)
02818         {
02819             mpi A, X, Y, Z;
02820             mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
02821         
02822             fct_chk( mpi_read_string( &X, 10, "768454923" ) == 0 );
02823             fct_chk( mpi_read_string( &Y, 10, "542167814" ) == 0 );
02824             fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
02825             fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
02826             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02827         
02828             mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
02829         }
02830         FCT_TEST_END();
02831 
02832 
02833         FCT_TEST_BGN(test_gcd_1)
02834         {
02835             mpi A, X, Y, Z;
02836             mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
02837         
02838             fct_chk( mpi_read_string( &X, 10, "433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847" ) == 0 );
02839             fct_chk( mpi_read_string( &Y, 10, "5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721" ) == 0 );
02840             fct_chk( mpi_read_string( &A, 10, "1" ) == 0 );
02841             fct_chk( mpi_gcd( &Z, &X, &Y ) == 0 );
02842             fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02843         
02844             mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
02845         }
02846         FCT_TEST_END();
02847 
02848 #ifdef POLARSSL_GENPRIME
02849 
02850         FCT_TEST_BGN(base_test_mpi_inv_mod_1)
02851         {
02852             mpi X, Y, Z, A;
02853             int res;
02854             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02855         
02856             fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
02857             fct_chk( mpi_read_string( &Y, 10, "11" ) == 0 );
02858             fct_chk( mpi_read_string( &A, 10, "4" ) == 0 );
02859             res = mpi_inv_mod( &Z, &X, &Y );
02860             fct_chk( res == 0 );
02861             if( res == 0 )
02862             {
02863                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02864             }
02865         
02866             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02867         }
02868         FCT_TEST_END();
02869 #endif /* POLARSSL_GENPRIME */
02870 
02871 #ifdef POLARSSL_GENPRIME
02872 
02873         FCT_TEST_BGN(base_test_mpi_inv_mod_2)
02874         {
02875             mpi X, Y, Z, A;
02876             int res;
02877             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02878         
02879             fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
02880             fct_chk( mpi_read_string( &Y, 10, "0" ) == 0 );
02881             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
02882             res = mpi_inv_mod( &Z, &X, &Y );
02883             fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
02884             if( res == 0 )
02885             {
02886                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02887             }
02888         
02889             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02890         }
02891         FCT_TEST_END();
02892 #endif /* POLARSSL_GENPRIME */
02893 
02894 #ifdef POLARSSL_GENPRIME
02895 
02896         FCT_TEST_BGN(base_test_mpi_inv_mod_3)
02897         {
02898             mpi X, Y, Z, A;
02899             int res;
02900             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02901         
02902             fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
02903             fct_chk( mpi_read_string( &Y, 10, "-11" ) == 0 );
02904             fct_chk( mpi_read_string( &A, 10, "4" ) == 0 );
02905             res = mpi_inv_mod( &Z, &X, &Y );
02906             fct_chk( res == POLARSSL_ERR_MPI_BAD_INPUT_DATA );
02907             if( res == 0 )
02908             {
02909                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02910             }
02911         
02912             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02913         }
02914         FCT_TEST_END();
02915 #endif /* POLARSSL_GENPRIME */
02916 
02917 #ifdef POLARSSL_GENPRIME
02918 
02919         FCT_TEST_BGN(base_test_mpi_inv_mod_4)
02920         {
02921             mpi X, Y, Z, A;
02922             int res;
02923             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02924         
02925             fct_chk( mpi_read_string( &X, 10, "2" ) == 0 );
02926             fct_chk( mpi_read_string( &Y, 10, "4" ) == 0 );
02927             fct_chk( mpi_read_string( &A, 10, "0" ) == 0 );
02928             res = mpi_inv_mod( &Z, &X, &Y );
02929             fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
02930             if( res == 0 )
02931             {
02932                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02933             }
02934         
02935             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02936         }
02937         FCT_TEST_END();
02938 #endif /* POLARSSL_GENPRIME */
02939 
02940 #ifdef POLARSSL_GENPRIME
02941 
02942         FCT_TEST_BGN(test_mpi_inv_mod_1)
02943         {
02944             mpi X, Y, Z, A;
02945             int res;
02946             mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
02947         
02948             fct_chk( mpi_read_string( &X, 16, "aa4df5cb14b4c31237f98bd1faf527c283c2d0f3eec89718664ba33f9762907c" ) == 0 );
02949             fct_chk( mpi_read_string( &Y, 16, "fffbbd660b94412ae61ead9c2906a344116e316a256fd387874c6c675b1d587d" ) == 0 );
02950             fct_chk( mpi_read_string( &A, 16, "8d6a5c1d7adeae3e94b9bcd2c47e0d46e778bc8804a2cc25c02d775dc3d05b0c" ) == 0 );
02951             res = mpi_inv_mod( &Z, &X, &Y );
02952             fct_chk( res == 0 );
02953             if( res == 0 )
02954             {
02955                 fct_chk( mpi_cmp_mpi( &Z, &A ) == 0 );
02956             }
02957         
02958             mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
02959         }
02960         FCT_TEST_END();
02961 #endif /* POLARSSL_GENPRIME */
02962 
02963 #ifdef POLARSSL_GENPRIME
02964 
02965         FCT_TEST_BGN(base_test_mpi_is_prime_1)
02966         {
02967             mpi X;
02968             int res;
02969             mpi_init( &X );
02970         
02971             fct_chk( mpi_read_string( &X, 10, "0" ) == 0 );
02972             res = mpi_is_prime( &X, rnd_std_rand, NULL );
02973             fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
02974         
02975             mpi_free( &X );
02976         }
02977         FCT_TEST_END();
02978 #endif /* POLARSSL_GENPRIME */
02979 
02980 #ifdef POLARSSL_GENPRIME
02981 
02982         FCT_TEST_BGN(base_test_mpi_is_prime_2)
02983         {
02984             mpi X;
02985             int res;
02986             mpi_init( &X );
02987         
02988             fct_chk( mpi_read_string( &X, 10, "1" ) == 0 );
02989             res = mpi_is_prime( &X, rnd_std_rand, NULL );
02990             fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
02991         
02992             mpi_free( &X );
02993         }
02994         FCT_TEST_END();
02995 #endif /* POLARSSL_GENPRIME */
02996 
02997 #ifdef POLARSSL_GENPRIME
02998 
02999         FCT_TEST_BGN(base_test_mpi_is_prime_3)
03000         {
03001             mpi X;
03002             int res;
03003             mpi_init( &X );
03004         
03005             fct_chk( mpi_read_string( &X, 10, "2" ) == 0 );
03006             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03007             fct_chk( res == 0 );
03008         
03009             mpi_free( &X );
03010         }
03011         FCT_TEST_END();
03012 #endif /* POLARSSL_GENPRIME */
03013 
03014 #ifdef POLARSSL_GENPRIME
03015 
03016         FCT_TEST_BGN(base_test_mpi_is_prime_4)
03017         {
03018             mpi X;
03019             int res;
03020             mpi_init( &X );
03021         
03022             fct_chk( mpi_read_string( &X, 10, "3" ) == 0 );
03023             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03024             fct_chk( res == 0 );
03025         
03026             mpi_free( &X );
03027         }
03028         FCT_TEST_END();
03029 #endif /* POLARSSL_GENPRIME */
03030 
03031 #ifdef POLARSSL_GENPRIME
03032 
03033         FCT_TEST_BGN(base_test_mpi_is_prime_5)
03034         {
03035             mpi X;
03036             int res;
03037             mpi_init( &X );
03038         
03039             fct_chk( mpi_read_string( &X, 10, "4" ) == 0 );
03040             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03041             fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
03042         
03043             mpi_free( &X );
03044         }
03045         FCT_TEST_END();
03046 #endif /* POLARSSL_GENPRIME */
03047 
03048 #ifdef POLARSSL_GENPRIME
03049 
03050         FCT_TEST_BGN(base_test_mpi_is_prime_6)
03051         {
03052             mpi X;
03053             int res;
03054             mpi_init( &X );
03055         
03056             fct_chk( mpi_read_string( &X, 10, "5" ) == 0 );
03057             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03058             fct_chk( res == 0 );
03059         
03060             mpi_free( &X );
03061         }
03062         FCT_TEST_END();
03063 #endif /* POLARSSL_GENPRIME */
03064 
03065 #ifdef POLARSSL_GENPRIME
03066 
03067         FCT_TEST_BGN(base_test_mpi_is_prime_7)
03068         {
03069             mpi X;
03070             int res;
03071             mpi_init( &X );
03072         
03073             fct_chk( mpi_read_string( &X, 10, "27" ) == 0 );
03074             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03075             fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
03076         
03077             mpi_free( &X );
03078         }
03079         FCT_TEST_END();
03080 #endif /* POLARSSL_GENPRIME */
03081 
03082 #ifdef POLARSSL_GENPRIME
03083 
03084         FCT_TEST_BGN(base_test_mpi_is_prime_8)
03085         {
03086             mpi X;
03087             int res;
03088             mpi_init( &X );
03089         
03090             fct_chk( mpi_read_string( &X, 10, "47" ) == 0 );
03091             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03092             fct_chk( res == 0 );
03093         
03094             mpi_free( &X );
03095         }
03096         FCT_TEST_END();
03097 #endif /* POLARSSL_GENPRIME */
03098 
03099 #ifdef POLARSSL_GENPRIME
03100 
03101         FCT_TEST_BGN(test_mpi_is_prime_1)
03102         {
03103             mpi X;
03104             int res;
03105             mpi_init( &X );
03106         
03107             fct_chk( mpi_read_string( &X, 10, "827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099" ) == 0 );
03108             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03109             fct_chk( res == 0 );
03110         
03111             mpi_free( &X );
03112         }
03113         FCT_TEST_END();
03114 #endif /* POLARSSL_GENPRIME */
03115 
03116 #ifdef POLARSSL_GENPRIME
03117 
03118         FCT_TEST_BGN(test_mpi_is_prime_2)
03119         {
03120             mpi X;
03121             int res;
03122             mpi_init( &X );
03123         
03124             fct_chk( mpi_read_string( &X, 10, "827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912001" ) == 0 );
03125             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03126             fct_chk( res == POLARSSL_ERR_MPI_NOT_ACCEPTABLE );
03127         
03128             mpi_free( &X );
03129         }
03130         FCT_TEST_END();
03131 #endif /* POLARSSL_GENPRIME */
03132 
03133 #ifdef POLARSSL_GENPRIME
03134 
03135         FCT_TEST_BGN(test_mpi_is_prime_3)
03136         {
03137             mpi X;
03138             int res;
03139             mpi_init( &X );
03140         
03141             fct_chk( mpi_read_string( &X, 10, "2833419889721787128217599" ) == 0 );
03142             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03143             fct_chk( res == 0 );
03144         
03145             mpi_free( &X );
03146         }
03147         FCT_TEST_END();
03148 #endif /* POLARSSL_GENPRIME */
03149 
03150 #ifdef POLARSSL_GENPRIME
03151 
03152         FCT_TEST_BGN(test_mpi_is_prime_4)
03153         {
03154             mpi X;
03155             int res;
03156             mpi_init( &X );
03157         
03158             fct_chk( mpi_read_string( &X, 10, "195845982777569926302400511" ) == 0 );
03159             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03160             fct_chk( res == 0 );
03161         
03162             mpi_free( &X );
03163         }
03164         FCT_TEST_END();
03165 #endif /* POLARSSL_GENPRIME */
03166 
03167 #ifdef POLARSSL_GENPRIME
03168 
03169         FCT_TEST_BGN(test_mpi_is_prime_5)
03170         {
03171             mpi X;
03172             int res;
03173             mpi_init( &X );
03174         
03175             fct_chk( mpi_read_string( &X, 10, "4776913109852041418248056622882488319" ) == 0 );
03176             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03177             fct_chk( res == 0 );
03178         
03179             mpi_free( &X );
03180         }
03181         FCT_TEST_END();
03182 #endif /* POLARSSL_GENPRIME */
03183 
03184 #ifdef POLARSSL_GENPRIME
03185 
03186         FCT_TEST_BGN(test_mpi_is_prime_5)
03187         {
03188             mpi X;
03189             int res;
03190             mpi_init( &X );
03191         
03192             fct_chk( mpi_read_string( &X, 10, "768614336404564651" ) == 0 );
03193             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03194             fct_chk( res == 0 );
03195         
03196             mpi_free( &X );
03197         }
03198         FCT_TEST_END();
03199 #endif /* POLARSSL_GENPRIME */
03200 
03201 #ifdef POLARSSL_GENPRIME
03202 
03203         FCT_TEST_BGN(test_mpi_is_prime_6)
03204         {
03205             mpi X;
03206             int res;
03207             mpi_init( &X );
03208         
03209             fct_chk( mpi_read_string( &X, 10, "201487636602438195784363" ) == 0 );
03210             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03211             fct_chk( res == 0 );
03212         
03213             mpi_free( &X );
03214         }
03215         FCT_TEST_END();
03216 #endif /* POLARSSL_GENPRIME */
03217 
03218 #ifdef POLARSSL_GENPRIME
03219 
03220         FCT_TEST_BGN(test_mpi_is_prime_7)
03221         {
03222             mpi X;
03223             int res;
03224             mpi_init( &X );
03225         
03226             fct_chk( mpi_read_string( &X, 10, "845100400152152934331135470251" ) == 0 );
03227             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03228             fct_chk( res == 0 );
03229         
03230             mpi_free( &X );
03231         }
03232         FCT_TEST_END();
03233 #endif /* POLARSSL_GENPRIME */
03234 
03235 #ifdef POLARSSL_GENPRIME
03236 
03237         FCT_TEST_BGN(test_mpi_is_prime_8)
03238         {
03239             mpi X;
03240             int res;
03241             mpi_init( &X );
03242         
03243             fct_chk( mpi_read_string( &X, 10, "56713727820156410577229101238628035243" ) == 0 );
03244             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03245             fct_chk( res == 0 );
03246         
03247             mpi_free( &X );
03248         }
03249         FCT_TEST_END();
03250 #endif /* POLARSSL_GENPRIME */
03251 
03252 #ifdef POLARSSL_GENPRIME
03253 
03254         FCT_TEST_BGN(test_mpi_is_prime_9)
03255         {
03256             mpi X;
03257             int res;
03258             mpi_init( &X );
03259         
03260             fct_chk( mpi_read_string( &X, 10, "203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
03261             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03262             fct_chk( res == 0 );
03263         
03264             mpi_free( &X );
03265         }
03266         FCT_TEST_END();
03267 #endif /* POLARSSL_GENPRIME */
03268 
03269 #ifdef POLARSSL_GENPRIME
03270 
03271         FCT_TEST_BGN(test_mpi_is_prime_10)
03272         {
03273             mpi X;
03274             int res;
03275             mpi_init( &X );
03276         
03277             fct_chk( mpi_read_string( &X, 10, "531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
03278             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03279             fct_chk( res == 0 );
03280         
03281             mpi_free( &X );
03282         }
03283         FCT_TEST_END();
03284 #endif /* POLARSSL_GENPRIME */
03285 
03286 #ifdef POLARSSL_GENPRIME
03287 
03288         FCT_TEST_BGN(test_mpi_is_prime_11)
03289         {
03290             mpi X;
03291             int res;
03292             mpi_init( &X );
03293         
03294             fct_chk( mpi_read_string( &X, 10, "319705304701141539155720137200974664666792526059405792539680974929469783512821793995613718943171723765238853752439032835985158829038528214925658918372196742089464683960239919950882355844766055365179937610326127675178857306260955550407044463370239890187189750909036833976197804646589380690779463976173" ) == 0 );
03295             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03296             fct_chk( res == 0 );
03297         
03298             mpi_free( &X );
03299         }
03300         FCT_TEST_END();
03301 #endif /* POLARSSL_GENPRIME */
03302 
03303 #ifdef POLARSSL_GENPRIME
03304 
03305         FCT_TEST_BGN(test_mpi_is_prime_12)
03306         {
03307             mpi X;
03308             int res;
03309             mpi_init( &X );
03310         
03311             fct_chk( mpi_read_string( &X, 10, "200603822195324642393516294012917598972967449320074999667103434371470616000652036570009912021332527788252300901905236578801044680456930305350440933538867383130165841118050781326291059830545891570648243241795871" ) == 0 );
03312             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03313             fct_chk( res == 0 );
03314         
03315             mpi_free( &X );
03316         }
03317         FCT_TEST_END();
03318 #endif /* POLARSSL_GENPRIME */
03319 
03320 #ifdef POLARSSL_GENPRIME
03321 
03322         FCT_TEST_BGN(test_mpi_is_prime_13)
03323         {
03324             mpi X;
03325             int res;
03326             mpi_init( &X );
03327         
03328             fct_chk( mpi_read_string( &X, 10, "827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099" ) == 0 );
03329             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03330             fct_chk( res == 0 );
03331         
03332             mpi_free( &X );
03333         }
03334         FCT_TEST_END();
03335 #endif /* POLARSSL_GENPRIME */
03336 
03337 #ifdef POLARSSL_GENPRIME
03338 
03339         FCT_TEST_BGN(test_mpi_is_prime_14)
03340         {
03341             mpi X;
03342             int res;
03343             mpi_init( &X );
03344         
03345             fct_chk( mpi_read_string( &X, 10, "964274047248418797145090983157197980855078966882276492572788532954904112655338439361306213898569516593744267391754033306465125919199692703323878557833023573312685002670662846477592597659826113460619815244721311" ) == 0 );
03346             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03347             fct_chk( res == 0 );
03348         
03349             mpi_free( &X );
03350         }
03351         FCT_TEST_END();
03352 #endif /* POLARSSL_GENPRIME */
03353 
03354 #ifdef POLARSSL_GENPRIME
03355 
03356         FCT_TEST_BGN(test_mpi_is_prime_15)
03357         {
03358             mpi X;
03359             int res;
03360             mpi_init( &X );
03361         
03362             fct_chk( mpi_read_string( &X, 10, "170141183460469231731687303715884105727" ) == 0 );
03363             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03364             fct_chk( res == 0 );
03365         
03366             mpi_free( &X );
03367         }
03368         FCT_TEST_END();
03369 #endif /* POLARSSL_GENPRIME */
03370 
03371 #ifdef POLARSSL_GENPRIME
03372 
03373         FCT_TEST_BGN(test_mpi_is_prime_16)
03374         {
03375             mpi X;
03376             int res;
03377             mpi_init( &X );
03378         
03379             fct_chk( mpi_read_string( &X, 10, "2147483647" ) == 0 );
03380             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03381             fct_chk( res == 0 );
03382         
03383             mpi_free( &X );
03384         }
03385         FCT_TEST_END();
03386 #endif /* POLARSSL_GENPRIME */
03387 
03388 #ifdef POLARSSL_GENPRIME
03389 
03390         FCT_TEST_BGN(test_mpi_is_prime_17)
03391         {
03392             mpi X;
03393             int res;
03394             mpi_init( &X );
03395         
03396             fct_chk( mpi_read_string( &X, 10, "961748941" ) == 0 );
03397             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03398             fct_chk( res == 0 );
03399         
03400             mpi_free( &X );
03401         }
03402         FCT_TEST_END();
03403 #endif /* POLARSSL_GENPRIME */
03404 
03405 #ifdef POLARSSL_GENPRIME
03406 
03407         FCT_TEST_BGN(test_mpi_is_prime_18)
03408         {
03409             mpi X;
03410             int res;
03411             mpi_init( &X );
03412         
03413             fct_chk( mpi_read_string( &X, 10, "179424691" ) == 0 );
03414             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03415             fct_chk( res == 0 );
03416         
03417             mpi_free( &X );
03418         }
03419         FCT_TEST_END();
03420 #endif /* POLARSSL_GENPRIME */
03421 
03422 #ifdef POLARSSL_GENPRIME
03423 
03424         FCT_TEST_BGN(test_mpi_is_prime_19)
03425         {
03426             mpi X;
03427             int res;
03428             mpi_init( &X );
03429         
03430             fct_chk( mpi_read_string( &X, 10, "32452867" ) == 0 );
03431             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03432             fct_chk( res == 0 );
03433         
03434             mpi_free( &X );
03435         }
03436         FCT_TEST_END();
03437 #endif /* POLARSSL_GENPRIME */
03438 
03439 #ifdef POLARSSL_GENPRIME
03440 
03441         FCT_TEST_BGN(test_mpi_is_prime_20)
03442         {
03443             mpi X;
03444             int res;
03445             mpi_init( &X );
03446         
03447             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03448             res = mpi_is_prime( &X, rnd_std_rand, NULL );
03449             fct_chk( res == 0 );
03450         
03451             mpi_free( &X );
03452         }
03453         FCT_TEST_END();
03454 #endif /* POLARSSL_GENPRIME */
03455 
03456 
03457         FCT_TEST_BGN(test_bit_getting_value_bit_25)
03458         {
03459             mpi X;
03460             mpi_init( &X );
03461             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03462             fct_chk( mpi_get_bit( &X, 25 ) == 1 );
03463         
03464             mpi_free( &X );
03465         }
03466         FCT_TEST_END();
03467 
03468 
03469         FCT_TEST_BGN(test_bit_getting_larger_but_same_limb)
03470         {
03471             mpi X;
03472             mpi_init( &X );
03473             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03474             fct_chk( mpi_get_bit( &X, 26 ) == 0 );
03475         
03476             mpi_free( &X );
03477         }
03478         FCT_TEST_END();
03479 
03480 
03481         FCT_TEST_BGN(test_bit_getting_larger_and_non_existing_limb)
03482         {
03483             mpi X;
03484             mpi_init( &X );
03485             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03486             fct_chk( mpi_get_bit( &X, 500 ) == 0 );
03487         
03488             mpi_free( &X );
03489         }
03490         FCT_TEST_END();
03491 
03492 
03493         FCT_TEST_BGN(test_bit_getting_value_bit_24)
03494         {
03495             mpi X;
03496             mpi_init( &X );
03497             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03498             fct_chk( mpi_get_bit( &X, 24 ) == 0 );
03499         
03500             mpi_free( &X );
03501         }
03502         FCT_TEST_END();
03503 
03504 
03505         FCT_TEST_BGN(test_bit_getting_value_bit_23)
03506         {
03507             mpi X;
03508             mpi_init( &X );
03509             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03510             fct_chk( mpi_get_bit( &X, 23 ) == 1 );
03511         
03512             mpi_free( &X );
03513         }
03514         FCT_TEST_END();
03515 
03516 
03517         FCT_TEST_BGN(test_bit_set_change_existing_value_with_a_1)
03518         {
03519             mpi X, Y;
03520             mpi_init( &X ); mpi_init( &Y );
03521         
03522             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03523             fct_chk( mpi_read_string( &Y, 10, "66756903" ) == 0 );
03524             fct_chk( mpi_set_bit( &X, 24, 1 ) == 0 );
03525             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
03526         
03527             mpi_free( &X );
03528         }
03529         FCT_TEST_END();
03530 
03531 
03532         FCT_TEST_BGN(test_bit_set_change_existing_value_with_a_0)
03533         {
03534             mpi X, Y;
03535             mpi_init( &X ); mpi_init( &Y );
03536         
03537             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03538             fct_chk( mpi_read_string( &Y, 10, "16425255" ) == 0 );
03539             fct_chk( mpi_set_bit( &X, 25, 0 ) == 0 );
03540             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
03541         
03542             mpi_free( &X );
03543         }
03544         FCT_TEST_END();
03545 
03546 
03547         FCT_TEST_BGN(test_bit_set_add_above_existing_limbs_with_a_0)
03548         {
03549             mpi X, Y;
03550             mpi_init( &X ); mpi_init( &Y );
03551         
03552             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03553             fct_chk( mpi_read_string( &Y, 10, "49979687" ) == 0 );
03554             fct_chk( mpi_set_bit( &X, 80, 0 ) == 0 );
03555             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
03556         
03557             mpi_free( &X );
03558         }
03559         FCT_TEST_END();
03560 
03561 
03562         FCT_TEST_BGN(test_bit_set_add_above_existing_limbs_with_a_1)
03563         {
03564             mpi X, Y;
03565             mpi_init( &X ); mpi_init( &Y );
03566         
03567             fct_chk( mpi_read_string( &X, 10, "49979687" ) == 0 );
03568             fct_chk( mpi_read_string( &Y, 10, "1208925819614629224685863" ) == 0 );
03569             fct_chk( mpi_set_bit( &X, 80, 1 ) == 0 );
03570             fct_chk( mpi_cmp_mpi( &X, &Y ) == 0 );
03571         
03572             mpi_free( &X );
03573         }
03574         FCT_TEST_END();
03575 
03576 #ifdef POLARSSL_SELF_TEST
03577 
03578         FCT_TEST_BGN(mpi_selftest)
03579         {
03580             fct_chk( mpi_self_test( 0 ) == 0 );
03581         }
03582         FCT_TEST_END();
03583 #endif /* POLARSSL_SELF_TEST */
03584 
03585     }
03586     FCT_SUITE_END();
03587 
03588 #endif /* POLARSSL_BIGNUM_C */
03589 
03590 }
03591 FCT_END();
03592