crypto/dpaa_sec: support non-HMAC auth algos
authorGagandeep Singh <g.singh@nxp.com>
Wed, 8 Sep 2021 06:59:45 +0000 (12:29 +0530)
committerAkhil Goyal <gakhil@marvell.com>
Wed, 8 Sep 2021 08:12:35 +0000 (10:12 +0200)
This patch add support for non-HMAC, md5, shax algos.

Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
doc/guides/cryptodevs/features/dpaa_sec.ini
doc/guides/rel_notes/release_21_11.rst
drivers/crypto/dpaa_sec/dpaa_sec.c
drivers/crypto/dpaa_sec/dpaa_sec.h

index 5d0d04d..eab14da 100644 (file)
@@ -33,11 +33,17 @@ ZUC EEA3      = Y
 ; Supported authentication algorithms of the 'dpaa_sec' crypto driver.
 ;
 [Auth]
+MD5          = Y
 MD5 HMAC     = Y
+SHA1         = Y
 SHA1 HMAC    = Y
+SHA224       = Y
 SHA224 HMAC  = Y
+SHA256       = Y
 SHA256 HMAC  = Y
+SHA384       = Y
 SHA384 HMAC  = Y
+SHA512       = Y
 SHA512 HMAC  = Y
 SNOW3G UIA2  = Y
 ZUC EIA3     = Y
@@ -53,4 +59,4 @@ AES GCM (256) = Y
 ;
 ; Supported Asymmetric algorithms of the 'dpaa_sec' crypto driver.
 ;
-[Asymmetric]
\ No newline at end of file
+[Asymmetric]
index f3acf78..6c311ab 100644 (file)
@@ -75,7 +75,7 @@ New Features
 
 * **Updated NXP dpaa_sec crypto PMD.**
 
-  * Added DES-CBC algo support.
+  * Added DES-CBC and non-HMAC algo support.
 
 
 Removed Items
