mirror of https://github.com/F-Stack/f-stack.git
318 lines
9.5 KiB
C
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
|