crypto/armv8: link to library hosted by Arm
authorRuifeng Wang <ruifeng.wang@arm.com>
Thu, 23 Jan 2020 03:45:53 +0000 (11:45 +0800)
committerAkhil Goyal <akhil.goyal@nxp.com>
Wed, 5 Feb 2020 14:20:51 +0000 (15:20 +0100)
Armv8 crypto PMD linked to armv8_crypto library created by Marvell.
Maintenance of armv8_crypto library will be discontinued.
Change Armv8 PMD to link to AArch64 crypto library hosted by Arm.

Signed-off-by: Ruifeng Wang <ruifeng.wang@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
doc/guides/cryptodevs/armv8.rst
doc/guides/rel_notes/release_20_02.rst
drivers/crypto/armv8/Makefile
drivers/crypto/armv8/armv8_pmd_private.h
drivers/crypto/armv8/rte_armv8_pmd.c
drivers/crypto/armv8/rte_armv8_pmd_ops.c
mk/rte.app.mk

index 1ab4009..fee8535 100644 (file)
@@ -28,12 +28,11 @@ Installation
 
 In order to enable this virtual crypto PMD, user must:
 
-* Download ARMv8 crypto library source code from
-  `here <https://github.com/caviumnetworks/armv8_crypto>`_
+* Download AArch64 crypto library source code from
+  `here <https://github.com/ARM-software/AArch64cryptolib>`_
 
 * Export the environmental variable ARMV8_CRYPTO_LIB_PATH with
-  the path where the ``armv8_crypto`` library was downloaded
-  or cloned.
+  the path to ``AArch64cryptolib`` library.
 
 * Build the library by invoking:
 
index 4b96fe1..2c8ee32 100644 (file)
@@ -155,6 +155,12 @@ New Features
   * Transistioned underlying library from libSSO SNOW3G to intel-ipsec-mb
     library (minimum version required 0.53).
 
+* **Changed armv8 crypto PMD external dependency.**
+
+  armv8 crypto PMD now depends on Arm crypto library, and Marvell's
+  armv8 crypto library is not used anymore. Library name is changed
+  from armv8_crypto to AArch64crypto.
+
 * **Added Marvell OCTEON TX2 End Point rawdev PMD.**
 
   Added a new OCTEON TX2 rawdev PMD for End Point mode of operation.
index 1252836..7f20a28 100644 (file)
@@ -24,9 +24,8 @@ EXPORT_MAP := rte_pmd_armv8_version.map
 
 # external library dependencies
 CFLAGS += -I$(ARMV8_CRYPTO_LIB_PATH)
-CFLAGS += -I$(ARMV8_CRYPTO_LIB_PATH)/asm/include
 CFLAGS += -DALLOW_EXPERIMENTAL_API
-LDLIBS += -L$(ARMV8_CRYPTO_LIB_PATH) -larmv8_crypto
+LDLIBS += -L$(ARMV8_CRYPTO_LIB_PATH) -lAArch64crypto
 LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
 LDLIBS += -lrte_cryptodev
 LDLIBS += -lrte_bus_vdev
index 24040dd..e08d0df 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef _ARMV8_PMD_PRIVATE_H_
 #define _ARMV8_PMD_PRIVATE_H_
 
+#include "AArch64cryptolib.h"
+
 #define CRYPTODEV_NAME_ARMV8_PMD       crypto_armv8
 /**< ARMv8 Crypto PMD device name */
 
@@ -98,7 +100,7 @@ enum armv8_crypto_auth_mode {
 
 typedef int (*crypto_func_t)(uint8_t *, uint8_t *, uint64_t,
                                uint8_t *, uint8_t *, uint64_t,
-                               crypto_arg_t *);
+                               armv8_cipher_digest_t *);
 
 typedef void (*crypto_key_sched_t)(uint8_t *, const uint8_t *);
 
index 7dc83e6..fd81408 100644 (file)
@@ -12,7 +12,7 @@
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
 
-#include "armv8_crypto_defs.h"
+#include "AArch64cryptolib.h"
 
 #include "armv8_pmd_private.h"
 
@@ -78,8 +78,10 @@ crypto_func_tbl_t[CRYPTO_CIPHER_MAX][CRYPTO_AUTH_MAX][CRYPTO_CIPHER_KEYLEN_MAX];
 static const crypto_func_tbl_t
 crypto_op_ca_encrypt = {
        /* [cipher alg][auth alg][key length] = crypto_function, */
-       [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] = aes128cbc_sha1_hmac,
-       [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] = aes128cbc_sha256_hmac,
+       [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] =
+               armv8_enc_aes_cbc_sha1_128,
+       [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] =
+               armv8_enc_aes_cbc_sha256_128,
 };
 
 static const crypto_func_tbl_t
