From af5485fafbeeba67a1ca998277b0696f547bf612 Mon Sep 17 00:00:00 2001 From: Norman Ashley Date: Sat, 2 Dec 2023 08:14:15 +0000 Subject: [PATCH] Add multi level LMS variants supported by other libraried --- src/sig_stfl/lms/sig_stfl_lms.c | 164 ++++++++++++++++++++++ src/sig_stfl/lms/sig_stfl_lms.h | 107 +++++++++----- src/sig_stfl/lms/sig_stfl_lms_functions.c | 14 ++ src/sig_stfl/sig_stfl.c | 14 ++ src/sig_stfl/sig_stfl.h | 4 +- 5 files changed, 268 insertions(+), 35 deletions(-) diff --git a/src/sig_stfl/lms/sig_stfl_lms.c b/src/sig_stfl/lms/sig_stfl_lms.c index 4013c7a473..5d9c8281b2 100644 --- a/src/sig_stfl/lms/sig_stfl_lms.c +++ b/src/sig_stfl/lms/sig_stfl_lms.c @@ -1839,6 +1839,170 @@ OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H5_W8_H5_W8_new(void) { return sk; } +// ======================== LMS-SHA256 H10/W2, H10/W2 ======================== // + +OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key) { + if (secret_key == NULL || public_key == NULL) { + return OQS_ERROR; + } + + if (oqs_sig_stfl_lms_keypair(public_key, secret_key, (const uint32_t)OQS_LMS_ID_sha256_n32_h10_w2_h10_w2) != 0) { + return OQS_ERROR; + } + return OQS_SUCCESS; +} + +OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_new(void) { + + OQS_SIG_STFL *sig = (OQS_SIG_STFL *)malloc(sizeof(OQS_SIG_STFL)); + if (sig == NULL) { + return NULL; + } + memset(sig, 0, sizeof(OQS_SIG_STFL)); + + sig->oid = OQS_LMS_ID_sha256_n32_h10_w2_h10_w2; + sig->method_name = OQS_SIG_STFL_alg_lms_sha256_n32_h10_w2_h10_w2; + sig->alg_version = "https://datatracker.ietf.org/doc/html/rfc8554"; + sig->euf_cma = true; + + sig->length_public_key = OQS_SIG_STFL_alg_lms_length_public_key; + sig->length_signature = OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_length_signature; + sig->length_secret_key = OQS_SIG_STFL_alg_lms_length_private_key; + + sig->keypair = OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_keypair; + sig->sign = OQS_SIG_STFL_alg_lms_sign; + sig->verify = OQS_SIG_STFL_alg_lms_verify; + + sig->sigs_remaining = OQS_SIG_STFL_lms_sigs_left; + sig->sigs_total = OQS_SIG_STFL_lms_sigs_total; + + return sig; +} + +OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W2_H10_W2_new(void) { + + // Initialize the secret key in the heap with adequate memory + OQS_SIG_STFL_SECRET_KEY *sk = malloc(sizeof(OQS_SIG_STFL_SECRET_KEY)); + if (sk == NULL) { + return NULL; + } + memset(sk, 0, sizeof(OQS_SIG_STFL_SECRET_KEY)); + + // Initialize the key with length_secret_key amount of bytes. + sk->length_secret_key = OQS_SIG_STFL_alg_lms_length_private_key; + + /* + * Secret Key retrieval Function + */ + sk->serialize_key = OQS_SECRET_KEY_LMS_serialize_key; + + /* + * set Secret Key to internal structure Function + */ + sk->deserialize_key = OQS_SECRET_KEY_LMS_deserialize_key; + + /* + * Set Secret Key Locking Function + */ + sk->lock_key = NULL; + + /* + * Set Secret Key Saving Function + */ + sk->secure_store_scrt_key = NULL; + + /* + * Set Secret Key free function + */ + sk->free_key = OQS_SECRET_KEY_LMS_free; + + sk->set_scrt_key_store_cb = OQS_SECRET_KEY_LMS_set_store_cb; + + return sk; +} + +// ======================== LMS-SHA256 H10/W4, H10/W4 ======================== // + +OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key) { + if (secret_key == NULL || public_key == NULL) { + return OQS_ERROR; + } + + if (oqs_sig_stfl_lms_keypair(public_key, secret_key, (const uint32_t)OQS_LMS_ID_sha256_n32_h10_w4_h10_w4) != 0) { + return OQS_ERROR; + } + return OQS_SUCCESS; +} + +OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_new(void) { + + OQS_SIG_STFL *sig = (OQS_SIG_STFL *)malloc(sizeof(OQS_SIG_STFL)); + if (sig == NULL) { + return NULL; + } + memset(sig, 0, sizeof(OQS_SIG_STFL)); + + sig->oid = OQS_LMS_ID_sha256_n32_h10_w4_h10_w4; + sig->method_name = OQS_SIG_STFL_alg_lms_sha256_n32_h10_w4_h10_w4; + sig->alg_version = "https://datatracker.ietf.org/doc/html/rfc8554"; + sig->euf_cma = true; + + sig->length_public_key = OQS_SIG_STFL_alg_lms_length_public_key; + sig->length_signature = OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_length_signature; + sig->length_secret_key = OQS_SIG_STFL_alg_lms_length_private_key; + + sig->keypair = OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_keypair; + sig->sign = OQS_SIG_STFL_alg_lms_sign; + sig->verify = OQS_SIG_STFL_alg_lms_verify; + + sig->sigs_remaining = OQS_SIG_STFL_lms_sigs_left; + sig->sigs_total = OQS_SIG_STFL_lms_sigs_total; + + return sig; +} + +OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W4_H10_W4_new(void) { + + // Initialize the secret key in the heap with adequate memory + OQS_SIG_STFL_SECRET_KEY *sk = malloc(sizeof(OQS_SIG_STFL_SECRET_KEY)); + if (sk == NULL) { + return NULL; + } + memset(sk, 0, sizeof(OQS_SIG_STFL_SECRET_KEY)); + + // Initialize the key with length_secret_key amount of bytes. + sk->length_secret_key = OQS_SIG_STFL_alg_lms_length_private_key; + + /* + * Secret Key retrieval Function + */ + sk->serialize_key = OQS_SECRET_KEY_LMS_serialize_key; + + /* + * set Secret Key to internal structure Function + */ + sk->deserialize_key = OQS_SECRET_KEY_LMS_deserialize_key; + + /* + * Set Secret Key Locking Function + */ + sk->lock_key = NULL; + + /* + * Set Secret Key Saving Function + */ + sk->secure_store_scrt_key = NULL; + + /* + * Set Secret Key free function + */ + sk->free_key = OQS_SECRET_KEY_LMS_free; + + sk->set_scrt_key_store_cb = OQS_SECRET_KEY_LMS_set_store_cb; + + return sk; +} + // ======================== LMS-SHA256 H10/W8, H5/W8 ======================== // OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key) { diff --git a/src/sig_stfl/lms/sig_stfl_lms.h b/src/sig_stfl/lms/sig_stfl_lms.h index fcd146c9f2..ee1a379e40 100644 --- a/src/sig_stfl/lms/sig_stfl_lms.h +++ b/src/sig_stfl/lms/sig_stfl_lms.h @@ -7,42 +7,70 @@ //OQS LMS parameter identifiers /* Defined LM parameter sets */ -#define OQS_LMS_ID_sha256_n32_h5_w1 0x1 //"5/1" -#define OQS_LMS_ID_sha256_n32_h5_w2 0x2 //"5/2" -#define OQS_LMS_ID_sha256_n32_h5_w4 0x3 //"5/4" -#define OQS_LMS_ID_sha256_n32_h5_w8 0x4 //"5/8" - -#define OQS_LMS_ID_sha256_n32_h10_w1 0x5 //"10/1" -#define OQS_LMS_ID_sha256_n32_h10_w2 0x7 //"10/2" -#define OQS_LMS_ID_sha256_n32_h10_w4 0x8 //"10/4" -#define OQS_LMS_ID_sha256_n32_h10_w8 0x9 //"10/8" - -#define OQS_LMS_ID_sha256_n32_h15_w1 0xa //"15/1" -#define OQS_LMS_ID_sha256_n32_h15_w2 0xb //"15/2" -#define OQS_LMS_ID_sha256_n32_h15_w4 0xc//"15/4" -#define OQS_LMS_ID_sha256_n32_h15_w8 0xd //"15/8" - -#define OQS_LMS_ID_sha256_n32_h20_w1 0xe //"20/1" -#define OQS_LMS_ID_sha256_n32_h20_w2 0xf //"20/2" -#define OQS_LMS_ID_sha256_n32_h20_w4 0x10 //"20/4" -#define OQS_LMS_ID_sha256_n32_h20_w8 0x11 //"20/8" - -#define OQS_LMS_ID_sha256_n32_h25_w1 0x12 //"25/1" -#define OQS_LMS_ID_sha256_n32_h25_w2 0x13 //"25/2" -#define OQS_LMS_ID_sha256_n32_h25_w4 0x14 //"25/4" -#define OQS_LMS_ID_sha256_n32_h25_w8 0x15 //"25/8" +/* + * Convention + * Where ... + * L = number of Levels + * H = LMS H ID + * LMS_SHA256_M32_H5 0x05 + * LMS_SHA256_M32_H10 0x06 + * LMS_SHA256_M32_H15 0x07 + * LMS_SHA256_M32_H20 0x08 + * LMS_SHA256_M32_H25 0x09 + * + * W = Winternitz value + * LMOTS_SHA256_N32_W1 0x01 + * LMOTS_SHA256_N32_W2 0x02 + * LMOTS_SHA256_N32_W4 0x03 + * LMOTS_SHA256_N32_W8 0x04 + * + * e.g. + * OQS_LMS_ID_sha256_n32_h5_w1 -- "5/1" ----- 0x0151 + * "5/1,5/2" ----- 0x025152 + 0x0LHS0H0W + */ +#define OQS_LMS_ID_sha256_n32_h5_w1 0x0151 //"5/1" +#define OQS_LMS_ID_sha256_n32_h5_w2 0x0152 //"5/2" +#define OQS_LMS_ID_sha256_n32_h5_w4 0x0153 //"5/4" +#define OQS_LMS_ID_sha256_n32_h5_w8 0x0154 //"5/8" + +#define OQS_LMS_ID_sha256_n32_h10_w1 0x0161 //"10/1" +#define OQS_LMS_ID_sha256_n32_h10_w2 0x0162 //"10/2" +#define OQS_LMS_ID_sha256_n32_h10_w4 0x0163 //"10/4" +#define OQS_LMS_ID_sha256_n32_h10_w8 0x0164 //"10/8" + +#define OQS_LMS_ID_sha256_n32_h15_w1 0x0171 //"15/1" +#define OQS_LMS_ID_sha256_n32_h15_w2 0x0172 //"15/2" +#define OQS_LMS_ID_sha256_n32_h15_w4 0x0173 //"15/4" +#define OQS_LMS_ID_sha256_n32_h15_w8 0x0174 //"15/8" + +#define OQS_LMS_ID_sha256_n32_h20_w1 0x0181 //"20/1" +#define OQS_LMS_ID_sha256_n32_h20_w2 0x0182 //"20/2" +#define OQS_LMS_ID_sha256_n32_h20_w4 0x0183 //"20/4" +#define OQS_LMS_ID_sha256_n32_h20_w8 0x0184 //"20/8" + +#define OQS_LMS_ID_sha256_n32_h25_w1 0x0191 //"25/1" +#define OQS_LMS_ID_sha256_n32_h25_w2 0x0192 //"25/2" +#define OQS_LMS_ID_sha256_n32_h25_w4 0x0193 //"25/4" +#define OQS_LMS_ID_sha256_n32_h25_w8 0x0194 //"25/8" //2-Level LMS -#define OQS_LMS_ID_sha256_n32_h5_w8_h5_w8 0x50 //"5/8,5/8" -#define OQS_LMS_ID_sha256_n32_h10_w8_h5_w8 0xA0 //"10/8,5/8" -#define OQS_LMS_ID_sha256_n32_h10_w8_h10_w8 0xA1 //"10/8,10/8" -#define OQS_LMS_ID_sha256_n32_h15_w8_h5_w8 0xF0 //"15/8,5/8" -#define OQS_LMS_ID_sha256_n32_h15_w8_h10_w8 0xF1 //"15/8,10/8" -#define OQS_LMS_ID_sha256_n32_h15_w8_h15_w8 0xF2 //"15/8,15/8" -#define OQS_LMS_ID_sha256_n32_h20_w8_h5_w8 0x140 //"20/8,5/8" -#define OQS_LMS_ID_sha256_n32_h20_w8_h10_w8 0x141 //"20/8,10/8" -#define OQS_LMS_ID_sha256_n32_h20_w8_h15_w8 0x142 //"20/8,15/8" -#define OQS_LMS_ID_sha256_n32_h20_w8_h20_w8 0x143 //"20/8,20/8" +#define OQS_LMS_ID_sha256_n32_h5_w8_h5_w8 0x025454 //"5/8,5/8" + +//Wolf +#define OQS_LMS_ID_sha256_n32_h10_w2_h10_w2 0x026262 //"10/2,10/2" +#define OQS_LMS_ID_sha256_n32_h10_w4_h10_w4 0x026363 //"10/4,10/4" + +#define OQS_LMS_ID_sha256_n32_h10_w8_h5_w8 0x026454 //"10/8,5/8" +//Wolf +#define OQS_LMS_ID_sha256_n32_h10_w8_h10_w8 0x026464 //"10/8,10/8" +#define OQS_LMS_ID_sha256_n32_h15_w8_h5_w8 0x027454 //"15/8,5/8" +#define OQS_LMS_ID_sha256_n32_h15_w8_h10_w8 0x027464 //"15/8,10/8" +#define OQS_LMS_ID_sha256_n32_h15_w8_h15_w8 0x027474 //"15/8,15/8" +#define OQS_LMS_ID_sha256_n32_h20_w8_h5_w8 0x028454 //"20/8,5/8" +#define OQS_LMS_ID_sha256_n32_h20_w8_h10_w8 0x028464 //"20/8,10/8" +#define OQS_LMS_ID_sha256_n32_h20_w8_h15_w8 0x028474 //"20/8,15/8" +#define OQS_LMS_ID_sha256_n32_h20_w8_h20_w8 0x028484 //"20/8,20/8" //H5 #define OQS_SIG_STFL_alg_lms_sha256_h5_w1_length_signature 8688 @@ -217,6 +245,9 @@ void OQS_SECRET_KEY_LMS_free(OQS_SIG_STFL_SECRET_KEY *sk); #define OQS_SIG_STFL_alg_lms_sha256_h5_w8_h5_w8_length_signature 2644 #define OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_length_signature 2804 + +#define OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_length_signature 9300 +#define OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_length_signature 5076 #define OQS_SIG_STFL_alg_lms_sha256_h10_w8_h10_w8_length_signature 2964 #define OQS_SIG_STFL_alg_lms_sha256_h15_w8_h5_w8_length_signature 2964 @@ -236,6 +267,14 @@ OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_keypair(uint8_t *pub OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W8_H5_W8_new(void); OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_new(void); +OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key); +OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W2_H10_W2_new(void); +OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_new(void); + +OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key); +OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W4_H10_W4_new(void); +OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_new(void); + OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w8_h10_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key); OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W8_H10_W8_new(void); OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w8_h10_w8_new(void); diff --git a/src/sig_stfl/lms/sig_stfl_lms_functions.c b/src/sig_stfl/lms/sig_stfl_lms_functions.c index d9203ecf29..88c48c532f 100644 --- a/src/sig_stfl/lms/sig_stfl_lms_functions.c +++ b/src/sig_stfl/lms/sig_stfl_lms_functions.c @@ -374,6 +374,20 @@ int oqs_sig_stfl_lms_keypair(uint8_t *pk, OQS_SIG_STFL_SECRET_KEY *sk, const uin oqs_key_data->lm_type[1] = LMS_SHA256_N32_H5; oqs_key_data->lm_ots_type[1] = LMOTS_SHA256_N32_W8; break; + case OQS_LMS_ID_sha256_n32_h10_w2_h10_w2: + oqs_key_data->levels = 2; + oqs_key_data->lm_type[0] = LMS_SHA256_N32_H10; + oqs_key_data->lm_ots_type[0] = LMOTS_SHA256_N32_W2; + oqs_key_data->lm_type[1] = LMS_SHA256_N32_H10; + oqs_key_data->lm_ots_type[1] = LMOTS_SHA256_N32_W2; + break; + case OQS_LMS_ID_sha256_n32_h10_w4_h10_w4: + oqs_key_data->levels = 2; + oqs_key_data->lm_type[0] = LMS_SHA256_N32_H10; + oqs_key_data->lm_ots_type[0] = LMOTS_SHA256_N32_W4; + oqs_key_data->lm_type[1] = LMS_SHA256_N32_H10; + oqs_key_data->lm_ots_type[1] = LMOTS_SHA256_N32_W4; + break; case OQS_LMS_ID_sha256_n32_h10_w8_h10_w8: oqs_key_data->levels = 2; oqs_key_data->lm_type[0] = LMS_SHA256_N32_H10; diff --git a/src/sig_stfl/sig_stfl.c b/src/sig_stfl/sig_stfl.c index 15448e33a2..6d6fe86c79 100644 --- a/src/sig_stfl/sig_stfl.c +++ b/src/sig_stfl/sig_stfl.c @@ -73,6 +73,8 @@ OQS_API const char *OQS_SIG_STFL_alg_identifier(size_t i) { OQS_SIG_STFL_alg_lms_sha256_n32_h5_w8_h5_w8, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h5_w8, + OQS_SIG_STFL_alg_lms_sha256_n32_h10_w2_h10_w2, + OQS_SIG_STFL_alg_lms_sha256_n32_h10_w4_h10_w4, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h10_w8, OQS_SIG_STFL_alg_lms_sha256_n32_h15_w8_h5_w8, @@ -323,6 +325,10 @@ OQS_API int OQS_SIG_STFL_alg_is_enabled(const char *method_name) { return 1; } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h5_w8)) { return 1; + } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w2_h10_w2)) { + return 1; + } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w4_h10_w4)) { + return 1; } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h10_w8)) { return 1; } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h15_w8_h5_w8)) { @@ -567,6 +573,10 @@ OQS_API OQS_SIG_STFL *OQS_SIG_STFL_new(const char *method_name) { return OQS_SIG_STFL_alg_lms_sha256_h5_w8_h5_w8_new(); } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h5_w8)) { return OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_new(); + } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w2_h10_w2)) { + return OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_new(); + } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w4_h10_w4)) { + return OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_new(); } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h10_w8)) { return OQS_SIG_STFL_alg_lms_sha256_h10_w8_h10_w8_new(); } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h15_w8_h5_w8)) { @@ -859,6 +869,10 @@ OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SIG_STFL_SECRET_KEY_new(const char *method_ return OQS_SECRET_KEY_LMS_SHA256_H5_W8_H5_W8_new(); } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h5_w8)) { return OQS_SECRET_KEY_LMS_SHA256_H10_W8_H5_W8_new(); + } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w2_h10_w2)) { + return OQS_SECRET_KEY_LMS_SHA256_H10_W2_H10_W2_new(); + } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w4_h10_w4)) { + return OQS_SECRET_KEY_LMS_SHA256_H10_W4_H10_W4_new(); } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h10_w8)) { return OQS_SECRET_KEY_LMS_SHA256_H10_W8_H10_W8_new(); } else if (0 == strcasecmp(method_name, OQS_SIG_STFL_alg_lms_sha256_n32_h15_w8_h5_w8)) { diff --git a/src/sig_stfl/sig_stfl.h b/src/sig_stfl/sig_stfl.h index 12de108eb9..48b017fe8e 100644 --- a/src/sig_stfl/sig_stfl.h +++ b/src/sig_stfl/sig_stfl.h @@ -102,6 +102,8 @@ extern "C" { #define OQS_SIG_STFL_alg_lms_sha256_n32_h5_w8_h5_w8 "LMS_SHA256_H5_W8_H5_W8" //"5/8, 5/8" #define OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h5_w8 "LMS_SHA256_H10_W8_H5_W8" //"10/8, 5/8" +#define OQS_SIG_STFL_alg_lms_sha256_n32_h10_w2_h10_w2 "LMS_SHA256_H10_W2_H10_W2" //"10/2, 10/2" +#define OQS_SIG_STFL_alg_lms_sha256_n32_h10_w4_h10_w4 "LMS_SHA256_H10_W4_H10_W4" //"10/4, 10/4" #define OQS_SIG_STFL_alg_lms_sha256_n32_h10_w8_h10_w8 "LMS_SHA256_H10_W8_H10_W8" //"10/8, 10/8" #define OQS_SIG_STFL_alg_lms_sha256_n32_h15_w8_h5_w8 "LMS_SHA256_H15_W8_H5_W8" //"15/8, 5/8" @@ -113,7 +115,7 @@ extern "C" { #define OQS_SIG_STFL_alg_lms_sha256_n32_h20_w8_h15_w8 "LMS_SHA256_H20_W8_H15_W8" //"20/8, 15/8" #define OQS_SIG_STFL_alg_lms_sha256_n32_h20_w8_h20_w8 "LMS_SHA256_H20_W8_H20_W8" //"20/8, 20/8" -#define OQS_SIG_STFL_algs_length 58 +#define OQS_SIG_STFL_algs_length 60 /* Defined LM parameter identifiers */ /* Algorithm identifier for LMS-SHA256_N32_H5 */