<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);" class="elementToProof">
Release note and PMD documentation need update to support SHAKE algo </div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Finn, Emma <emma.finn@intel.com><br>
<b>Sent:</b> 08 January 2026 15:33<br>
<b>To:</b> Akhil Goyal <gakhil@marvell.com>; Fan Zhang <fanzhang.oss@gmail.com>; Ji, Kai <kai.ji@intel.com><br>
<b>Cc:</b> dev@dpdk.org <dev@dpdk.org>; Finn, Emma <emma.finn@intel.com><br>
<b>Subject:</b> [v2] crypto/openssl: Add support for SHAKE algorithms</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">OpenSSL 3.X has support for SHAKE, Hence adding<br>
SHAKE-128 and SHAKE-256 support to the OpenSSL PMD.<br>
<br>
Signed-off-by: Emma Finn <emma.finn@intel.com><br>
---<br>
v2:<br>
* Fixed unused digest_length variable<br>
---<br>
app/test/test_cryptodev_blockcipher.c | 4 +-<br>
drivers/crypto/openssl/rte_openssl_pmd.c | 30 ++++++++++++--<br>
drivers/crypto/openssl/rte_openssl_pmd_ops.c | 42 ++++++++++++++++++++<br>
3 files changed, 72 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c<br>
index 6b37347789..1438f24993 100644<br>
--- a/app/test/test_cryptodev_blockcipher.c<br>
+++ b/app/test/test_cryptodev_blockcipher.c<br>
@@ -1174,7 +1174,9 @@ authonly_setup(void)<br>
RTE_CRYPTO_AUTH_SHA512_HMAC,<br>
RTE_CRYPTO_AUTH_AES_CMAC,<br>
RTE_CRYPTO_AUTH_NULL,<br>
- RTE_CRYPTO_AUTH_AES_XCBC_MAC<br>
+ RTE_CRYPTO_AUTH_AES_XCBC_MAC,<br>
+ RTE_CRYPTO_AUTH_SHAKE_128,<br>
+ RTE_CRYPTO_AUTH_SHAKE_256<br>
};<br>
<br>
rte_cryptodev_info_get(dev_id, &dev_info);<br>
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c<br>
index 4f171f48cc..755674f71a 100644<br>
--- a/drivers/crypto/openssl/rte_openssl_pmd.c<br>
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c<br>
@@ -270,6 +270,12 @@ get_auth_algo(enum rte_crypto_auth_algorithm sessalgo,<br>
case RTE_CRYPTO_AUTH_SHA512_HMAC:<br>
*algo = EVP_sha512();<br>
break;<br>
+ case RTE_CRYPTO_AUTH_SHAKE_128:<br>
+ *algo = EVP_shake128();<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHAKE_256:<br>
+ *algo = EVP_shake256();<br>
+ break;<br>
default:<br>
res = -EINVAL;<br>
break;<br>
@@ -659,6 +665,8 @@ openssl_set_session_auth_parameters(struct openssl_session *sess,<br>
case RTE_CRYPTO_AUTH_SHA256:<br>
case RTE_CRYPTO_AUTH_SHA384:<br>
case RTE_CRYPTO_AUTH_SHA512:<br>
+ case RTE_CRYPTO_AUTH_SHAKE_128:<br>
+ case RTE_CRYPTO_AUTH_SHAKE_256:<br>
sess->auth.mode = OPENSSL_AUTH_AS_AUTH;<br>
if (get_auth_algo(xform->auth.algo,<br>
&sess->auth.auth.evp_algo) != 0)<br>
@@ -1397,7 +1405,7 @@ process_openssl_auth_decryption_ccm(struct rte_mbuf *mbuf_src, int offset,<br>
static int<br>
process_openssl_auth(struct rte_mbuf *mbuf_src, uint8_t *dst, int offset,<br>
__rte_unused uint8_t *iv, __rte_unused EVP_PKEY * pkey,<br>
- int srclen, EVP_MD_CTX *ctx, const EVP_MD *algo)<br>
+ int srclen, EVP_MD_CTX *ctx, const EVP_MD *algo, int digest_length)<br>
{<br>
size_t dstlen;<br>
struct rte_mbuf *m;<br>
@@ -1437,8 +1445,24 @@ process_openssl_auth(struct rte_mbuf *mbuf_src, uint8_t *dst, int offset,<br>
}<br>
<br>
process_auth_final:<br>
- if (EVP_DigestFinal_ex(ctx, dst, (unsigned int *)&dstlen) <= 0)<br>
+ /* SHAKE algorithms are XOFs and require EVP_DigestFinalXOF */<br>
+ if (algo == EVP_shake128() || algo == EVP_shake256()) {<br>
+#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)<br>
+ /* Set XOF output length before calling EVP_DigestFinalXOF */<br>
+ if (EVP_MD_CTX_ctrl(ctx, EVP_MD_CTRL_XOF_LEN, digest_length, NULL) <= 0)<br>
+ goto process_auth_err;<br>
+ if (EVP_DigestFinalXOF(ctx, dst, digest_length) <= 0)<br>
+ goto process_auth_err;<br>
+#else<br>
+ RTE_SET_USED(digest_length);<br>
+ OPENSSL_LOG(ERR, "SHAKE algorithms require OpenSSL 3.0+");<br>
goto process_auth_err;<br>
+#endif<br>
+ } else {<br>
+ if (EVP_DigestFinal_ex(ctx, dst, (unsigned int *)&dstlen) <= 0)<br>
+ goto process_auth_err;<br>
+ }<br>
+<br>
return 0;<br>
<br>
process_auth_err:<br>
@@ -1995,7 +2019,7 @@ process_openssl_auth_op(struct openssl_qp *qp, struct rte_crypto_op *op,<br>
ctx_a = get_local_auth_ctx(sess, qp);<br>
status = process_openssl_auth(mbuf_src, dst,<br>
op->sym->auth.data.offset, NULL, NULL, srclen,<br>
- ctx_a, sess->auth.auth.evp_algo);<br>
+ ctx_a, sess->auth.auth.evp_algo, sess->auth.digest_length);<br>
break;<br>
case OPENSSL_AUTH_AS_HMAC:<br>
ctx_h = get_local_hmac_ctx(sess, qp);<br>
diff --git a/drivers/crypto/openssl/rte_openssl_pmd_ops.c b/drivers/crypto/openssl/rte_openssl_pmd_ops.c<br>
index 5095e6cbea..f6c32fdcb6 100644<br>
--- a/drivers/crypto/openssl/rte_openssl_pmd_ops.c<br>
+++ b/drivers/crypto/openssl/rte_openssl_pmd_ops.c<br>
@@ -269,6 +269,48 @@ static const struct rte_cryptodev_capabilities openssl_pmd_capabilities[] = {<br>
}, }<br>
}, }<br>
},<br>
+ { /* SHAKE_128 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHAKE_128,<br>
+ .block_size = 168,<br>
+ .key_size = {<br>
+ .min = 0,<br>
+ .max = 0,<br>
+ .increment = 0<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 256,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* SHAKE_256 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHAKE_256,<br>
+ .block_size = 136,<br>
+ .key_size = {<br>
+ .min = 0,<br>
+ .max = 0,<br>
+ .increment = 0<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 256,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
{ /* AES CBC */<br>
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
{.sym = {<br>
-- <br>
2.43.0<br>
<br>
</div>
</span></font></div>
</body>
</html>