@@ -95,8 +97,10 @@ crypto_op_ac_encrypt = {
 static const crypto_func_tbl_t
 crypto_op_ac_decrypt = {
        /* [cipher alg][auth alg][key length] = crypto_function, */
-       [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] = sha1_hmac_aes128cbc_dec,
-       [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] = sha256_hmac_aes128cbc_dec,
+       [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] =
+               armv8_dec_aes_cbc_sha1_128,
+       [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] =
+               armv8_dec_aes_cbc_sha256_128,
 };
 
 /**
@@ -155,13 +159,13 @@ crypto_key_sched_tbl_t[CRYPTO_CIPHER_MAX][CRYPTO_CIPHER_KEYLEN_MAX];
 static const crypto_key_sched_tbl_t
 crypto_key_sched_encrypt = {
        /* [cipher alg][key length] = key_expand_func, */
-       [CIPH_AES_CBC][KEYL(128)] = aes128_key_sched_enc,
+       [CIPH_AES_CBC][KEYL(128)] = armv8_expandkeys_enc_aes_cbc_128,
 };
 
 static const crypto_key_sched_tbl_t
 crypto_key_sched_decrypt = {
        /* [cipher alg][key length] = key_expand_func, */
-       [CIPH_AES_CBC][KEYL(128)] = aes128_key_sched_dec,
+       [CIPH_AES_CBC][KEYL(128)] = armv8_expandkeys_dec_aes_cbc_128,
 };
 
 /**
@@ -277,14 +281,16 @@ auth_set_prerequisites(struct armv8_crypto_session *sess,
                 * Calculate partial hash values for i_key_pad and o_key_pad.
                 * Will be used as initialization state for final HMAC.
                 */
-               error = sha1_block_partial(NULL, sess->auth.hmac.i_key_pad,
-                   partial, SHA1_BLOCK_SIZE);
+               error = armv8_sha1_block_partial(NULL,
+                               sess->auth.hmac.i_key_pad,
+                               partial, SHA1_BLOCK_SIZE);
                if (error != 0)
                        return -1;
                memcpy(sess->auth.hmac.i_key_pad, partial, SHA1_BLOCK_SIZE);
 
-               error = sha1_block_partial(NULL, sess->auth.hmac.o_key_pad,
-                   partial, SHA1_BLOCK_SIZE);
+               error = armv8_sha1_block_partial(NULL,
+                               sess->auth.hmac.o_key_pad,
+                               partial, SHA1_BLOCK_SIZE);
                if (error != 0)
                        return -1;
                memcpy(sess->auth.hmac.o_key_pad, partial, SHA1_BLOCK_SIZE);
@@ -310,14 +316,16 @@ auth_set_prerequisites(struct armv8_crypto_session *sess,
                 * Calculate partial hash values for i_key_pad and o_key_pad.
                 * Will be used as initialization state for final HMAC.
                 */
-               error = sha256_block_partial(NULL, sess->auth.hmac.i_key_pad,
-                   partial, SHA256_BLOCK_SIZE);
+               error = armv8_sha256_block_partial(NULL,
+                               sess->auth.hmac.i_key_pad,
+                               partial, SHA256_BLOCK_SIZE);
                if (error != 0)
                        return -1;
                memcpy(sess->auth.hmac.i_key_pad, partial, SHA256_BLOCK_SIZE);
 
-               error = sha256_block_partial(NULL, sess->auth.hmac.o_key_pad,
-                   partial, SHA256_BLOCK_SIZE);
+               error = armv8_sha256_block_partial(NULL,
+                               sess->auth.hmac.o_key_pad,
+                               partial, SHA256_BLOCK_SIZE);
                if (error != 0)
                        return -1;
                memcpy(sess->auth.hmac.o_key_pad, partial, SHA256_BLOCK_SIZE);
@@ -552,7 +560,7 @@ process_armv8_chained_op(struct armv8_crypto_qp *qp, struct rte_crypto_op *op,
                struct rte_mbuf *mbuf_src, struct rte_mbuf *mbuf_dst)
 {
        crypto_func_t crypto_func;
-       crypto_arg_t arg;
+       armv8_cipher_digest_t arg;
        struct rte_mbuf *m_asrc, *m_adst;
        uint8_t *csrc, *cdst;
        uint8_t *adst, *asrc;
index 57952be..4fd384d 100644 (file)
@@ -8,8 +8,6 @@
 #include <rte_malloc.h>
 #include <rte_cryptodev_pmd.h>
 
-#include "armv8_crypto_defs.h"
-
 #include "armv8_pmd_private.h"
 
 static const struct rte_cryptodev_capabilities
index 5175614..d295ca0 100644 (file)
@@ -284,7 +284,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_KASUMI)      += -lIPSec_MB
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZUC)         += -lrte_pmd_zuc
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZUC)         += -lIPSec_MB
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO)    += -lrte_pmd_armv8
-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO)    += -L$(ARMV8_CRYPTO_LIB_PATH) -larmv8_crypto
+_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO)    += -L$(ARMV8_CRYPTO_LIB_PATH) -lAArch64crypto
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO) += -L$(LIBMUSDK_PATH)/lib -lrte_pmd_mvsam_crypto -lmusdk
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NITROX)      += -lrte_pmd_nitrox
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO) += -lrte_pmd_octeontx_crypto