@@ -1674,6 +1674,8 @@ then
16741674 test "$enable_aesxts_stream" = "" && test "$enable_aesxts" = "yes" && enable_aesxts_stream=yes
16751675 test "$enable_shake128" = "" && enable_shake128=yes
16761676 test "$enable_shake256" = "" && enable_shake256=yes
1677+ test "$enable_cshake" = "" && enable_cshake=yes
1678+ test "$enable_kmac" = "" && enable_kmac=yes
16771679 test "$enable_compkey" = "" && enable_compkey=yes
16781680 # AFALG lacks AES-ECB
16791681 test "$enable_srtp_kdf" = "" && test "$enable_afalg" != "yes" && enable_srtp_kdf=yes
@@ -5042,6 +5044,49 @@ then
50425044 fi
50435045fi
50445046
5047+ # cSHAKE and KMAC (NIST SP 800-185), both built on SHAKE. KMAC is built on
5048+ # cSHAKE, so enabling KMAC also enables cSHAKE; cSHAKE can be enabled on its own.
5049+ AC_ARG_ENABLE ( [ cshake] ,
5050+ [ AS_HELP_STRING ( [ --enable-cshake] ,[ Enable wolfSSL cSHAKE support (default: disabled)] ) ] ,
5051+ [ ENABLED_CSHAKE=$enableval ] ,
5052+ [ ENABLED_CSHAKE=no ]
5053+ )
5054+
5055+ AC_ARG_ENABLE ( [ kmac] ,
5056+ [ AS_HELP_STRING ( [ --enable-kmac] ,[ Enable wolfSSL KMAC support (default: disabled)] ) ] ,
5057+ [ ENABLED_KMAC=$enableval ] ,
5058+ [ ENABLED_KMAC=no ]
5059+ )
5060+
5061+ # KMAC is built on cSHAKE - enabling KMAC enables cSHAKE.
5062+ if test "$ENABLED_KMAC" != "no"
5063+ then
5064+ ENABLED_CSHAKE=yes
5065+ fi
5066+
5067+ # cSHAKE (and thus KMAC) require SHA-3 and SHAKE. Force-enable them (unless
5068+ # explicitly disabled).
5069+ if test "$ENABLED_CSHAKE" != "no"
5070+ then
5071+ if test "$ENABLED_SHA3" = "no"
5072+ then
5073+ AC_MSG_ERROR ( [ cshake requires SHA-3: --enable-sha3] )
5074+ fi
5075+ ENABLED_SHA3=yes
5076+ if test "$ENABLED_SHAKE128" != "no"
5077+ then
5078+ ENABLED_SHAKE128=yes
5079+ fi
5080+ if test "$ENABLED_SHAKE256" != "no"
5081+ then
5082+ ENABLED_SHAKE256=yes
5083+ fi
5084+ if test "$ENABLED_SHAKE128" = "no" && test "$ENABLED_SHAKE256" = "no"
5085+ then
5086+ AC_MSG_ERROR ( [ cshake requires SHAKE128 and/or SHAKE256] )
5087+ fi
5088+ fi
5089+
50455090# SHA512
50465091AC_ARG_ENABLE ( [ sha512] ,
50475092 [ AS_HELP_STRING ( [ --enable-sha512] ,[ Enable wolfSSL SHA-512 support (default: enabled)] ) ] ,
@@ -7857,6 +7902,24 @@ else
78577902 AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_SHAKE256"
78587903fi
78597904
7905+ # Set cSHAKE / KMAC flags. Both are built on SHAKE, so re-check here (after any
7906+ # later logic - e.g. FIPS < 6 - may have force-disabled SHAKE) and fail with a
7907+ # clear configure error rather than a confusing compile-time #error. KMAC
7908+ # implies cSHAKE (ENABLED_CSHAKE was set above), so the SHAKE check on the
7909+ # cSHAKE branch also covers KMAC.
7910+ if test "$ENABLED_CSHAKE" != "no"
7911+ then
7912+ if test "$ENABLED_SHAKE128" = "no" && test "$ENABLED_SHAKE256" = "no"
7913+ then
7914+ AC_MSG_ERROR ( [ cshake requires SHAKE128 and/or SHAKE256, disabled in this configuration (for example by FIPS < 6)] )
7915+ fi
7916+ AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_CSHAKE"
7917+ fi
7918+ if test "$ENABLED_KMAC" != "no"
7919+ then
7920+ AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KMAC"
7921+ fi
7922+
78607923# MLKEM CFLAG processing (after FIPS section for sandwich pattern)
78617924if test "$ENABLED_MLKEM" != "no"
78627925then
@@ -13304,6 +13367,8 @@ echo " * SHA-512: $ENABLED_SHA512"
1330413367echo " * SHA3: $ENABLED_SHA3"
1330513368echo " * SHAKE128: $ENABLED_SHAKE128"
1330613369echo " * SHAKE256: $ENABLED_SHAKE256"
13370+ echo " * cSHAKE: $ENABLED_CSHAKE"
13371+ echo " * KMAC: $ENABLED_KMAC"
1330713372echo " * SM3: $ENABLED_SM3"
1330813373echo " * BLAKE2B: $ENABLED_BLAKE2B"
1330913374echo " * BLAKE2S: $ENABLED_BLAKE2S"
0 commit comments