> Extend openssl crypto PMD to support AES XTS operations.
> 
> Signed-off-by: Shaokai Zhang <[email protected]>
> Reviewed-by: Joey Xing <[email protected]>
> ---
>  drivers/crypto/openssl/openssl_pmd_private.h |  2 +-
>  drivers/crypto/openssl/rte_openssl_pmd.c     | 13 +++++++++++++
>  drivers/crypto/openssl/rte_openssl_pmd_ops.c | 20 ++++++++++++++++++++
>  3 files changed, 34 insertions(+), 1 deletion(-)

Documentation update missing.
This patch is late for current release. Will be deferred to next release.

> 
> diff --git a/drivers/crypto/openssl/openssl_pmd_private.h
> b/drivers/crypto/openssl/openssl_pmd_private.h
> index fe89e522e1..d5a751600a 100644
> --- a/drivers/crypto/openssl/openssl_pmd_private.h
> +++ b/drivers/crypto/openssl/openssl_pmd_private.h
> @@ -118,7 +118,7 @@ struct __rte_cache_aligned openssl_session {
>               /**< cipher algorithm */
> 
>               struct {
> -                     uint8_t data[32];
> +                     uint8_t data[64];
>                       /**< key data */
>                       size_t length;
>                       /**< key length in bytes */
> diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c
> b/drivers/crypto/openssl/rte_openssl_pmd.c
> index 4f171f48cc..2d803912d4 100644
> --- a/drivers/crypto/openssl/rte_openssl_pmd.c
> +++ b/drivers/crypto/openssl/rte_openssl_pmd.c
> @@ -211,6 +211,18 @@ get_cipher_algo(enum rte_crypto_cipher_algorithm
> sess_algo, size_t keylen,
>                               res = -EINVAL;
>                       }
>                       break;
> +             case RTE_CRYPTO_CIPHER_AES_XTS:
> +                     switch (keylen) {
> +                     case 32:
> +                             *algo = EVP_aes_128_xts();
> +                             break;
> +                     case 64:
> +                             *algo = EVP_aes_256_xts();
> +                             break;
> +                     default:
> +                             res = -EINVAL;
> +                     }
> +                     break;
>               case RTE_CRYPTO_CIPHER_AES_CTR:
>                       switch (keylen) {
>                       case 16:
> @@ -493,6 +505,7 @@ openssl_set_session_cipher_parameters(struct
> openssl_session *sess,
>       case RTE_CRYPTO_CIPHER_3DES_CBC:
>       case RTE_CRYPTO_CIPHER_AES_CBC:
>       case RTE_CRYPTO_CIPHER_AES_CTR:
> +     case RTE_CRYPTO_CIPHER_AES_XTS:
>               sess->cipher.mode = OPENSSL_CIPHER_LIB;
>               sess->cipher.algo = xform->cipher.algo;
>               sess->cipher.ctx = EVP_CIPHER_CTX_new();
> diff --git a/drivers/crypto/openssl/rte_openssl_pmd_ops.c
> b/drivers/crypto/openssl/rte_openssl_pmd_ops.c
> index 5095e6cbea..df5c12626d 100644
> --- a/drivers/crypto/openssl/rte_openssl_pmd_ops.c
> +++ b/drivers/crypto/openssl/rte_openssl_pmd_ops.c
> @@ -269,6 +269,26 @@ static const struct rte_cryptodev_capabilities
> openssl_pmd_capabilities[] = {
>                       }, }
>               }, }
>       },
> +     {       /* AES XTS */
> +             .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
> +             {.sym = {
> +                     .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
> +                     {.cipher = {
> +                             .algo = RTE_CRYPTO_CIPHER_AES_XTS,
> +                             .block_size = 16,
> +                             .key_size = {
> +                                     .min = 32,
> +                                     .max = 64,
> +                                     .increment = 32
> +                             },
> +                             .iv_size = {
> +                                     .min = 16,
> +                                     .max = 16,
> +                                     .increment = 0
> +                             }
> +                     }, }
> +             }, }
> +     },
>       {       /* AES CBC */
>               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
>               {.sym = {
> --
> 2.47.1.windows.2

Reply via email to