Skip to content

Commit ae46f52

Browse files
committed
LMS: SHA-256/192 parameters
Add support for parameter sets with SHA-256/192.
1 parent bc68819 commit ae46f52

7 files changed

Lines changed: 1286 additions & 386 deletions

File tree

configure.ac

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,12 @@ do
15451545
small)
15461546
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_WC_LMS_SMALL"
15471547
;;
1548+
no-sha256-256)
1549+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_LMS_SHA256_256"
1550+
;;
1551+
sha256-192)
1552+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_LMS_SHA256_192"
1553+
;;
15481554
*)
15491555
AC_MSG_ERROR([Invalid choice for LMS []: $ENABLED_LMS.])
15501556
break;;

wolfcrypt/benchmark/benchmark.c

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,15 +1692,17 @@ static const char* bench_result_words3[][5] = {
16921692
defined(HAVE_CURVE448) || defined(HAVE_ED448) || \
16931693
defined(HAVE_ECC) || !defined(NO_DH) || \
16941694
!defined(NO_RSA) || defined(HAVE_SCRYPT) || \
1695-
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM)
1695+
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM) || \
1696+
defined(WOLFSSL_HAVE_LMS)
16961697
#define BENCH_ASYM
16971698
#endif
16981699

16991700
#if defined(BENCH_ASYM)
17001701
#if defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \
17011702
defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \
17021703
defined(HAVE_CURVE448) || defined(HAVE_ED448) || \
1703-
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM)
1704+
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM) || \
1705+
defined(WOLFSSL_HAVE_LMS)
17041706
static const char* bench_result_words2[][5] = {
17051707
#ifdef BENCH_MICROSECOND
17061708
{ "ops took", "μsec" , "avg" , "ops/μsec", NULL }, /* 0 English
@@ -2656,7 +2658,8 @@ static void bench_stats_sym_finish(const char* desc, int useDeviceID,
26562658
#if defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \
26572659
defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \
26582660
defined(HAVE_CURVE448) || defined(HAVE_ED448) || \
2659-
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM)
2661+
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM) || \
2662+
defined(WOLFSSL_HAVE_LMS)
26602663
static void bench_stats_asym_finish_ex(const char* algo, int strength,
26612664
const char* desc, const char* desc_extra, int useDeviceID, int count,
26622665
double start, int ret)
@@ -9442,6 +9445,7 @@ void bench_kyber(int type)
94429445
#endif
94439446

94449447
#if defined(WOLFSSL_HAVE_LMS) && !defined(WOLFSSL_LMS_VERIFY_ONLY)
9448+
#ifndef WOLFSSL_NO_LMS_SHA256_256
94459449
/* WC_LMS_PARM_L2_H10_W2
94469450
* signature length: 9300 */
94479451
static const byte lms_priv_L2_H10_W2[64] =
@@ -9597,6 +9601,7 @@ static const byte lms_pub_L4_H5_W8[60] =
95979601
0x85,0x1A,0x7A,0xD8,0xD5,0x46,0x74,0x3B,
95989602
0x74,0x24,0x12,0xC8
95999603
};
9604+
#endif
96009605

96019606
static int lms_write_key_mem(const byte* priv, word32 privSz, void* context)
96029607
{
@@ -9757,6 +9762,7 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub)
97579762
}
97589763

