PolarSSL v1.1.4
|
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