index 6972cf3..d1c0ea9 100644 (file)
@@ -489,6 +489,18 @@ dpaa_sec_prep_cdb(dpaa_sec_session *ses)
                alginfo_a.algtype = ses->auth_key.alg;
                alginfo_a.algmode = ses->auth_key.algmode;
                switch (ses->auth_alg) {
+               case RTE_CRYPTO_AUTH_MD5:
+               case RTE_CRYPTO_AUTH_SHA1:
+               case RTE_CRYPTO_AUTH_SHA224:
+               case RTE_CRYPTO_AUTH_SHA256:
+               case RTE_CRYPTO_AUTH_SHA384:
+               case RTE_CRYPTO_AUTH_SHA512:
+                       shared_desc_len = cnstr_shdsc_hash(
+                                               cdb->sh_desc, true,
+                                               swap, SHR_NEVER, &alginfo_a,
+                                               !ses->dir,
+                                               ses->digest_length);
+                       break;
                case RTE_CRYPTO_AUTH_MD5_HMAC:
                case RTE_CRYPTO_AUTH_SHA1_HMAC:
                case RTE_CRYPTO_AUTH_SHA224_HMAC:
@@ -2080,43 +2092,70 @@ dpaa_sec_auth_init(struct rte_cryptodev *dev __rte_unused,
 {
        session->ctxt = DPAA_SEC_AUTH;
        session->auth_alg = xform->auth.algo;
-       session->auth_key.data = rte_zmalloc(NULL, xform->auth.key.length,
+       session->auth_key.length = xform->auth.key.length;
+       if (xform->auth.key.length) {
+               session->auth_key.data =
+                               rte_zmalloc(NULL, xform->auth.key.length,
                                             RTE_CACHE_LINE_SIZE);
-       if (session->auth_key.data == NULL && xform->auth.key.length > 0) {
-               DPAA_SEC_ERR("No Memory for auth key");
-               return -ENOMEM;
+               if (session->auth_key.data == NULL) {
+                       DPAA_SEC_ERR("No Memory for auth key");
+                       return -ENOMEM;
+               }
+               memcpy(session->auth_key.data, xform->auth.key.data,
+                               xform->auth.key.length);
+
        }
-       session->auth_key.length = xform->auth.key.length;
        session->digest_length = xform->auth.digest_length;
        if (session->cipher_alg == RTE_CRYPTO_CIPHER_NULL) {
                session->iv.offset = xform->auth.iv.offset;
                session->iv.length = xform->auth.iv.length;
        }
 
-       memcpy(session->auth_key.data, xform->auth.key.data,
-              xform->auth.key.length);
-
        switch (xform->auth.algo) {
+       case RTE_CRYPTO_AUTH_SHA1:
+               session->auth_key.alg = OP_ALG_ALGSEL_SHA1;
+               session->auth_key.algmode = OP_ALG_AAI_HASH;
+               break;
        case RTE_CRYPTO_AUTH_SHA1_HMAC:
                session->auth_key.alg = OP_ALG_ALGSEL_SHA1;
                session->auth_key.algmode = OP_ALG_AAI_HMAC;
                break;
+       case RTE_CRYPTO_AUTH_MD5:
+               session->auth_key.alg = OP_ALG_ALGSEL_MD5;
+               session->auth_key.algmode = OP_ALG_AAI_HASH;
+               break;
        case RTE_CRYPTO_AUTH_MD5_HMAC:
                session->auth_key.alg = OP_ALG_ALGSEL_MD5;
                session->auth_key.algmode = OP_ALG_AAI_HMAC;
                break;
+       case RTE_CRYPTO_AUTH_SHA224:
+               session->auth_key.alg = OP_ALG_ALGSEL_SHA224;
+               session->auth_key.algmode = OP_ALG_AAI_HASH;
+               break;
        case RTE_CRYPTO_AUTH_SHA224_HMAC:
                session->auth_key.alg = OP_ALG_ALGSEL_SHA224;
                session->auth_key.algmode = OP_ALG_AAI_HMAC;
                break;
+       case RTE_CRYPTO_AUTH_SHA256:
+               session->auth_key.alg = OP_ALG_ALGSEL_SHA256;
+               session->auth_key.algmode = OP_ALG_AAI_HASH;
+               break;
        case RTE_CRYPTO_AUTH_SHA256_HMAC:
                session->auth_key.alg = OP_ALG_ALGSEL_SHA256;
                session->auth_key.algmode = OP_ALG_AAI_HMAC;
                break;
+       case RTE_CRYPTO_AUTH_SHA384:
+               session->auth_key.alg = OP_ALG_ALGSEL_SHA384;
+               session->auth_key.algmode = OP_ALG_AAI_HASH;
+               break;
        case RTE_CRYPTO_AUTH_SHA384_HMAC:
                session->auth_key.alg = OP_ALG_ALGSEL_SHA384;
                session->auth_key.algmode = OP_ALG_AAI_HMAC;
                break;
+       case RTE_CRYPTO_AUTH_SHA512:
+               session->auth_key.alg = OP_ALG_ALGSEL_SHA512;
+               session->auth_key.algmode = OP_ALG_AAI_HASH;
+               break;
        case RTE_CRYPTO_AUTH_SHA512_HMAC:
                session->auth_key.alg = OP_ALG_ALGSEL_SHA512;
                session->auth_key.algmode = OP_ALG_AAI_HMAC;
index 216e8c8..d500a4c 100644 (file)
@@ -240,6 +240,27 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                        }, },
                }, },
        },
+       {       /* MD5 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_MD5,
+                               .block_size = 64,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 16,
+                                       .max = 16,
+                                       .increment = 0
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
        {       /* MD5 HMAC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -261,6 +282,27 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* SHA1 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHA1,
+                               .block_size = 64,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 20,
+                                       .max = 20,
+                                       .increment = 0
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
        {       /* SHA1 HMAC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -282,6 +324,27 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* SHA224 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHA224,
+                               .block_size = 64,
+                                       .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 28,
+                                       .max = 28,
+                                       .increment = 0
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
        {       /* SHA224 HMAC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -303,6 +366,27 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* SHA256 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHA256,
+                               .block_size = 64,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 32,
+                                       .max = 32,
+                                       .increment = 0
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
        {       /* SHA256 HMAC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -324,6 +408,27 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* SHA384 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHA384,
+                               .block_size = 64,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 48,
+                                       .max = 48,
+                                       .increment = 0
+                                       },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
        {       /* SHA384 HMAC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -345,6 +450,27 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* SHA512 */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SHA512,
+                               .block_size = 128,
+                               .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 64,
+                                       .max = 64,
+                                       .increment = 0
+                               },
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
        {       /* SHA512 HMAC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {