f-stack/dpdk/drivers/common/qat/qat_adf/qat_pke.h

318 lines
9.5 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2021-2022 Intel Corporation
*/
#ifndef _QAT_PKE_FUNCTIONALITY_ARRAYS_H_
#define _QAT_PKE_FUNCTIONALITY_ARRAYS_H_
#include "icp_qat_fw_mmp_ids.h"
/*
* Modular exponentiation functionality IDs
*/
struct qat_asym_function {
uint32_t func_id;
uint32_t bytesize;
};
static struct qat_asym_function
get_modexp_function2(uint32_t bytesize)
{
struct qat_asym_function qat_function = { };
if (bytesize <= 64) {
qat_function.func_id = MATHS_MODEXP_L512;
qat_function.bytesize = 64;
} else if (bytesize <= 128) {
qat_function.func_id = MATHS_MODEXP_L1024;
qat_function.bytesize = 128;
} else if (bytesize <= 192) {
qat_function.func_id = MATHS_MODEXP_L1536;
qat_function.bytesize = 192;
} else if (bytesize <= 256) {
qat_function.func_id = MATHS_MODEXP_L2048;
qat_function.bytesize = 256;
} else if (bytesize <= 320) {
qat_function.func_id = MATHS_MODEXP_L2560;
qat_function.bytesize = 320;
} else if (bytesize <= 384) {
qat_function.func_id = MATHS_MODEXP_L3072;
qat_function.bytesize = 384;
} else if (bytesize <= 448) {
qat_function.func_id = MATHS_MODEXP_L3584;
qat_function.bytesize = 448;
} else if (bytesize <= 512) {
qat_function.func_id = MATHS_MODEXP_L4096;
qat_function.bytesize = 512;
}
return qat_function;
}
static struct qat_asym_function
get_modexp_function(const struct rte_crypto_asym_xform *xform)
{
return get_modexp_function2(xform->modex.modulus.length);
}
static struct qat_asym_function
get_modinv_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function = { };
if (xform->modinv.modulus.data[
xform->modinv.modulus.length - 1] & 0x01) {
if (xform->modex.modulus.length <= 16) {
qat_function.func_id = MATHS_MODINV_ODD_L128;
qat_function.bytesize = 16;
} else if (xform->modex.modulus.length <= 24) {
qat_function.func_id = MATHS_MODINV_ODD_L192;
qat_function.bytesize = 24;
} else if (xform->modex.modulus.length <= 32) {
qat_function.func_id = MATHS_MODINV_ODD_L256;
qat_function.bytesize = 32;
} else if (xform->modex.modulus.length <= 48) {
qat_function.func_id = MATHS_MODINV_ODD_L384;
qat_function.bytesize = 48;
} else if (xform->modex.modulus.length <= 64) {
qat_function.func_id = MATHS_MODINV_ODD_L512;
qat_function.bytesize = 64;
} else if (xform->modex.modulus.length <= 96) {
qat_function.func_id = MATHS_MODINV_ODD_L768;
qat_function.bytesize = 96;
} else if (xform->modex.modulus.length <= 128) {
qat_function.func_id = MATHS_MODINV_ODD_L1024;
qat_function.bytesize = 128;
} else if (xform->modex.modulus.length <= 192) {
qat_function.func_id = MATHS_MODINV_ODD_L1536;
qat_function.bytesize = 192;
} else if (xform->modex.modulus.length <= 256) {
qat_function.func_id = MATHS_MODINV_ODD_L2048;
qat_function.bytesize = 256;
} else if (xform->modex.modulus.length <= 384) {
qat_function.func_id = MATHS_MODINV_ODD_L3072;
qat_function.bytesize = 384;
} else if (xform->modex.modulus.length <= 512) {
qat_function.func_id = MATHS_MODINV_ODD_L4096;
qat_function.bytesize = 512;
}
} else {
if (xform->modex.modulus.length <= 16) {
qat_function.func_id = MATHS_MODINV_EVEN_L128;
qat_function.bytesize = 16;
} else if (xform->modex.modulus.length <= 24) {
qat_function.func_id = MATHS_MODINV_EVEN_L192;
qat_function.bytesize = 24;
} else if (xform->modex.modulus.length <= 32) {
qat_function.func_id = MATHS_MODINV_EVEN_L256;
qat_function.bytesize = 32;
} else if (xform->modex.modulus.length <= 48) {
qat_function.func_id = MATHS_MODINV_EVEN_L384;
qat_function.bytesize = 48;
} else if (xform->modex.modulus.length <= 64) {
qat_function.func_id = MATHS_MODINV_EVEN_L512;
qat_function.bytesize = 64;
} else if (xform->modex.modulus.length <= 96) {
qat_function.func_id = MATHS_MODINV_EVEN_L768;
qat_function.bytesize = 96;
} else if (xform->modex.modulus.length <= 128) {
qat_function.func_id = MATHS_MODINV_EVEN_L1024;
qat_function.bytesize = 128;
} else if (xform->modex.modulus.length <= 192) {
qat_function.func_id = MATHS_MODINV_EVEN_L1536;
qat_function.bytesize = 192;
} else if (xform->modex.modulus.length <= 256) {
qat_function.func_id = MATHS_MODINV_EVEN_L2048;
qat_function.bytesize = 256;
} else if (xform->modex.modulus.length <= 384) {
qat_function.func_id = MATHS_MODINV_EVEN_L3072;
qat_function.bytesize = 384;
} else if (xform->modex.modulus.length <= 512) {
qat_function.func_id = MATHS_MODINV_EVEN_L4096;
qat_function.bytesize = 512;
}
}
return qat_function;
}
static struct qat_asym_function
get_rsa_enc_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function = { };
if (xform->rsa.n.length <= 64) {
qat_function.func_id = PKE_RSA_EP_512;
qat_function.bytesize = 64;
} else if (xform->rsa.n.length <= 128) {
qat_function.func_id = PKE_RSA_EP_1024;
qat_function.bytesize = 128;
} else if (xform->rsa.n.length <= 192) {
qat_function.func_id = PKE_RSA_EP_1536;
qat_function.bytesize = 192;
} else if (xform->rsa.n.length <= 256) {
qat_function.func_id = PKE_RSA_EP_2048;
qat_function.bytesize = 256;
} else if (xform->rsa.n.length <= 384) {
qat_function.func_id = PKE_RSA_EP_3072;
qat_function.bytesize = 384;
} else if (xform->rsa.n.length <= 512) {
qat_function.func_id = PKE_RSA_EP_4096;
qat_function.bytesize = 512;
}
return qat_function;
}
static struct qat_asym_function
get_rsa_dec_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function = { };
if (xform->rsa.n.length <= 64) {
qat_function.func_id = PKE_RSA_DP1_512;
qat_function.bytesize = 64;
} else if (xform->rsa.n.length <= 128) {
qat_function.func_id = PKE_RSA_DP1_1024;
qat_function.bytesize = 128;
} else if (xform->rsa.n.length <= 192) {
qat_function.func_id = PKE_RSA_DP1_1536;
qat_function.bytesize = 192;
} else if (xform->rsa.n.length <= 256) {
qat_function.func_id = PKE_RSA_DP1_2048;
qat_function.bytesize = 256;
} else if (xform->rsa.n.length <= 384) {
qat_function.func_id = PKE_RSA_DP1_3072;
qat_function.bytesize = 384;
} else if (xform->rsa.n.length <= 512) {
qat_function.func_id = PKE_RSA_DP1_4096;
qat_function.bytesize = 512;
}
return qat_function;
}
static struct qat_asym_function
get_rsa_crt_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function = { };
int nlen = xform->rsa.qt.p.length * 2;
if (nlen <= 64) {
qat_function.func_id = PKE_RSA_DP2_512;
qat_function.bytesize = 64;
} else if (nlen <= 128) {
qat_function.func_id = PKE_RSA_DP2_1024;
qat_function.bytesize = 128;
} else if (nlen <= 192) {
qat_function.func_id = PKE_RSA_DP2_1536;
qat_function.bytesize = 192;
} else if (nlen <= 256) {
qat_function.func_id = PKE_RSA_DP2_2048;
qat_function.bytesize = 256;
} else if (nlen <= 384) {
qat_function.func_id = PKE_RSA_DP2_3072;
qat_function.bytesize = 384;
} else if (nlen <= 512) {
qat_function.func_id = PKE_RSA_DP2_4096;
qat_function.bytesize = 512;
}
return qat_function;
}
static struct qat_asym_function
get_ecdsa_verify_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function;
switch (xform->ec.curve_id) {
case RTE_CRYPTO_EC_GROUP_SECP256R1:
qat_function.func_id = PKE_ECDSA_VERIFY_GFP_L256;
qat_function.bytesize = 32;
break;
case RTE_CRYPTO_EC_GROUP_SECP384R1:
qat_function.func_id = PKE_ECDSA_VERIFY_GFP_L512;
qat_function.bytesize = 64;
break;
case RTE_CRYPTO_EC_GROUP_SECP521R1:
qat_function.func_id = PKE_ECDSA_VERIFY_GFP_521;
qat_function.bytesize = 66;
break;
default:
qat_function.func_id = 0;
}
return qat_function;
}
static struct qat_asym_function
get_ecdsa_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function;
switch (xform->ec.curve_id) {
case RTE_CRYPTO_EC_GROUP_SECP256R1:
qat_function.func_id = PKE_ECDSA_SIGN_RS_GFP_L256;
qat_function.bytesize = 32;
break;
case RTE_CRYPTO_EC_GROUP_SECP384R1:
qat_function.func_id = PKE_ECDSA_SIGN_RS_GFP_L512;
qat_function.bytesize = 64;
break;
case RTE_CRYPTO_EC_GROUP_SECP521R1:
qat_function.func_id = PKE_ECDSA_SIGN_RS_GFP_521;
qat_function.bytesize = 66;
break;
default:
qat_function.func_id = 0;
}
return qat_function;
}
static struct qat_asym_function
get_ecpm_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function;
switch (xform->ec.curve_id) {
case RTE_CRYPTO_EC_GROUP_SECP256R1:
qat_function.func_id = MATHS_POINT_MULTIPLICATION_GFP_L256;
qat_function.bytesize = 32;
break;
case RTE_CRYPTO_EC_GROUP_SECP384R1:
qat_function.func_id = MATHS_POINT_MULTIPLICATION_GFP_L512;
qat_function.bytesize = 64;
break;
case RTE_CRYPTO_EC_GROUP_SECP521R1:
qat_function.func_id = MATHS_POINT_MULTIPLICATION_GFP_521;
qat_function.bytesize = 66;
break;
default:
qat_function.func_id = 0;
}
return qat_function;
}
static struct qat_asym_function
get_ec_verify_function(const struct rte_crypto_asym_xform *xform)
{
struct qat_asym_function qat_function;
switch (xform->ec.curve_id) {
case RTE_CRYPTO_EC_GROUP_SECP256R1:
qat_function.func_id = MATHS_POINT_VERIFY_GFP_L256;
qat_function.bytesize = 32;
break;
case RTE_CRYPTO_EC_GROUP_SECP384R1:
qat_function.func_id = MATHS_POINT_VERIFY_GFP_L512;
qat_function.bytesize = 64;
break;
case RTE_CRYPTO_EC_GROUP_SECP521R1:
qat_function.func_id = MATHS_POINT_VERIFY_GFP_521;
qat_function.bytesize = 66;
break;
default:
qat_function.func_id = 0;
}
return qat_function;
}
#endif