88
99#ifndef DISPLAY
1010 #define DISPLAY (x ) printf(x)
11+ #define DISPLAY_P (...) printf(__VA_ARGS__)
12+ #else
13+ #define DISPLAY_P (...) (void)0
14+ #define fp_dump (n ,p ) do{}while(0)
1115#endif
1216
17+ #ifndef fp_dump
18+ void fp_dump (const char * n , fp_int * p )
19+ {
20+ int sz ;
21+ if (fp_radix_size (p , 2 , & sz ) != FP_OKAY )
22+ return ;
23+ char * str = malloc (sz );
24+ if (!str )
25+ return ;
26+ #ifdef STEST_VERBOSE
27+ fp_toradix (p , str , 2 );
28+ DISPLAY_P ("%s = 0b%s\n" , n , str );
29+ fp_toradix (p , str , 16 );
30+ DISPLAY_P ("%s = 0x%s\n" , n , str );
31+ #endif
32+ fp_toradix (p , str , 10 );
33+ DISPLAY_P ("%s = %s\n" , n , str );
34+ free (str );
35+ }
36+ #endif
1337
1438#ifdef GBA_MODE
1539int c_main (void )
@@ -33,14 +57,16 @@ int main(void)
3357 modetxt_gotoxy (0 ,0 );
3458#endif
3559
60+ DISPLAY_P ("TFM Ident string:\n%s\n\n" , fp_ident ());
61+
3662 /* test multiplication */
3763 fp_read_radix (& a , "3453534534535345345341230891273" , 10 );
3864 fp_read_radix (& b , "2394873294871238934718923" , 10 );
3965 fp_read_radix (& c , "8270777629674273015508507050766235312931312159028658979" , 10 );
4066 fp_mul (& a , & b , & d );
4167 if (fp_cmp (& c , & d )) {
4268 DISPLAY ("mul failed\n" );
43- return 0 ;
69+ return -1 ;
4470 } else {
4571 DISPLAY ("mul passed\n" );
4672 }
@@ -52,7 +78,7 @@ int main(void)
5278 fp_mul (& a , & b , & d );
5379 if (fp_cmp (& c , & d )) {
5480 DISPLAY ("mul failed\n" );
55- return 0 ;
81+ return -1 ;
5682 } else {
5783 DISPLAY ("mul passed\n" );
5884 }
@@ -64,7 +90,7 @@ int main(void)
6490 fp_mul (& a , & b , & d );
6591 if (fp_cmp (& c , & d )) {
6692 DISPLAY ("mul failed\n" );
67- return 0 ;
93+ return -1 ;
6894 } else {
6995 DISPLAY ("mul passed\n" );
7096 }
@@ -75,7 +101,7 @@ int main(void)
75101 fp_sqr (& a , & c );
76102 if (fp_cmp (& c , & b )) {
77103 DISPLAY ("sqr failed\n" );
78- return 0 ;
104+ return -1 ;
79105 } else {
80106 DISPLAY ("sqr passed\n" );
81107 }
@@ -85,7 +111,7 @@ int main(void)
85111 fp_sqr (& a , & c );
86112 if (fp_cmp (& c , & b )) {
87113 DISPLAY ("sqr failed\n" );
88- return 0 ;
114+ return -1 ;
89115 } else {
90116 DISPLAY ("sqr passed\n" );
91117 }
@@ -95,7 +121,7 @@ int main(void)
95121 fp_sqr (& a , & c );
96122 if (fp_cmp (& c , & b )) {
97123 DISPLAY ("sqr failed\n" );
98- return 0 ;
124+ return -1 ;
99125 } else {
100126 DISPLAY ("sqr passed\n" );
101127 }
@@ -104,43 +130,56 @@ int main(void)
104130 /* montgomery reductions */
105131 fp_read_radix (& a , "234892374892374893489123428937892781237863278637826327367637836278362783627836783678363" , 10 );
106132 fp_read_radix (& b , "4447823492749823749234123489273987393983289319382762756425425425642727352327452374521" , 10 );
133+ #ifdef FP_64BIT
134+ fp_read_radix (& c , "942974496560863503657226741422301598807235487941674147660989764036913926327577165648" , 10 );
135+ #else
107136 fp_read_radix (& c , "2396271882990732698083317035605836523697277786556053771759862552557086442129695099100" , 10 );
108- fp_montgomery_setup (& b , & dp );
137+ #endif
138+ if (fp_montgomery_setup (& b , & dp ) != FP_OKAY )
139+ DISPLAY ("mont setup failed\n" );
109140 fp_montgomery_reduce (& a , & b , dp );
110141 if (fp_cmp (& a , & c )) {
111142 DISPLAY ("mont failed\n" );
112- return 0 ;
143+ fp_dump ("a (is )" , & a );
144+ fp_dump ("c (should)" , & c );
145+ return -1 ;
113146 } else {
114147 DISPLAY ("mont passed\n" );
115148 }
116149
117150 fp_read_radix (& a , "2348923748923748934891234456645654645645684576353428937892781237863278637826327367637836278362783627836783678363" , 10 );
118151 fp_read_radix (& b , "444782349274982374923412348927398739398328931938276275642542542564272735232745237452123424324324444121111119" , 10 );
119152 fp_read_radix (& c , "45642613844554582908652603086180267403823312390990082328515008314514368668691233331246183943400359349283420" , 10 );
120- fp_montgomery_setup (& b , & dp );
153+ if (fp_montgomery_setup (& b , & dp ) != FP_OKAY )
154+ DISPLAY ("mont setup failed\n" );
121155 fp_montgomery_reduce (& a , & b , dp );
122156 if (fp_cmp (& a , & c )) {
123157 DISPLAY ("mont failed\n" );
124- return 0 ;
158+ fp_dump ("a (is )" , & a );
159+ fp_dump ("c (should)" , & c );
160+ return -1 ;
125161 } else {
126162 DISPLAY ("mont passed\n" );
127163 }
128164
129165 fp_read_radix (& a , "234823424242342923748923748934891234456645654645645684576353424972378234762378623891236834132352375235378462378489378927812378632786378263273676378362783627555555555539568389052478124618461834763837685723645827529034853490580134568947341278498542893481762349723907847892983627836783678363" , 10 );
130166 fp_read_radix (& b , "44478234927456563455982374923412348927398739398328931938276275642485623481638279025465891276312903262837562349056234783648712314678120389173890128905425242424239784256427" , 10 );
131167 fp_read_radix (& c , "33160865265453361650564031464519042126185632333462754084489985719613480783282357410514898819797738034600484519472656152351777186694609218202276509271061460265488348645081" , 10 );
132- fp_montgomery_setup (& b , & dp );
168+ if (fp_montgomery_setup (& b , & dp ) != FP_OKAY )
169+ DISPLAY ("mont setup failed\n" );
133170 fp_montgomery_reduce (& a , & b , dp );
134171 if (fp_cmp (& a , & c )) {
135172 DISPLAY ("mont failed\n" );
136- return 0 ;
173+ fp_dump ("a (is )" , & a );
174+ fp_dump ("c (should)" , & c );
175+ return -1 ;
137176 } else {
138177 DISPLAY ("mont passed\n" );
139178 }
140179
141180
142181 return 0 ;
143- }
182+ }
144183
145184
146185/* $Source$ */
0 commit comments