Hi Fiona,

On Thu, May 25, 2017 at 04:00:42PM +0000, Trahe, Fiona wrote:
> Hi Umesh,
> 
> 
> > -----Original Message-----
> > From: Umesh Kartha [mailto:umesh.kar...@caviumnetworks.com]
> > Sent: Thursday, May 11, 2017 1:36 PM
> > To: dev@dpdk.org
> > Cc: Jerin Jacob <jerin.jacobkollanukka...@cavium.com>; Balasubramanian 
> > Manoharan
> > <balasubramanian.manoha...@cavium.com>; Ram Kumar <ram.ku...@cavium.com>; 
> > Murthy
> > Nidadavolu <nidadavolu.mur...@cavium.com>; Doherty, Declan 
> > <declan.dohe...@intel.com>; De Lara
> > Guarch, Pablo <pablo.de.lara.gua...@intel.com>; Trahe, Fiona 
> > <fiona.tr...@intel.com>
> > Subject: [RFC PATCH v2 1/3] cryptodev: added asymmetric algorithms
> > 
> > Added asymmetric xform structures, operation definitions, operation
> > parameters. Added asymmetric algorithms RSA, DH, ECDH, DSA, ECDSA,
> > MODEXP, FECC, MOD-INVERSE. Added curves (all curves supported by
> > libcrypto as of now).
> > 
> > Signed-off-by: Umesh Kartha <umesh.kar...@caviumnetworks.com>
> > ---
> >  lib/librte_cryptodev/rte_crypto_asym.h | 1124 
> > ++++++++++++++++++++++++++++++++
> >  1 file changed, 1124 insertions(+)
> >  create mode 100644 lib/librte_cryptodev/rte_crypto_asym.h
> > 
> > diff --git lib/librte_cryptodev/rte_crypto_asym.h 
> > lib/librte_cryptodev/rte_crypto_asym.h
> > new file mode 100644
> > index 0000000..36a8b4f
> > --- /dev/null
> > +++ lib/librte_cryptodev/rte_crypto_asym.h
> > @@ -0,0 +1,1124 @@
> > +/*
> > + *   BSD LICENSE
> > + *
> > + *   Copyright (C) Cavium networks Ltd. 2017.
> > + *
> > + *   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 Cavium Networks 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 _RTE_CRYPTO_ASYM_H_
> > +#define _RTE_CRYPTO_ASYM_H_
> > +
> > +/**
> > + * @file rte_crypto_asym.h
> > + *
> > + * RTE Definitions for Asymmetric Cryptography
> > + *
> > + * Defines asymmetric algorithms and modes, as well as supported
> > + * asymmetric crypto operations.
> > + */
> > +
> > +#ifdef __cplusplus
> > +extern "C" {
> > +#endif
> > +
> > +#include <string.h>
> > +#include <stdint.h>
> > +#include <rte_mbuf.h>
> > +#include <rte_memory.h>
> > +#include <rte_mempool.h>
> > +#include <rte_common.h>
> > +#include "rte_crypto_sym.h"
> > +
> > +typedef struct rte_crypto_xform_param_t {
> > +   uint8_t *data;
> > +   size_t length;
> > +} rte_crypto_xform_param;
> > +
> > +typedef struct rte_crypto_op_param_t {
> > +   uint8_t *data;
> > +   phys_addr_t phys_addr;
> > +   size_t length;
> > +} rte_crypto_op_param;
> [Fiona] Are both above lengths in bytes ?
> 
> 
[Umesh] Yes, they are in bytes. Will add note for this to avoid any
confusion.
> > +
> > +/** Asymmetric crypto transformation types */
> > +enum rte_crypto_asym_xform_type {
> > +   RTE_CRYPTO_ASYM_XFORM_NOT_SPECIFIED = 0,
> > +   RTE_CRYPTO_ASYM_XFORM_RSA,
> > +   RTE_CRYPTO_ASYM_XFORM_MODEX,
> > +   RTE_CRYPTO_ASYM_XFORM_DH,
> > +   RTE_CRYPTO_ASYM_XFORM_ECDH,
> > +   RTE_CRYPTO_ASYM_XFORM_DSA,
> > +   RTE_CRYPTO_ASYM_XFORM_ECDSA,
> > +   RTE_CRYPTO_ASYM_XFORM_FECC,
> > +   RTE_CRYPTO_ASYM_XFORM_MODINV,
> > +   RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END
> > +};
> > +
> > +/**
> > + * RSA operation type variants
> > + */
> > +enum rte_crypto_rsa_optype {
> > +   RTE_CRYPTO_RSA_OP_NOT_SPECIFIED = 1,
> [Fiona] Is there a reason for not starting at 0 in all these enums?
> 
[Umesh] Some of the enums are being used as bit positions in capability
structures. Will try to make these consistent.
> > +   /**< RSA operation unspecified */
> > +   RTE_CRYPTO_RSA_OP_PUBLIC_ENCRYPT,
> > +   /**< RSA public encrypt operation */
> > +   RTE_CRYPTO_RSA_OP_PRIVATE_DECRYPT,
> > +   /**< RSA private decrypt operation */
> > +   RTE_CRYPTO_RSA_OP_SIGN,
> > +   /**< RSA private key signature operation */
> > +   RTE_CRYPTO_RSA_OP_VERIFY,
> > +   /**< RSA public key verification operation */
> > +   RTE_CRYPTO_RSA_OP_LIST_END
> > +};
> > +
> > +/**
> > + * Padding types for RSA signature.
> > + */
> > +enum rte_crypto_rsa_padding_type {
> > +   RTE_CRYPTO_RSA_PADDING_NOT_SPECIFIED = 1,
> > +   /**< RSA no padding scheme */
> > +   RTE_CRYPTO_RSA_PADDING_BT1,
> > +   /**< RSA PKCS#1 padding BT1 scheme */
> > +   RTE_CRYPTO_RSA_PADDING_BT2,
> > +   /**< RSA PKCS#1 padding BT2 scheme */
> > +   RTE_CRYPTO_RSA_PADDING_OAEP,
> > +   /**< RSA PKCS#1 OAEP padding scheme */
> > +   RTE_CRYPTO_RSA_PADDING_PSS,
> > +   /**< RSA PKCS#1 PSS padding scheme */
> > +   RTE_CRYPTO_RSA_PADDING_TYPE_LIST_END
> > +};
> > +
> > +/**
> > + * Modular exponentiaion operation type variants
> > + */
> > +enum rte_crypto_modex_optype {
> > +   RTE_CRYPTO_MODEX_OP_NOT_SPECIFIED = 1,
> > +   /**< ModEx operation type unspecified */
> > +   RTE_CRYPTO_MODEX_OP_MODEX,
> > +   /**< Modex operation modular exponentiation */
> > +   RTE_CRYPTO_MODEX_OP_LIST_END
> > +};
> > +
> > +/**
> > + * Modular Inverse operation type variants
> > + */
> > +enum rte_crypto_modeinv_optype {
> > +   RTE_CRYPTO_MODINV_OP_NOT_SPECIFIED = 1,
> > +   /**< ModInv operation type unspecified */
> > +   RTE_CRYPTO_MODINV_OP_MODINV,
> > +   /**< ModInv operation modular Inverse */
> > +   RTE_CRYPTO_MODEX_OP_LIST_END
> > +};
> > +
> > +/**
> > + * DSA operation type variants
> > + */
> > +enum rte_crypto_dsa_optype {
> > +   RTE_CRYPTO_DSA_OP_NOT_SPECIFIED = 1,
> > +   /**< DSA operation unspecified */
> > +   RTE_CRYPTO_DSA_OP_SIGN,
> > +   /**< DSA private key signature operation */
> > +   RTE_CRYPTO_DSA_OP_VERIFY,
> > +   /**< DSA public key verification operation */
> > +   RTE_CRYPTO_DSA_OP_LIST_END
> > +};
> > +
> > +
> > +/**
> > + * ECDSA operation type variants
> > + */
> > +enum rte_crypto_ecdsa_optype {
> > +   RTE_CRYPTO_ECDSA_OP_NOT_SPECIFIED = 1,
> > +   /**< ECDSA operation unspecified */
> > +   RTE_CRYPTO_ECDSA_OP_SIGN,
> > +   /**< ECDSA private key signature operation */
> > +   RTE_CRYPTO_ECDSA_OP_VERIFY,
> > +   /**< ECDSA public key verification operation */
> > +   RTE_CRYPTO_ECDSA_OP_LIST_END
> > +};
> > +
> > +/**
> > + * Diffie Hellman Key operation variants
> > + */
> > +enum rte_crypto_dh_optype {
> > +   RTE_CRYPTO_DH_OP_NOT_SPECIFIED = 1,
> > +   /**< DH operation unspecified */
> > +   RTE_CRYPTO_DH_OP_KEY_GENERATION,
> > +   /**< DH private/public key generation operation */
> > +   RTE_CRYPTO_DH_OP_KEY_COMPUTATION,
> > +   /**< DH private key computation operation */
> > +   RTE_CRYPTO_DH_OP_LIST_END
> > +};
> > +
> > +/**
> > + * Elliptic Curve Diffie Hellman Key operation variants
> > + */
> > +enum rte_crypto_ecdh_optype {
> > +   RTE_CRYPTO_ECDH_OP_NOT_SPECIFIED = 1,
> > +   /**< ECDH operation unspecified */
> > +   RTE_CRYPTO_ECDH_OP_KEY_GENERATION,
> > +   /**< ECDH private/public key generation operation */
> > +   RTE_CRYPTO_ECDH_OP_KEY_CHECK,
> > +   /**< ECDH public key validity check operation */
> > +   RTE_CRYPTO_ECDH_OP_KEY_COMPUTATION,
> > +   /**< ECDH private key computation operation */
> > +   RTE_CRYPTO_ECDH_OP_LIST_END
> > +};
> > +
> > +/**
> > + * Fundamental ECC operation type variants.
> > + */
> > +enum rte_crypto_fecc_optype {
> > +   RTE_CRYPTO_FECC_OP_NOT_SPECIFIED = 1,
> > +   /**< FECC operation type unspecified */
> > +   RTE_CRYPTO_FECC_OP_POINT_ADD,
> > +   /**< Fundamental ECC point addition operation */
> > +   RTE_CRYPTO_FECC_OP_POINT_DBL,
> > +   /**< Fundamental ECC point doubling operation */
> > +   RTE_CRYPTO_FECC_OP_POINT_MULTIPLY,
> > +   /**< Fundamental ECC point multiplication operation */
> > +   RTE_CRYPTO_FECC_OP_LIST_END
> > +};
> > +
> > +/**
> > + * ECC list of curves.
> > + */
> > +enum rte_crypto_ec_prime_curve {
> > +   RTE_CRYPTO_EC_CURVE_NOT_SPECIFIED = -1,
> [Fiona] Why -1 ?
> 
[Umesh] This is to ensure enum of a curve represents the corresponding
bit in the curve capability bitfield.
> > +   /**< Unspecified or empty curve id */
> > +   RTE_CRYPTO_EC_CURVE_secp112r1,
> > +   /**< SECG/WTLS curve over a 112 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp112r2,
> > +   /**< SECG curve over a 112 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp128r1,
> > +   /**< SECG curve over a 128 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp128r2,
> > +   /**< SECG curve over a 128 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp160k1,
> > +   /**< SECG curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp160r1,
> > +   /**< SECG curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp160r2,
> > +   /**< SECG/WTLS curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp192k1,
> > +   /**< SECG curve over a 192 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp224k1,
> > +   /**< SECG curve over a 224 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp224r1,
> > +   /**< NIST/SECG curve over a 224 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp256k1,
> > +   /**< SECG curve over a 256 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp384r1,
> > +   /**< NIST/SECG curve over a 384 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_secp521r1,
> > +   /**< NIST/SECG curve over a 521 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime192v1,
> > +   /**< NIST/X9.62/SECG curve over a 192 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime192v2,
> > +   /**< X9.62 curve over a 192 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime192v3,
> > +   /**< X9.62 curve over a 192 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime239v1,
> > +   /**< X9.62 curve over a 239 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime239v2,
> > +   /**< X9.62 curve over a 239 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime239v3,
> > +   /**< X9.62 curve over a 239 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_prime256v1,
> > +   /**< X9.62/SECG curve over a 256 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls6,
> > +   /**< SECG/WTLS curve over a 112 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls7,
> > +   /**< SECG/WTLS curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls8,
> > +   /**< WTLS curve over a 112 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls9,
> > +   /**< WTLS curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls12,
> > +   /**< WTLS curve over a 224 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP160r1,
> > +   /**< RFC 5639 curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP160t1,
> > +   /**< RFC 5639 curve over a 160 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP192r1,
> > +   /**< RFC 5639 curve over a 192 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP192t1,
> > +   /**< RFC 5639 curve over a 192 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP224r1,
> > +   /**< RFC 5639 curve over a 224 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP224t1,
> > +   /**< RFC 5639 curve over a 224 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP256r1,
> > +   /**< RFC 5639 curve over a 256 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP256t1,
> > +   /**< RFC 5639 curve over a 256 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP320r1,
> > +   /**< RFC 5639 curve over a 320 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP320t1,
> > +   /**< RFC 5639 curve over a 320 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP384r1,
> > +   /**< RFC 5639 curve over a 384 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP384t1,
> > +   /**< RFC 5639 curve over a 384 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP512r1,
> > +   /**< RFC 5639 curve over a 512 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_brainpoolP512t1,
> > +   /**< RFC 5639 curve over a 512 bit prime field */
> > +   RTE_CRYPTO_EC_CURVE_x25519,
> > +   /**< Curve 25519 */
> > +   RTE_CRYPTO_EC_CURVE_LIST_END
> > +};
> > +
> > +enum rte_crypto_ec_binary_curve {
> > +   RTE_CRYPTO_EC_CURVE_NOT_SPECIFIED = -1,
> > +   /**< Unspecified or empty curve id */
> > +   RTE_CRYPTO_EC_CURVE_sect113r1,
> > +   /**< SECG curve over a 113 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect113r2,
> > +   /**< SECG curve over a 113 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect131r1,
> > +   /**< SECG/WTLS curve over a 131 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect131r2,
> > +   /**< SECG curve over a 131 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect163k1,
> > +   /**< NIST/SECG/WTLS curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect163r1,
> > +   /**< SECG curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect163r2,
> > +   /**< NIST/SECG curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect193r1,
> > +   /**< SECG curve over a 193 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect193r2,
> > +   /**< SECG curve over a 193 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect233k1,
> > +   /**< NIST/SECG/WTLS curve over a 233 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect233r1,
> > +   /**< NIST/SECG/WTLS curve over a 233 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect239k1,
> > +   /**< SECG curve over a 239 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect283k1,
> > +   /**< NIST/SECG curve over a 283 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect283r1,
> > +   /**< NIST/SECG curve over a 283 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect409k1,
> > +   /**< NIST/SECG curve over a 409 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect409r1,
> > +   /**< NIST/SECG curve over a 409 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect571k1,
> > +   /**< NIST/SECG curve over a 571 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_sect571r1,
> > +   /**< NIST/SECG curve over a 571 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb163v1,
> > +   /**< X9.62 curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb163v2,
> > +   /**< X9.62 curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb163v3,
> > +   /**< X9.62 curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb176v1,
> > +   /**< X9.62 curve over a 176 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb191v1,
> > +   /**< X9.62 curve over a 191 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb191v2,
> > +   /**< X9.62 curve over a 191 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb191v3,
> > +   /**< X9.62 curve over a 191 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb208w1,
> > +   /**< X9.62 curve over a 208 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb239v1,
> > +   /**< X9.62 curve over a 239 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb239v2,
> > +   /**< X9.62 curve over a 239 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb239v3,
> > +   /**< X9.62 curve over a 239 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb272w1,
> > +   /**< X9.62 curve over a 272 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb304w1,
> > +   /**< X9.62 curve over a 304 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb359v1,
> > +   /**< X9.62 curve over a 359 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2pnb368w1,
> > +   /**< X9.62 curve over a 368 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_c2tnb431r1,
> > +   /**< X9.62 curve over a 431 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls1,
> > +   /**< WTLS curve over a 113 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls3,
> > +   /**< NIST/SECG/WTLS curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls4,
> > +   /**< SECG curve over a 113 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls5,
> > +   /**< X9.62 curve over a 163 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls10,
> > +   /**< NIST/SECG/WTLS curve over a 233 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_wap_wsg_idm_ecid_wtls11,
> > +   /**< NIST/SECG/WTLS curve over a 233 bit binary field */
> > +   RTE_CRYPTO_EC_CURVE_LIST_END
> > +};
> > +
> > +/**
> > + * Elliptic curve point format
> > + */
> > +struct rte_crypto_ec_point {
> > +   struct {
> > +           int length;
> > +           uint8_t *data;
> > +           phys_addr_t phys_addr;
> > +           /**< phys_addr is used only for points passed in the
> > +            * asym_op structure.
> > +            */
> > +   } x;
> > +   /**< X co-ordinate */
> > +
> > +   struct {
> > +           int length;
> > +           uint8_t *data;
> > +           phys_addr_t phys_addr;
> > +           /**< phys_addr is used only for points passed in the
> > +            * operation structure
> > +            */
> > +   } y;
> > +   /**< Y co-ordinate */
> > +};
> > +
> > +/**
> > + * Elliptic curve type
> > + */
> > +enum rte_crypto_ec_curve_type {
> > +   RTE_CRYPTO_EC_CURVE_TYPE_UNDEFINED,
> > +   /**< Curve type undefined */
> > +   RTE_CRYPTO_EC_CURVE_TYPE_PRIME_FIELD,
> > +   /**< EC curve defined over a prime field */
> > +   RTE_CRYPTO_EC_CURVE_TYPE_BINARY_FIELD,
> > +   /**< EC curve defined over a binary field */
> > +   RTE_CRYPTO_EC_CURVE_LIST_END
> > +};
> > +
> > +/**
> > + * Elliptic curve id
> > + */
> > +struct rte_crypto_ec_curve_id {
> > +   RTE_STD_C11
> > +   union {
> > +           enum rte_crypto_ec_prime_curve pcurve;
> > +           enum rte_crypto_ec_binary_curve bcurve;
> > +   }
> > +};
> > +
> > +/**
> > + * Asymmetric RSA transform data
> > + *
> > + * This structure contains data required to perform RSA crypto
> > + * transform. If all CRT components are filled, RSA private key
> > + * operations @ref RTE_CRYPTO_RSA_OP_SIGN and @ref
> > + * RTE_CRYPTO_RSA_OP_PRIVATE_DECRYPT uses CRT method for crypto
> > + * transform.
> > + */
> > +struct rte_crypto_rsa_xform {
> > +
> > +   rte_crypto_xform_param n;
> > +   /**< n - Prime modulus
> > +    * Prime modulus data of RSA operation in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param e;
> > +   /**< e - Public key exponent
> > +    * Public key exponent used for RSA public key operations in Octet-
> > +    * string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param d;
> > +   /**< d - Private key exponent
> > +    * Private key exponent used for RSA private key operations in
> > +    * Octet-string  network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param p;
> > +   /**< p - Private key component P
> > +    * Private key component of RSA parameter  required for CRT method
> > +    * of private key operations in Octet-string network byte order
> > +    * format.
> > +    */
> > +
> > +   rte_crypto_xform_param q;
> > +   /**< q - Private key component Q
> > +    * Private key component of RSA parameter  required for CRT method
> > +    * of private key operations in Octet-string network byte order
> > +    * format.
> > +    */
> > +
> > +   rte_crypto_xform_param dP;
> > +   /**< dP - Private CRT component
> > +    * Private CRT component of RSA parameter  required for CRT method
> > +    * RSA private key operations in Octet-string network byte order
> > +    * format.
> > +    * dP = d mod ( p - 1 )
> > +    */
> > +
> > +   rte_crypto_xform_param dQ;
> > +   /**< dQ - Private CRT component
> > +    * Private CRT component of RSA parameter  required for CRT method
> > +    * RSA private key operations in Octet-string network byte order
> > +    * format.
> > +    * dQ = d mod ( q - 1 )
> > +    */
> > +
> > +   rte_crypto_xform_param qInv;
> > +   /**< qInv - Private CRT component
> > +    * Private CRT component of RSA parameter  required for CRT method
> > +    * RSA private key operations in Octet-string network byte order
> > +    * format.
> > +    * qInv = inv q mod p
> > +    */
> > +};
> > +
> > +/** Asymmetric Modular exponentiation transform data
> > + *
> > + * This structure contains data required to perform modular exponentation
> > + * crypto transform. If all CRT components are valid, crypto transform
> > + * operation follows CRT method.
> > + */
> > +struct rte_crypto_modex_xform {
> > +
> > +   rte_crypto_xform_param modulus;
> > +   /**< modulus
> > +    * Prime modulus of the modexp transform operation in Octet-string
> > +    * network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param exponent;
> > +   /**< exponent
> > +    * Private exponent of the modexp transform operation in
> > +    * Octet-string network byte order format.
> > +    */
> > +};
> > +
> > +/** Asymmetric DH transform data
> > + * This structure contains data used to perform DH key
> > + * computation
> > + */
> > +struct rte_crypto_dh_xform {
> > +   rte_crypto_xform_param p;
> > +   /**< p : Prime modulus data
> > +    * DH prime modulous data in Octet-string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param g;
> > +   /**< g : Generator
> > +    * DH group generator data in Octet-string network byte order
> > +    * format.
> > +    */
> > +
> > +   rte_crypto_xform_param priv_key;
> > +   /**< priv_key
> > +    * DH private key data in Octet-string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param pub_key;
> > +   /**< pub_key
> > +    * DH public key data in Octet-string network byte order format.
> > +    */
> > +};
> > +
> > +/**Asymmetric ECDH transform data
> > + * This structure contains data required to perform ECDH crypto
> > + * transform
> > + */
> > +struct rte_crypto_ecdh_xform {
> > +
> > +   enum rte_crypto_ec_curve_type curve_type;
> > +   /**< ECDH curve type: Prime vs Binary */
> > +
> > +   struct rte_crypto_ec_curve_id curve_id;
> > +
> > +   rte_crypto_xform_param n;
> > +   /**< n : order
> > +    * ECDH curve order data in Octet-string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param p;
> > +   /**< p:
> > +    * If the curve_type is @ref RTE_CRYPTO_EC_CURVE_TYPE_PRIME_FIELD:
> > +    * p holds the prime modulus data in Octet string format.
> > +    *
> > +    * If the curve_type is @ref RTE_CRYPTO_EC_CURVE_TYPE_BINARY_FIELD:
> > +    * p holds reduction polynomial co-efficients and degree.
> > +    */
> > +
> > +   rte_crypto_xform_param a;
> > +   /**< Co-efficient 'a' of curve equation data in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param b;
> > +   /**< Co-efficient 'b' of curve equation data in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   struct  rte_crypto_ec_point G;
> > +   /**< G: EC curve generator
> > +    * EC curve generator point data in Octet-string network byte order
> > +    * format.
> > +    */
> > +
> > +   rte_crypto_xform_param pkey;
> > +   /**< pkey: Private key
> > +    * Private key data for ECDH operation in Octet-string network byte
> > +    * order format.
> > +    */
> > +
> > +   struct rte_crypto_ecpoint Q;
> > +   /**< Q: Public key point
> > +    * Public key point data of ECDH operation in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   int h;
> > +   /**< Co-factor of the curve */
> > +};
> > +
> > +/** Asymmetric Digital Signature transform operation
> > + *
> > + * This structure contains data required to perform asymmetric
> > + * digital signature crypto transform.
> > + */
> > +struct rte_crypto_dsa_xform {
> > +
> > +   rte_crypto_xform_param p;
> > +   /**< p - Prime modulus
> > +    * Prime modulus data for DSA operation in Octet-string network byte
> > +    * order format.
> > +    */
> > +
> > +   rte_crypto_xform_param q;
> > +   /**< q : Order of the subgroup
> > +    * Order of the subgroup data in Octet-string network byte order
> > +    * format.
> > +    * q % (p-1) = 0
> > +    */
> > +
> > +   rte_crypto_xform_param g;
> > +   /**< g: Generator of the subgroup
> > +    * Generator  data in Octet-string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param x;
> > +   /**< x: Private key of the signer
> > +    * Private key data in Octet-string network byte order format.
> > +    * Private key is valid only for signature generation operation.
> > +    */
> > +
> > +   rte_crypto_xform_param y;
> > +   /**< y : Public key of the signer.
> > +    * Public key data of the signer in Octet-string network byte order
> > +    * format.
> > +    * y = g^x mod p
> > +    */
> > +};
> > +
> > +/** Asymmetric ECDSA transform data
> > + *
> > + * This structure contains data required to perform ECDSA crypto
> > + * transform.
> > + */
> > +struct rte_crypto_ecdsa_xform {
> > +
> > +   enum rte_crypto_ec_curve_type curve_type;
> > +   /**< ECDSA curve type: Prime vs Binary */
> > +
> > +   struct rte_crypto_ec_curve_id curve_id;
> > +   /**< EC curve ID */
> > +
> > +   rte_crypto_xform_param n;
> > +   /**< n : order
> > +    * ECDH curve order data in Octet-string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param p;
> > +   /**< p:
> > +    * If the curve_type is @ref RTE_CRYPTO_EC_CURVE_TYPE_PRIME_FIELD:
> > +    * p holds the prime modulus data in Octet string format.
> > +    *
> > +    * If the curve_type is @ref RTE_CRYPTO_EC_CURVE_TYPE_BINARY_FIELD:
> > +    * p holds reduction polynomial co-efficients and degree.
> > +    */
> > +
> > +   rte_crypto_xform_param a;
> > +   /**< Co-efficient 'a' of curve equation data in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param b;
> > +   /**< Co-efficient 'b' of curve equation data in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   struct  rte_crypto_ecpoint G;
> > +   /**< G: EC curve generator
> > +    * EC curve generator point data in Octet-string network byte order
> > +    * format.
> > +    */
> > +
> > +   rte_crypto_xform_param pkey;
> > +   /**< pkey: Private key
> > +    * Private key data of the signer for ECDSA signature generation
> > +    * operation in Octet-string network byte format. Parameter is
> > +    * invalid or unsed for signature verification.
> > +    */
> > +
> > +   struct rte_crypto_ecpoint Q;
> > +   /**< Q: Public key point
> > +    * Public key point data of ECDSA operation in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   int h;
> > +   /**< Co-factor of the curve */
> > +};
> > +
> > +/** Asymmetric modular inverse transform operation
> > + * This structure contains data required to perform
> > + * asymmetric modular inverse crypto transform
> > + */
> > +struct rte_crypto_modinv_xform {
> > +};
> > +
> > +/** Asymmetric Fundamental ECC transform operation
> > + *
> > + * This structure contains data required to perform asymmetric
> > + * fundamental ECC crypto transform.
> > + */
> > +struct rte_crypto_fecc_xform {
> > +
> > +   enum rte_crypto_ec_curve_type curve_type;
> > +   /**< FECC curve type: Prime vs Binary */
> > +
> > +   struct rte_crypto_ec_curve_id curve_id;
> > +   /**< EC curve ID */
> > +
> > +   rte_crypto_xform_param order;
> > +   /**< order : ECC curve order
> > +    * Curve order data in Octet-string network byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param prime;
> > +   /**< prime : Curve prime modulus data
> > +    * Prime modulus data in Octet-string network byte order format.
> > +    */
> > +
> > +   struct rte_crypto_ec_point G;
> > +   /**< G: curve generator point
> > +    * Curve generator point data in Octet-string network byte order
> > +    * format.
> > +    */
> > +
> > +   rte_crypto_xform_param a;
> > +   /**< Co-efficient 'a' of curve equation data in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   rte_crypto_xform_param b;
> > +   /**< Co-efficient 'a' of curve equation data in Octet-string network
> > +    * byte order format.
> > +    */
> > +
> > +   int h;
> > +   /**< Co-factor of the curve */
> > +
> > +};
> > +
> > +/**
> > + * Asymmetric crypto transform data
> > + *
> > + * This structure contains the data required to perform the
> > + * asymmetric crypto transformation operation. The field op
> > + * determines the asymmetric algorithm for transformation.
> > + */
> > +struct rte_crypto_asym_xform {
> > +   struct rte_crypto_asym_xform *next;
> > +   enum rte_crypto_asym_xform_type xform_type;
> > +   /**< Asymmetric algorithm for crypto transform */
> > +
> > +   RTE_STD_C11
> > +   union {
> > +           struct rte_crypto_rsa_xform rsa;
> > +           struct rte_crypto_fecc_xform fecc;
> > +           struct rte_crypto_modex_xform modex;
> > +           struct rte_crypto_ecdsa_xform ecdsa;
> > +           struct rte_crypto_ecdh_xform ecdh;
> > +           struct rte_crypto_dsa_xform dsa;
> > +   };
> > +};
> > +
> > +struct rte_cryptodev_asym_session;
> > +
> > +/**
> > + * Crypto operation session type. This is used to specify whether a crypto
> > + * operation has session structure attached for immutable parameters or if 
> > all
> > + * operation information is included in the operation data structure.
> > + */
> > +enum rte_crypto_asym_op_sess_type {
> > +   RTE_CRYPTO_ASYM_OP_WITH_SESSION,
> > +   /**< Session based crypto operation */
> > +   RTE_CRYPTO_ASYM_OP_SESSIONLESS
> > +   /**< Session-less crypto operation */
> > +};
> > +
> > +/**
> > + * Asymmetric Cryptographic Operation.
> > + *
> > + * This structure contains data relating to performing asymmetric 
> > cryptographic
> > + * operation.
> > + *
> > + */
> > +struct rte_crypto_asym_op {
> > +
> > +   enum rte_crypto_asym_op_sess_type sess_type;
> > +   enum rte_crypto_asym_xform_type type;
> > +
> > +   RTE_STD_C11
> > +   union {
> > +           enum rte_crypto_rsa_optype rsa_op;
> > +           /**< Type of RSA operation for transform */;
> > +           enum rte_crypto_modex_optype modex_op;
> > +           /**< Type of modular exponentiation operation */
> > +           enum rte_crypto_ecdsa_optype ecdsa_op;
> > +           /**< ECDSA crypto xform operation type */
> > +           enum rte_crypto_fecc_optype fecc_op;
> > +           /**< ECDSA crypto xform operation type */
> > +           enum rte_crypto_dsa_optype dsa_op;
> > +           /**< DSA crypto xform operation type */
> > +   };
> > +
> > +   RTE_STD_C11
> > +   union {
> > +           struct rte_cryptodev_asym_session *session;
> > +           /**< Handle for the initialised session context */
> > +           struct rte_crypto_asym_xform *xform;
> > +           /**< Session-less API crypto operation parameters */
> > +   };
> > +
> > +   RTE_STD_C11
> > +   union {
> > +
> > +           struct {
> > +                   rte_crypto_op_param message;
> > +                   /**<
> > +                    * Pointer to data
> > +                    * - to be encrypted for RSA public encrypt.
> > +                    * - to be decrypted for RSA private decrypt.
> > +                    * - to be signed for RSA sign generation.
> > +                    * - to be authenticated for RSA sign verification.
> > +                    */
> > +
> > +                   rte_crypto_op_param sign;
> > +                   /**<
> > +                    * Pointer to RSA signature data. If operation is RSA
> > +                    * sign @ref RTE_CRYPTO_RSA_OP_SIGN, buffer will be
> > +                    * over-written with generated signature.
> > +                    *
> > +                    * Length of the signature data will be equal to the
> > +                    * RSA prime modulus length.
> > +                    */
> > +
> > +                   enum rte_crypto_rsa_padding_type pad;
> > +                   /**< RSA padding scheme to be used for transform */
> > +
> > +                   enum rte_crypto_auth_algorithm md;
> > +                   /**< Hash algorithm to be used for data hash if padding
> > +                    * scheme is either OAEP or PSS. Valid hash algorithms
> > +                    * are:
> > +                    * MD5, SHA1, SHA224, SHA256, SHA384, SHA512
> > +                    */
> > +
> > +                   enum rte_crypto_auth_algorithm mgf1md;
> > +                   /**<
> > +                    * Hash algorithm to be used for mask generation if
> > +                    * padding scheme is either OAEP or PSS. If padding
> > +                    * scheme is unspecified data hash algorithm is used
> > +                    * for mask generation. Valid hash algorithms are:
> > +                    * MD5, SHA1, SHA224, SHA256, SHA384, SHA512
> > +                    */
> > +           } rsa;
> > +
> > +           struct {
> > +                   rte_crypto_op_param pub_key;
> > +                   /**<
> > +                    * If DH operation type is
> > +                    * KEY_GENERATION:
> > +                    * if priv_key and public key are provided, the keys
> > +                    * are copied to DH xform structure, else key pair is
> > +                    * generated and stored in DH xform structure.
> > +                    * pub_key data should be in Octet-string network
> > +                    * byte order format.
> > +                    *
> > +                    * KEY_COMPUTATION:
> > +                    * pub_key holds the key shared by peer during DH
> > +                    * key exchange. pub_key data is written as  Octet-
> > +                    * string network byte order format.
> > +                    */
> > +                   RTE_STD_C11
> > +                   union {
> > +                           rte_crypto_op_param priv_key;
> > +                           /**<
> > +                            * If DH operation type is KEY_GENERATION, and
> > +                            * priv_key is provided, the key is copied to
> > +                            * DH xform structure, else generated and stored
> > +                            * in DH xform structure. priv_key data is in
> > +                            * in Octet-string network byte order format.
> > +                            */
> > +                           rte_crypto_op_param shared_key;
> > +                           /*
> > +                            * If DH operation type is KEY_COMPUTATION:
> > +                            * shared_key holds the shared secret
> > +                            * computed. shared_key is written as
> > +                            * Octet-string network byte order format.
> > +                            */
> > +                   };
> > +           } dh;
> > +
> > +           struct {
> > +                   rte_crypto_op_param base;
> > +                   /**<
> > +                    * Pointer to base of modular exponentiation data in
> > +                    * Octet-string network byte order format.
> > +                    */
> > +           } modex;
> > +
> > +           struct {
> > +                   rte_crypto_op_param priv_key;
> > +                   /**<
> > +                    * If ECDH operation type is KEY_GENERATION, and
> > +                    * priv_key is provided, the key is copied to ECDH
> > +                    * xform structure, else generated and stored in
> > +                    * ECDH xform structure in Octet-string network byte
> > +                    * order.
> > +                    * If ECDH operation type is KEY_COMPUTATION:
> > +                    * priv_key holds the 'X' co-ordinate of the shared
> > +                    * secret EC point computed in Octet-string network
> > +                    * byte order.
> > +                    */
> > +
> > +                   rte_crypto_ec_point pub_key;
> > +                   /**<
> > +                    * If ECDH operation type is
> > +                    * KEY_GENERATION:
> > +                    * if priv_key and public key are provided, the keys
> > +                    * are copied ECDH xform structure, else key pair is
> > +                    * generated and stored in ECDH xform structure.
> > +                    *
> > +                    * KEY_COMPUTATION:
> > +                    * pub_key holds peer's public key during ECDH
> > +                    * key exchange in Octet-string network byte order.
> > +                    */
> > +           } ecdh;
> > +
> > +           struct {
> > +                   rte_crypto_op_param message;
> > +                   /**<
> > +                    * Pointer to data
> > +                    * - to be signed for ECDSA signature generation.
> > +                    * - to be authenticated for ECDSA sign verification.
> > +                    */
> > +
> > +                   rte_crypto_op_param sign;
> > +                   /**<
> > +                    * Pointer to ECDSA signature. If operation type is
> > +                    * @ref RTE_CRYPTO_ECDSA_OP_VERIFY this buffer will be
> > +                    * over-written with the signature.
> > +                    *
> > +                    * Length of ECDSA signature will be less than twice the
> > +                    * length of prime modulus length.
> > +                    */
> > +
> > +                   rte_crypto_op_param k;
> > +                   /**<
> > +                    * Pointer to random scalar to be used for generation
> > +                    * of ECDSA signature @ref RTE_CRYPTO_ECDSA_OP_SIGN.
> > +                    * It is invalid if operation is ECDSA verify.
> > +                    * Scalar data is in Octet-string network byte order
> > +                    * format.
> > +                    *
> > +                    * Length of scalar K should be less than the prime
> > +                    * modulus of the curve
> > +                    */
> > +           } ecdsa;
> > +
> > +           struct {
> > +
> > +                   rte_crypto_op_param message;
> > +                   /**<
> > +                    * Pointer to data
> > +                    * - to be signed for DSA signature generation.
> > +                    * - to be authenticated for DSA sign verification.
> > +                    *
> > +                    *   Length of data to be signed, if is more than
> > +                    *   prime modulus length, is truncated to length of
> > +                    *   prime modulus.
> > +                    */
> > +
> > +                   rte_crypto_op_param k;
> > +                   /**<
> > +                    * Pointer to random scalar to be used for DSA
> > +                    * signature generation. K should be a non-zero number
> > +                    * less than q. k is in Octet-string network byte
> > +                    * order format.
> > +                    */
> > +
> > +           } dsa;
> > +
> > +           struct {
> > +                   struct  rte_crypto_ec_point p;
> > +                   /**<
> > +                    * Pointer to primary curve point for fundamental
> > +                    * ECC operation. Data is in Octet-string network
> > +                    * byte order format.
> > +                    * Length of data in bytes cannot exceed the prime
> > +                    * modulus length of the curve.
> > +                    */
> > +
> > +                   struct  rte_crypto_ec_point q;
> > +                   /**<
> > +                    *
> > +                    * Pointer to secondary curve point for fundamental
> > +                    * ECC operation. Data is in Octet-string network
> > +                    * byte order format.
> > +                    *
> > +                    * Length of data in bytes cannot exceed the prime
> > +                    * modulus length of the curve. This point is valid
> > +                    * only for point addition optype
> > +                    * RTE_CRYPTO_FECC_OP_POINT_ADD crypto transform.
> > +                    */
> > +
> > +                   rte_crypto_op_param k;
> > +                   /**<
> > +                    * Pointer to scalar data to be used only for point
> > +                    * multiplication @ref RTE_CRYPTO_FECC_OP_POINT_MULTIPLY
> > +                    * crypto transform. Data is in Octet-string network
> > +                    * byte order format.
> > +                    *
> > +                    * Length of data in bytes cannot exceed the prime
> > +                    * modulus length of the curve.
> > +                    */
> > +
> > +                   struct  rte_crypto_ec_point r;
> > +                   /**<
> > +                    * Pointer to the resultant point on the curve after
> > +                    * fundamental ECC crypto transform. Data is in
> > +                    * Octet-string network byte order format.
> > +                    * Length of data in bytes cannot exceed the prime
> > +                    * modulus length of the curve.
> > +                    */
> > +
> > +           } fecc;
> > +
> > +           struct {
> > +
> > +                   rte_crypto_op_param prime;
> > +                   /**<
> > +                    * Pointer to the prime modulus data for modular
> > +                    * inverse operation in Octet-string network byte
> > +                    * order format.
> > +                    */
> > +
> > +                   rte_crypto_op_param base;
> > +                   /**<
> > +                    * Pointer to the base for the modular inverse
> > +                    * operation in Octet-string network byte order
> > +                    * format.
> > +                    */
> > +           } modinv;
> > +   };
> > +
> > +} __rte_cache_aligned;
> > +
> > +
> > +
> > +/**
> > + * Reset the fields of an asymmetric operation to their default values.
> > + *
> > + * @param  op      The crypto operation to be reset.
> > + */
> > +static inline void
> > +__rte_crypto_asym_op_reset(struct rte_crypto_asym_op *op)
> > +{
> > +   memset(op, 0, sizeof(*op));
> > +
> > +   op->sess_type = RTE_CRYPTO_ASYM_OP_SESSIONLESS;
> > +}
> > +
> > +
> > +/**
> > + * Allocate space for asymmetric crypto xforms in the private data space 
> > of the
> > + * crypto operation. This also defaults the crypto xform type to
> > + * RTE_CRYPTO_ASYM_XFORM_NOT_SPECIFIED and configures the chaining of the 
> > xforms
> > + * in the crypto operation
> > + *
> > + * @return
> > + * - On success returns pointer to first crypto xform in crypto operations 
> > chain
> > + * - On failure returns NULL
> > + */
> > +static inline struct rte_crypto_asym_xform *
> > +__rte_crypto_asym_op_asym_xforms_alloc(struct rte_crypto_asym_op *asym_op,
> > +           void *priv_data, uint8_t nb_xforms)
> > +{
> > +   struct rte_crypto_asym_xform *xform;
> > +
> > +   asym_op->xform = xform = (struct rte_crypto_asym_xform *)priv_data;
> > +
> > +   do {
> > +           xform->type = RTE_CRYPTO_ASYM_XFORM_NOT_SPECIFIED;
> > +           xform = xform->next = --nb_xforms > 0 ? xform + 1 : NULL;
> > +   } while (xform);
> > +
> > +   return asym_op->xform;
> > +}
> > +
> > +
> > +/**
> > + * Attach a session to an asymmetric crypto operation
> > + *
> > + * @param  asym_op crypto operation
> > + * @param  sess    cryptodev session
> > + */
> > +static inline int
> > +__rte_crypto_asym_op_attach_asym_session(struct rte_crypto_asym_op 
> > *asym_op,
> > +           struct rte_cryptodev_asym_session *sess)
> > +{
> > +   asym_op->session = sess;
> > +   asym_op->sess_type = RTE_CRYPTO_ASYM_OP_WITH_SESSION;
> > +
> > +   return 0;
> > +}
> > +
> > +
> > +#ifdef __cplusplus
> > +}
> > +#endif
> > +
> > +#endif /* _RTE_CRYPTO_ASYM_H_ */
> > --
> > 1.8.3.1
> 

Regards,
Umesh

Reply via email to