<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof"><span style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">Acked-by: Kai Ji <<a href="mailto:kai.ji@intel.com" id="OWAa16ca688-d824-12b3-9648-abfd1c440708" class="OWAAutoLink" data-loopstyle="linkonly">kai.ji@intel.com</a>></span></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Power, Ciara <ciara.power@intel.com><br>
<b>Sent:</b> 27 October 2023 15:23<br>
<b>To:</b> dev@dpdk.org <dev@dpdk.org><br>
<b>Cc:</b> Power, Ciara <ciara.power@intel.com>; Dooley, Brian <brian.dooley@intel.com>; stable@dpdk.org <stable@dpdk.org>; Ji, Kai <kai.ji@intel.com><br>
<b>Subject:</b> [PATCH] crypto/qat: fix build when no openssl exists</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Previously some compilation errors existed when no openssl<br>
was installed on the system, and intel-ipsec-mb was installed,<br>
due to missing headers and macros.<br>
<br>
This patch fixes the issue by adding in extra ifdefs around openssl<br>
specific code paths, and by adding the relevant macros explicitly<br>
in QAT code so it does not depend on openssl at all.<br>
<br>
Fixes: ca0ba0e48129 ("crypto/qat: default to IPsec MB for computations")<br>
Cc: brian.dooley@intel.com<br>
Cc: stable@dpdk.org<br>
<br>
Signed-off-by: Ciara Power <ciara.power@intel.com><br>
---<br>
drivers/crypto/qat/dev/qat_crypto_pmd_gens.h | 2 ++<br>
drivers/crypto/qat/qat_sym.c | 2 ++<br>
drivers/crypto/qat/qat_sym.h | 6 ++++--<br>
drivers/crypto/qat/qat_sym_session.c | 13 ++++++-------<br>
drivers/crypto/qat/qat_sym_session.h | 3 +++<br>
5 files changed, 17 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h<br>
index 37647374d5..eebf2e6eb8 100644<br>
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h<br>
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h<br>
@@ -24,6 +24,7 @@<br>
(ICP_QAT_FW_COMN_STATUS_FLAG_OK == \<br>
ICP_QAT_FW_COMN_RESP_CRYPTO_STAT_GET(resp->comn_hdr.comn_status))<br>
<br>
+#ifdef RTE_QAT_OPENSSL<br>
static __rte_always_inline int<br>
op_bpi_cipher_decrypt(uint8_t *src, uint8_t *dst,<br>
uint8_t *iv, int ivlen, int srclen,<br>
@@ -48,6 +49,7 @@ op_bpi_cipher_decrypt(uint8_t *src, uint8_t *dst,<br>
QAT_DP_LOG(ERR, "libcrypto ECB cipher decrypt for BPI IV failed");<br>
return -EINVAL;<br>
}<br>
+#endif<br>
<br>
static __rte_always_inline uint32_t<br>
qat_bpicipher_preprocess(struct qat_sym_session *ctx,<br>
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c<br>
index 936c2615e4..6e03bde841 100644<br>
--- a/drivers/crypto/qat/qat_sym.c<br>
+++ b/drivers/crypto/qat/qat_sym.c<br>
@@ -2,7 +2,9 @@<br>
* Copyright(c) 2015-2023 Intel Corporation<br>
*/<br>
<br>
+#ifdef RTE_QAT_OPENSSL<br>
#include <openssl/evp.h><br>
+#endif<br>
<br>
#include <rte_mempool.h><br>
#include <rte_mbuf.h><br>
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h<br>
index d19cadde86..b4e19e3015 100644<br>
--- a/drivers/crypto/qat/qat_sym.h<br>
+++ b/drivers/crypto/qat/qat_sym.h<br>
@@ -9,7 +9,9 @@<br>
#include <rte_net_crc.h><br>
<br>
#ifdef BUILD_QAT_SYM<br>
+#ifdef RTE_QAT_OPENSSL<br>
#include <openssl/evp.h><br>
+#endif<br>
#include <rte_security_driver.h><br>
<br>
#include "qat_common.h"<br>
@@ -133,6 +135,7 @@ uint16_t<br>
qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,<br>
uint16_t nb_ops);<br>
<br>
+#ifdef RTE_QAT_OPENSSL<br>
/** Encrypt a single partial block<br>
* Depends on openssl libcrypto<br>
* Uses ECB+XOR to do CFB encryption, same result, more performant<br>
@@ -161,8 +164,7 @@ bpi_cipher_encrypt(uint8_t *src, uint8_t *dst,<br>
QAT_DP_LOG(ERR, "libcrypto ECB cipher encrypt failed");<br>
return -EINVAL;<br>
}<br>
-<br>
-#ifndef RTE_QAT_OPENSSL<br>
+#else<br>
static __rte_always_inline void<br>
bpi_cipher_ipsec(uint8_t *src, uint8_t *dst, uint8_t *iv, int srclen,<br>
uint64_t *expkey, IMB_MGR *m, uint8_t docsis_key_len)<br>
diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c<br>
index 7831a677d0..9f4f6c3d93 100644<br>
--- a/drivers/crypto/qat/qat_sym_session.c<br>
+++ b/drivers/crypto/qat/qat_sym_session.c<br>
@@ -4,10 +4,12 @@<br>
<br>
#define OPENSSL_API_COMPAT 0x10100000L<br>
<br>
+#ifdef RTE_QAT_OPENSSL<br>
#include <openssl/sha.h> /* Needed to calculate pre-compute values */<br>
#include <openssl/aes.h> /* Needed to calculate pre-compute values */<br>
#include <openssl/md5.h> /* Needed to calculate pre-compute values */<br>
#include <openssl/evp.h> /* Needed for bpi runt block processing */<br>
+#endif<br>
<br>
#ifndef RTE_QAT_OPENSSL<br>
#ifndef RTE_ARCH_ARM<br>
@@ -1272,24 +1274,21 @@ static int qat_hash_get_block_size(enum icp_qat_hw_auth_algo qat_hash_alg)<br>
{<br>
switch (qat_hash_alg) {<br>
case ICP_QAT_HW_AUTH_ALGO_SHA1:<br>
- return SHA_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_SHA224:<br>
- return SHA256_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_SHA256:<br>
- return SHA256_CBLOCK;<br>
+ return QAT_SHA_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_SHA384:<br>
- return SHA512_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_SHA512:<br>
- return SHA512_CBLOCK;<br>
+ return QAT_SHA512_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_GALOIS_128:<br>
return 16;<br>
case ICP_QAT_HW_AUTH_ALGO_AES_XCBC_MAC:<br>
return ICP_QAT_HW_AES_BLK_SZ;<br>
case ICP_QAT_HW_AUTH_ALGO_MD5:<br>
- return MD5_CBLOCK;<br>
+ return QAT_MD5_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_DELIMITER:<br>
/* return maximum block size in this case */<br>
- return SHA512_CBLOCK;<br>
+ return QAT_SHA512_CBLOCK;<br>
case ICP_QAT_HW_AUTH_ALGO_SM3:<br>
return QAT_SM3_BLOCK_SIZE;<br>
default:<br>
diff --git a/drivers/crypto/qat/qat_sym_session.h b/drivers/crypto/qat/qat_sym_session.h<br>
index 674a62ee12..9209e2e8df 100644<br>
--- a/drivers/crypto/qat/qat_sym_session.h<br>
+++ b/drivers/crypto/qat/qat_sym_session.h<br>
@@ -69,6 +69,9 @@<br>
(!!((flags) & (flag)))<br>
<br>
#define QAT_SM3_BLOCK_SIZE 64<br>
+#define QAT_SHA_CBLOCK 64<br>
+#define QAT_SHA512_CBLOCK 128<br>
+#define QAT_MD5_CBLOCK 64<br>
<br>
enum qat_sym_proto_flag {<br>
QAT_CRYPTO_PROTO_FLAG_NONE = 0,<br>
-- <br>
2.25.1<br>
<br>
</div>
</span></font></div>
</body>
</html>