97599764
switch (parm) {
9765+
#ifndef WOLFSSL_NO_LMS_SHA256_256
97609766
case WC_LMS_PARM_L2_H10_W2:
97619767
XMEMCPY(lms_priv, lms_priv_L2_H10_W2, sizeof(lms_priv_L2_H10_W2));
97629768
XMEMCPY(key.pub, lms_pub_L2_H10_W2, HSS_MAX_PUBLIC_KEY_LEN);
@@ -9817,6 +9823,28 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub)
98179823
case WC_LMS_PARM_L4_H5_W4:
98189824
case WC_LMS_PARM_L4_H10_W4:
98199825
case WC_LMS_PARM_L4_H10_W8:
9826+
#endif
9827+
9828+
#ifdef WOLFSSL_LMS_SHA256_192
9829+
case WC_LMS_PARM_SHA256_192_L1_H5_W1:
9830+
case WC_LMS_PARM_SHA256_192_L1_H5_W2:
9831+
case WC_LMS_PARM_SHA256_192_L1_H5_W4:
9832+
case WC_LMS_PARM_SHA256_192_L1_H5_W8:
9833+
case WC_LMS_PARM_SHA256_192_L1_H10_W2:
9834+
case WC_LMS_PARM_SHA256_192_L1_H10_W4:
9835+
case WC_LMS_PARM_SHA256_192_L1_H10_W8:
9836+
case WC_LMS_PARM_SHA256_192_L1_H15_W2:
9837+
case WC_LMS_PARM_SHA256_192_L1_H15_W4:
9838+
case WC_LMS_PARM_SHA256_192_L2_H10_W2:
9839+
case WC_LMS_PARM_SHA256_192_L2_H10_W4:
9840+
case WC_LMS_PARM_SHA256_192_L2_H10_W8:
9841+
case WC_LMS_PARM_SHA256_192_L3_H5_W2:
9842+
case WC_LMS_PARM_SHA256_192_L3_H5_W4:
9843+
case WC_LMS_PARM_SHA256_192_L3_H5_W8:
9844+
case WC_LMS_PARM_SHA256_192_L3_H10_W4:
9845+
case WC_LMS_PARM_SHA256_192_L4_H5_W8:
9846+
#endif
9847+
98209848
default:
98219849
XMEMCPY(key.pub, pub, HSS_MAX_PUBLIC_KEY_LEN);
98229850
break;
@@ -9991,6 +10019,7 @@ void bench_lms(void)
999110019
{
999210020
byte pub[HSS_MAX_PUBLIC_KEY_LEN];
999310021

10022+
#ifndef WOLFSSL_NO_LMS_SHA256_256
999410023
#ifdef BENCH_LMS_SLOW_KEYGEN
999510024
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_HEIGHT >= 15)
999610025
bench_lms_keygen(WC_LMS_PARM_L1_H15_W2, pub);
@@ -10036,6 +10065,55 @@ void bench_lms(void)
1003610065
bench_lms_keygen(WC_LMS_PARM_L1_H5_W1, pub);
1003710066
bench_lms_sign_verify(WC_LMS_PARM_L1_H5_W1, pub);
1003810067
#endif
10068+
#endif /* !WOLFSSL_NO_LMS_SHA256_256 */
10069+
10070+
#ifdef WOLFSSL_LMS_SHA256_192
10071+
#ifdef BENCH_LMS_SLOW_KEYGEN
10072+
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_HEIGHT >= 15)
10073+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L1_H15_W2, pub);
10074+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L1_H15_W2, pub);
10075+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L1_H15_W4, pub);
10076+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L1_H15_W4, pub);
10077+
#undef LMS_PARAMS_BENCHED
10078+
#define LMS_PARAMS_BENCHED
10079+
#endif
10080+
#endif
10081+
#if !defined(WOLFSSL_WC_LMS) || ((LMS_MAX_LEVELS >= 2) && \
10082+
(LMS_MAX_HEIGHT >= 10))
10083+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L2_H10_W2, pub);
10084+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L2_H10_W2, pub);
10085+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L2_H10_W4, pub);
10086+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L2_H10_W4, pub);
10087+
#undef LMS_PARAMS_BENCHED
10088+
#define LMS_PARAMS_BENCHED
10089+
#ifdef BENCH_LMS_SLOW_KEYGEN
10090+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L2_H10_W8, pub);
10091+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L2_H10_W8, pub);
10092+
#endif
10093+
#endif
10094+
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_LEVELS >= 3)
10095+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L3_H5_W4, pub);
10096+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L3_H5_W4, pub);
10097+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L3_H5_W8, pub);
10098+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L3_H5_W8, pub);
10099+
#undef LMS_PARAMS_BENCHED
10100+
#define LMS_PARAMS_BENCHED
10101+
#endif
10102+
#if !defined(WOLFSSL_WC_LMS) || ((LMS_MAX_LEVELS >= 3) && \
10103+
(LMS_MAX_HEIGHT >= 10))
10104+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L3_H10_W4, pub);
10105+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L3_H10_W4, pub);
10106+
#endif
10107+
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_LEVELS >= 4)
10108+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L4_H5_W8, pub);
10109+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L4_H5_W8, pub);
10110+
#endif
10111+
10112+
#if defined(WOLFSSL_WC_LMS) && !defined(LMS_PARAMS_BENCHED)
10113+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L1_H5_W1, pub);
10114+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L1_H5_W1, pub);
10115+
#endif
10116+
#endif /* WOLFSSL_LMS_SHA256_192 */
1003910117

1004010118
return;
1004110119
}

0 commit comments

Comments
 (0)