Skip to content

Commit 4fd33b6

Browse files
authored
Merge pull request #8014 from SparkiDev/lms_sha256_192
LMS: SHA-256/192 parameters
2 parents 6cde744 + ae46f52 commit 4fd33b6

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
@@ -1743,15 +1743,17 @@ static const char* bench_result_words3[][5] = {
17431743
defined(HAVE_CURVE448) || defined(HAVE_ED448) || \
17441744
defined(HAVE_ECC) || !defined(NO_DH) || \
17451745
!defined(NO_RSA) || defined(HAVE_SCRYPT) || \
1746-
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM)
1746+
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM) || \
1747+
defined(WOLFSSL_HAVE_LMS)
17471748
#define BENCH_ASYM
17481749
#endif
17491750

17501751
#if defined(BENCH_ASYM)
17511752
#if defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \
17521753
defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \
17531754
defined(HAVE_CURVE448) || defined(HAVE_ED448) || \
1754-
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM)
1755+
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM) || \
1756+
defined(WOLFSSL_HAVE_LMS)
17551757
static const char* bench_result_words2[][5] = {
17561758
#ifdef BENCH_MICROSECOND
17571759
{ "ops took", "μsec" , "avg" , "ops/μsec", NULL }, /* 0 English
@@ -2710,7 +2712,8 @@ static void bench_stats_sym_finish(const char* desc, int useDeviceID,
27102712
#if defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \
27112713
defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \
27122714
defined(HAVE_CURVE448) || defined(HAVE_ED448) || \
2713-
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM)
2715+
defined(WOLFSSL_HAVE_KYBER) || defined(HAVE_DILITHIUM) || \
2716+
defined(WOLFSSL_HAVE_LMS)
27142717
static void bench_stats_asym_finish_ex(const char* algo, int strength,
27152718
const char* desc, const char* desc_extra, int useDeviceID, int count,
27162719
double start, int ret)
@@ -9496,6 +9499,7 @@ void bench_kyber(int type)
94969499
#endif
94979500

94989501
#if defined(WOLFSSL_HAVE_LMS) && !defined(WOLFSSL_LMS_VERIFY_ONLY)
9502+
#ifndef WOLFSSL_NO_LMS_SHA256_256
94999503
/* WC_LMS_PARM_L2_H10_W2
95009504
* signature length: 9300 */
95019505
static const byte lms_priv_L2_H10_W2[64] =
@@ -9651,6 +9655,7 @@ static const byte lms_pub_L4_H5_W8[60] =
96519655
0x85,0x1A,0x7A,0xD8,0xD5,0x46,0x74,0x3B,
96529656
0x74,0x24,0x12,0xC8
96539657
};
9658+
#endif
96549659

96559660
static int lms_write_key_mem(const byte* priv, word32 privSz, void* context)
96569661
{
@@ -9811,6 +9816,7 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub)
98119816
}
98129817

