crypto/libcrypto: add driver for OpenSSL library
This code provides the initial implementation of the libcrypto poll mode driver. All cryptography operations are using Openssl library crypto API. Each algorithm uses EVP_ interface from openssl API - which is recommended by Openssl maintainers. This patch adds libcrypto poll mode driver support to librte_cryptodev library. Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com> Signed-off-by: Michal Kobylinski <michalx.kobylinski@intel.com> Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com> Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
parent
1f393d822d
commit
d61f70b4c9
@ -436,6 +436,11 @@ M: Pablo de Lara <pablo.de.lara.guarch@intel.com>
|
||||
F: drivers/crypto/zuc/
|
||||
F: doc/guides/cryptodevs/zuc.rst
|
||||
|
||||
LibCrypto PMD
|
||||
M: Declan Doherty <declan.doherty@intel.com>
|
||||
F: drivers/crypto/libcrypto/
|
||||
F: doc/guides/cryptodevs/libcrypto.rst
|
||||
|
||||
Null Crypto PMD
|
||||
M: Declan Doherty <declan.doherty@intel.com>
|
||||
F: drivers/crypto/null/
|
||||
|
@ -375,6 +375,12 @@ CONFIG_RTE_QAT_PMD_MAX_NB_SESSIONS=2048
|
||||
CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n
|
||||
CONFIG_RTE_LIBRTE_PMD_AESNI_MB_DEBUG=n
|
||||
|
||||
#
|
||||
# Compile PMD for Software backed device
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO=n
|
||||
CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO_DEBUG=n
|
||||
|
||||
#
|
||||
# Compile PMD for AESNI GCM device
|
||||
#
|
||||
|
@ -39,6 +39,7 @@ Crypto Device Drivers
|
||||
aesni_mb
|
||||
aesni_gcm
|
||||
kasumi
|
||||
libcrypto
|
||||
null
|
||||
snow3g
|
||||
qat
|
||||
|
116
doc/guides/cryptodevs/libcrypto.rst
Normal file
116
doc/guides/cryptodevs/libcrypto.rst
Normal file
@ -0,0 +1,116 @@
|
||||
.. BSD LICENSE
|
||||
Copyright(c) 2016 Intel Corporation. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Intel Corporation nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
LibCrypto Crypto Poll Mode Driver
|
||||
|
||||
This code provides the initial implementation of the libcrypto poll mode
|
||||
driver. All cryptography operations are using Openssl library crypto API.
|
||||
Each algorithm uses EVP interface from openssl API - which is recommended
|
||||
by Openssl maintainers.
|
||||
|
||||
For more details about openssl library please visit openssl webpage:
|
||||
https://www.openssl.org/
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
LibCrypto PMD has support for:
|
||||
|
||||
Supported cipher algorithms:
|
||||
* ``RTE_CRYPTO_CIPHER_3DES_CBC``
|
||||
* ``RTE_CRYPTO_CIPHER_AES_CBC``
|
||||
* ``RTE_CRYPTO_CIPHER_AES_CTR``
|
||||
* ``RTE_CRYPTO_CIPHER_3DES_CTR``
|
||||
* ``RTE_CRYPTO_CIPHER_AES_GCM``
|
||||
|
||||
Supported authentication algorithms:
|
||||
* ``RTE_CRYPTO_AUTH_AES_GMAC``
|
||||
* ``RTE_CRYPTO_AUTH_MD5``
|
||||
* ``RTE_CRYPTO_AUTH_SHA1``
|
||||
* ``RTE_CRYPTO_AUTH_SHA224``
|
||||
* ``RTE_CRYPTO_AUTH_SHA256``
|
||||
* ``RTE_CRYPTO_AUTH_SHA384``
|
||||
* ``RTE_CRYPTO_AUTH_SHA512``
|
||||
* ``RTE_CRYPTO_AUTH_MD5_HMAC``
|
||||
* ``RTE_CRYPTO_AUTH_SHA1_HMAC``
|
||||
* ``RTE_CRYPTO_AUTH_SHA224_HMAC``
|
||||
* ``RTE_CRYPTO_AUTH_SHA256_HMAC``
|
||||
* ``RTE_CRYPTO_AUTH_SHA384_HMAC``
|
||||
* ``RTE_CRYPTO_AUTH_SHA512_HMAC``
|
||||
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
To compile libcrypto PMD, it has to be enabled in the config/common_base file
|
||||
and appropriate openssl packages have to be installed in the build environment.
|
||||
|
||||
The newest openssl library version is supported:
|
||||
* 1.0.2h-fips 3 May 2016.
|
||||
Older versions that were also verified:
|
||||
* 1.0.1f 6 Jan 2014
|
||||
* 1.0.1 14 Mar 2012
|
||||
|
||||
For Ubuntu 14.04 LTS these packages have to be installed in the build system:
|
||||
sudo apt-get install openssl
|
||||
sudo apt-get install libc6-dev-i386 (for i686-native-linuxapp-gcc target)
|
||||
|
||||
This code was also verified on Fedora 24.
|
||||
This code was NOT yet verified on FreeBSD.
|
||||
|
||||
Initialization
|
||||
--------------
|
||||
|
||||
User can use app/test application to check how to use this pmd and to verify
|
||||
crypto processing.
|
||||
|
||||
Test name is cryptodev_libcrypto_autotest.
|
||||
For performance test cryptodev_libcrypto_perftest can be used.
|
||||
|
||||
To verify real traffic l2fwd-crypto example can be used with this command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
sudo ./build/l2fwd-crypto -c 0x3 -n 4 --vdev "cryptodev_libcrypto_pmd"
|
||||
--vdev "cryptodev_libcrypto_pmd"-- -p 0x3 --chain CIPHER_HASH
|
||||
--cipher_op ENCRYPT --cipher_algo AES_CBC
|
||||
--cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
|
||||
--iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
|
||||
--auth_op GENERATE --auth_algo SHA1_HMAC
|
||||
--auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
|
||||
:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
|
||||
:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
|
||||
|
||||
Limitations
|
||||
-----------
|
||||
|
||||
* Maximum number of sessions is 2048.
|
||||
* Chained mbufs are not supported.
|
||||
* Hash only is not supported for GCM and GMAC.
|
||||
* Cipher only is not supported for GCM and GMAC.
|
@ -78,6 +78,11 @@ New Features
|
||||
* C3XXX device
|
||||
* C62XX device
|
||||
|
||||
* **Added libcrypto PMD.**
|
||||
|
||||
A new crypto PMD has been added, which provides several ciphering and hashing.
|
||||
All cryptography operations are using Openssl library crypto API.
|
||||
|
||||
* **Updated the IPsec example with following support:**
|
||||
|
||||
* configuration file
|
||||
|
@ -33,6 +33,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
|
||||
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += aesni_gcm
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += aesni_mb
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += libcrypto
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += snow3g
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_KASUMI) += kasumi
|
||||
|
60
drivers/crypto/libcrypto/Makefile
Normal file
60
drivers/crypto/libcrypto/Makefile
Normal file
@ -0,0 +1,60 @@
|
||||
# BSD LICENSE
|
||||
#
|
||||
# Copyright(c) 2016 Intel Corporation. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the name of Intel Corporation nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
include $(RTE_SDK)/mk/rte.vars.mk
|
||||
|
||||
# library name
|
||||
LIB = librte_pmd_libcrypto.a
|
||||
|
||||
# build flags
|
||||
CFLAGS += -O3
|
||||
CFLAGS += $(WERROR_FLAGS)
|
||||
|
||||
# library version
|
||||
LIBABIVER := 1
|
||||
|
||||
# versioning export map
|
||||
EXPORT_MAP := rte_pmd_libcrypto_version.map
|
||||
|
||||
# external library dependencies
|
||||
LDLIBS += -lcrypto
|
||||
|
||||
# library source files
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += rte_libcrypto_pmd.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += rte_libcrypto_pmd_ops.c
|
||||
|
||||
# library dependencies
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += lib/librte_eal
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += lib/librte_mbuf
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += lib/librte_mempool
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += lib/librte_ring
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += lib/librte_cryptodev
|
||||
|
||||
include $(RTE_SDK)/mk/rte.lib.mk
|
1061
drivers/crypto/libcrypto/rte_libcrypto_pmd.c
Normal file
1061
drivers/crypto/libcrypto/rte_libcrypto_pmd.c
Normal file
File diff suppressed because it is too large
Load Diff
708
drivers/crypto/libcrypto/rte_libcrypto_pmd_ops.c
Normal file
708
drivers/crypto/libcrypto/rte_libcrypto_pmd_ops.c
Normal file
@ -0,0 +1,708 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2016 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <rte_common.h>
|
||||
#include <rte_malloc.h>
|
||||
#include <rte_cryptodev_pmd.h>
|
||||
|
||||
#include "rte_libcrypto_pmd_private.h"
|
||||
|
||||
|
||||
static const struct rte_cryptodev_capabilities libcrypto_pmd_capabilities[] = {
|
||||
{ /* MD5 HMAC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_MD5_HMAC,
|
||||
.block_size = 64,
|
||||
.key_size = {
|
||||
.min = 64,
|
||||
.max = 64,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 16,
|
||||
.max = 16,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 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
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* SHA1 HMAC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
|
||||
.block_size = 64,
|
||||
.key_size = {
|
||||
.min = 64,
|
||||
.max = 64,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 20,
|
||||
.max = 20,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 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
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* SHA224 HMAC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
|
||||
.block_size = 64,
|
||||
.key_size = {
|
||||
.min = 64,
|
||||
.max = 64,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 28,
|
||||
.max = 28,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 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
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* SHA256 HMAC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
|
||||
.block_size = 64,
|
||||
.key_size = {
|
||||
.min = 64,
|
||||
.max = 64,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 32,
|
||||
.max = 32,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 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
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* SHA384 HMAC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
|
||||
.block_size = 128,
|
||||
.key_size = {
|
||||
.min = 128,
|
||||
.max = 128,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 48,
|
||||
.max = 48,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* SHA384 */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_SHA384,
|
||||
.block_size = 128,
|
||||
.key_size = {
|
||||
.min = 0,
|
||||
.max = 0,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 48,
|
||||
.max = 48,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* SHA512 HMAC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
|
||||
.block_size = 128,
|
||||
.key_size = {
|
||||
.min = 128,
|
||||
.max = 128,
|
||||
.increment = 0
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 64,
|
||||
.max = 64,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 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
|
||||
},
|
||||
.aad_size = { 0 }
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* AES CBC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
|
||||
{.cipher = {
|
||||
.algo = RTE_CRYPTO_CIPHER_AES_CBC,
|
||||
.block_size = 16,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 32,
|
||||
.increment = 8
|
||||
},
|
||||
.iv_size = {
|
||||
.min = 16,
|
||||
.max = 16,
|
||||
.increment = 0
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* AES CTR */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
|
||||
{.cipher = {
|
||||
.algo = RTE_CRYPTO_CIPHER_AES_CTR,
|
||||
.block_size = 16,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 32,
|
||||
.increment = 8
|
||||
},
|
||||
.iv_size = {
|
||||
.min = 16,
|
||||
.max = 16,
|
||||
.increment = 0
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* AES GCM (AUTH) */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_AES_GCM,
|
||||
.block_size = 16,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 32,
|
||||
.increment = 8
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 16,
|
||||
.max = 16,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = {
|
||||
.min = 8,
|
||||
.max = 12,
|
||||
.increment = 4
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* AES GCM (CIPHER) */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
|
||||
{.cipher = {
|
||||
.algo = RTE_CRYPTO_CIPHER_AES_GCM,
|
||||
.block_size = 16,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 16,
|
||||
.increment = 0
|
||||
},
|
||||
.iv_size = {
|
||||
.min = 12,
|
||||
.max = 16,
|
||||
.increment = 4
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* AES GMAC (AUTH) */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
|
||||
{.auth = {
|
||||
.algo = RTE_CRYPTO_AUTH_AES_GMAC,
|
||||
.block_size = 16,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 32,
|
||||
.increment = 8
|
||||
},
|
||||
.digest_size = {
|
||||
.min = 16,
|
||||
.max = 16,
|
||||
.increment = 0
|
||||
},
|
||||
.aad_size = {
|
||||
.min = 8,
|
||||
.max = 65532,
|
||||
.increment = 4
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 3DES CBC */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
|
||||
{.cipher = {
|
||||
.algo = RTE_CRYPTO_CIPHER_3DES_CBC,
|
||||
.block_size = 8,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 24,
|
||||
.increment = 8
|
||||
},
|
||||
.iv_size = {
|
||||
.min = 8,
|
||||
.max = 8,
|
||||
.increment = 0
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
{ /* 3DES CTR */
|
||||
.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
|
||||
{.sym = {
|
||||
.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
|
||||
{.cipher = {
|
||||
.algo = RTE_CRYPTO_CIPHER_3DES_CTR,
|
||||
.block_size = 8,
|
||||
.key_size = {
|
||||
.min = 16,
|
||||
.max = 24,
|
||||
.increment = 8
|
||||
},
|
||||
.iv_size = {
|
||||
.min = 8,
|
||||
.max = 8,
|
||||
.increment = 0
|
||||
}
|
||||
}, }
|
||||
}, }
|
||||
},
|
||||
|
||||
RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
|
||||
};
|
||||
|
||||
|
||||
/** Configure device */
|
||||
static int
|
||||
libcrypto_pmd_config(__rte_unused struct rte_cryptodev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Start device */
|
||||
static int
|
||||
libcrypto_pmd_start(__rte_unused struct rte_cryptodev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Stop device */
|
||||
static void
|
||||
libcrypto_pmd_stop(__rte_unused struct rte_cryptodev *dev)
|
||||
{
|
||||
}
|
||||
|
||||
/** Close device */
|
||||
static int
|
||||
libcrypto_pmd_close(__rte_unused struct rte_cryptodev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Get device statistics */
|
||||
static void
|
||||
libcrypto_pmd_stats_get(struct rte_cryptodev *dev,
|
||||
struct rte_cryptodev_stats *stats)
|
||||
{
|
||||
int qp_id;
|
||||
|
||||
for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
|
||||
struct libcrypto_qp *qp = dev->data->queue_pairs[qp_id];
|
||||
|
||||
stats->enqueued_count += qp->stats.enqueued_count;
|
||||
stats->dequeued_count += qp->stats.dequeued_count;
|
||||
|
||||
stats->enqueue_err_count += qp->stats.enqueue_err_count;
|
||||
stats->dequeue_err_count += qp->stats.dequeue_err_count;
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset device statistics */
|
||||
static void
|
||||
libcrypto_pmd_stats_reset(struct rte_cryptodev *dev)
|
||||
{
|
||||
int qp_id;
|
||||
|
||||
for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
|
||||
struct libcrypto_qp *qp = dev->data->queue_pairs[qp_id];
|
||||
|
||||
memset(&qp->stats, 0, sizeof(qp->stats));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Get device info */
|
||||
static void
|
||||
libcrypto_pmd_info_get(struct rte_cryptodev *dev,
|
||||
struct rte_cryptodev_info *dev_info)
|
||||
{
|
||||
struct libcrypto_private *internals = dev->data->dev_private;
|
||||
|
||||
if (dev_info != NULL) {
|
||||
dev_info->dev_type = dev->dev_type;
|
||||
dev_info->feature_flags = dev->feature_flags;
|
||||
dev_info->capabilities = libcrypto_pmd_capabilities;
|
||||
dev_info->max_nb_queue_pairs = internals->max_nb_qpairs;
|
||||
dev_info->sym.max_nb_sessions = internals->max_nb_sessions;
|
||||
}
|
||||
}
|
||||
|
||||
/** Release queue pair */
|
||||
static int
|
||||
libcrypto_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
|
||||
{
|
||||
if (dev->data->queue_pairs[qp_id] != NULL) {
|
||||
rte_free(dev->data->queue_pairs[qp_id]);
|
||||
dev->data->queue_pairs[qp_id] = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** set a unique name for the queue pair based on it's name, dev_id and qp_id */
|
||||
static int
|
||||
libcrypto_pmd_qp_set_unique_name(struct rte_cryptodev *dev,
|
||||
struct libcrypto_qp *qp)
|
||||
{
|
||||
unsigned int n = snprintf(qp->name, sizeof(qp->name),
|
||||
"libcrypto_pmd_%u_qp_%u",
|
||||
dev->data->dev_id, qp->id);
|
||||
|
||||
if (n > sizeof(qp->name))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Create a ring to place processed operations on */
|
||||
static struct rte_ring *
|
||||
libcrypto_pmd_qp_create_processed_ops_ring(struct libcrypto_qp *qp,
|
||||
unsigned int ring_size, int socket_id)
|
||||
{
|
||||
struct rte_ring *r;
|
||||
|
||||
r = rte_ring_lookup(qp->name);
|
||||
if (r) {
|
||||
if (r->prod.size >= ring_size) {
|
||||
LIBCRYPTO_LOG_INFO(
|
||||
"Reusing existing ring %s for processed ops",
|
||||
qp->name);
|
||||
return r;
|
||||
}
|
||||
|
||||
LIBCRYPTO_LOG_ERR(
|
||||
"Unable to reuse existing ring %s for processed ops",
|
||||
qp->name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return rte_ring_create(qp->name, ring_size, socket_id,
|
||||
RING_F_SP_ENQ | RING_F_SC_DEQ);
|
||||
}
|
||||
|
||||
|
||||
/** Setup a queue pair */
|
||||
static int
|
||||
libcrypto_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
|
||||
const struct rte_cryptodev_qp_conf *qp_conf,
|
||||
int socket_id)
|
||||
{
|
||||
struct libcrypto_qp *qp = NULL;
|
||||
|
||||
/* Free memory prior to re-allocation if needed. */
|
||||
if (dev->data->queue_pairs[qp_id] != NULL)
|
||||
libcrypto_pmd_qp_release(dev, qp_id);
|
||||
|
||||
/* Allocate the queue pair data structure. */
|
||||
qp = rte_zmalloc_socket("LIBCRYPTO PMD Queue Pair", sizeof(*qp),
|
||||
RTE_CACHE_LINE_SIZE, socket_id);
|
||||
if (qp == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
qp->id = qp_id;
|
||||
dev->data->queue_pairs[qp_id] = qp;
|
||||
|
||||
if (libcrypto_pmd_qp_set_unique_name(dev, qp))
|
||||
goto qp_setup_cleanup;
|
||||
|
||||
qp->processed_ops = libcrypto_pmd_qp_create_processed_ops_ring(qp,
|
||||
qp_conf->nb_descriptors, socket_id);
|
||||
if (qp->processed_ops == NULL)
|
||||
goto qp_setup_cleanup;
|
||||
|
||||
qp->sess_mp = dev->data->session_pool;
|
||||
|
||||
memset(&qp->stats, 0, sizeof(qp->stats));
|
||||
|
||||
return 0;
|
||||
|
||||
qp_setup_cleanup:
|
||||
if (qp)
|
||||
rte_free(qp);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Start queue pair */
|
||||
static int
|
||||
libcrypto_pmd_qp_start(__rte_unused struct rte_cryptodev *dev,
|
||||
__rte_unused uint16_t queue_pair_id)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
/** Stop queue pair */
|
||||
static int
|
||||
libcrypto_pmd_qp_stop(__rte_unused struct rte_cryptodev *dev,
|
||||
__rte_unused uint16_t queue_pair_id)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
/** Return the number of allocated queue pairs */
|
||||
static uint32_t
|
||||
libcrypto_pmd_qp_count(struct rte_cryptodev *dev)
|
||||
{
|
||||
return dev->data->nb_queue_pairs;
|
||||
}
|
||||
|
||||
/** Returns the size of the session structure */
|
||||
static unsigned
|
||||
libcrypto_pmd_session_get_size(struct rte_cryptodev *dev __rte_unused)
|
||||
{
|
||||
return sizeof(struct libcrypto_session);
|
||||
}
|
||||
|
||||
/** Configure the session from a crypto xform chain */
|
||||
static void *
|
||||
libcrypto_pmd_session_configure(struct rte_cryptodev *dev __rte_unused,
|
||||
struct rte_crypto_sym_xform *xform, void *sess)
|
||||
{
|
||||
if (unlikely(sess == NULL)) {
|
||||
LIBCRYPTO_LOG_ERR("invalid session struct");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (libcrypto_set_session_parameters(
|
||||
sess, xform) != 0) {
|
||||
LIBCRYPTO_LOG_ERR("failed configure session parameters");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return sess;
|
||||
}
|
||||
|
||||
|
||||
/** Clear the memory of session so it doesn't leave key material behind */
|
||||
static void
|
||||
libcrypto_pmd_session_clear(struct rte_cryptodev *dev __rte_unused, void *sess)
|
||||
{
|
||||
/*
|
||||
* Current just resetting the whole data structure, need to investigate
|
||||
* whether a more selective reset of key would be more performant
|
||||
*/
|
||||
if (sess) {
|
||||
libcrypto_reset_session(sess);
|
||||
memset(sess, 0, sizeof(struct libcrypto_session));
|
||||
}
|
||||
}
|
||||
|
||||
struct rte_cryptodev_ops libcrypto_pmd_ops = {
|
||||
.dev_configure = libcrypto_pmd_config,
|
||||
.dev_start = libcrypto_pmd_start,
|
||||
.dev_stop = libcrypto_pmd_stop,
|
||||
.dev_close = libcrypto_pmd_close,
|
||||
|
||||
.stats_get = libcrypto_pmd_stats_get,
|
||||
.stats_reset = libcrypto_pmd_stats_reset,
|
||||
|
||||
.dev_infos_get = libcrypto_pmd_info_get,
|
||||
|
||||
.queue_pair_setup = libcrypto_pmd_qp_setup,
|
||||
.queue_pair_release = libcrypto_pmd_qp_release,
|
||||
.queue_pair_start = libcrypto_pmd_qp_start,
|
||||
.queue_pair_stop = libcrypto_pmd_qp_stop,
|
||||
.queue_pair_count = libcrypto_pmd_qp_count,
|
||||
|
||||
.session_get_size = libcrypto_pmd_session_get_size,
|
||||
.session_configure = libcrypto_pmd_session_configure,
|
||||
.session_clear = libcrypto_pmd_session_clear
|
||||
};
|
||||
|
||||
struct rte_cryptodev_ops *rte_libcrypto_pmd_ops = &libcrypto_pmd_ops;
|
174
drivers/crypto/libcrypto/rte_libcrypto_pmd_private.h
Normal file
174
drivers/crypto/libcrypto/rte_libcrypto_pmd_private.h
Normal file
@ -0,0 +1,174 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2016 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _LIBCRYPTO_PMD_PRIVATE_H_
|
||||
#define _LIBCRYPTO_PMD_PRIVATE_H_
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/des.h>
|
||||
|
||||
|
||||
#define LIBCRYPTO_LOG_ERR(fmt, args...) \
|
||||
RTE_LOG(ERR, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
|
||||
RTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD), \
|
||||
__func__, __LINE__, ## args)
|
||||
|
||||
#ifdef RTE_LIBRTE_LIBCRYPTO_DEBUG
|
||||
#define LIBCRYPTO_LOG_INFO(fmt, args...) \
|
||||
RTE_LOG(INFO, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
|
||||
RTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD), \
|
||||
__func__, __LINE__, ## args)
|
||||
|
||||
#define LIBCRYPTO_LOG_DBG(fmt, args...) \
|
||||
RTE_LOG(DEBUG, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
|
||||
RTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD), \
|
||||
__func__, __LINE__, ## args)
|
||||
#else
|
||||
#define LIBCRYPTO_LOG_INFO(fmt, args...)
|
||||
#define LIBCRYPTO_LOG_DBG(fmt, args...)
|
||||
#endif
|
||||
|
||||
|
||||
/** LIBCRYPTO operation order mode enumerator */
|
||||
enum libcrypto_chain_order {
|
||||
LIBCRYPTO_CHAIN_ONLY_CIPHER,
|
||||
LIBCRYPTO_CHAIN_ONLY_AUTH,
|
||||
LIBCRYPTO_CHAIN_CIPHER_AUTH,
|
||||
LIBCRYPTO_CHAIN_AUTH_CIPHER,
|
||||
LIBCRYPTO_CHAIN_COMBINED,
|
||||
LIBCRYPTO_CHAIN_NOT_SUPPORTED
|
||||
};
|
||||
|
||||
/** LIBCRYPTO cipher mode enumerator */
|
||||
enum libcrypto_cipher_mode {
|
||||
LIBCRYPTO_CIPHER_LIB,
|
||||
LIBCRYPTO_CIPHER_DES3CTR,
|
||||
};
|
||||
|
||||
/** LIBCRYPTO auth mode enumerator */
|
||||
enum libcrypto_auth_mode {
|
||||
LIBCRYPTO_AUTH_AS_AUTH,
|
||||
LIBCRYPTO_AUTH_AS_HMAC,
|
||||
};
|
||||
|
||||
/** private data structure for each LIBCRYPTO crypto device */
|
||||
struct libcrypto_private {
|
||||
unsigned int max_nb_qpairs;
|
||||
/**< Max number of queue pairs */
|
||||
unsigned int max_nb_sessions;
|
||||
/**< Max number of sessions */
|
||||
};
|
||||
|
||||
/** LIBCRYPTO crypto queue pair */
|
||||
struct libcrypto_qp {
|
||||
uint16_t id;
|
||||
/**< Queue Pair Identifier */
|
||||
char name[RTE_CRYPTODEV_NAME_LEN];
|
||||
/**< Unique Queue Pair Name */
|
||||
struct rte_ring *processed_ops;
|
||||
/**< Ring for placing process packets */
|
||||
struct rte_mempool *sess_mp;
|
||||
/**< Session Mempool */
|
||||
struct rte_cryptodev_stats stats;
|
||||
/**< Queue pair statistics */
|
||||
} __rte_cache_aligned;
|
||||
|
||||
/** LIBCRYPTO crypto private session structure */
|
||||
struct libcrypto_session {
|
||||
enum libcrypto_chain_order chain_order;
|
||||
/**< chain order mode */
|
||||
|
||||
/** Cipher Parameters */
|
||||
struct {
|
||||
enum rte_crypto_cipher_operation direction;
|
||||
/**< cipher operation direction */
|
||||
enum libcrypto_cipher_mode mode;
|
||||
/**< cipher operation mode */
|
||||
enum rte_crypto_cipher_algorithm algo;
|
||||
/**< cipher algorithm */
|
||||
|
||||
struct {
|
||||
uint8_t data[32];
|
||||
/**< key data */
|
||||
size_t length;
|
||||
/**< key length in bytes */
|
||||
} key;
|
||||
|
||||
const EVP_CIPHER *evp_algo;
|
||||
/**< pointer to EVP algorithm function */
|
||||
EVP_CIPHER_CTX *ctx;
|
||||
/**< pointer to EVP context structure */
|
||||
} cipher;
|
||||
|
||||
/** Authentication Parameters */
|
||||
struct {
|
||||
enum rte_crypto_auth_operation operation;
|
||||
/**< auth operation generate or verify */
|
||||
enum libcrypto_auth_mode mode;
|
||||
/**< auth operation mode */
|
||||
enum rte_crypto_auth_algorithm algo;
|
||||
/**< cipher algorithm */
|
||||
|
||||
union {
|
||||
struct {
|
||||
const EVP_MD *evp_algo;
|
||||
/**< pointer to EVP algorithm function */
|
||||
EVP_MD_CTX *ctx;
|
||||
/**< pointer to EVP context structure */
|
||||
} auth;
|
||||
|
||||
struct {
|
||||
EVP_PKEY *pkey;
|
||||
/**< pointer to EVP key */
|
||||
const EVP_MD *evp_algo;
|
||||
/**< pointer to EVP algorithm function */
|
||||
EVP_MD_CTX *ctx;
|
||||
/**< pointer to EVP context structure */
|
||||
} hmac;
|
||||
};
|
||||
} auth;
|
||||
|
||||
} __rte_cache_aligned;
|
||||
|
||||
/** Set and validate LIBCRYPTO crypto session parameters */
|
||||
extern int
|
||||
libcrypto_set_session_parameters(struct libcrypto_session *sess,
|
||||
const struct rte_crypto_sym_xform *xform);
|
||||
|
||||
/** Reset LIBCRYPTO crypto session parameters */
|
||||
extern void
|
||||
libcrypto_reset_session(struct libcrypto_session *sess);
|
||||
|
||||
/** device specific operations function pointer structure */
|
||||
extern struct rte_cryptodev_ops *rte_libcrypto_pmd_ops;
|
||||
|
||||
#endif /* _LIBCRYPTO_PMD_PRIVATE_H_ */
|
3
drivers/crypto/libcrypto/rte_pmd_libcrypto_version.map
Normal file
3
drivers/crypto/libcrypto/rte_pmd_libcrypto_version.map
Normal file
@ -0,0 +1,3 @@
|
||||
DPDK_16.11 {
|
||||
local: *;
|
||||
};
|
@ -56,6 +56,8 @@ extern "C" {
|
||||
/**< AES-NI Multi buffer PMD device name */
|
||||
#define CRYPTODEV_NAME_AESNI_GCM_PMD crypto_aesni_gcm
|
||||
/**< AES-NI GCM PMD device name */
|
||||
#define CRYPTODEV_NAME_LIBCRYPTO_PMD crypto_libcrypto
|
||||
/**< Open SSL Crypto PMD device name */
|
||||
#define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
|
||||
/**< Intel QAT Symmetric Crypto PMD device name */
|
||||
#define CRYPTODEV_NAME_SNOW3G_PMD crypto_snow3g
|
||||
@ -73,7 +75,8 @@ enum rte_cryptodev_type {
|
||||
RTE_CRYPTODEV_QAT_SYM_PMD, /**< QAT PMD Symmetric Crypto */
|
||||
RTE_CRYPTODEV_SNOW3G_PMD, /**< SNOW 3G PMD */
|
||||
RTE_CRYPTODEV_KASUMI_PMD, /**< KASUMI PMD */
|
||||
RTE_CRYPTODEV_ZUC_PMD /**< ZUC PMD */
|
||||
RTE_CRYPTODEV_ZUC_PMD, /**< ZUC PMD */
|
||||
RTE_CRYPTODEV_LIBCRYPTO_PMD, /**< LibCrypto PMD */
|
||||
};
|
||||
|
||||
extern const char **rte_cyptodev_names;
|
||||
|
@ -131,18 +131,19 @@ endif # $(CONFIG_RTE_LIBRTE_VHOST)
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += -lrte_pmd_vmxnet3_uio
|
||||
|
||||
ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -lrte_pmd_aesni_mb
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -lrte_pmd_aesni_gcm -lcrypto
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -lrte_pmd_aesni_mb
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -lrte_pmd_aesni_gcm -lcrypto
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO) += -lrte_pmd_libcrypto -lcrypto
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += -lrte_pmd_null_crypto
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += -lrte_pmd_qat -lcrypto
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += -lrte_pmd_snow3g
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += -L$(LIBSSO_SNOW3G_PATH)/build -lsso_snow3g
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_KASUMI) += -lrte_pmd_kasumi
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_KASUMI) += -L$(LIBSSO_KASUMI_PATH)/build -lsso_kasumi
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZUC) += -lrte_pmd_zuc
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZUC) += -L$(LIBSSO_ZUC_PATH)/build -lsso_zuc
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += -lrte_pmd_qat -lcrypto
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += -lrte_pmd_snow3g
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += -L$(LIBSSO_SNOW3G_PATH)/build -lsso_snow3g
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_KASUMI) += -lrte_pmd_kasumi
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_KASUMI) += -L$(LIBSSO_KASUMI_PATH)/build -lsso_kasumi
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZUC) += -lrte_pmd_zuc
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZUC) += -L$(LIBSSO_ZUC_PATH)/build -lsso_zuc
|
||||
endif # CONFIG_RTE_LIBRTE_CRYPTODEV
|
||||
|
||||
endif # !CONFIG_RTE_BUILD_SHARED_LIBS
|
||||
|
@ -187,6 +187,8 @@ config () # <directory> <target> <options>
|
||||
test -z "$LIBSSO_ZUC_PATH" || \
|
||||
sed -ri 's,(PMD_ZUC=)n,\1y,' $1/.config
|
||||
test "$DPDK_DEP_SSL" != y || \
|
||||
sed -ri 's,(PMD_LIBCRYPTO=)n,\1y,' $1/.config
|
||||
test "$DPDK_DEP_SSL" != y || \
|
||||
sed -ri 's,(PMD_QAT=)n,\1y,' $1/.config
|
||||
sed -ri 's,(KNI_VHOST.*=)n,\1y,' $1/.config
|
||||
sed -ri 's,(SCHED_.*=)n,\1y,' $1/.config
|
||||
|
Loading…
x
Reference in New Issue
Block a user