<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>