98139818
switch (parm) {
9819+
#ifndef WOLFSSL_NO_LMS_SHA256_256
98149820
case WC_LMS_PARM_L2_H10_W2:
98159821
XMEMCPY(lms_priv, lms_priv_L2_H10_W2, sizeof(lms_priv_L2_H10_W2));
98169822
XMEMCPY(key.pub, lms_pub_L2_H10_W2, HSS_MAX_PUBLIC_KEY_LEN);
@@ -9871,6 +9877,28 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub)
98719877
case WC_LMS_PARM_L4_H5_W4:
98729878
case WC_LMS_PARM_L4_H10_W4:
98739879
case WC_LMS_PARM_L4_H10_W8:
9880+
#endif
9881+
9882+
#ifdef WOLFSSL_LMS_SHA256_192
9883+
case WC_LMS_PARM_SHA256_192_L1_H5_W1:
9884+
case WC_LMS_PARM_SHA256_192_L1_H5_W2:
9885+
case WC_LMS_PARM_SHA256_192_L1_H5_W4:
9886+
case WC_LMS_PARM_SHA256_192_L1_H5_W8:
9887+
case WC_LMS_PARM_SHA256_192_L1_H10_W2:
9888+
case WC_LMS_PARM_SHA256_192_L1_H10_W4:
9889+
case WC_LMS_PARM_SHA256_192_L1_H10_W8:
9890+
case WC_LMS_PARM_SHA256_192_L1_H15_W2:
9891+
case WC_LMS_PARM_SHA256_192_L1_H15_W4:
9892+
case WC_LMS_PARM_SHA256_192_L2_H10_W2:
9893+
case WC_LMS_PARM_SHA256_192_L2_H10_W4:
9894+
case WC_LMS_PARM_SHA256_192_L2_H10_W8:
9895+
case WC_LMS_PARM_SHA256_192_L3_H5_W2:
9896+
case WC_LMS_PARM_SHA256_192_L3_H5_W4:
9897+
case WC_LMS_PARM_SHA256_192_L3_H5_W8:
9898+
case WC_LMS_PARM_SHA256_192_L3_H10_W4:
9899+
case WC_LMS_PARM_SHA256_192_L4_H5_W8:
9900+
#endif
9901+
98749902
default:
98759903
XMEMCPY(key.pub, pub, HSS_MAX_PUBLIC_KEY_LEN);
98769904
break;
@@ -10045,6 +10073,7 @@ void bench_lms(void)
1004510073
{
1004610074
byte pub[HSS_MAX_PUBLIC_KEY_LEN];
1004710075

10076+
#ifndef WOLFSSL_NO_LMS_SHA256_256
1004810077
#ifdef BENCH_LMS_SLOW_KEYGEN
1004910078
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_HEIGHT >= 15)
1005010079
bench_lms_keygen(WC_LMS_PARM_L1_H15_W2, pub);
@@ -10090,6 +10119,55 @@ void bench_lms(void)
1009010119
bench_lms_keygen(WC_LMS_PARM_L1_H5_W1, pub);
1009110120
bench_lms_sign_verify(WC_LMS_PARM_L1_H5_W1, pub);
1009210121
#endif
10122+
#endif /* !WOLFSSL_NO_LMS_SHA256_256 */
10123+
10124+
#ifdef WOLFSSL_LMS_SHA256_192
10125+
#ifdef BENCH_LMS_SLOW_KEYGEN
10126+
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_HEIGHT >= 15)
10127+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L1_H15_W2, pub);
10128+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L1_H15_W2, pub);
10129+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L1_H15_W4, pub);
10130+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L1_H15_W4, pub);
10131+
#undef LMS_PARAMS_BENCHED
10132+
#define LMS_PARAMS_BENCHED
10133+
#endif
10134+
#endif
10135+
#if !defined(WOLFSSL_WC_LMS) || ((LMS_MAX_LEVELS >= 2) && \
10136+
(LMS_MAX_HEIGHT >= 10))
10137+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L2_H10_W2, pub);
10138+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L2_H10_W2, pub);
10139+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L2_H10_W4, pub);
10140+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L2_H10_W4, pub);
10141+
#undef LMS_PARAMS_BENCHED
10142+
#define LMS_PARAMS_BENCHED
10143+
#ifdef BENCH_LMS_SLOW_KEYGEN
10144+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L2_H10_W8, pub);
10145+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L2_H10_W8, pub);
10146+
#endif
10147+
#endif
10148+
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_LEVELS >= 3)
10149+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L3_H5_W4, pub);
10150+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L3_H5_W4, pub);
10151+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L3_H5_W8, pub);
10152+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L3_H5_W8, pub);
10153+
#undef LMS_PARAMS_BENCHED
10154+
#define LMS_PARAMS_BENCHED
10155+
#endif
10156+
#if !defined(WOLFSSL_WC_LMS) || ((LMS_MAX_LEVELS >= 3) && \
10157+
(LMS_MAX_HEIGHT >= 10))
10158+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L3_H10_W4, pub);
10159+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L3_H10_W4, pub);
10160+
#endif
10161+
#if !defined(WOLFSSL_WC_LMS) || (LMS_MAX_LEVELS >= 4)
10162+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L4_H5_W8, pub);
10163+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L4_H5_W8, pub);
10164+
#endif
10165+
10166+
#if defined(WOLFSSL_WC_LMS) && !defined(LMS_PARAMS_BENCHED)
10167+
bench_lms_keygen(WC_LMS_PARM_SHA256_192_L1_H5_W1, pub);
10168+
bench_lms_sign_verify(WC_LMS_PARM_SHA256_192_L1_H5_W1, pub);
10169+
#endif
10170+
#endif /* WOLFSSL_LMS_SHA256_192 */
1009310171

1009410172
return;
1009510173
}

0 commit comments

Comments
 (0)