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

Function crypto_lookup_kdriver

freebsd/opencrypto/crypto.c:1565–1606  ·  view source on GitHub ↗

* Choose a driver for an asymmetric crypto request. */

Source from the content-addressed store, hash-verified

1563 * Choose a driver for an asymmetric crypto request.
1564 */
1565static struct cryptocap *
1566crypto_lookup_kdriver(struct cryptkop *krp)
1567{
1568 struct cryptocap *cap;
1569 uint32_t crid;
1570
1571 /* If this request is requeued, it might already have a driver. */
1572 cap = krp->krp_cap;
1573 if (cap != NULL)
1574 return (cap);
1575
1576 /* Use krp_crid to choose a driver. */
1577 crid = krp->krp_crid;
1578 if ((crid & (CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE)) == 0) {
1579 cap = crypto_checkdriver(crid);
1580 if (cap != NULL) {
1581 /*
1582 * Driver present, it must support the
1583 * necessary algorithm and, if s/w drivers are
1584 * excluded, it must be registered as
1585 * hardware-backed.
1586 */
1587 if (!kdriver_suitable(cap, krp) ||
1588 (!crypto_devallowsoft &&
1589 (cap->cc_flags & CRYPTOCAP_F_HARDWARE) == 0))
1590 cap = NULL;
1591 }
1592 } else {
1593 /*
1594 * No requested driver; select based on crid flags.
1595 */
1596 if (!crypto_devallowsoft) /* NB: disallow s/w drivers */
1597 crid &= ~CRYPTOCAP_F_SOFTWARE;
1598 cap = crypto_select_kdriver(krp, crid);
1599 }
1600
1601 if (cap != NULL) {
1602 krp->krp_cap = cap_ref(cap);
1603 krp->krp_hid = cap->cc_hid;
1604 }
1605 return (cap);
1606}
1607
1608/*
1609 * Dispatch an asymmetric crypto request.

Callers 1

crypto_kinvokeFunction · 0.85

Calls 4

crypto_checkdriverFunction · 0.85
kdriver_suitableFunction · 0.85
crypto_select_kdriverFunction · 0.85
cap_refFunction · 0.85

Tested by

no test coverage detected