<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="text-align: left; text-indent: 0px; line-height: 1.1; margin: 20px 0px 10px; font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">
<span style="font-weight: 500;">Acked-by: Kai Ji <kai.ji@intel.com></span></div>
<div class="elementToProof" style="text-align: left; text-indent: 0px; line-height: 1.1; margin: 20px 0px 10px; font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">
<span style="font-weight: 500;"><br>
</span></div>
<div><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style="display: inline-block; width: 98%;">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<b>From:</b> Finn, Emma <emma.finn@intel.com><br>
<b>Sent:</b> Tuesday, October 13, 2026 10:33<br>
<b>To:</b> Ji, Kai <kai.ji@intel.com>; De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com><br>
<b>Cc:</b> dev@dpdk.org <dev@dpdk.org>; Finn, Emma <emma.finn@intel.com><br>
<b>Subject:</b> [PATCH v3 1/2] crypto/ipsec_mb: Add SHA3 support. </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-size: 11pt;">Add SHA3-224, SHA3-256, SHA3-384, SHA3-512 and HMAC variants<br>
to the ipsec_mb PMD.<br>
<br>
Signed-off-by: Emma Finn <emma.finn@intel.com><br>
---<br>
doc/guides/cryptodevs/aesni_mb.rst | 8 +<br>
doc/guides/cryptodevs/features/aesni_mb.ini | 8 +<br>
doc/guides/rel_notes/release_26_11.rst | 5 +<br>
drivers/crypto/ipsec_mb/pmd_aesni_mb.c | 30 +++<br>
drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h | 212 +++++++++++++++++++-<br>
5 files changed, 257 insertions(+), 6 deletions(-)<br>
<br>
diff --git a/doc/guides/cryptodevs/aesni_mb.rst b/doc/guides/cryptodevs/aesni_mb.rst<br>
index ab7a6138a8e..663b9f19d4b 100644<br>
--- a/doc/guides/cryptodevs/aesni_mb.rst<br>
+++ b/doc/guides/cryptodevs/aesni_mb.rst<br>
@@ -61,6 +61,14 @@ Hash algorithms:<br>
* RTE_CRYPTO_AUTH_KASUMI_F9<br>
* RTE_CRYPTO_AUTH_SM3<br>
* RTE_CRYPTO_AUTH_SM3 HMAC<br>
+* RTE_CRYPTO_AUTH_SHA3_224<br>
+* RTE_CRYPTO_AUTH_SHA3_224 HMAC<br>
+* RTE_CRYPTO_AUTH_SHA3_256<br>
+* RTE_CRYPTO_AUTH_SHA3_256 HMAC<br>
+* RTE_CRYPTO_AUTH_SHA3_384<br>
+* RTE_CRYPTO_AUTH_SHA3_384 HMAC<br>
+* RTE_CRYPTO_AUTH_SHA3_512<br>
+* RTE_CRYPTO_AUTH_SHA3_512 HMAC<br>
<br>
AEAD algorithms:<br>
<br>
diff --git a/doc/guides/cryptodevs/features/aesni_mb.ini b/doc/guides/cryptodevs/features/aesni_mb.ini<br>
index ce6b43e48bd..73bb9f42633 100644<br>
--- a/doc/guides/cryptodevs/features/aesni_mb.ini<br>
+++ b/doc/guides/cryptodevs/features/aesni_mb.ini<br>
@@ -69,6 +69,14 @@ SNOW3G UIA2 = Y<br>
KASUMI F9 = Y<br>
SM3 = Y<br>
SM3 HMAC = Y<br>
+SHA3_224 = Y<br>
+SHA3_224 HMAC = Y<br>
+SHA3_256 = Y<br>
+SHA3_256 HMAC = Y<br>
+SHA3_384 = Y<br>
+SHA3_384 HMAC = Y<br>
+SHA3_512 = Y<br>
+SHA3_512 HMAC = Y<br>
<br>
;<br>
; Supported AEAD algorithms of the 'aesni_mb' crypto driver.<br>
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst<br>
index c8cc86295da..826a0cf05cf 100644<br>
--- a/doc/guides/rel_notes/release_26_11.rst<br>
+++ b/doc/guides/rel_notes/release_26_11.rst<br>
@@ -24,6 +24,11 @@ DPDK Release 26.11<br>
New Features<br>
------------<br>
<br>
+* **Updated AESNI_MB crypto driver.**<br>
+<br>
+ * Added support for SHA3-224, SHA3-256, SHA3-384, and SHA3-512 hash<br>
+ algorithms and their HMAC variants.<br>
+<br>
.. This section should contain new features added in this release.<br>
Sample format:<br>
<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
index 4c5b6e70b51..c96d1453b8c 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
@@ -302,6 +302,36 @@ aesni_mb_set_session_auth_parameters(IMB_MGR *mb_mgr,<br>
case RTE_CRYPTO_AUTH_SM3_HMAC:<br>
sess->template_job.hash_alg = IMB_AUTH_HMAC_SM3;<br>
break;<br>
+#endif<br>
+#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM<br>
+ case RTE_CRYPTO_AUTH_SHA3_224:<br>
+ sess->template_job.hash_alg = IMB_AUTH_SHA3_224;<br>
+ auth_precompute = 0;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_224_HMAC:<br>
+ sess->template_job.hash_alg = IMB_AUTH_HMAC_SHA3_224;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_256:<br>
+ sess->template_job.hash_alg = IMB_AUTH_SHA3_256;<br>
+ auth_precompute = 0;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_256_HMAC:<br>
+ sess->template_job.hash_alg = IMB_AUTH_HMAC_SHA3_256;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_384:<br>
+ sess->template_job.hash_alg = IMB_AUTH_SHA3_384;<br>
+ auth_precompute = 0;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_384_HMAC:<br>
+ sess->template_job.hash_alg = IMB_AUTH_HMAC_SHA3_384;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_512:<br>
+ sess->template_job.hash_alg = IMB_AUTH_SHA3_512;<br>
+ auth_precompute = 0;<br>
+ break;<br>
+ case RTE_CRYPTO_AUTH_SHA3_512_HMAC:<br>
+ sess->template_job.hash_alg = IMB_AUTH_HMAC_SHA3_512;<br>
+ break;<br>
#endif<br>
default:<br>
IPSEC_MB_LOG(ERR,<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
index 6dc90a98492..aad31b9f909 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
@@ -768,6 +768,176 @@ static const struct rte_cryptodev_capabilities aesni_mb_capabilities[] = {<br>
}, }<br>
}, }<br>
},<br>
+#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM<br>
+ { /* SHA3-224 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHA3_224,<br>
+ .block_size = 144,<br>
+ .key_size = {<br>
+ .min = 0,<br>
+ .max = 0,<br>
+ .increment = 0<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 28,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* HMAC SHA3-224 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHA3_224_HMAC,<br>
+ .block_size = 144,<br>
+ .key_size = {<br>
+ .min = 1,<br>
+ .max = 65535,<br>
+ .increment = 1<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 28,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* SHA3-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_SHA3_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 = 32,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* HMAC SHA3-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_SHA3_256_HMAC,<br>
+ .block_size = 136,<br>
+ .key_size = {<br>
+ .min = 1,<br>
+ .max = 65535,<br>
+ .increment = 1<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 32,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* SHA3-384 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHA3_384,<br>
+ .block_size = 104,<br>
+ .key_size = {<br>
+ .min = 0,<br>
+ .max = 0,<br>
+ .increment = 0<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 48,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* HMAC SHA3-384 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHA3_384_HMAC,<br>
+ .block_size = 104,<br>
+ .key_size = {<br>
+ .min = 1,<br>
+ .max = 65535,<br>
+ .increment = 1<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 48,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* SHA3-512 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHA3_512,<br>
+ .block_size = 72,<br>
+ .key_size = {<br>
+ .min = 0,<br>
+ .max = 0,<br>
+ .increment = 0<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 64,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+ { /* HMAC SHA3-512 */<br>
+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
+ {.sym = {<br>
+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br>
+ {.auth = {<br>
+ .algo = RTE_CRYPTO_AUTH_SHA3_512_HMAC,<br>
+ .block_size = 72,<br>
+ .key_size = {<br>
+ .min = 1,<br>
+ .max = 65535,<br>
+ .increment = 1<br>
+ },<br>
+ .digest_size = {<br>
+ .min = 1,<br>
+ .max = 64,<br>
+ .increment = 1<br>
+ },<br>
+ .iv_size = { 0 }<br>
+ }, }<br>
+ }, }<br>
+ },<br>
+#endif<br>
{ /* SM4 CBC */<br>
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br>
{.sym = {<br>
@@ -894,7 +1064,17 @@ static const unsigned int auth_blocksize[] = {<br>
[IMB_AUTH_SHA_512] = 128,<br>
[IMB_AUTH_ZUC_EIA3_BITLEN] = 16,<br>
[IMB_AUTH_SNOW3G_UIA2_BITLEN] = 16,<br>
- [IMB_AUTH_KASUMI_UIA1] = 16<br>
+ [IMB_AUTH_KASUMI_UIA1] = 16,<br>
+#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM<br>
+ [IMB_AUTH_SHA3_224] = 144,<br>
+ [IMB_AUTH_SHA3_256] = 136,<br>
+ [IMB_AUTH_SHA3_384] = 104,<br>
+ [IMB_AUTH_SHA3_512] = 72,<br>
+ [IMB_AUTH_HMAC_SHA3_224] = 144,<br>
+ [IMB_AUTH_HMAC_SHA3_256] = 136,<br>
+ [IMB_AUTH_HMAC_SHA3_384] = 104,<br>
+ [IMB_AUTH_HMAC_SHA3_512] = 72<br>
+#endif<br>
};<br>
<br>
/**<br>
@@ -928,7 +1108,17 @@ static const unsigned int auth_truncated_digest_byte_lengths[] = {<br>
[IMB_AUTH_SHA_512] = 64,<br>
[IMB_AUTH_ZUC_EIA3_BITLEN] = 4,<br>
[IMB_AUTH_SNOW3G_UIA2_BITLEN] = 4,<br>
- [IMB_AUTH_KASUMI_UIA1] = 4<br>
+ [IMB_AUTH_KASUMI_UIA1] = 4,<br>
+#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM<br>
+ [IMB_AUTH_SHA3_224] = 28,<br>
+ [IMB_AUTH_SHA3_256] = 32,<br>
+ [IMB_AUTH_SHA3_384] = 48,<br>
+ [IMB_AUTH_SHA3_512] = 64,<br>
+ [IMB_AUTH_HMAC_SHA3_224] = 28,<br>
+ [IMB_AUTH_HMAC_SHA3_256] = 32,<br>
+ [IMB_AUTH_HMAC_SHA3_384] = 48,<br>
+ [IMB_AUTH_HMAC_SHA3_512] = 64<br>
+#endif<br>
};<br>
<br>
/**<br>
@@ -967,6 +1157,16 @@ static const unsigned int auth_digest_byte_lengths[] = {<br>
#if IMB_VERSION(1, 5, 0) <= IMB_VERSION_NUM<br>
[IMB_AUTH_SM3] = 32,<br>
[IMB_AUTH_HMAC_SM3] = 32,<br>
+#endif<br>
+#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM<br>
+ [IMB_AUTH_SHA3_224] = 28,<br>
+ [IMB_AUTH_SHA3_256] = 32,<br>
+ [IMB_AUTH_SHA3_384] = 48,<br>
+ [IMB_AUTH_SHA3_512] = 64,<br>
+ [IMB_AUTH_HMAC_SHA3_224] = 28,<br>
+ [IMB_AUTH_HMAC_SHA3_256] = 32,<br>
+ [IMB_AUTH_HMAC_SHA3_384] = 48,<br>
+ [IMB_AUTH_HMAC_SHA3_512] = 64<br>
#endif<br>
/**< Vector mode dependent pointer table of the multi-buffer APIs */<br>
<br>
@@ -1049,15 +1249,15 @@ struct __rte_cache_aligned aesni_mb_session {<br>
/* *< auth operation generate or verify */<br>
union {<br>
struct {<br>
- alignas(16) uint8_t inner[128];<br>
+ alignas(16) uint8_t inner[144];<br>
/* *< inner pad */<br>
- alignas(16) uint8_t outer[128];<br>
+ alignas(16) uint8_t outer[144];<br>
/* *< outer pad */<br>
} pads;<br>
/* *< HMAC Authentication pads -<br>
* allocating space for the maximum pad<br>
- * size supported which is 128 bytes for<br>
- * SHA512<br>
+ * size supported which is 144 bytes for<br>
+ * SHA3-224<br>
*/<br>
<br>
struct {<br>
--<br>
2.43.0<br>
<br>
</div>
</body>
</html>