| 2757 | } |
| 2758 | |
| 2759 | static inline void ccp_auth_dq_prepare(struct rte_crypto_op *op) |
| 2760 | { |
| 2761 | struct ccp_session *session; |
| 2762 | uint8_t *digest_data, *addr; |
| 2763 | struct rte_mbuf *m_last; |
| 2764 | int offset, digest_offset; |
| 2765 | uint8_t digest_le[64]; |
| 2766 | |
| 2767 | session = CRYPTODEV_GET_SYM_SESS_PRIV(op->sym->session); |
| 2768 | |
| 2769 | if (session->cmd_id == CCP_CMD_COMBINED) { |
| 2770 | digest_data = op->sym->aead.digest.data; |
| 2771 | digest_offset = op->sym->aead.data.offset + |
| 2772 | op->sym->aead.data.length; |
| 2773 | } else { |
| 2774 | digest_data = op->sym->auth.digest.data; |
| 2775 | digest_offset = op->sym->auth.data.offset + |
| 2776 | op->sym->auth.data.length; |
| 2777 | } |
| 2778 | m_last = rte_pktmbuf_lastseg(op->sym->m_src); |
| 2779 | addr = (uint8_t *)((char *)m_last->buf_addr + m_last->data_off + |
| 2780 | m_last->data_len - session->auth.ctx_len); |
| 2781 | |
| 2782 | rte_mb(); |
| 2783 | offset = session->auth.offset; |
| 2784 | |
| 2785 | if (session->auth.engine == CCP_ENGINE_SHA) |
| 2786 | if ((session->auth.ut.sha_type != CCP_SHA_TYPE_1) && |
| 2787 | (session->auth.ut.sha_type != CCP_SHA_TYPE_224) && |
| 2788 | (session->auth.ut.sha_type != CCP_SHA_TYPE_256)) { |
| 2789 | /* All other algorithms require byte |
| 2790 | * swap done by host |
| 2791 | */ |
| 2792 | unsigned int i; |
| 2793 | |
| 2794 | offset = session->auth.ctx_len - |
| 2795 | session->auth.offset - 1; |
| 2796 | for (i = 0; i < session->auth.digest_length; i++) |
| 2797 | digest_le[i] = addr[offset - i]; |
| 2798 | offset = 0; |
| 2799 | addr = digest_le; |
| 2800 | } |
| 2801 | |
| 2802 | op->status = RTE_CRYPTO_OP_STATUS_SUCCESS; |
| 2803 | if (session->auth.op == CCP_AUTH_OP_VERIFY) { |
| 2804 | if (memcmp(addr + offset, digest_data, |
| 2805 | session->auth.digest_length) != 0) |
| 2806 | op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED; |
| 2807 | |
| 2808 | } else { |
| 2809 | if (unlikely(digest_data == 0)) |
| 2810 | digest_data = rte_pktmbuf_mtod_offset( |
| 2811 | op->sym->m_dst, uint8_t *, |
| 2812 | digest_offset); |
| 2813 | rte_memcpy(digest_data, addr + offset, |
| 2814 | session->auth.digest_length); |
| 2815 | } |
| 2816 | /* Trim area used for digest from mbuf. */ |
no test coverage detected