1818 #define PRI64 "ll"
1919#endif
2020
21+ #ifdef TFM_DESC
22+ #include <tfm.h>
23+ #endif
2124
2225#define DO (x ) do{ \
2326 int err; \
@@ -674,6 +677,16 @@ static void time_prng(void)
674677 }
675678}
676679
680+ static int check_tfm_limit (unsigned long x )
681+ {
682+ #ifdef TFM_DESC
683+ if (strcasecmp (ltc_mp .name , "tomsfastmath" ) == 0 ) {
684+ if (x * 2 > FP_MAX_SIZE ) return 1 ;
685+ }
686+ #endif
687+ return 0 ;
688+ }
689+
677690#if defined(LTC_MDSA )
678691/* time various DSA operations */
679692static void time_dsa (void )
@@ -691,15 +704,14 @@ static void time_dsa(void)
691704 { 20 , 128 },
692705 { 24 , 192 },
693706 { 28 , 256 },
694- #ifndef TFM_DESC
695707 { 32 , 512 },
696- #endif
697708 };
698709
699710 if (ltc_mp .name == NULL ) return ;
700711
701712 print_csv_header ("group" , "modulus" );
702713 for (x = 0 ; x < (sizeof (groups ) / sizeof (groups [0 ])); x ++ ) {
714+ if (check_tfm_limit (groups [x ].modulus * 8 )) break ;
703715 t2 = 0 ;
704716 for (y = 0 ; y < 4 ; y ++ ) {
705717 t_start ();
@@ -735,7 +747,6 @@ static void time_dsa(void)
735747static void time_dsa (void ) { fprintf (stderr , "NO DSA\n" ); }
736748#endif
737749
738-
739750#if defined(LTC_MRSA )
740751/* time various RSA operations */
741752static void time_rsa (void )
@@ -751,6 +762,7 @@ static void time_rsa(void)
751762
752763 print_csv_header ("keysize" , NULL );
753764 for (x = 2048 ; x <= 8192 ; x <<= 1 ) {
765+ if (check_tfm_limit (x )) break ;
754766
755767#ifndef TIMING_DONT_MAKE_KEY
756768 t2 = 0 ;
@@ -861,16 +873,15 @@ static void time_dh(void)
861873 ulong64 t1 , t2 ;
862874 unsigned long i , x , y ;
863875 static unsigned long sizes [] = {768 /8 , 1024 /8 , 1536 /8 , 2048 /8 ,
864- #ifndef TFM_DESC
865876 3072 /8 , 4096 /8 , 6144 /8 , 8192 /8 ,
866- #endif
867877 100000
868878 };
869879
870880 if (ltc_mp .name == NULL ) return ;
871881
872882 print_csv_header ("keysize" , NULL );
873883 for (x = sizes [i = 0 ]; x < 100000 ; x = sizes [++ i ]) {
884+ if (check_tfm_limit (x )) break ;
874885 t2 = 0 ;
875886 for (y = 0 ; y < 16 ; y ++ ) {
876887 DO (dh_set_pg_groupsize (x , & key ));
@@ -932,6 +943,7 @@ static void time_ecc(void)
932943
933944 print_csv_header ("keysize" , NULL );
934945 for (x = ecc_key_sizes [i = 0 ]; x < 100000 ; x = ecc_key_sizes [++ i ]) {
946+ if (check_tfm_limit (x )) break ;
935947
936948#ifndef TIMING_DONT_MAKE_KEY
937949 t2 = 0 ;
0 commit comments