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

Function ccp_do_xts

freebsd/crypto/ccp/ccp_hardware.c:1397–1465  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1395}
1396
1397static int __must_check
1398ccp_do_xts(struct ccp_queue *qp, struct ccp_session *s, struct cryptop *crp,
1399 enum ccp_cipher_dir dir, const struct ccp_completion_ctx *cctx)
1400{
1401 struct ccp_desc *desc;
1402 device_t dev;
1403 unsigned i;
1404 enum ccp_xts_unitsize usize;
1405
1406 /* IV and Key data are already loaded */
1407
1408 dev = qp->cq_softc->dev;
1409
1410 for (i = 0; i < nitems(ccp_xts_unitsize_map); i++)
1411 if (ccp_xts_unitsize_map[i].cxu_size ==
1412 crp->crp_payload_length) {
1413 usize = ccp_xts_unitsize_map[i].cxu_id;
1414 break;
1415 }
1416 if (i >= nitems(ccp_xts_unitsize_map))
1417 return (EINVAL);
1418
1419 for (i = 0; i < qp->cq_sg_ulptx->sg_nseg; i++) {
1420 struct sglist_seg *seg;
1421
1422 seg = &qp->cq_sg_ulptx->sg_segs[i];
1423
1424 desc = &qp->desc_ring[qp->cq_tail];
1425 desc->engine = CCP_ENGINE_XTS_AES;
1426 desc->som = (i == 0);
1427 desc->eom = (i == qp->cq_sg_ulptx->sg_nseg - 1);
1428 desc->ioc = (desc->eom && cctx != NULL);
1429 DPRINTF(dev, "%s: XTS %u: som:%d eom:%d ioc:%d dir:%d\n",
1430 __func__, qp->cq_tail, (int)desc->som, (int)desc->eom,
1431 (int)desc->ioc, (int)dir);
1432
1433 if (desc->ioc)
1434 memcpy(&qp->completions_ring[qp->cq_tail], cctx,
1435 sizeof(*cctx));
1436
1437 desc->aes_xts.encrypt = dir;
1438 desc->aes_xts.type = s->blkcipher.cipher_type;
1439 desc->aes_xts.size = usize;
1440
1441 DPRINTF(dev, "XXX %s: XTS %u: type:%u size:%u\n", __func__,
1442 qp->cq_tail, (unsigned)desc->aes_xts.type,
1443 (unsigned)desc->aes_xts.size);
1444
1445 desc->length = seg->ss_len;
1446 desc->src_lo = (uint32_t)seg->ss_paddr;
1447 desc->src_hi = (seg->ss_paddr >> 32);
1448 desc->src_mem = CCP_MEMTYPE_SYSTEM;
1449
1450 /* Crypt in-place */
1451 desc->dst_lo = desc->src_lo;
1452 desc->dst_hi = desc->src_hi;
1453 desc->dst_mem = desc->src_mem;
1454

Callers 1

ccp_do_blkcipherFunction · 0.85

Calls 3

ccp_queue_lsb_addressFunction · 0.85
ccp_queue_lsb_entryFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected