9 typedef UINT32 uint32_t;
18 #define GET_ULONG_BE(n,b,i) \
20 (n) = ( (unsigned long) (b)[(i) ] << 24 ) \
21 | ( (unsigned long) (b)[(i) + 1] << 16 ) \
22 | ( (unsigned long) (b)[(i) + 2] << 8 ) \
23 | ( (unsigned long) (b)[(i) + 3] ); \
28 #define PUT_ULONG_BE(n,b,i) \
30 (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
31 (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
32 (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
33 (b)[(i) + 3] = (unsigned char) ( (n) ); \
37 int unhexify(
unsigned char *obuf,
const char *ibuf)
40 int len = strlen(ibuf) / 2;
41 assert(!(strlen(ibuf) %1));
46 if( c >=
'0' && c <=
'9' )
48 else if( c >=
'a' && c <=
'f' )
50 else if( c >=
'A' && c <=
'F' )
56 if( c2 >=
'0' && c2 <=
'9' )
58 else if( c2 >=
'a' && c2 <=
'f' )
60 else if( c2 >=
'A' && c2 <=
'F' )
65 *obuf++ = ( c << 4 ) | c2;
71 void hexify(
unsigned char *obuf,
const unsigned char *ibuf,
int len)
83 *obuf++ =
'a' + h - 10;
88 *obuf++ =
'a' + l - 10;
104 static int rnd_std_rand(
void *rng_state,
unsigned char *output,
size_t len )
108 if( rng_state != NULL )
111 for( i = 0; i < len; ++i )
122 static int rnd_zero_rand(
void *rng_state,
unsigned char *output,
size_t len )
124 if( rng_state != NULL )
127 memset( output, 0, len );
154 if( rng_state == NULL )
163 memcpy( output, info->
buf, use_len );
164 info->
buf += use_len;
168 if( len - use_len > 0 )
169 return(
rnd_std_rand( NULL, output + use_len, len - use_len ) );
198 uint32_t i, *k, sum, delta=0x9E3779B9;
199 unsigned char result[4];
201 if( rng_state == NULL )
208 size_t use_len = ( len > 4 ) ? 4 : len;
211 for( i = 0; i < 32; i++ )
213 info->
v0 += (((info->
v1 << 4) ^ (info->
v1 >> 5)) + info->
v1) ^ (sum + k[sum & 3]);
215 info->
v1 += (((info->
v0 << 4) ^ (info->
v0 >> 5)) + info->
v0) ^ (sum + k[(sum>>11) & 3]);
219 memcpy( output, result, use_len );
229 #ifdef POLARSSL_BIGNUM_C
232 FCT_SUITE_BGN(test_suite_mpi)
235 FCT_TEST_BGN(base_test_mpi_read_write_string_1)
249 fct_chk( strcasecmp( str,
"128" ) == 0 );
258 FCT_TEST_BGN(base_test_mpi_read_write_string_2)
272 fct_chk( strcasecmp( str,
"80" ) == 0 );
281 FCT_TEST_BGN(base_test_mpi_read_write_string_3_read_zero)
295 fct_chk( strcasecmp( str,
"0" ) == 0 );
304 FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_decimal)
318 fct_chk( strcasecmp( str,
"-23" ) == 0 );
327 FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_hex)
341 fct_chk( strcasecmp( str,
"-32" ) == 0 );
350 FCT_TEST_BGN(base_test_mpi_read_write_string_3_negative_decimal)
364 fct_chk( strcasecmp( str,
"-23" ) == 0 );
373 FCT_TEST_BGN(test_mpi_read_write_string_1_invalid_character)
387 fct_chk( strcasecmp( str,
"" ) == 0 );
396 FCT_TEST_BGN(test_mpi_read_write_string_2_illegal_input_radix)
410 fct_chk( strcasecmp( str,
"" ) == 0 );
419 FCT_TEST_BGN(test_mpi_read_write_string_3_buffer_just_fits)
433 fct_chk( strcasecmp( str,
"-23" ) == 0 );
442 FCT_TEST_BGN(test_mpi_read_write_string_4_buffer_too_small)
456 fct_chk( strcasecmp( str,
"-23" ) == 0 );
465 FCT_TEST_BGN(test_mpi_read_write_string_5_illegal_output_radix)
479 fct_chk( strcasecmp( str,
"-23" ) == 0 );
488 FCT_TEST_BGN(test_mpi_read_write_string_6_output_radix_of_15)
502 fct_chk( strcasecmp( str,
"1e" ) == 0 );
511 FCT_TEST_BGN(test_mpi_read_write_string_7)
519 fct_chk(
mpi_read_string( &X, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
525 fct_chk( strcasecmp( str,
"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" ) == 0 );
534 FCT_TEST_BGN(base_test_mpi_read_binary_1)
537 unsigned char str[1000];
538 unsigned char buf[1000];
544 input_len =
unhexify( buf,
"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" );
548 fct_chk( strcmp( (
char *) str,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
555 FCT_TEST_BGN(base_test_mpi_write_binary_1)
558 unsigned char str[1000];
559 unsigned char buf[1000];
562 memset( buf, 0x00, 1000 );
563 memset( str, 0x00, 1000 );
567 fct_chk(
mpi_read_string( &X, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
576 hexify( str, buf, buflen );
578 fct_chk( strcasecmp( (
char *) str,
"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424" ) == 0 );
586 FCT_TEST_BGN(test_mpi_write_binary_1_buffer_just_fits)
589 unsigned char str[1000];
590 unsigned char buf[1000];
593 memset( buf, 0x00, 1000 );
594 memset( str, 0x00, 1000 );
598 fct_chk(
mpi_read_string( &X, 16,
"123123123123123123123123123" ) == 0 );
607 hexify( str, buf, buflen );
609 fct_chk( strcasecmp( (
char *) str,
"0123123123123123123123123123" ) == 0 );
617 FCT_TEST_BGN(test_mpi_write_binary_2_buffer_too_small)
620 unsigned char str[1000];
621 unsigned char buf[1000];
624 memset( buf, 0x00, 1000 );
625 memset( str, 0x00, 1000 );
629 fct_chk(
mpi_read_string( &X, 16,
"123123123123123123123123123" ) == 0 );
638 hexify( str, buf, buflen );
640 fct_chk( strcasecmp( (
char *) str,
"123123123123123123123123123" ) == 0 );
647 #ifdef POLARSSL_FS_IO
649 FCT_TEST_BGN(base_test_mpi_read_file_1)
652 unsigned char str[1000];
653 unsigned char buf[1000];
657 memset( buf, 0x00, 1000 );
658 memset( str, 0x00, 1000 );
662 file = fopen(
"data_files/mpi_10",
"r" );
671 hexify( str, buf, buflen );
673 fct_chk( strcasecmp( (
char *) str,
"01f55332c3a48b910f9942f6c914e58bef37a47ee45cb164a5b6b8d1006bf59a059c21449939ebebfdf517d2e1dbac88010d7b1f141e997bd6801ddaec9d05910f4f2de2b2c4d714e2c14a72fc7f17aa428d59c531627f09" ) == 0 );
681 #ifdef POLARSSL_FS_IO
683 FCT_TEST_BGN(test_mpi_read_file_1_empty_file)
686 unsigned char str[1000];
687 unsigned char buf[1000];
691 memset( buf, 0x00, 1000 );
692 memset( str, 0x00, 1000 );
696 file = fopen(
"data_files/hash_file_4",
"r" );
705 hexify( str, buf, buflen );
707 fct_chk( strcasecmp( (
char *) str,
"" ) == 0 );
715 #ifdef POLARSSL_FS_IO
717 FCT_TEST_BGN(test_mpi_read_file_2_illegal_input)
720 unsigned char str[1000];
721 unsigned char buf[1000];
725 memset( buf, 0x00, 1000 );
726 memset( str, 0x00, 1000 );
730 file = fopen(
"data_files/hash_file_3",
"r" );
739 hexify( str, buf, buflen );
741 fct_chk( strcasecmp( (
char *) str,
"" ) == 0 );
749 #ifdef POLARSSL_FS_IO
751 FCT_TEST_BGN(test_mpi_read_file_3_input_too_big)
754 unsigned char str[1000];
755 unsigned char buf[1000];
759 memset( buf, 0x00, 1000 );
760 memset( str, 0x00, 1000 );
764 file = fopen(
"data_files/mpi_too_big",
"r" );
773 hexify( str, buf, buflen );
775 fct_chk( strcasecmp( (
char *) str,
"" ) == 0 );
783 #ifdef POLARSSL_FS_IO
785 FCT_TEST_BGN(base_test_mpi_write_file_1)
788 FILE *file_out, *file_in;
792 fct_chk(
mpi_read_string( &X, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
794 file_out = fopen(
"data_files/mpi_write",
"w" );
795 fct_chk( file_out != NULL );
799 file_in = fopen(
"data_files/mpi_write",
"r" );
800 fct_chk( file_in != NULL );
812 FCT_TEST_BGN(base_test_mpi_lsb_1)
817 fct_chk(
mpi_read_string( &X, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
825 FCT_TEST_BGN(base_test_mpi_lsb_2)
838 FCT_TEST_BGN(base_test_mpi_lsb_3)
851 FCT_TEST_BGN(base_test_mpi_lsb_4)
857 fct_chk(
mpi_lsb( &X ) == 13 );
864 FCT_TEST_BGN(base_test_mpi_msb_1)
869 fct_chk(
mpi_read_string( &X, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
870 fct_chk(
mpi_msb( &X ) == 764 );
877 FCT_TEST_BGN(base_test_mpi_msb_2)
890 FCT_TEST_BGN(base_test_mpi_msb_3)
903 FCT_TEST_BGN(base_test_mpi_msb_4)
916 FCT_TEST_BGN(base_test_mpi_msb_5)
929 FCT_TEST_BGN(base_test_mpi_msb_6)
942 FCT_TEST_BGN(base_test_mpi_msb_7)
955 FCT_TEST_BGN(base_test_mpi_cmp_int_1)
968 FCT_TEST_BGN(base_test_mpi_cmp_int_2)
981 FCT_TEST_BGN(base_test_mpi_cmp_int_3)
994 FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_1)
1007 FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_2)
1020 FCT_TEST_BGN(base_test_mpi_cmp_int_negative_values_3)
1033 FCT_TEST_BGN(base_test_mpi_cmp_mpi_1)
1047 FCT_TEST_BGN(base_test_mpi_cmp_mpi_2)
1061 FCT_TEST_BGN(base_test_mpi_cmp_mpi_3)
1075 FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_1)
1089 FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_2)
1103 FCT_TEST_BGN(base_test_mpi_cmp_mpi_negative_values_3)
1117 FCT_TEST_BGN(base_test_mpi_cmp_abs_1)
1131 FCT_TEST_BGN(base_test_mpi_cmp_abs_2)
1145 FCT_TEST_BGN(base_test_mpi_cmp_abs_3)
1159 FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_1)
1173 FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_2)
1187 FCT_TEST_BGN(base_test_mpi_cmp_abs_negative_values_3)
1201 FCT_TEST_BGN(base_test_mpi_cmp_abs_zero_and_zero_4)
1215 FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_1)
1229 FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_2)
1243 FCT_TEST_BGN(base_test_mpi_cmp_abs_mix_values_3)
1257 FCT_TEST_BGN(base_test_mpi_copy_1)
1263 fct_chk(
mpi_lset( &Y, 1500 ) == 0 );
1264 fct_chk(
mpi_lset( &A, 1500 ) == 0 );
1267 fct_chk(
mpi_copy( &Y, &X ) == 0 );
1276 FCT_TEST_BGN(base_test_mpi_copy_self_1)
1281 fct_chk(
mpi_lset( &X, 14 ) == 0 );
1282 fct_chk(
mpi_copy( &X, &X ) == 0 );
1290 FCT_TEST_BGN(base_test_mpi_swap_1)
1296 fct_chk(
mpi_lset( &Y, 1500 ) == 0 );
1309 FCT_TEST_BGN(base_test_mpi_add_abs_1)
1325 FCT_TEST_BGN(base_test_mpi_add_abs_2)
1341 FCT_TEST_BGN(base_test_mpi_add_abs_3)
1357 FCT_TEST_BGN(base_test_mpi_add_abs_4)
1373 FCT_TEST_BGN(test_mpi_add_abs_1)
1378 fct_chk(
mpi_read_string( &X, 10,
"-643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
1379 fct_chk(
mpi_read_string( &Y, 10,
"56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
1380 fct_chk(
mpi_read_string( &A, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
1389 FCT_TEST_BGN(test_mpi_add_abs_2_add_to_first_value)
1405 FCT_TEST_BGN(test_mpi_add_abs_3_add_to_second_value)
1421 FCT_TEST_BGN(base_test_mpi_add_mpi_1)
1437 FCT_TEST_BGN(base_test_mpi_add_mpi_2)
1453 FCT_TEST_BGN(base_test_mpi_add_mpi_3)
1469 FCT_TEST_BGN(base_test_mpi_add_mpi_4)
1485 FCT_TEST_BGN(test_mpi_add_mpi_1)
1490 fct_chk(
mpi_read_string( &X, 10,
"203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
1491 fct_chk(
mpi_read_string( &Y, 10,
"531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
1492 fct_chk(
mpi_read_string( &A, 10,
"735829167410606161590850601304167976688497607296479119740072111384235241328747126510065763883532084601487937110881909725679916932621242907172467691556475037071866553361927361439411910627880345885122142692610250903804554267860479115964668998643528806263534149325837971432443181537363155848647445226342" ) == 0 );
1501 FCT_TEST_BGN(test_mpi_add_mpi_2)
1506 fct_chk(
mpi_read_string( &X, 10,
"643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
1507 fct_chk(
mpi_read_string( &Y, 10,
"56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
1508 fct_chk(
mpi_read_string( &A, 10,
"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" ) == 0 );
1517 FCT_TEST_BGN(test_mpi_add_int_1)
1522 fct_chk(
mpi_read_string( &X, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1523 fct_chk(
mpi_read_string( &A, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" ) == 0 );
1532 FCT_TEST_BGN(test_mpi_add_int_2)
1537 fct_chk(
mpi_read_string( &X, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1538 fct_chk(
mpi_read_string( &A, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" ) == 0 );
1547 FCT_TEST_BGN(base_test_mpi_sub_abs_1_test_with_larger_second_input)
1567 FCT_TEST_BGN(base_test_mpi_sub_abs_2_test_with_larger_second_input)
1587 FCT_TEST_BGN(base_test_mpi_sub_abs_3_test_with_larger_second_input)
1607 FCT_TEST_BGN(base_test_mpi_sub_abs_4_test_with_larger_second_input)
1627 FCT_TEST_BGN(base_test_mpi_sub_abs_1)
1638 fct_chk( res == 0 );
1647 FCT_TEST_BGN(base_test_mpi_sub_abs_2)
1658 fct_chk( res == 0 );
1667 FCT_TEST_BGN(base_test_mpi_sub_abs_3)
1678 fct_chk( res == 0 );
1687 FCT_TEST_BGN(base_test_mpi_sub_abs_4)
1698 fct_chk( res == 0 );
1707 FCT_TEST_BGN(test_mpi_sub_abs_1)
1718 fct_chk( res == 0 );
1727 FCT_TEST_BGN(test_mpi_sub_abs_2)
1738 fct_chk( res == 0 );
1747 FCT_TEST_BGN(test_mpi_sub_abs_3)
1758 fct_chk( res == 0 );
1767 FCT_TEST_BGN(test_mpi_sub_abs_4)
1778 fct_chk( res == 0 );
1787 FCT_TEST_BGN(base_test_mpi_sub_mpi_1_test_with_negative_result)
1803 FCT_TEST_BGN(base_test_mpi_sub_mpi_2_test_with_negative_inputs)
1819 FCT_TEST_BGN(base_test_mpi_sub_mpi_3_test_with_negative_base)
1835 FCT_TEST_BGN(base_test_mpi_sub_mpi_4_test_with_negative_substraction)
1851 FCT_TEST_BGN(test_mpi_sub_mpi_1)
1856 fct_chk(
mpi_read_string( &X, 10,
"531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
1857 fct_chk(
mpi_read_string( &Y, 10,
"203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
1858 fct_chk(
mpi_read_string( &A, 10,
"327915410697802206779318867446098822128109620667782593550526818477669115883344571244192531757243908254863191345527661966602498132304629772495811133247475640339722739829047287290977675016498600299425844468565678239514801901107826091797519355347660820341034314686165532823894621049756947818646317646096" ) == 0 );
1867 FCT_TEST_BGN(test_mpi_sub_mpi_2_test_for_negative_result)
1872 fct_chk(
mpi_read_string( &X, 10,
"643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153" ) == 0 );
1873 fct_chk(
mpi_read_string( &Y, 10,
"56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771" ) == 0 );
1874 fct_chk(
mpi_read_string( &A, 10,
"-56125680981752282332854280306765380612153703983633407122513245677043323738275550803657221789827307780393959397039813808626161066208794210143732806809073537503708671504303382290292211925255014779394363592722015507193385383534937618" ) == 0 );
1883 FCT_TEST_BGN(test_mpi_sub_int_1)
1888 fct_chk(
mpi_read_string( &X, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1889 fct_chk(
mpi_read_string( &A, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" ) == 0 );
1898 FCT_TEST_BGN(test_mpi_sub_int_2)
1903 fct_chk(
mpi_read_string( &X, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
1904 fct_chk(
mpi_read_string( &A, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" ) == 0 );
1913 FCT_TEST_BGN(test_mpi_shift_l_1)
1928 FCT_TEST_BGN(test_mpi_shift_l_2)
1933 fct_chk(
mpi_read_string( &X, 10,
"658385546911733550164516088405238961461880256029834598831972039469421755117818013653494814438931957316403111689187691446941406788869098983929874080332195117465344344350008880118042764943201875870917468833709791733282363323948005998269792207" ) == 0 );
1934 fct_chk(
mpi_read_string( &A, 10,
"90487820548639020691922304619723076305400961610119884872723190678642804168382367856686134531865643066983017249846286450251272364365605022750900439437595355052945035915579216557330505438734955340526145476988250171181404966718289259743378883640981192704" ) == 0 );
1943 FCT_TEST_BGN(test_mpi_shift_r_1)
1958 FCT_TEST_BGN(test_mpi_shift_r_2)
1963 fct_chk(
mpi_read_string( &X, 10,
"120815570979701484704906977000760567182871429114712069861589084706550626575967516787438008593490722779337547394120718248995900363209947025063336882559539208430319216688889117222633155838468458047056355241515415159736436403445579777425189969" ) == 0 );
1964 fct_chk(
mpi_read_string( &A, 10,
"3433785053053426415343295076376096153094051405637175942660777670498379921354157795219578264137985649407981651226029903483433269093721578004287291678324982297860947730012217028349628999378309630601971640587504883789518896817457" ) == 0 );
1973 FCT_TEST_BGN(base_test_mpi_mul_mpi_1)
1989 FCT_TEST_BGN(base_test_mpi_mul_mpi_2)
2005 FCT_TEST_BGN(base_test_mpi_mul_mpi_3)
2021 FCT_TEST_BGN(base_test_mpi_mul_mpi_4)
2037 FCT_TEST_BGN(test_mpi_mul_mpi_1)
2042 fct_chk(
mpi_read_string( &X, 10,
"28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537" ) == 0 );
2043 fct_chk(
mpi_read_string( &Y, 10,
"16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953" ) == 0 );
2044 fct_chk(
mpi_read_string( &A, 10,
"476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188761" ) == 0 );
2053 FCT_TEST_BGN(test_mpi_mul_int_1)
2058 fct_chk(
mpi_read_string( &X, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2059 fct_chk(
mpi_read_string( &A, 10,
"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2068 FCT_TEST_BGN(test_mpi_mul_int_2_unsigned_thus_failure)
2073 fct_chk(
mpi_read_string( &X, 10,
"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2074 fct_chk(
mpi_read_string( &A, 10,
"-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2083 FCT_TEST_BGN(test_mpi_mul_int_3)
2088 fct_chk(
mpi_read_string( &X, 10,
"-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2089 fct_chk(
mpi_read_string( &A, 10,
"-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2098 FCT_TEST_BGN(test_mpi_mul_int_4_unsigned_thus_failure)
2103 fct_chk(
mpi_read_string( &X, 10,
"-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329" ) == 0 );
2104 fct_chk(
mpi_read_string( &A, 10,
"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2113 FCT_TEST_BGN(base_test_mpi_div_mpi_1)
2115 mpi X, Y, Q, R, A, B;
2125 fct_chk( res == 0 );
2138 FCT_TEST_BGN(base_test_mpi_div_mpi_2_divide_by_zero)
2140 mpi X, Y, Q, R, A, B;
2163 FCT_TEST_BGN(base_test_mpi_div_mpi_3)
2165 mpi X, Y, Q, R, A, B;
2175 fct_chk( res == 0 );
2188 FCT_TEST_BGN(test_mpi_div_mpi_1)
2190 mpi X, Y, Q, R, A, B;
2195 fct_chk(
mpi_read_string( &X, 10,
"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2197 fct_chk(
mpi_read_string( &A, 10,
"592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
2200 fct_chk( res == 0 );
2213 FCT_TEST_BGN(test_mpi_div_mpi_2)
2215 mpi X, Y, Q, R, A, B;
2220 fct_chk(
mpi_read_string( &X, 10,
"476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188762" ) == 0 );
2221 fct_chk(
mpi_read_string( &Y, 10,
"28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537" ) == 0 );
2222 fct_chk(
mpi_read_string( &A, 10,
"16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953" ) == 0 );
2225 fct_chk( res == 0 );
2238 FCT_TEST_BGN(test_mpi_div_mpi_3)
2240 mpi X, Y, Q, R, A, B;
2250 fct_chk( res == 0 );
2263 FCT_TEST_BGN(test_mpi_div_mpi_4)
2265 mpi X, Y, Q, R, A, B;
2275 fct_chk( res == 0 );
2288 FCT_TEST_BGN(base_test_mpi_div_int_1)
2299 fct_chk( res == 0 );
2312 FCT_TEST_BGN(base_test_mpi_div_int_2_divide_by_zero)
2336 FCT_TEST_BGN(base_test_mpi_div_int_3)
2347 fct_chk( res == 0 );
2360 FCT_TEST_BGN(test_mpi_div_int_1)
2367 fct_chk(
mpi_read_string( &X, 10,
"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2368 fct_chk(
mpi_read_string( &A, 10,
"592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
2371 fct_chk( res == 0 );
2384 FCT_TEST_BGN(test_mpi_div_int_2)
2391 fct_chk(
mpi_read_string( &X, 10,
"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328" ) == 0 );
2392 fct_chk(
mpi_read_string( &A, 10,
"-592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803" ) == 0 );
2395 fct_chk( res == 0 );
2408 FCT_TEST_BGN(base_test_mpi_mod_mpi_1)
2418 fct_chk( res == 0 );
2429 FCT_TEST_BGN(base_test_mpi_mod_mpi_2_divide_by_zero)
2450 FCT_TEST_BGN(base_test_mpi_mod_mpi_3)
2460 fct_chk( res == 0 );
2471 FCT_TEST_BGN(base_test_mpi_mod_mpi_4_negative_modulo)
2492 FCT_TEST_BGN(base_test_mpi_mod_mpi_5_negative_modulo)
2513 FCT_TEST_BGN(base_test_mpi_mod_int_1)
2522 fct_chk( res == 0 );
2533 FCT_TEST_BGN(base_test_mpi_mod_int_2_divide_by_zero)
2553 FCT_TEST_BGN(base_test_mpi_mod_int_3)
2562 fct_chk( res == 0 );
2573 FCT_TEST_BGN(base_test_mpi_mod_int_4_negative_modulo)
2593 FCT_TEST_BGN(base_test_mpi_mod_int_5_negative_modulo)
2613 FCT_TEST_BGN(base_test_mpi_mod_int_6_by_1)
2622 fct_chk( res == 0 );
2633 FCT_TEST_BGN(base_test_mpi_mod_int_7_by_2)
2642 fct_chk( res == 0 );
2653 FCT_TEST_BGN(base_test_mpi_mod_int_8_by_2)
2662 fct_chk( res == 0 );
2673 FCT_TEST_BGN(base_test_mpi_exp_mod_1)
2675 mpi A, E, N, RR, Z, X;
2689 fct_chk( res == 0 );
2701 FCT_TEST_BGN(base_test_mpi_exp_mod_2)
2703 mpi A, E, N, RR, Z, X;
2729 FCT_TEST_BGN(base_test_mpi_exp_mod_3)
2731 mpi A, E, N, RR, Z, X;
2757 FCT_TEST_BGN(test_mpi_exp_mod_1)
2759 mpi A, E, N, RR, Z, X;
2764 fct_chk(
mpi_read_string( &A, 10,
"433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847" ) == 0 );
2765 fct_chk(
mpi_read_string( &E, 10,
"5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721" ) == 0 );
2766 fct_chk(
mpi_read_string( &N, 10,
"583137007797276923956891216216022144052044091311388601652961409557516421612874571554415606746479105795833145583959622117418531166391184939066520869800857530421873250114773204354963864729386957427276448683092491947566992077136553066273207777134303397724679138833126700957" ) == 0 );
2767 fct_chk(
mpi_read_string( &X, 10,
"114597449276684355144920670007147953232659436380163461553186940113929777196018164149703566472936578890991049344459204199888254907113495794730452699842273939581048142004834330369483813876618772578869083248061616444392091693787039636316845512292127097865026290173004860736" ) == 0 );
2773 fct_chk( res == 0 );
2785 FCT_TEST_BGN(base_test_gcd_1)
2793 fct_chk(
mpi_gcd( &Z, &X, &Y ) == 0 );
2801 FCT_TEST_BGN(base_test_gcd_2)
2809 fct_chk(
mpi_gcd( &Z, &X, &Y ) == 0 );
2817 FCT_TEST_BGN(base_test_gcd_3)
2825 fct_chk(
mpi_gcd( &Z, &X, &Y ) == 0 );
2833 FCT_TEST_BGN(test_gcd_1)
2838 fct_chk(
mpi_read_string( &X, 10,
"433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847" ) == 0 );
2839 fct_chk(
mpi_read_string( &Y, 10,
"5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721" ) == 0 );
2841 fct_chk(
mpi_gcd( &Z, &X, &Y ) == 0 );
2848 #ifdef POLARSSL_GENPRIME
2850 FCT_TEST_BGN(base_test_mpi_inv_mod_1)
2860 fct_chk( res == 0 );
2871 #ifdef POLARSSL_GENPRIME
2873 FCT_TEST_BGN(base_test_mpi_inv_mod_2)
2894 #ifdef POLARSSL_GENPRIME
2896 FCT_TEST_BGN(base_test_mpi_inv_mod_3)
2917 #ifdef POLARSSL_GENPRIME
2919 FCT_TEST_BGN(base_test_mpi_inv_mod_4)
2940 #ifdef POLARSSL_GENPRIME
2942 FCT_TEST_BGN(test_mpi_inv_mod_1)
2948 fct_chk(
mpi_read_string( &X, 16,
"aa4df5cb14b4c31237f98bd1faf527c283c2d0f3eec89718664ba33f9762907c" ) == 0 );
2949 fct_chk(
mpi_read_string( &Y, 16,
"fffbbd660b94412ae61ead9c2906a344116e316a256fd387874c6c675b1d587d" ) == 0 );
2950 fct_chk(
mpi_read_string( &A, 16,
"8d6a5c1d7adeae3e94b9bcd2c47e0d46e778bc8804a2cc25c02d775dc3d05b0c" ) == 0 );
2952 fct_chk( res == 0 );
2963 #ifdef POLARSSL_GENPRIME
2965 FCT_TEST_BGN(base_test_mpi_is_prime_1)
2980 #ifdef POLARSSL_GENPRIME
2982 FCT_TEST_BGN(base_test_mpi_is_prime_2)
2997 #ifdef POLARSSL_GENPRIME
2999 FCT_TEST_BGN(base_test_mpi_is_prime_3)
3007 fct_chk( res == 0 );
3014 #ifdef POLARSSL_GENPRIME
3016 FCT_TEST_BGN(base_test_mpi_is_prime_4)
3024 fct_chk( res == 0 );
3031 #ifdef POLARSSL_GENPRIME
3033 FCT_TEST_BGN(base_test_mpi_is_prime_5)
3048 #ifdef POLARSSL_GENPRIME
3050 FCT_TEST_BGN(base_test_mpi_is_prime_6)
3058 fct_chk( res == 0 );
3065 #ifdef POLARSSL_GENPRIME
3067 FCT_TEST_BGN(base_test_mpi_is_prime_7)
3082 #ifdef POLARSSL_GENPRIME
3084 FCT_TEST_BGN(base_test_mpi_is_prime_8)
3092 fct_chk( res == 0 );
3099 #ifdef POLARSSL_GENPRIME
3101 FCT_TEST_BGN(test_mpi_is_prime_1)
3107 fct_chk(
mpi_read_string( &X, 10,
"827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099" ) == 0 );
3109 fct_chk( res == 0 );
3116 #ifdef POLARSSL_GENPRIME
3118 FCT_TEST_BGN(test_mpi_is_prime_2)
3124 fct_chk(
mpi_read_string( &X, 10,
"827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912001" ) == 0 );
3133 #ifdef POLARSSL_GENPRIME
3135 FCT_TEST_BGN(test_mpi_is_prime_3)
3141 fct_chk(
mpi_read_string( &X, 10,
"2833419889721787128217599" ) == 0 );
3143 fct_chk( res == 0 );
3150 #ifdef POLARSSL_GENPRIME
3152 FCT_TEST_BGN(test_mpi_is_prime_4)
3158 fct_chk(
mpi_read_string( &X, 10,
"195845982777569926302400511" ) == 0 );
3160 fct_chk( res == 0 );
3167 #ifdef POLARSSL_GENPRIME
3169 FCT_TEST_BGN(test_mpi_is_prime_5)
3175 fct_chk(
mpi_read_string( &X, 10,
"4776913109852041418248056622882488319" ) == 0 );
3177 fct_chk( res == 0 );
3184 #ifdef POLARSSL_GENPRIME
3186 FCT_TEST_BGN(test_mpi_is_prime_5)
3194 fct_chk( res == 0 );
3201 #ifdef POLARSSL_GENPRIME
3203 FCT_TEST_BGN(test_mpi_is_prime_6)
3209 fct_chk(
mpi_read_string( &X, 10,
"201487636602438195784363" ) == 0 );
3211 fct_chk( res == 0 );
3218 #ifdef POLARSSL_GENPRIME
3220 FCT_TEST_BGN(test_mpi_is_prime_7)
3226 fct_chk(
mpi_read_string( &X, 10,
"845100400152152934331135470251" ) == 0 );
3228 fct_chk( res == 0 );
3235 #ifdef POLARSSL_GENPRIME
3237 FCT_TEST_BGN(test_mpi_is_prime_8)
3243 fct_chk(
mpi_read_string( &X, 10,
"56713727820156410577229101238628035243" ) == 0 );
3245 fct_chk( res == 0 );
3252 #ifdef POLARSSL_GENPRIME
3254 FCT_TEST_BGN(test_mpi_is_prime_9)
3260 fct_chk(
mpi_read_string( &X, 10,
"203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123" ) == 0 );
3262 fct_chk( res == 0 );
3269 #ifdef POLARSSL_GENPRIME
3271 FCT_TEST_BGN(test_mpi_is_prime_10)
3277 fct_chk(
mpi_read_string( &X, 10,
"531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219" ) == 0 );
3279 fct_chk( res == 0 );
3286 #ifdef POLARSSL_GENPRIME
3288 FCT_TEST_BGN(test_mpi_is_prime_11)
3294 fct_chk(
mpi_read_string( &X, 10,
"319705304701141539155720137200974664666792526059405792539680974929469783512821793995613718943171723765238853752439032835985158829038528214925658918372196742089464683960239919950882355844766055365179937610326127675178857306260955550407044463370239890187189750909036833976197804646589380690779463976173" ) == 0 );
3296 fct_chk( res == 0 );
3303 #ifdef POLARSSL_GENPRIME
3305 FCT_TEST_BGN(test_mpi_is_prime_12)
3311 fct_chk(
mpi_read_string( &X, 10,
"200603822195324642393516294012917598972967449320074999667103434371470616000652036570009912021332527788252300901905236578801044680456930305350440933538867383130165841118050781326291059830545891570648243241795871" ) == 0 );
3313 fct_chk( res == 0 );
3320 #ifdef POLARSSL_GENPRIME
3322 FCT_TEST_BGN(test_mpi_is_prime_13)
3328 fct_chk(
mpi_read_string( &X, 10,
"827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099" ) == 0 );
3330 fct_chk( res == 0 );
3337 #ifdef POLARSSL_GENPRIME
3339 FCT_TEST_BGN(test_mpi_is_prime_14)
3345 fct_chk(
mpi_read_string( &X, 10,
"964274047248418797145090983157197980855078966882276492572788532954904112655338439361306213898569516593744267391754033306465125919199692703323878557833023573312685002670662846477592597659826113460619815244721311" ) == 0 );
3347 fct_chk( res == 0 );
3354 #ifdef POLARSSL_GENPRIME
3356 FCT_TEST_BGN(test_mpi_is_prime_15)
3362 fct_chk(
mpi_read_string( &X, 10,
"170141183460469231731687303715884105727" ) == 0 );
3364 fct_chk( res == 0 );
3371 #ifdef POLARSSL_GENPRIME
3373 FCT_TEST_BGN(test_mpi_is_prime_16)
3381 fct_chk( res == 0 );
3388 #ifdef POLARSSL_GENPRIME
3390 FCT_TEST_BGN(test_mpi_is_prime_17)
3398 fct_chk( res == 0 );
3405 #ifdef POLARSSL_GENPRIME
3407 FCT_TEST_BGN(test_mpi_is_prime_18)
3415 fct_chk( res == 0 );
3422 #ifdef POLARSSL_GENPRIME
3424 FCT_TEST_BGN(test_mpi_is_prime_19)
3432 fct_chk( res == 0 );
3439 #ifdef POLARSSL_GENPRIME
3441 FCT_TEST_BGN(test_mpi_is_prime_20)
3449 fct_chk( res == 0 );
3457 FCT_TEST_BGN(test_bit_getting_value_bit_25)
3469 FCT_TEST_BGN(test_bit_getting_larger_but_same_limb)
3481 FCT_TEST_BGN(test_bit_getting_larger_and_non_existing_limb)
3493 FCT_TEST_BGN(test_bit_getting_value_bit_24)
3505 FCT_TEST_BGN(test_bit_getting_value_bit_23)
3517 FCT_TEST_BGN(test_bit_set_change_existing_value_with_a_1)
3532 FCT_TEST_BGN(test_bit_set_change_existing_value_with_a_0)
3547 FCT_TEST_BGN(test_bit_set_add_above_existing_limbs_with_a_0)
3562 FCT_TEST_BGN(test_bit_set_add_above_existing_limbs_with_a_1)
3568 fct_chk(
mpi_read_string( &Y, 10,
"1208925819614629224685863" ) == 0 );
3576 #ifdef POLARSSL_SELF_TEST
3578 FCT_TEST_BGN(mpi_selftest)