@@ -1681,6 +1681,8 @@ then
16811681 test "$enable_aesxts_stream" = "" && test "$enable_aesxts" = "yes" && enable_aesxts_stream=yes
16821682 test "$enable_shake128" = "" && enable_shake128=yes
16831683 test "$enable_shake256" = "" && enable_shake256=yes
1684+ test "$enable_cshake" = "" && enable_cshake=yes
1685+ test "$enable_kmac" = "" && enable_kmac=yes
16841686 test "$enable_compkey" = "" && enable_compkey=yes
16851687 # AFALG lacks AES-ECB
16861688 test "$enable_srtp_kdf" = "" && test "$enable_afalg" != "yes" && enable_srtp_kdf=yes
@@ -4874,6 +4876,49 @@ then
48744876 fi
48754877fi
48764878
4879+ # cSHAKE and KMAC (NIST SP 800-185), both built on SHAKE. KMAC is built on
4880+ # cSHAKE, so enabling KMAC also enables cSHAKE; cSHAKE can be enabled on its own.
4881+ AC_ARG_ENABLE ( [ cshake] ,
4882+ [ AS_HELP_STRING ( [ --enable-cshake] ,[ Enable wolfSSL cSHAKE support (default: disabled)] ) ] ,
4883+ [ ENABLED_CSHAKE=$enableval ] ,
4884+ [ ENABLED_CSHAKE=no ]
4885+ )
4886+
4887+ AC_ARG_ENABLE ( [ kmac] ,
4888+ [ AS_HELP_STRING ( [ --enable-kmac] ,[ Enable wolfSSL KMAC support (default: disabled)] ) ] ,
4889+ [ ENABLED_KMAC=$enableval ] ,
4890+ [ ENABLED_KMAC=no ]
4891+ )
4892+
4893+ # KMAC is built on cSHAKE - enabling KMAC enables cSHAKE.
4894+ if test "$ENABLED_KMAC" != "no"
4895+ then
4896+ ENABLED_CSHAKE=yes
4897+ fi
4898+
4899+ # cSHAKE (and thus KMAC) require SHA-3 and SHAKE. Force-enable them (unless
4900+ # explicitly disabled).
4901+ if test "$ENABLED_CSHAKE" != "no"
4902+ then
4903+ if test "$ENABLED_SHA3" = "no"
4904+ then
4905+ AC_MSG_ERROR ( [ cshake requires SHA-3: --enable-sha3] )
4906+ fi
4907+ ENABLED_SHA3=yes
4908+ if test "$ENABLED_SHAKE128" != "no"
4909+ then
4910+ ENABLED_SHAKE128=yes
4911+ fi
4912+ if test "$ENABLED_SHAKE256" != "no"
4913+ then
4914+ ENABLED_SHAKE256=yes
4915+ fi
4916+ if test "$ENABLED_SHAKE128" = "no" && test "$ENABLED_SHAKE256" = "no"
4917+ then
4918+ AC_MSG_ERROR ( [ cshake requires SHAKE128 and/or SHAKE256] )
4919+ fi
4920+ fi
4921+
48774922# SHA512
48784923AC_ARG_ENABLE ( [ sha512] ,
48794924 [ AS_HELP_STRING ( [ --enable-sha512] ,[ Enable wolfSSL SHA-512 support (default: enabled)] ) ] ,
@@ -7683,6 +7728,24 @@ else
76837728 AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_SHAKE256"
76847729fi
76857730
7731+ # Set cSHAKE / KMAC flags. Both are built on SHAKE, so re-check here (after any
7732+ # later logic - e.g. FIPS < 6 - may have force-disabled SHAKE) and fail with a
7733+ # clear configure error rather than a confusing compile-time #error. KMAC
7734+ # implies cSHAKE (ENABLED_CSHAKE was set above), so the SHAKE check on the
7735+ # cSHAKE branch also covers KMAC.
7736+ if test "$ENABLED_CSHAKE" != "no"
7737+ then
7738+ if test "$ENABLED_SHAKE128" = "no" && test "$ENABLED_SHAKE256" = "no"
7739+ then
7740+ AC_MSG_ERROR ( [ cshake requires SHAKE128 and/or SHAKE256, disabled in this configuration (for example by FIPS < 6)] )
7741+ fi
7742+ AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_CSHAKE"
7743+ fi
7744+ if test "$ENABLED_KMAC" != "no"
7745+ then
7746+ AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KMAC"
7747+ fi
7748+
76867749# MLKEM CFLAG processing (after FIPS section for sandwich pattern)
76877750if test "$ENABLED_MLKEM" != "no"
76887751then
@@ -13099,6 +13162,8 @@ echo " * SHA-512: $ENABLED_SHA512"
1309913162echo " * SHA3: $ENABLED_SHA3"
1310013163echo " * SHAKE128: $ENABLED_SHAKE128"
1310113164echo " * SHAKE256: $ENABLED_SHAKE256"
13165+ echo " * cSHAKE: $ENABLED_CSHAKE"
13166+ echo " * KMAC: $ENABLED_KMAC"
1310213167echo " * SM3: $ENABLED_SM3"
1310313168echo " * BLAKE2B: $ENABLED_BLAKE2B"
1310413169echo " * BLAKE2S: $ENABLED_BLAKE2S"
0 commit comments