@@ -83,27 +83,20 @@ static bool LmsWritePrivKey(unsigned char *private_key,
8383 return false;
8484 }
8585
86- if (key -> write_private_key != NULL ) {
87- /* Use write callback. */
88- ret = key -> write_private_key (private_key , len_private_key , key -> context );
89-
90- if (ret != WC_LMS_RC_SAVED_TO_NV_MEMORY ) {
91- WOLFSSL_MSG ("error: LmsKey write_private_key failed" );
92- WOLFSSL_MSG (wc_LmsKey_RcToStr (ret ));
93- key -> state = WC_LMS_STATE_BAD ;
94- return false;
95- }
86+ if (key -> write_private_key == NULL ) {
87+ WOLFSSL_MSG ("error: LmsWritePrivKey: LMS key write callback not set" );
88+ key -> state = WC_LMS_STATE_NOT_INITED ;
89+ return false;
9690 }
97- else {
98- /* Save to memory. */
99- if (len_private_key > sizeof (key -> priv )) {
100- WOLFSSL_MSG ("error: LmsWritePrivKey: private key too large" );
101- key -> state = WC_LMS_STATE_BAD ;
102- return false;
103- }
10491
105- XMEMSET (key -> priv , 0 , sizeof (key -> priv ));
106- XMEMCPY (key -> priv , private_key , len_private_key );
92+ /* Use write callback. */
93+ ret = key -> write_private_key (private_key , len_private_key , key -> context );
94+
95+ if (ret != WC_LMS_RC_SAVED_TO_NV_MEMORY ) {
96+ WOLFSSL_MSG ("error: LmsKey write_private_key failed" );
97+ WOLFSSL_MSG (wc_LmsKey_RcToStr (ret ));
98+ key -> state = WC_LMS_STATE_BAD ;
99+ return false;
107100 }
108101
109102 return true;
@@ -128,26 +121,20 @@ static bool LmsReadPrivKey(unsigned char *private_key,
128121 return false;
129122 }
130123
131- if (key -> read_private_key != NULL ) {
132- /* Use read callback. */
133- ret = key -> read_private_key (private_key , len_private_key , key -> context );
134-
135- if (ret != WC_LMS_RC_READ_TO_MEMORY ) {
136- WOLFSSL_MSG ("error: LmsKey read_private_key failed" );
137- WOLFSSL_MSG (wc_LmsKey_RcToStr (ret ));
138- key -> state = WC_LMS_STATE_BAD ;
139- return false;
140- }
124+ if (key -> read_private_key == NULL ) {
125+ WOLFSSL_MSG ("error: LmsReadPrivKey: LMS key read callback not set" );
126+ key -> state = WC_LMS_STATE_NOT_INITED ;
127+ return false;
141128 }
142- else {
143- /* Read from memory. */
144- if (len_private_key > sizeof (key -> priv )) {
145- WOLFSSL_MSG ("error: LmsReadPrivKey: private key too large" );
146- key -> state = WC_LMS_STATE_BAD ;
147- return false;
148- }
149129
150- XMEMCPY (private_key , key -> priv , len_private_key );
130+ /* Use read callback. */
131+ ret = key -> read_private_key (private_key , len_private_key , key -> context );
132+
133+ if (ret != WC_LMS_RC_READ_TO_MEMORY ) {
134+ WOLFSSL_MSG ("error: LmsKey read_private_key failed" );
135+ WOLFSSL_MSG (wc_LmsKey_RcToStr (ret ));
136+ key -> state = WC_LMS_STATE_BAD ;
137+ return false;
151138 }
152139
153140 return true;
@@ -362,11 +349,6 @@ int wc_LmsKey_Init_ex(LmsKey * key, int levels, int height,
362349
363350 hss_init_extra_info (& key -> info );
364351
365- /* The hash-sigs lib API will accept either:
366- * 1. private key callbacks with context pointer, or
367- * 2. context that points at private key.
368- * Do the 2nd by default, unless user sets the callbacks through API. */
369-
370352 key -> working_key = NULL ;
371353 key -> write_private_key = NULL ;
372354 key -> read_private_key = NULL ;
@@ -407,6 +389,16 @@ int wc_LmsKey_MakeKey(LmsKey* key, WC_RNG * rng)
407389 return -1 ;
408390 }
409391
392+ if (key -> write_private_key == NULL || key -> read_private_key == NULL ) {
393+ WOLFSSL_MSG ("error: LmsKey write/read callbacks are not set" );
394+ return -1 ;
395+ }
396+
397+ if (key -> context == NULL ) {
398+ WOLFSSL_MSG ("error: LmsKey context is not set" );
399+ return -1 ;
400+ }
401+
410402 LmsRng = rng ;
411403
412404 /* todo: The has-sigs lib allows you to save variable length auxiliary
@@ -449,24 +441,24 @@ int wc_LmsKey_MakeKey(LmsKey* key, WC_RNG * rng)
449441 return 0 ;
450442}
451443
452- int wc_LmsKey_SetWriteCb (LmsKey * key , write_private_key_cb wf )
444+ int wc_LmsKey_SetWriteCb (LmsKey * key , write_private_key_cb write_cb )
453445{
454- if (key == NULL || wf == NULL ) {
446+ if (key == NULL || write_cb == NULL ) {
455447 return BAD_FUNC_ARG ;
456448 }
457449
458- key -> write_private_key = wf ;
450+ key -> write_private_key = write_cb ;
459451
460452 return 0 ;
461453}
462454
463- int wc_LmsKey_SetReadCb (LmsKey * key , read_private_key_cb rf )
455+ int wc_LmsKey_SetReadCb (LmsKey * key , read_private_key_cb read_cb )
464456{
465- if (key == NULL || rf == NULL ) {
457+ if (key == NULL || read_cb == NULL ) {
466458 return BAD_FUNC_ARG ;
467459 }
468460
469- key -> read_private_key = rf ;
461+ key -> read_private_key = read_cb ;
470462
471463 return 0 ;
472464}
@@ -499,6 +491,16 @@ int wc_LmsKey_Reload(LmsKey * key)
499491 return -1 ;
500492 }
501493
494+ if (key -> write_private_key == NULL || key -> read_private_key == NULL ) {
495+ WOLFSSL_MSG ("error: LmsKey write/read callbacks are not set" );
496+ return -1 ;
497+ }
498+
499+ if (key -> context == NULL ) {
500+ WOLFSSL_MSG ("error: LmsKey context is not set" );
501+ return -1 ;
502+ }
503+
502504 key -> working_key = hss_load_private_key (LmsReadPrivKey , key ,
503505 0 , NULL , 0 , & key -> info );
504506
0 commit comments