@@ -778,23 +778,39 @@ static void keygen_lms(const char *priv_fname, uint32_t id_mask)
778778 int ret ;
779779 byte lms_pub [HSS_MAX_PUBLIC_KEY_LEN ];
780780 word32 pub_len = sizeof (lms_pub );
781+ int lms_levels , lms_height , lms_winternitz ;
782+ char * env_lms_levels , * env_lms_height , * env_lms_winternitz ;
783+
784+ lms_levels = LMS_LEVELS ;
785+ lms_height = LMS_HEIGHT ;
786+ lms_winternitz = LMS_WINTERNITZ ;
787+
788+ env_lms_levels = getenv ("LMS_LEVELS" );
789+ env_lms_height = getenv ("LMS_HEIGHT" );
790+ env_lms_winternitz = getenv ("LMS_WINTERNITZ" );
791+ if (env_lms_levels != NULL )
792+ lms_levels = atoi (env_lms_levels );
793+ if (env_lms_height != NULL )
794+ lms_height = atoi (env_lms_height );
795+ if (env_lms_winternitz != NULL )
796+ lms_winternitz = atoi (env_lms_winternitz );
781797
782798 ret = wc_LmsKey_Init (& key , NULL , INVALID_DEVID );
783799 if (ret != 0 ) {
784800 fprintf (stderr , "error: wc_LmsKey_Init returned %d\n" , ret );
785801 exit (1 );
786802 }
787803
788- ret = wc_LmsKey_SetParameters (& key , LMS_LEVELS , LMS_HEIGHT , LMS_WINTERNITZ );
804+ ret = wc_LmsKey_SetParameters (& key , lms_levels , lms_height , lms_winternitz );
789805 if (ret != 0 ) {
790806 fprintf (stderr , "error: wc_LmsKey_SetParameters(%d, %d, %d)" \
791- " returned %d\n" , LMS_LEVELS , LMS_HEIGHT ,
792- LMS_WINTERNITZ , ret );
807+ " returned %d\n" , lms_levels , lms_height ,
808+ lms_winternitz , ret );
793809 exit (1 );
794810 }
795811
796- printf ("info: using LMS parameters: L%d-H%d-W%d\n" , LMS_LEVELS ,
797- LMS_HEIGHT , LMS_WINTERNITZ );
812+ printf ("info: using LMS parameters: L%d-H%d-W%d\n" , lms_levels ,
813+ lms_height , lms_winternitz );
798814
799815 ret = wc_LmsKey_SetWriteCb (& key , lms_write_key );
800816 if (ret != 0 ) {
@@ -865,6 +881,7 @@ static void keygen_xmss(const char *priv_fname, uint32_t id_mask)
865881 int ret ;
866882 word32 priv_sz = 0 ;
867883 byte xmss_pub [XMSS_SHA256_PUBLEN ];
884+ char * xmss_params = getenv ("XMSS_PARAMS" );
868885 word32 pub_len = sizeof (xmss_pub );
869886
870887 ret = wc_XmssKey_Init (& key , NULL , INVALID_DEVID );
@@ -873,14 +890,17 @@ static void keygen_xmss(const char *priv_fname, uint32_t id_mask)
873890 exit (1 );
874891 }
875892
876- ret = wc_XmssKey_SetParamStr (& key , WOLFBOOT_XMSS_PARAMS );
893+ if (xmss_params != NULL )
894+ xmss_params = WOLFBOOT_XMSS_PARAMS ;
895+
896+ ret = wc_XmssKey_SetParamStr (& key , xmss_params );
877897 if (ret != 0 ) {
878898 fprintf (stderr , "error: wc_XmssKey_SetParamStr(%s)" \
879- " returned %d\n" , WOLFBOOT_XMSS_PARAMS , ret );
899+ " returned %d\n" , xmss_params , ret );
880900 exit (1 );
881901 }
882902
883- printf ("info: using XMSS parameters: %s\n" , WOLFBOOT_XMSS_PARAMS );
903+ printf ("info: using XMSS parameters: %s\n" , xmss_params );
884904
885905 ret = wc_XmssKey_SetWriteCb (& key , xmss_write_key );
886906 if (ret != 0 ) {
0 commit comments