xref: /dpdk/doc/guides/cryptodevs/zuc.rst (revision 8484d74bd656bc0e951a3ed4e0816ee0fea5e593)
15630257fSFerruh Yigit..  SPDX-License-Identifier: BSD-3-Clause
261f7c988SPablo de Lara    Copyright(c) 2016-2019 Intel Corporation.
3cf7685d6SPablo de Lara
4cf7685d6SPablo de LaraZUC Crypto Poll Mode Driver
5cf7685d6SPablo de Lara===========================
6cf7685d6SPablo de Lara
78809f78cSBruce RichardsonThe ZUC PMD (**librte_crypto_zuc**) provides poll mode crypto driver support for
861f7c988SPablo de Larautilizing `Intel IPSec Multi-buffer library <https://github.com/01org/intel-ipsec-mb>`_
961f7c988SPablo de Larawhich implements F8 and F9 functions for ZUC EEA3 cipher and EIA3 hash algorithms.
10cf7685d6SPablo de Lara
11cf7685d6SPablo de LaraFeatures
12cf7685d6SPablo de Lara--------
13cf7685d6SPablo de Lara
14cf7685d6SPablo de LaraZUC PMD has support for:
15cf7685d6SPablo de Lara
16cf7685d6SPablo de LaraCipher algorithm:
17cf7685d6SPablo de Lara
18cf7685d6SPablo de Lara* RTE_CRYPTO_CIPHER_ZUC_EEA3
19cf7685d6SPablo de Lara
20cf7685d6SPablo de LaraAuthentication algorithm:
21cf7685d6SPablo de Lara
22cf7685d6SPablo de Lara* RTE_CRYPTO_AUTH_ZUC_EIA3
23cf7685d6SPablo de Lara
24f272ea5bSPablo de Lara.. note::
25f272ea5bSPablo de Lara
26f272ea5bSPablo de Lara   The latest v1.3 add ARM64 port of ipsec-mb library support ARM platform.
27f272ea5bSPablo de Lara
28cf7685d6SPablo de LaraLimitations
29cf7685d6SPablo de Lara-----------
30cf7685d6SPablo de Lara
31cf7685d6SPablo de Lara* Chained mbufs are not supported.
32cf7685d6SPablo de Lara* ZUC (EIA3) supported only if hash offset field is byte-aligned.
33cf7685d6SPablo de Lara* ZUC (EEA3) supported only if cipher length, cipher offset fields are byte-aligned.
3419ed3326SPablo de Lara
35f272ea5bSPablo de LaraZUC PMD vs AESNI MB PMD
36f272ea5bSPablo de Lara-----------------------
37f272ea5bSPablo de Lara
38f272ea5bSPablo de LaraAESNI MB PMD also supports ZUC cipher and authentication algorithms.
39f272ea5bSPablo de LaraIt is recommended to use the AESNI MB PMD,
40f272ea5bSPablo de Larawhich offers better performance on Intel processors.
41f272ea5bSPablo de LaraTake a look at the PMD documentation (:doc:`aesni_mb`) for more information.
42cf7685d6SPablo de Lara
43cf7685d6SPablo de LaraInstallation
44cf7685d6SPablo de Lara------------
45cf7685d6SPablo de Lara
4661f7c988SPablo de LaraTo build DPDK with the ZUC_PMD the user is required to download the multi-buffer
470899a87cSRuifeng Wanglibrary and compile it on their user system before building DPDK.
480899a87cSRuifeng Wang
490899a87cSRuifeng WangFor x86 system, the multi-buffer library is available
500899a87cSRuifeng Wang`here <https://github.com/01org/intel-ipsec-mb>`_.
51ad3f114fSSivaramakrishnan VenkatThe latest version of the library supported by this PMD is v1.5, which
52ad3f114fSSivaramakrishnan Venkatcan be downloaded from `<https://github.com/01org/intel-ipsec-mb/archive/v1.5.zip>`_.
5361f7c988SPablo de Lara
540899a87cSRuifeng WangFor Arm system, ARM64 port of the multi-buffer library can be downloaded from
550899a87cSRuifeng Wang`<https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/>`_. The
5679e8689bSWathsala Vithanagelatest version of the library supported by this PMD is tagged as SECLIB-IPSEC-2024.07.08.
570899a87cSRuifeng Wang
58cf7685d6SPablo de LaraAfter downloading the library, the user needs to unpack and compile it
5961f7c988SPablo de Laraon their system before building DPDK:
6061f7c988SPablo de Lara
6161f7c988SPablo de Lara.. code-block:: console
62cf7685d6SPablo de Lara
63cf7685d6SPablo de Lara    make
6461f7c988SPablo de Lara    make install
6561f7c988SPablo de Lara
660899a87cSRuifeng WangThe library requires NASM to be built on x86. Depending on the library version,
670899a87cSRuifeng Wangit might require a minimum NASM version (e.g. v0.54 requires at least NASM 2.14).
68dede694cSPablo de Lara
69dede694cSPablo de LaraNASM is packaged for different OS. However, on some OS the version is too old,
70dede694cSPablo de Laraso a manual installation is required. In that case, NASM can be downloaded from
71dede694cSPablo de Lara`NASM website <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_.
72dede694cSPablo de LaraOnce it is downloaded, extract it and follow these steps:
73dede694cSPablo de Lara
74dede694cSPablo de Lara.. code-block:: console
75dede694cSPablo de Lara
76dede694cSPablo de Lara    ./configure
77dede694cSPablo de Lara    make
78dede694cSPablo de Lara    make install
79dede694cSPablo de Lara
8061f7c988SPablo de LaraAs a reference, the following table shows a mapping between the past DPDK versions
8161f7c988SPablo de Laraand the external crypto libraries supported by them:
8261f7c988SPablo de Lara
8361f7c988SPablo de Lara.. _table_zuc_versions:
8461f7c988SPablo de Lara
8561f7c988SPablo de Lara.. table:: DPDK and external crypto library version compatibility
8661f7c988SPablo de Lara
8761f7c988SPablo de Lara   =============  ================================
8861f7c988SPablo de Lara   DPDK version   Crypto library version
8961f7c988SPablo de Lara   =============  ================================
9050369b2eSBrian Dooley   20.02 - 21.08  Multi-buffer library 0.53 - 1.3
91*8484d74bSBrian Dooley   21.11 - 24.07  Multi-buffer library 1.0  - 1.5
92*8484d74bSBrian Dooley   24.11+         Multi-buffer library 1.4  - 1.5
9361f7c988SPablo de Lara   =============  ================================
9461f7c988SPablo de Lara
95cf7685d6SPablo de LaraInitialization
96cf7685d6SPablo de Lara--------------
97cf7685d6SPablo de Lara
98cf7685d6SPablo de LaraIn order to enable this virtual crypto PMD, user must:
99cf7685d6SPablo de Lara
10061f7c988SPablo de Lara* Build the multi buffer library (explained in Installation section).
101cf7685d6SPablo de Lara
102cf7685d6SPablo de LaraTo use the PMD in an application, user must:
103cf7685d6SPablo de Lara
1042f6fec53SThomas Monjalon* Call rte_vdev_init("crypto_zuc") within the application.
105cf7685d6SPablo de Lara
1062f6fec53SThomas Monjalon* Use --vdev="crypto_zuc" in the EAL options, which will call rte_vdev_init() internally.
107cf7685d6SPablo de Lara
108cf7685d6SPablo de LaraThe following parameters (all optional) can be provided in the previous two calls:
109cf7685d6SPablo de Lara
110cf7685d6SPablo de Lara* socket_id: Specify the socket where the memory for the device is going to be allocated
111cf7685d6SPablo de Lara  (by default, socket_id will be the socket where the core that is creating the PMD is running on).
112cf7685d6SPablo de Lara
113cf7685d6SPablo de Lara* max_nb_queue_pairs: Specify the maximum number of queue pairs in the device (8 by default).
114cf7685d6SPablo de Lara
115cf7685d6SPablo de Lara* max_nb_sessions: Specify the maximum number of sessions that can be created (2048 by default).
116cf7685d6SPablo de Lara
117cf7685d6SPablo de LaraExample:
118cf7685d6SPablo de Lara
119cf7685d6SPablo de Lara.. code-block:: console
120cf7685d6SPablo de Lara
121fd5f9fb9SCiara Power    ./dpdk-l2fwd-crypto -l 1 -n 4 --vdev="crypto_zuc,socket_id=0,max_nb_sessions=128" \
122fda78c51SPablo de Lara    -- -p 1 --cdev SW --chain CIPHER_ONLY --cipher_algo "zuc-eea3"
123