Add SHAKE-128 and SHAKE-256 support to
ipsec_mb PMD.

Signed-off-by: Emma Finn <[email protected]>
---
 doc/guides/cryptodevs/aesni_mb.rst          |  2 +
 doc/guides/cryptodevs/features/aesni_mb.ini |  2 +
 doc/guides/rel_notes/release_26_11.rst      |  1 +
 drivers/crypto/ipsec_mb/pmd_aesni_mb.c      |  8 +++
 drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h | 54 +++++++++++++++++++--
 5 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/doc/guides/cryptodevs/aesni_mb.rst 
b/doc/guides/cryptodevs/aesni_mb.rst
index 663b9f19d4b..da37d54471e 100644
--- a/doc/guides/cryptodevs/aesni_mb.rst
+++ b/doc/guides/cryptodevs/aesni_mb.rst
@@ -69,6 +69,8 @@ Hash algorithms:
 * RTE_CRYPTO_AUTH_SHA3_384 HMAC
 * RTE_CRYPTO_AUTH_SHA3_512
 * RTE_CRYPTO_AUTH_SHA3_512 HMAC
+* RTE_CRYPTO_AUTH_SHAKE_128
+* RTE_CRYPTO_AUTH_SHAKE_256
 
 AEAD algorithms:
 
diff --git a/doc/guides/cryptodevs/features/aesni_mb.ini 
b/doc/guides/cryptodevs/features/aesni_mb.ini
index 73bb9f42633..18109ffe05d 100644
--- a/doc/guides/cryptodevs/features/aesni_mb.ini
+++ b/doc/guides/cryptodevs/features/aesni_mb.ini
@@ -77,6 +77,8 @@ SHA3_384     = Y
 SHA3_384 HMAC = Y
 SHA3_512     = Y
 SHA3_512 HMAC = Y
+SHAKE_128    = Y
+SHAKE_256    = Y
 
 ;
 ; Supported AEAD algorithms of the 'aesni_mb' crypto driver.
diff --git a/doc/guides/rel_notes/release_26_11.rst 
b/doc/guides/rel_notes/release_26_11.rst
index 826a0cf05cf..c116f3373da 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -28,6 +28,7 @@ New Features
 
   * Added support for SHA3-224, SHA3-256, SHA3-384, and SHA3-512 hash
     algorithms and their HMAC variants.
+  * Added support for SHAKE-128 and SHAKE-256 hash algorithms.
 
 .. This section should contain new features added in this release.
    Sample format:
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c 
b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
index c96d1453b8c..adfc39b9569 100644
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
@@ -332,6 +332,14 @@ aesni_mb_set_session_auth_parameters(IMB_MGR *mb_mgr,
        case RTE_CRYPTO_AUTH_SHA3_512_HMAC:
                sess->template_job.hash_alg = IMB_AUTH_HMAC_SHA3_512;
                break;
+       case RTE_CRYPTO_AUTH_SHAKE_128:
+               sess->template_job.hash_alg = IMB_AUTH_SHAKE128;
+               auth_precompute = 0;
+               break;
+       case RTE_CRYPTO_AUTH_SHAKE_256:
+               sess->template_job.hash_alg = IMB_AUTH_SHAKE256;
+               auth_precompute = 0;
+               break;
 #endif
        default:
                IPSEC_MB_LOG(ERR,
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h 
b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h
index aad31b9f909..8e3d7afed62 100644
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h
@@ -937,6 +937,48 @@ static const struct rte_cryptodev_capabilities 
aesni_mb_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* SHAKE-128 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHAKE_128,
+                               .block_size = 168,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 1,
+                                       .max = 65535,
+                                       .increment = 1
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
+       {       /* SHAKE-256 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHAKE_256,
+                               .block_size = 136,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 1,
+                                       .max = 65535,
+                                       .increment = 1
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
 #endif
        {       /* SM4 CBC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
@@ -1073,7 +1115,9 @@ static const unsigned int auth_blocksize[] = {
                [IMB_AUTH_HMAC_SHA3_224]        = 144,
                [IMB_AUTH_HMAC_SHA3_256]        = 136,
                [IMB_AUTH_HMAC_SHA3_384]        = 104,
-               [IMB_AUTH_HMAC_SHA3_512]        = 72
+               [IMB_AUTH_HMAC_SHA3_512]        = 72,
+               [IMB_AUTH_SHAKE128]             = 168,
+               [IMB_AUTH_SHAKE256]             = 136
 #endif
 };
 
@@ -1117,7 +1161,9 @@ static const unsigned int 
auth_truncated_digest_byte_lengths[] = {
                [IMB_AUTH_HMAC_SHA3_224]        = 28,
                [IMB_AUTH_HMAC_SHA3_256]        = 32,
                [IMB_AUTH_HMAC_SHA3_384]        = 48,
-               [IMB_AUTH_HMAC_SHA3_512]        = 64
+               [IMB_AUTH_HMAC_SHA3_512]        = 64,
+               [IMB_AUTH_SHAKE128]             = 64,
+               [IMB_AUTH_SHAKE256]             = 64
 #endif
 };
 
@@ -1166,7 +1212,9 @@ static const unsigned int auth_digest_byte_lengths[] = {
                [IMB_AUTH_HMAC_SHA3_224]        = 28,
                [IMB_AUTH_HMAC_SHA3_256]        = 32,
                [IMB_AUTH_HMAC_SHA3_384]        = 48,
-               [IMB_AUTH_HMAC_SHA3_512]        = 64
+               [IMB_AUTH_HMAC_SHA3_512]        = 64,
+               [IMB_AUTH_SHAKE128]             = 64,
+               [IMB_AUTH_SHAKE256]             = 64
 #endif
        /**< Vector mode dependent pointer table of the multi-buffer APIs */
 
-- 
2.43.0

Reply via email to