MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ccp_auth_dq_prepare

Function ccp_auth_dq_prepare

dpdk/drivers/crypto/ccp/ccp_crypto.c:2759–2819  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2757}
2758
2759static 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. */

Callers 1

ccp_prepare_opsFunction · 0.85

Calls 3

rte_pktmbuf_lastsegFunction · 0.85
rte_pktmbuf_trimFunction · 0.85
rte_memcpyFunction · 0.50

Tested by

no test coverage detected