From f813838ad4ed039c1a9cb94479bea4fa7d91a5cb Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Thu, 18 Dec 2025 18:36:25 +0800 Subject: [PATCH] Fix LMS/HSS key cleanup --- tools/hsskeygen.c | 4 +++- tools/hsssign.c | 4 +++- tools/lmskeygen.c | 4 +++- tools/lmssign.c | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/tools/hsskeygen.c b/tools/hsskeygen.c index 0015861e..5b5b9707 100644 --- a/tools/hsskeygen.c +++ b/tools/hsskeygen.c @@ -56,6 +56,8 @@ int hsskeygen_main(int argc, char **argv) uint8_t *ppubout = pubout; size_t outlen = 0, puboutlen = 0; + memset(&key, 0, sizeof(key)); + argc--; argv++; @@ -150,7 +152,7 @@ bad: ret = 0; end: - gmssl_secure_clear(&key, sizeof(key)); + hss_key_cleanup(&key); gmssl_secure_clear(out, outlen); if (outfile && outfp) fclose(outfp); if (puboutfile && puboutfp) fclose(puboutfp); diff --git a/tools/hsssign.c b/tools/hsssign.c index 47a26b16..f73f09ee 100644 --- a/tools/hsssign.c +++ b/tools/hsssign.c @@ -46,6 +46,8 @@ int hsssign_main(int argc, char **argv) uint8_t sig[HSS_SIGNATURE_MAX_SIZE]; size_t siglen; + memset(&key, 0, sizeof(key)); + argc--; argv++; @@ -160,8 +162,8 @@ bad: ret = 0; end: + hss_key_cleanup(&key); gmssl_secure_clear(keybuf, sizeof(keybuf)); - gmssl_secure_clear(&key, sizeof(key)); gmssl_secure_clear(&ctx, sizeof(ctx)); if (keyfp) fclose(keyfp); if (infp && infp != stdin) fclose(infp); diff --git a/tools/lmskeygen.c b/tools/lmskeygen.c index c125f819..2b949c72 100644 --- a/tools/lmskeygen.c +++ b/tools/lmskeygen.c @@ -50,6 +50,8 @@ int lmskeygen_main(int argc, char **argv) uint8_t *ppubout = pubout; size_t outlen = 0, puboutlen = 0; + memset(&key, 0, sizeof(key)); + argc--; argv++; @@ -136,7 +138,7 @@ bad: ret = 0; end: - gmssl_secure_clear(&key, sizeof(key)); + lms_key_cleanup(&key); gmssl_secure_clear(out, outlen); if (outfile && outfp) fclose(outfp); if (puboutfile && puboutfp) fclose(puboutfp); diff --git a/tools/lmssign.c b/tools/lmssign.c index 73d4fafd..741d3db5 100644 --- a/tools/lmssign.c +++ b/tools/lmssign.c @@ -46,6 +46,8 @@ int lmssign_main(int argc, char **argv) uint8_t sig[LMS_SIGNATURE_MAX_SIZE]; size_t siglen; + memset(&key, 0, sizeof(key)); + argc--; argv++; @@ -160,8 +162,8 @@ bad: ret = 0; end: + lms_key_cleanup(&key); gmssl_secure_clear(keybuf, sizeof(keybuf)); - gmssl_secure_clear(&key, sizeof(key)); gmssl_secure_clear(&ctx, sizeof(ctx)); if (keyfp) fclose(keyfp); if (infp && infp != stdin) fclose(infp);