crypto/qat: fix digest verification
authorDeepak Kumar Jain <deepak.k.jain@intel.com>
Sun, 10 Jul 2016 10:21:22 +0000 (11:21 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Sun, 10 Jul 2016 12:51:09 +0000 (14:51 +0200)
This fixes the cases in which operation was Digest verify.

Fixes: e25200fbb45d ("qat: add cipher/auth only")

Signed-off-by: Deepak Kumar Jain <deepak.k.jain@intel.com>
drivers/crypto/qat/qat_adf/qat_algs.h
drivers/crypto/qat/qat_adf/qat_algs_build_desc.c
drivers/crypto/qat/qat_crypto.c

index b47dbc2..243c1b4 100644 (file)
@@ -112,7 +112,8 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,
                                                uint8_t *authkey,
                                                uint32_t authkeylen,
                                                uint32_t add_auth_data_length,
-                                               uint32_t digestsize);
+                                               uint32_t digestsize,
+                                               unsigned int operation);
 
 void qat_alg_init_common_hdr(struct icp_qat_fw_comn_req_hdr *header);
 
index aa108d4..185bb33 100644 (file)
@@ -51,6 +51,7 @@
 #include <rte_byteorder.h>
 #include <rte_log.h>
 #include <rte_malloc.h>
+#include <rte_crypto_sym.h>
 
 #include "../qat_logs.h"
 #include "qat_algs.h"
@@ -502,7 +503,8 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,
                                                uint8_t *authkey,
                                                uint32_t authkeylen,
                                                uint32_t add_auth_data_length,
-                                               uint32_t digestsize)
+                                               uint32_t digestsize,
+                                               unsigned int operation)
 {
        struct icp_qat_hw_cipher_algo_blk *cipher;
        struct icp_qat_hw_auth_algo_blk *hash;
@@ -654,6 +656,12 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,
                ICP_QAT_FW_LA_CMP_AUTH_SET(header->serv_specif_flags,
                        ICP_QAT_FW_LA_NO_CMP_AUTH_RES);
        }
+       if (operation == RTE_CRYPTO_AUTH_OP_VERIFY) {
+               ICP_QAT_FW_LA_RET_AUTH_SET(header->serv_specif_flags,
+                                               ICP_QAT_FW_LA_NO_RET_AUTH_RES);
+               ICP_QAT_FW_LA_CMP_AUTH_SET(header->serv_specif_flags,
+                                               ICP_QAT_FW_LA_CMP_AUTH_RES);
+       }
 
        /* Cipher CD config setup */
        cipher_cd_ctrl->cipher_state_sz = ICP_QAT_HW_AES_BLK_SZ >> 3;
index 940b2b6..d51ca96 100644 (file)
@@ -560,14 +560,16 @@ qat_crypto_sym_configure_session_auth(struct rte_cryptodev *dev,
                                cipher_xform->key.data,
                                cipher_xform->key.length,
                                auth_xform->add_auth_data_length,
-                               auth_xform->digest_length))
+                               auth_xform->digest_length,
+                               auth_xform->op))
                        goto error_out;
        } else {
                if (qat_alg_aead_session_create_content_desc_auth(session,
                                auth_xform->key.data,
                                auth_xform->key.length,
                                auth_xform->add_auth_data_length,
-                               auth_xform->digest_length))
+                               auth_xform->digest_length,
+                               auth_xform->op))
                        goto error_out;
        }
        return session;