| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * talitos - Freescale Integrated Security Engine (SEC) device driver |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 9 | 10 | * Crypto algorithm registration code copied from hifn driver: |
|---|
| 10 | 11 | * 2007+ Copyright (c) Evgeniy Polyakov <johnpol@2ka.mipt.ru> |
|---|
| 11 | 12 | * All rights reserved. |
|---|
| 12 | | - * |
|---|
| 13 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 14 | | - * it under the terms of the GNU General Public License as published by |
|---|
| 15 | | - * the Free Software Foundation; either version 2 of the License, or |
|---|
| 16 | | - * (at your option) any later version. |
|---|
| 17 | | - * |
|---|
| 18 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 19 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 20 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 21 | | - * GNU General Public License for more details. |
|---|
| 22 | | - * |
|---|
| 23 | | - * You should have received a copy of the GNU General Public License |
|---|
| 24 | | - * along with this program; if not, write to the Free Software |
|---|
| 25 | | - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|---|
| 26 | 13 | */ |
|---|
| 27 | 14 | |
|---|
| 28 | 15 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 43 | 30 | |
|---|
| 44 | 31 | #include <crypto/algapi.h> |
|---|
| 45 | 32 | #include <crypto/aes.h> |
|---|
| 46 | | -#include <crypto/des.h> |
|---|
| 33 | +#include <crypto/internal/des.h> |
|---|
| 47 | 34 | #include <crypto/sha.h> |
|---|
| 48 | 35 | #include <crypto/md5.h> |
|---|
| 49 | 36 | #include <crypto/internal/aead.h> |
|---|
| 50 | 37 | #include <crypto/authenc.h> |
|---|
| 51 | | -#include <crypto/skcipher.h> |
|---|
| 38 | +#include <crypto/internal/skcipher.h> |
|---|
| 52 | 39 | #include <crypto/hash.h> |
|---|
| 53 | 40 | #include <crypto/internal/hash.h> |
|---|
| 54 | 41 | #include <crypto/scatterwalk.h> |
|---|
| .. | .. |
|---|
| 278 | 265 | * callback must check err and feedback in descriptor header |
|---|
| 279 | 266 | * for device processing status. |
|---|
| 280 | 267 | */ |
|---|
| 281 | | -int talitos_submit(struct device *dev, int ch, struct talitos_desc *desc, |
|---|
| 282 | | - void (*callback)(struct device *dev, |
|---|
| 283 | | - struct talitos_desc *desc, |
|---|
| 284 | | - void *context, int error), |
|---|
| 285 | | - void *context) |
|---|
| 268 | +static int talitos_submit(struct device *dev, int ch, struct talitos_desc *desc, |
|---|
| 269 | + void (*callback)(struct device *dev, |
|---|
| 270 | + struct talitos_desc *desc, |
|---|
| 271 | + void *context, int error), |
|---|
| 272 | + void *context) |
|---|
| 286 | 273 | { |
|---|
| 287 | 274 | struct talitos_private *priv = dev_get_drvdata(dev); |
|---|
| 288 | 275 | struct talitos_request *request; |
|---|
| .. | .. |
|---|
| 332 | 319 | |
|---|
| 333 | 320 | return -EINPROGRESS; |
|---|
| 334 | 321 | } |
|---|
| 335 | | -EXPORT_SYMBOL(talitos_submit); |
|---|
| 336 | 322 | |
|---|
| 337 | 323 | static __be32 get_request_hdr(struct talitos_request *request, bool is_sec1) |
|---|
| 338 | 324 | { |
|---|
| .. | .. |
|---|
| 820 | 806 | struct talitos_private *priv = dev_get_drvdata(dev); |
|---|
| 821 | 807 | int err; |
|---|
| 822 | 808 | |
|---|
| 823 | | - priv->rng.name = dev_driver_string(dev), |
|---|
| 824 | | - priv->rng.init = talitos_rng_init, |
|---|
| 825 | | - priv->rng.data_present = talitos_rng_data_present, |
|---|
| 826 | | - priv->rng.data_read = talitos_rng_data_read, |
|---|
| 809 | + priv->rng.name = dev_driver_string(dev); |
|---|
| 810 | + priv->rng.init = talitos_rng_init; |
|---|
| 811 | + priv->rng.data_present = talitos_rng_data_present; |
|---|
| 812 | + priv->rng.data_read = talitos_rng_data_read; |
|---|
| 827 | 813 | priv->rng.priv = (unsigned long)dev; |
|---|
| 828 | 814 | |
|---|
| 829 | 815 | err = hwrng_register(&priv->rng); |
|---|
| .. | .. |
|---|
| 928 | 914 | return 0; |
|---|
| 929 | 915 | |
|---|
| 930 | 916 | badkey: |
|---|
| 931 | | - crypto_aead_set_flags(authenc, CRYPTO_TFM_RES_BAD_KEY_LEN); |
|---|
| 932 | 917 | memzero_explicit(&keys, sizeof(keys)); |
|---|
| 933 | 918 | return -EINVAL; |
|---|
| 919 | +} |
|---|
| 920 | + |
|---|
| 921 | +static int aead_des3_setkey(struct crypto_aead *authenc, |
|---|
| 922 | + const u8 *key, unsigned int keylen) |
|---|
| 923 | +{ |
|---|
| 924 | + struct talitos_ctx *ctx = crypto_aead_ctx(authenc); |
|---|
| 925 | + struct device *dev = ctx->dev; |
|---|
| 926 | + struct crypto_authenc_keys keys; |
|---|
| 927 | + int err; |
|---|
| 928 | + |
|---|
| 929 | + err = crypto_authenc_extractkeys(&keys, key, keylen); |
|---|
| 930 | + if (unlikely(err)) |
|---|
| 931 | + goto out; |
|---|
| 932 | + |
|---|
| 933 | + err = -EINVAL; |
|---|
| 934 | + if (keys.authkeylen + keys.enckeylen > TALITOS_MAX_KEY_SIZE) |
|---|
| 935 | + goto out; |
|---|
| 936 | + |
|---|
| 937 | + err = verify_aead_des3_key(authenc, keys.enckey, keys.enckeylen); |
|---|
| 938 | + if (err) |
|---|
| 939 | + goto out; |
|---|
| 940 | + |
|---|
| 941 | + if (ctx->keylen) |
|---|
| 942 | + dma_unmap_single(dev, ctx->dma_key, ctx->keylen, DMA_TO_DEVICE); |
|---|
| 943 | + |
|---|
| 944 | + memcpy(ctx->key, keys.authkey, keys.authkeylen); |
|---|
| 945 | + memcpy(&ctx->key[keys.authkeylen], keys.enckey, keys.enckeylen); |
|---|
| 946 | + |
|---|
| 947 | + ctx->keylen = keys.authkeylen + keys.enckeylen; |
|---|
| 948 | + ctx->enckeylen = keys.enckeylen; |
|---|
| 949 | + ctx->authkeylen = keys.authkeylen; |
|---|
| 950 | + ctx->dma_key = dma_map_single(dev, ctx->key, ctx->keylen, |
|---|
| 951 | + DMA_TO_DEVICE); |
|---|
| 952 | + |
|---|
| 953 | +out: |
|---|
| 954 | + memzero_explicit(&keys, sizeof(keys)); |
|---|
| 955 | + return err; |
|---|
| 934 | 956 | } |
|---|
| 935 | 957 | |
|---|
| 936 | 958 | static void talitos_sg_unmap(struct device *dev, |
|---|
| .. | .. |
|---|
| 1253 | 1275 | is_ipsec_esp && !encrypt, 1); |
|---|
| 1254 | 1276 | tbl_off += ret; |
|---|
| 1255 | 1277 | |
|---|
| 1256 | | - /* ICV data */ |
|---|
| 1257 | | - edesc->icv_ool = !encrypt; |
|---|
| 1258 | | - |
|---|
| 1259 | 1278 | if (!encrypt && is_ipsec_esp) { |
|---|
| 1260 | 1279 | struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off]; |
|---|
| 1261 | 1280 | |
|---|
| .. | .. |
|---|
| 1468 | 1487 | return ipsec_esp(edesc, req, false, ipsec_esp_decrypt_swauth_done); |
|---|
| 1469 | 1488 | } |
|---|
| 1470 | 1489 | |
|---|
| 1471 | | -static int ablkcipher_setkey(struct crypto_ablkcipher *cipher, |
|---|
| 1490 | +static int skcipher_setkey(struct crypto_skcipher *cipher, |
|---|
| 1472 | 1491 | const u8 *key, unsigned int keylen) |
|---|
| 1473 | 1492 | { |
|---|
| 1474 | | - struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); |
|---|
| 1493 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher); |
|---|
| 1475 | 1494 | struct device *dev = ctx->dev; |
|---|
| 1476 | | - u32 tmp[DES_EXPKEY_WORDS]; |
|---|
| 1477 | | - |
|---|
| 1478 | | - if (keylen > TALITOS_MAX_KEY_SIZE) { |
|---|
| 1479 | | - crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN); |
|---|
| 1480 | | - return -EINVAL; |
|---|
| 1481 | | - } |
|---|
| 1482 | | - |
|---|
| 1483 | | - if (unlikely(crypto_ablkcipher_get_flags(cipher) & |
|---|
| 1484 | | - CRYPTO_TFM_REQ_WEAK_KEY) && |
|---|
| 1485 | | - !des_ekey(tmp, key)) { |
|---|
| 1486 | | - crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_WEAK_KEY); |
|---|
| 1487 | | - return -EINVAL; |
|---|
| 1488 | | - } |
|---|
| 1489 | 1495 | |
|---|
| 1490 | 1496 | if (ctx->keylen) |
|---|
| 1491 | 1497 | dma_unmap_single(dev, ctx->dma_key, ctx->keylen, DMA_TO_DEVICE); |
|---|
| .. | .. |
|---|
| 1498 | 1504 | return 0; |
|---|
| 1499 | 1505 | } |
|---|
| 1500 | 1506 | |
|---|
| 1501 | | -static int ablkcipher_aes_setkey(struct crypto_ablkcipher *cipher, |
|---|
| 1507 | +static int skcipher_des_setkey(struct crypto_skcipher *cipher, |
|---|
| 1508 | + const u8 *key, unsigned int keylen) |
|---|
| 1509 | +{ |
|---|
| 1510 | + return verify_skcipher_des_key(cipher, key) ?: |
|---|
| 1511 | + skcipher_setkey(cipher, key, keylen); |
|---|
| 1512 | +} |
|---|
| 1513 | + |
|---|
| 1514 | +static int skcipher_des3_setkey(struct crypto_skcipher *cipher, |
|---|
| 1515 | + const u8 *key, unsigned int keylen) |
|---|
| 1516 | +{ |
|---|
| 1517 | + return verify_skcipher_des3_key(cipher, key) ?: |
|---|
| 1518 | + skcipher_setkey(cipher, key, keylen); |
|---|
| 1519 | +} |
|---|
| 1520 | + |
|---|
| 1521 | +static int skcipher_aes_setkey(struct crypto_skcipher *cipher, |
|---|
| 1502 | 1522 | const u8 *key, unsigned int keylen) |
|---|
| 1503 | 1523 | { |
|---|
| 1504 | 1524 | if (keylen == AES_KEYSIZE_128 || keylen == AES_KEYSIZE_192 || |
|---|
| 1505 | 1525 | keylen == AES_KEYSIZE_256) |
|---|
| 1506 | | - return ablkcipher_setkey(cipher, key, keylen); |
|---|
| 1507 | | - |
|---|
| 1508 | | - crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN); |
|---|
| 1526 | + return skcipher_setkey(cipher, key, keylen); |
|---|
| 1509 | 1527 | |
|---|
| 1510 | 1528 | return -EINVAL; |
|---|
| 1511 | 1529 | } |
|---|
| 1512 | 1530 | |
|---|
| 1513 | 1531 | static void common_nonsnoop_unmap(struct device *dev, |
|---|
| 1514 | 1532 | struct talitos_edesc *edesc, |
|---|
| 1515 | | - struct ablkcipher_request *areq) |
|---|
| 1533 | + struct skcipher_request *areq) |
|---|
| 1516 | 1534 | { |
|---|
| 1517 | 1535 | unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE); |
|---|
| 1518 | 1536 | |
|---|
| 1519 | | - talitos_sg_unmap(dev, edesc, areq->src, areq->dst, areq->nbytes, 0); |
|---|
| 1537 | + talitos_sg_unmap(dev, edesc, areq->src, areq->dst, areq->cryptlen, 0); |
|---|
| 1520 | 1538 | unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1], DMA_TO_DEVICE); |
|---|
| 1521 | 1539 | |
|---|
| 1522 | 1540 | if (edesc->dma_len) |
|---|
| .. | .. |
|---|
| 1524 | 1542 | DMA_BIDIRECTIONAL); |
|---|
| 1525 | 1543 | } |
|---|
| 1526 | 1544 | |
|---|
| 1527 | | -static void ablkcipher_done(struct device *dev, |
|---|
| 1545 | +static void skcipher_done(struct device *dev, |
|---|
| 1528 | 1546 | struct talitos_desc *desc, void *context, |
|---|
| 1529 | 1547 | int err) |
|---|
| 1530 | 1548 | { |
|---|
| 1531 | | - struct ablkcipher_request *areq = context; |
|---|
| 1532 | | - struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq); |
|---|
| 1533 | | - struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); |
|---|
| 1534 | | - unsigned int ivsize = crypto_ablkcipher_ivsize(cipher); |
|---|
| 1549 | + struct skcipher_request *areq = context; |
|---|
| 1550 | + struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(areq); |
|---|
| 1551 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher); |
|---|
| 1552 | + unsigned int ivsize = crypto_skcipher_ivsize(cipher); |
|---|
| 1535 | 1553 | struct talitos_edesc *edesc; |
|---|
| 1536 | 1554 | |
|---|
| 1537 | 1555 | edesc = container_of(desc, struct talitos_edesc, desc); |
|---|
| 1538 | 1556 | |
|---|
| 1539 | 1557 | common_nonsnoop_unmap(dev, edesc, areq); |
|---|
| 1540 | | - memcpy(areq->info, ctx->iv, ivsize); |
|---|
| 1558 | + memcpy(areq->iv, ctx->iv, ivsize); |
|---|
| 1541 | 1559 | |
|---|
| 1542 | 1560 | kfree(edesc); |
|---|
| 1543 | 1561 | |
|---|
| .. | .. |
|---|
| 1545 | 1563 | } |
|---|
| 1546 | 1564 | |
|---|
| 1547 | 1565 | static int common_nonsnoop(struct talitos_edesc *edesc, |
|---|
| 1548 | | - struct ablkcipher_request *areq, |
|---|
| 1566 | + struct skcipher_request *areq, |
|---|
| 1549 | 1567 | void (*callback) (struct device *dev, |
|---|
| 1550 | 1568 | struct talitos_desc *desc, |
|---|
| 1551 | 1569 | void *context, int error)) |
|---|
| 1552 | 1570 | { |
|---|
| 1553 | | - struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq); |
|---|
| 1554 | | - struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); |
|---|
| 1571 | + struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(areq); |
|---|
| 1572 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher); |
|---|
| 1555 | 1573 | struct device *dev = ctx->dev; |
|---|
| 1556 | 1574 | struct talitos_desc *desc = &edesc->desc; |
|---|
| 1557 | | - unsigned int cryptlen = areq->nbytes; |
|---|
| 1558 | | - unsigned int ivsize = crypto_ablkcipher_ivsize(cipher); |
|---|
| 1575 | + unsigned int cryptlen = areq->cryptlen; |
|---|
| 1576 | + unsigned int ivsize = crypto_skcipher_ivsize(cipher); |
|---|
| 1559 | 1577 | int sg_count, ret; |
|---|
| 1560 | 1578 | bool sync_needed = false; |
|---|
| 1561 | 1579 | struct talitos_private *priv = dev_get_drvdata(dev); |
|---|
| .. | .. |
|---|
| 1617 | 1635 | return ret; |
|---|
| 1618 | 1636 | } |
|---|
| 1619 | 1637 | |
|---|
| 1620 | | -static struct talitos_edesc *ablkcipher_edesc_alloc(struct ablkcipher_request * |
|---|
| 1638 | +static struct talitos_edesc *skcipher_edesc_alloc(struct skcipher_request * |
|---|
| 1621 | 1639 | areq, bool encrypt) |
|---|
| 1622 | 1640 | { |
|---|
| 1623 | | - struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq); |
|---|
| 1624 | | - struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); |
|---|
| 1625 | | - unsigned int ivsize = crypto_ablkcipher_ivsize(cipher); |
|---|
| 1641 | + struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(areq); |
|---|
| 1642 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher); |
|---|
| 1643 | + unsigned int ivsize = crypto_skcipher_ivsize(cipher); |
|---|
| 1626 | 1644 | |
|---|
| 1627 | 1645 | return talitos_edesc_alloc(ctx->dev, areq->src, areq->dst, |
|---|
| 1628 | | - areq->info, 0, areq->nbytes, 0, ivsize, 0, |
|---|
| 1646 | + areq->iv, 0, areq->cryptlen, 0, ivsize, 0, |
|---|
| 1629 | 1647 | areq->base.flags, encrypt); |
|---|
| 1630 | 1648 | } |
|---|
| 1631 | 1649 | |
|---|
| 1632 | | -static int ablkcipher_encrypt(struct ablkcipher_request *areq) |
|---|
| 1650 | +static int skcipher_encrypt(struct skcipher_request *areq) |
|---|
| 1633 | 1651 | { |
|---|
| 1634 | | - struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq); |
|---|
| 1635 | | - struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); |
|---|
| 1652 | + struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(areq); |
|---|
| 1653 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher); |
|---|
| 1636 | 1654 | struct talitos_edesc *edesc; |
|---|
| 1637 | 1655 | unsigned int blocksize = |
|---|
| 1638 | | - crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(cipher)); |
|---|
| 1656 | + crypto_tfm_alg_blocksize(crypto_skcipher_tfm(cipher)); |
|---|
| 1639 | 1657 | |
|---|
| 1640 | | - if (!areq->nbytes) |
|---|
| 1658 | + if (!areq->cryptlen) |
|---|
| 1641 | 1659 | return 0; |
|---|
| 1642 | 1660 | |
|---|
| 1643 | | - if (areq->nbytes % blocksize) |
|---|
| 1661 | + if (areq->cryptlen % blocksize) |
|---|
| 1644 | 1662 | return -EINVAL; |
|---|
| 1645 | 1663 | |
|---|
| 1646 | 1664 | /* allocate extended descriptor */ |
|---|
| 1647 | | - edesc = ablkcipher_edesc_alloc(areq, true); |
|---|
| 1665 | + edesc = skcipher_edesc_alloc(areq, true); |
|---|
| 1648 | 1666 | if (IS_ERR(edesc)) |
|---|
| 1649 | 1667 | return PTR_ERR(edesc); |
|---|
| 1650 | 1668 | |
|---|
| 1651 | 1669 | /* set encrypt */ |
|---|
| 1652 | 1670 | edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT; |
|---|
| 1653 | 1671 | |
|---|
| 1654 | | - return common_nonsnoop(edesc, areq, ablkcipher_done); |
|---|
| 1672 | + return common_nonsnoop(edesc, areq, skcipher_done); |
|---|
| 1655 | 1673 | } |
|---|
| 1656 | 1674 | |
|---|
| 1657 | | -static int ablkcipher_decrypt(struct ablkcipher_request *areq) |
|---|
| 1675 | +static int skcipher_decrypt(struct skcipher_request *areq) |
|---|
| 1658 | 1676 | { |
|---|
| 1659 | | - struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq); |
|---|
| 1660 | | - struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); |
|---|
| 1677 | + struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(areq); |
|---|
| 1678 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher); |
|---|
| 1661 | 1679 | struct talitos_edesc *edesc; |
|---|
| 1662 | 1680 | unsigned int blocksize = |
|---|
| 1663 | | - crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(cipher)); |
|---|
| 1681 | + crypto_tfm_alg_blocksize(crypto_skcipher_tfm(cipher)); |
|---|
| 1664 | 1682 | |
|---|
| 1665 | | - if (!areq->nbytes) |
|---|
| 1683 | + if (!areq->cryptlen) |
|---|
| 1666 | 1684 | return 0; |
|---|
| 1667 | 1685 | |
|---|
| 1668 | | - if (areq->nbytes % blocksize) |
|---|
| 1686 | + if (areq->cryptlen % blocksize) |
|---|
| 1669 | 1687 | return -EINVAL; |
|---|
| 1670 | 1688 | |
|---|
| 1671 | 1689 | /* allocate extended descriptor */ |
|---|
| 1672 | | - edesc = ablkcipher_edesc_alloc(areq, false); |
|---|
| 1690 | + edesc = skcipher_edesc_alloc(areq, false); |
|---|
| 1673 | 1691 | if (IS_ERR(edesc)) |
|---|
| 1674 | 1692 | return PTR_ERR(edesc); |
|---|
| 1675 | 1693 | |
|---|
| 1676 | 1694 | edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_DIR_INBOUND; |
|---|
| 1677 | 1695 | |
|---|
| 1678 | | - return common_nonsnoop(edesc, areq, ablkcipher_done); |
|---|
| 1696 | + return common_nonsnoop(edesc, areq, skcipher_done); |
|---|
| 1679 | 1697 | } |
|---|
| 1680 | 1698 | |
|---|
| 1681 | 1699 | static void common_nonsnoop_hash_unmap(struct device *dev, |
|---|
| .. | .. |
|---|
| 1683 | 1701 | struct ahash_request *areq) |
|---|
| 1684 | 1702 | { |
|---|
| 1685 | 1703 | struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq); |
|---|
| 1704 | + struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); |
|---|
| 1686 | 1705 | struct talitos_private *priv = dev_get_drvdata(dev); |
|---|
| 1687 | 1706 | bool is_sec1 = has_ftr_sec1(priv); |
|---|
| 1688 | 1707 | struct talitos_desc *desc = &edesc->desc; |
|---|
| .. | .. |
|---|
| 1693 | 1712 | if (desc->next_desc && |
|---|
| 1694 | 1713 | desc->ptr[5].ptr != desc2->ptr[5].ptr) |
|---|
| 1695 | 1714 | unmap_single_talitos_ptr(dev, &desc2->ptr[5], DMA_FROM_DEVICE); |
|---|
| 1715 | + if (req_ctx->last) |
|---|
| 1716 | + memcpy(areq->result, req_ctx->hw_context, |
|---|
| 1717 | + crypto_ahash_digestsize(tfm)); |
|---|
| 1696 | 1718 | |
|---|
| 1697 | 1719 | if (req_ctx->psrc) |
|---|
| 1698 | 1720 | talitos_sg_unmap(dev, edesc, req_ctx->psrc, NULL, 0, 0); |
|---|
| .. | .. |
|---|
| 1824 | 1846 | if (req_ctx->last) |
|---|
| 1825 | 1847 | map_single_talitos_ptr(dev, &desc->ptr[5], |
|---|
| 1826 | 1848 | crypto_ahash_digestsize(tfm), |
|---|
| 1827 | | - areq->result, DMA_FROM_DEVICE); |
|---|
| 1849 | + req_ctx->hw_context, DMA_FROM_DEVICE); |
|---|
| 1828 | 1850 | else |
|---|
| 1829 | 1851 | map_single_talitos_ptr_nosync(dev, &desc->ptr[5], |
|---|
| 1830 | 1852 | req_ctx->hw_context_size, |
|---|
| .. | .. |
|---|
| 2209 | 2231 | /* Must get the hash of the long key */ |
|---|
| 2210 | 2232 | ret = keyhash(tfm, key, keylen, hash); |
|---|
| 2211 | 2233 | |
|---|
| 2212 | | - if (ret) { |
|---|
| 2213 | | - crypto_ahash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN); |
|---|
| 2234 | + if (ret) |
|---|
| 2214 | 2235 | return -EINVAL; |
|---|
| 2215 | | - } |
|---|
| 2216 | 2236 | |
|---|
| 2217 | 2237 | keysize = digestsize; |
|---|
| 2218 | 2238 | memcpy(ctx->key, hash, digestsize); |
|---|
| .. | .. |
|---|
| 2232 | 2252 | u32 type; |
|---|
| 2233 | 2253 | u32 priority; |
|---|
| 2234 | 2254 | union { |
|---|
| 2235 | | - struct crypto_alg crypto; |
|---|
| 2255 | + struct skcipher_alg skcipher; |
|---|
| 2236 | 2256 | struct ahash_alg hash; |
|---|
| 2237 | 2257 | struct aead_alg aead; |
|---|
| 2238 | 2258 | } alg; |
|---|
| .. | .. |
|---|
| 2248 | 2268 | .cra_driver_name = "authenc-hmac-sha1-" |
|---|
| 2249 | 2269 | "cbc-aes-talitos", |
|---|
| 2250 | 2270 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2251 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2271 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2272 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2252 | 2273 | }, |
|---|
| 2253 | 2274 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2254 | 2275 | .maxauthsize = SHA1_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2269 | 2290 | .cra_driver_name = "authenc-hmac-sha1-" |
|---|
| 2270 | 2291 | "cbc-aes-talitos-hsna", |
|---|
| 2271 | 2292 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2272 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2293 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2294 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2273 | 2295 | }, |
|---|
| 2274 | 2296 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2275 | 2297 | .maxauthsize = SHA1_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2290 | 2312 | .cra_driver_name = "authenc-hmac-sha1-" |
|---|
| 2291 | 2313 | "cbc-3des-talitos", |
|---|
| 2292 | 2314 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2293 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2315 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2316 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2294 | 2317 | }, |
|---|
| 2295 | 2318 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2296 | 2319 | .maxauthsize = SHA1_DIGEST_SIZE, |
|---|
| 2320 | + .setkey = aead_des3_setkey, |
|---|
| 2297 | 2321 | }, |
|---|
| 2298 | 2322 | .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP | |
|---|
| 2299 | 2323 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2313 | 2337 | .cra_driver_name = "authenc-hmac-sha1-" |
|---|
| 2314 | 2338 | "cbc-3des-talitos-hsna", |
|---|
| 2315 | 2339 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2316 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2340 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2341 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2317 | 2342 | }, |
|---|
| 2318 | 2343 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2319 | 2344 | .maxauthsize = SHA1_DIGEST_SIZE, |
|---|
| 2345 | + .setkey = aead_des3_setkey, |
|---|
| 2320 | 2346 | }, |
|---|
| 2321 | 2347 | .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU | |
|---|
| 2322 | 2348 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2334 | 2360 | .cra_driver_name = "authenc-hmac-sha224-" |
|---|
| 2335 | 2361 | "cbc-aes-talitos", |
|---|
| 2336 | 2362 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2337 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2363 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2364 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2338 | 2365 | }, |
|---|
| 2339 | 2366 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2340 | 2367 | .maxauthsize = SHA224_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2355 | 2382 | .cra_driver_name = "authenc-hmac-sha224-" |
|---|
| 2356 | 2383 | "cbc-aes-talitos-hsna", |
|---|
| 2357 | 2384 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2358 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2385 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2386 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2359 | 2387 | }, |
|---|
| 2360 | 2388 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2361 | 2389 | .maxauthsize = SHA224_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2376 | 2404 | .cra_driver_name = "authenc-hmac-sha224-" |
|---|
| 2377 | 2405 | "cbc-3des-talitos", |
|---|
| 2378 | 2406 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2379 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2407 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2408 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2380 | 2409 | }, |
|---|
| 2381 | 2410 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2382 | 2411 | .maxauthsize = SHA224_DIGEST_SIZE, |
|---|
| 2412 | + .setkey = aead_des3_setkey, |
|---|
| 2383 | 2413 | }, |
|---|
| 2384 | 2414 | .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP | |
|---|
| 2385 | 2415 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2399 | 2429 | .cra_driver_name = "authenc-hmac-sha224-" |
|---|
| 2400 | 2430 | "cbc-3des-talitos-hsna", |
|---|
| 2401 | 2431 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2402 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2432 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2433 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2403 | 2434 | }, |
|---|
| 2404 | 2435 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2405 | 2436 | .maxauthsize = SHA224_DIGEST_SIZE, |
|---|
| 2437 | + .setkey = aead_des3_setkey, |
|---|
| 2406 | 2438 | }, |
|---|
| 2407 | 2439 | .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU | |
|---|
| 2408 | 2440 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2420 | 2452 | .cra_driver_name = "authenc-hmac-sha256-" |
|---|
| 2421 | 2453 | "cbc-aes-talitos", |
|---|
| 2422 | 2454 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2423 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2455 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2456 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2424 | 2457 | }, |
|---|
| 2425 | 2458 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2426 | 2459 | .maxauthsize = SHA256_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2441 | 2474 | .cra_driver_name = "authenc-hmac-sha256-" |
|---|
| 2442 | 2475 | "cbc-aes-talitos-hsna", |
|---|
| 2443 | 2476 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2444 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2477 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2478 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2445 | 2479 | }, |
|---|
| 2446 | 2480 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2447 | 2481 | .maxauthsize = SHA256_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2462 | 2496 | .cra_driver_name = "authenc-hmac-sha256-" |
|---|
| 2463 | 2497 | "cbc-3des-talitos", |
|---|
| 2464 | 2498 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2465 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2499 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2500 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2466 | 2501 | }, |
|---|
| 2467 | 2502 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2468 | 2503 | .maxauthsize = SHA256_DIGEST_SIZE, |
|---|
| 2504 | + .setkey = aead_des3_setkey, |
|---|
| 2469 | 2505 | }, |
|---|
| 2470 | 2506 | .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP | |
|---|
| 2471 | 2507 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2485 | 2521 | .cra_driver_name = "authenc-hmac-sha256-" |
|---|
| 2486 | 2522 | "cbc-3des-talitos-hsna", |
|---|
| 2487 | 2523 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2488 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2524 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2525 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2489 | 2526 | }, |
|---|
| 2490 | 2527 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2491 | 2528 | .maxauthsize = SHA256_DIGEST_SIZE, |
|---|
| 2529 | + .setkey = aead_des3_setkey, |
|---|
| 2492 | 2530 | }, |
|---|
| 2493 | 2531 | .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU | |
|---|
| 2494 | 2532 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2506 | 2544 | .cra_driver_name = "authenc-hmac-sha384-" |
|---|
| 2507 | 2545 | "cbc-aes-talitos", |
|---|
| 2508 | 2546 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2509 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2547 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2548 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2510 | 2549 | }, |
|---|
| 2511 | 2550 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2512 | 2551 | .maxauthsize = SHA384_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2527 | 2566 | .cra_driver_name = "authenc-hmac-sha384-" |
|---|
| 2528 | 2567 | "cbc-3des-talitos", |
|---|
| 2529 | 2568 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2530 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2569 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2570 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2531 | 2571 | }, |
|---|
| 2532 | 2572 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2533 | 2573 | .maxauthsize = SHA384_DIGEST_SIZE, |
|---|
| 2574 | + .setkey = aead_des3_setkey, |
|---|
| 2534 | 2575 | }, |
|---|
| 2535 | 2576 | .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP | |
|---|
| 2536 | 2577 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2548 | 2589 | .cra_driver_name = "authenc-hmac-sha512-" |
|---|
| 2549 | 2590 | "cbc-aes-talitos", |
|---|
| 2550 | 2591 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2551 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2592 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2593 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2552 | 2594 | }, |
|---|
| 2553 | 2595 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2554 | 2596 | .maxauthsize = SHA512_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2569 | 2611 | .cra_driver_name = "authenc-hmac-sha512-" |
|---|
| 2570 | 2612 | "cbc-3des-talitos", |
|---|
| 2571 | 2613 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2572 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2614 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2615 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2573 | 2616 | }, |
|---|
| 2574 | 2617 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2575 | 2618 | .maxauthsize = SHA512_DIGEST_SIZE, |
|---|
| 2619 | + .setkey = aead_des3_setkey, |
|---|
| 2576 | 2620 | }, |
|---|
| 2577 | 2621 | .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP | |
|---|
| 2578 | 2622 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2590 | 2634 | .cra_driver_name = "authenc-hmac-md5-" |
|---|
| 2591 | 2635 | "cbc-aes-talitos", |
|---|
| 2592 | 2636 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2593 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2637 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2638 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2594 | 2639 | }, |
|---|
| 2595 | 2640 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2596 | 2641 | .maxauthsize = MD5_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2611 | 2656 | .cra_driver_name = "authenc-hmac-md5-" |
|---|
| 2612 | 2657 | "cbc-aes-talitos-hsna", |
|---|
| 2613 | 2658 | .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2614 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2659 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2660 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2615 | 2661 | }, |
|---|
| 2616 | 2662 | .ivsize = AES_BLOCK_SIZE, |
|---|
| 2617 | 2663 | .maxauthsize = MD5_DIGEST_SIZE, |
|---|
| .. | .. |
|---|
| 2631 | 2677 | .cra_driver_name = "authenc-hmac-md5-" |
|---|
| 2632 | 2678 | "cbc-3des-talitos", |
|---|
| 2633 | 2679 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2634 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2680 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2681 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2635 | 2682 | }, |
|---|
| 2636 | 2683 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2637 | 2684 | .maxauthsize = MD5_DIGEST_SIZE, |
|---|
| 2685 | + .setkey = aead_des3_setkey, |
|---|
| 2638 | 2686 | }, |
|---|
| 2639 | 2687 | .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP | |
|---|
| 2640 | 2688 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2653 | 2701 | .cra_driver_name = "authenc-hmac-md5-" |
|---|
| 2654 | 2702 | "cbc-3des-talitos-hsna", |
|---|
| 2655 | 2703 | .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2656 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2704 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2705 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2657 | 2706 | }, |
|---|
| 2658 | 2707 | .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2659 | 2708 | .maxauthsize = MD5_DIGEST_SIZE, |
|---|
| 2709 | + .setkey = aead_des3_setkey, |
|---|
| 2660 | 2710 | }, |
|---|
| 2661 | 2711 | .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU | |
|---|
| 2662 | 2712 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2667 | 2717 | DESC_HDR_MODE1_MDEU_PAD | |
|---|
| 2668 | 2718 | DESC_HDR_MODE1_MDEU_MD5_HMAC, |
|---|
| 2669 | 2719 | }, |
|---|
| 2670 | | - /* ABLKCIPHER algorithms. */ |
|---|
| 2671 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2672 | | - .alg.crypto = { |
|---|
| 2673 | | - .cra_name = "ecb(aes)", |
|---|
| 2674 | | - .cra_driver_name = "ecb-aes-talitos", |
|---|
| 2675 | | - .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2676 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2677 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2678 | | - .cra_ablkcipher = { |
|---|
| 2679 | | - .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2680 | | - .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2681 | | - } |
|---|
| 2720 | + /* SKCIPHER algorithms. */ |
|---|
| 2721 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2722 | + .alg.skcipher = { |
|---|
| 2723 | + .base.cra_name = "ecb(aes)", |
|---|
| 2724 | + .base.cra_driver_name = "ecb-aes-talitos", |
|---|
| 2725 | + .base.cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2726 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2727 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2728 | + .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2729 | + .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2730 | + .setkey = skcipher_aes_setkey, |
|---|
| 2682 | 2731 | }, |
|---|
| 2683 | 2732 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2684 | 2733 | DESC_HDR_SEL0_AESU, |
|---|
| 2685 | 2734 | }, |
|---|
| 2686 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2687 | | - .alg.crypto = { |
|---|
| 2688 | | - .cra_name = "cbc(aes)", |
|---|
| 2689 | | - .cra_driver_name = "cbc-aes-talitos", |
|---|
| 2690 | | - .cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2691 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2692 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2693 | | - .cra_ablkcipher = { |
|---|
| 2694 | | - .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2695 | | - .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2696 | | - .ivsize = AES_BLOCK_SIZE, |
|---|
| 2697 | | - .setkey = ablkcipher_aes_setkey, |
|---|
| 2698 | | - } |
|---|
| 2735 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2736 | + .alg.skcipher = { |
|---|
| 2737 | + .base.cra_name = "cbc(aes)", |
|---|
| 2738 | + .base.cra_driver_name = "cbc-aes-talitos", |
|---|
| 2739 | + .base.cra_blocksize = AES_BLOCK_SIZE, |
|---|
| 2740 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2741 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2742 | + .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2743 | + .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2744 | + .ivsize = AES_BLOCK_SIZE, |
|---|
| 2745 | + .setkey = skcipher_aes_setkey, |
|---|
| 2699 | 2746 | }, |
|---|
| 2700 | 2747 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2701 | 2748 | DESC_HDR_SEL0_AESU | |
|---|
| 2702 | 2749 | DESC_HDR_MODE0_AESU_CBC, |
|---|
| 2703 | 2750 | }, |
|---|
| 2704 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2705 | | - .alg.crypto = { |
|---|
| 2706 | | - .cra_name = "ctr(aes)", |
|---|
| 2707 | | - .cra_driver_name = "ctr-aes-talitos", |
|---|
| 2708 | | - .cra_blocksize = 1, |
|---|
| 2709 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2710 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2711 | | - .cra_ablkcipher = { |
|---|
| 2712 | | - .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2713 | | - .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2714 | | - .ivsize = AES_BLOCK_SIZE, |
|---|
| 2715 | | - .setkey = ablkcipher_aes_setkey, |
|---|
| 2716 | | - } |
|---|
| 2751 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2752 | + .alg.skcipher = { |
|---|
| 2753 | + .base.cra_name = "ctr(aes)", |
|---|
| 2754 | + .base.cra_driver_name = "ctr-aes-talitos", |
|---|
| 2755 | + .base.cra_blocksize = 1, |
|---|
| 2756 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2757 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2758 | + .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2759 | + .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2760 | + .ivsize = AES_BLOCK_SIZE, |
|---|
| 2761 | + .setkey = skcipher_aes_setkey, |
|---|
| 2717 | 2762 | }, |
|---|
| 2718 | 2763 | .desc_hdr_template = DESC_HDR_TYPE_AESU_CTR_NONSNOOP | |
|---|
| 2719 | 2764 | DESC_HDR_SEL0_AESU | |
|---|
| 2720 | 2765 | DESC_HDR_MODE0_AESU_CTR, |
|---|
| 2721 | 2766 | }, |
|---|
| 2722 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2723 | | - .alg.crypto = { |
|---|
| 2724 | | - .cra_name = "ecb(des)", |
|---|
| 2725 | | - .cra_driver_name = "ecb-des-talitos", |
|---|
| 2726 | | - .cra_blocksize = DES_BLOCK_SIZE, |
|---|
| 2727 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2728 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2729 | | - .cra_ablkcipher = { |
|---|
| 2730 | | - .min_keysize = DES_KEY_SIZE, |
|---|
| 2731 | | - .max_keysize = DES_KEY_SIZE, |
|---|
| 2732 | | - .ivsize = DES_BLOCK_SIZE, |
|---|
| 2733 | | - } |
|---|
| 2767 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2768 | + .alg.skcipher = { |
|---|
| 2769 | + .base.cra_name = "ctr(aes)", |
|---|
| 2770 | + .base.cra_driver_name = "ctr-aes-talitos", |
|---|
| 2771 | + .base.cra_blocksize = 1, |
|---|
| 2772 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2773 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2774 | + .min_keysize = AES_MIN_KEY_SIZE, |
|---|
| 2775 | + .max_keysize = AES_MAX_KEY_SIZE, |
|---|
| 2776 | + .ivsize = AES_BLOCK_SIZE, |
|---|
| 2777 | + .setkey = skcipher_aes_setkey, |
|---|
| 2778 | + }, |
|---|
| 2779 | + .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2780 | + DESC_HDR_SEL0_AESU | |
|---|
| 2781 | + DESC_HDR_MODE0_AESU_CTR, |
|---|
| 2782 | + }, |
|---|
| 2783 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2784 | + .alg.skcipher = { |
|---|
| 2785 | + .base.cra_name = "ecb(des)", |
|---|
| 2786 | + .base.cra_driver_name = "ecb-des-talitos", |
|---|
| 2787 | + .base.cra_blocksize = DES_BLOCK_SIZE, |
|---|
| 2788 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2789 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2790 | + .min_keysize = DES_KEY_SIZE, |
|---|
| 2791 | + .max_keysize = DES_KEY_SIZE, |
|---|
| 2792 | + .setkey = skcipher_des_setkey, |
|---|
| 2734 | 2793 | }, |
|---|
| 2735 | 2794 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2736 | 2795 | DESC_HDR_SEL0_DEU, |
|---|
| 2737 | 2796 | }, |
|---|
| 2738 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2739 | | - .alg.crypto = { |
|---|
| 2740 | | - .cra_name = "cbc(des)", |
|---|
| 2741 | | - .cra_driver_name = "cbc-des-talitos", |
|---|
| 2742 | | - .cra_blocksize = DES_BLOCK_SIZE, |
|---|
| 2743 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2744 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2745 | | - .cra_ablkcipher = { |
|---|
| 2746 | | - .min_keysize = DES_KEY_SIZE, |
|---|
| 2747 | | - .max_keysize = DES_KEY_SIZE, |
|---|
| 2748 | | - .ivsize = DES_BLOCK_SIZE, |
|---|
| 2749 | | - } |
|---|
| 2797 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2798 | + .alg.skcipher = { |
|---|
| 2799 | + .base.cra_name = "cbc(des)", |
|---|
| 2800 | + .base.cra_driver_name = "cbc-des-talitos", |
|---|
| 2801 | + .base.cra_blocksize = DES_BLOCK_SIZE, |
|---|
| 2802 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2803 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2804 | + .min_keysize = DES_KEY_SIZE, |
|---|
| 2805 | + .max_keysize = DES_KEY_SIZE, |
|---|
| 2806 | + .ivsize = DES_BLOCK_SIZE, |
|---|
| 2807 | + .setkey = skcipher_des_setkey, |
|---|
| 2750 | 2808 | }, |
|---|
| 2751 | 2809 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2752 | 2810 | DESC_HDR_SEL0_DEU | |
|---|
| 2753 | 2811 | DESC_HDR_MODE0_DEU_CBC, |
|---|
| 2754 | 2812 | }, |
|---|
| 2755 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2756 | | - .alg.crypto = { |
|---|
| 2757 | | - .cra_name = "ecb(des3_ede)", |
|---|
| 2758 | | - .cra_driver_name = "ecb-3des-talitos", |
|---|
| 2759 | | - .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2760 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2761 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2762 | | - .cra_ablkcipher = { |
|---|
| 2763 | | - .min_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2764 | | - .max_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2765 | | - .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2766 | | - } |
|---|
| 2813 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2814 | + .alg.skcipher = { |
|---|
| 2815 | + .base.cra_name = "ecb(des3_ede)", |
|---|
| 2816 | + .base.cra_driver_name = "ecb-3des-talitos", |
|---|
| 2817 | + .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2818 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2819 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2820 | + .min_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2821 | + .max_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2822 | + .setkey = skcipher_des3_setkey, |
|---|
| 2767 | 2823 | }, |
|---|
| 2768 | 2824 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2769 | 2825 | DESC_HDR_SEL0_DEU | |
|---|
| 2770 | 2826 | DESC_HDR_MODE0_DEU_3DES, |
|---|
| 2771 | 2827 | }, |
|---|
| 2772 | | - { .type = CRYPTO_ALG_TYPE_ABLKCIPHER, |
|---|
| 2773 | | - .alg.crypto = { |
|---|
| 2774 | | - .cra_name = "cbc(des3_ede)", |
|---|
| 2775 | | - .cra_driver_name = "cbc-3des-talitos", |
|---|
| 2776 | | - .cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2777 | | - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | |
|---|
| 2778 | | - CRYPTO_ALG_ASYNC, |
|---|
| 2779 | | - .cra_ablkcipher = { |
|---|
| 2780 | | - .min_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2781 | | - .max_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2782 | | - .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2783 | | - } |
|---|
| 2828 | + { .type = CRYPTO_ALG_TYPE_SKCIPHER, |
|---|
| 2829 | + .alg.skcipher = { |
|---|
| 2830 | + .base.cra_name = "cbc(des3_ede)", |
|---|
| 2831 | + .base.cra_driver_name = "cbc-3des-talitos", |
|---|
| 2832 | + .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2833 | + .base.cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2834 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2835 | + .min_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2836 | + .max_keysize = DES3_EDE_KEY_SIZE, |
|---|
| 2837 | + .ivsize = DES3_EDE_BLOCK_SIZE, |
|---|
| 2838 | + .setkey = skcipher_des3_setkey, |
|---|
| 2784 | 2839 | }, |
|---|
| 2785 | 2840 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| 2786 | 2841 | DESC_HDR_SEL0_DEU | |
|---|
| .. | .. |
|---|
| 2796 | 2851 | .cra_name = "md5", |
|---|
| 2797 | 2852 | .cra_driver_name = "md5-talitos", |
|---|
| 2798 | 2853 | .cra_blocksize = MD5_HMAC_BLOCK_SIZE, |
|---|
| 2799 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2854 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2855 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2800 | 2856 | } |
|---|
| 2801 | 2857 | }, |
|---|
| 2802 | 2858 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2811 | 2867 | .cra_name = "sha1", |
|---|
| 2812 | 2868 | .cra_driver_name = "sha1-talitos", |
|---|
| 2813 | 2869 | .cra_blocksize = SHA1_BLOCK_SIZE, |
|---|
| 2814 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2870 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2871 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2815 | 2872 | } |
|---|
| 2816 | 2873 | }, |
|---|
| 2817 | 2874 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2826 | 2883 | .cra_name = "sha224", |
|---|
| 2827 | 2884 | .cra_driver_name = "sha224-talitos", |
|---|
| 2828 | 2885 | .cra_blocksize = SHA224_BLOCK_SIZE, |
|---|
| 2829 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2886 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2887 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2830 | 2888 | } |
|---|
| 2831 | 2889 | }, |
|---|
| 2832 | 2890 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2841 | 2899 | .cra_name = "sha256", |
|---|
| 2842 | 2900 | .cra_driver_name = "sha256-talitos", |
|---|
| 2843 | 2901 | .cra_blocksize = SHA256_BLOCK_SIZE, |
|---|
| 2844 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2902 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2903 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2845 | 2904 | } |
|---|
| 2846 | 2905 | }, |
|---|
| 2847 | 2906 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2856 | 2915 | .cra_name = "sha384", |
|---|
| 2857 | 2916 | .cra_driver_name = "sha384-talitos", |
|---|
| 2858 | 2917 | .cra_blocksize = SHA384_BLOCK_SIZE, |
|---|
| 2859 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2918 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2919 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2860 | 2920 | } |
|---|
| 2861 | 2921 | }, |
|---|
| 2862 | 2922 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2871 | 2931 | .cra_name = "sha512", |
|---|
| 2872 | 2932 | .cra_driver_name = "sha512-talitos", |
|---|
| 2873 | 2933 | .cra_blocksize = SHA512_BLOCK_SIZE, |
|---|
| 2874 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2934 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2935 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2875 | 2936 | } |
|---|
| 2876 | 2937 | }, |
|---|
| 2877 | 2938 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2886 | 2947 | .cra_name = "hmac(md5)", |
|---|
| 2887 | 2948 | .cra_driver_name = "hmac-md5-talitos", |
|---|
| 2888 | 2949 | .cra_blocksize = MD5_HMAC_BLOCK_SIZE, |
|---|
| 2889 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2950 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2951 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2890 | 2952 | } |
|---|
| 2891 | 2953 | }, |
|---|
| 2892 | 2954 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2901 | 2963 | .cra_name = "hmac(sha1)", |
|---|
| 2902 | 2964 | .cra_driver_name = "hmac-sha1-talitos", |
|---|
| 2903 | 2965 | .cra_blocksize = SHA1_BLOCK_SIZE, |
|---|
| 2904 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2966 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2967 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2905 | 2968 | } |
|---|
| 2906 | 2969 | }, |
|---|
| 2907 | 2970 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2916 | 2979 | .cra_name = "hmac(sha224)", |
|---|
| 2917 | 2980 | .cra_driver_name = "hmac-sha224-talitos", |
|---|
| 2918 | 2981 | .cra_blocksize = SHA224_BLOCK_SIZE, |
|---|
| 2919 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2982 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2983 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2920 | 2984 | } |
|---|
| 2921 | 2985 | }, |
|---|
| 2922 | 2986 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2931 | 2995 | .cra_name = "hmac(sha256)", |
|---|
| 2932 | 2996 | .cra_driver_name = "hmac-sha256-talitos", |
|---|
| 2933 | 2997 | .cra_blocksize = SHA256_BLOCK_SIZE, |
|---|
| 2934 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 2998 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 2999 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2935 | 3000 | } |
|---|
| 2936 | 3001 | }, |
|---|
| 2937 | 3002 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2946 | 3011 | .cra_name = "hmac(sha384)", |
|---|
| 2947 | 3012 | .cra_driver_name = "hmac-sha384-talitos", |
|---|
| 2948 | 3013 | .cra_blocksize = SHA384_BLOCK_SIZE, |
|---|
| 2949 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 3014 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 3015 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2950 | 3016 | } |
|---|
| 2951 | 3017 | }, |
|---|
| 2952 | 3018 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2961 | 3027 | .cra_name = "hmac(sha512)", |
|---|
| 2962 | 3028 | .cra_driver_name = "hmac-sha512-talitos", |
|---|
| 2963 | 3029 | .cra_blocksize = SHA512_BLOCK_SIZE, |
|---|
| 2964 | | - .cra_flags = CRYPTO_ALG_ASYNC, |
|---|
| 3030 | + .cra_flags = CRYPTO_ALG_ASYNC | |
|---|
| 3031 | + CRYPTO_ALG_ALLOCATES_MEMORY, |
|---|
| 2965 | 3032 | } |
|---|
| 2966 | 3033 | }, |
|---|
| 2967 | 3034 | .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | |
|---|
| .. | .. |
|---|
| 2998 | 3065 | return 0; |
|---|
| 2999 | 3066 | } |
|---|
| 3000 | 3067 | |
|---|
| 3001 | | -static int talitos_cra_init(struct crypto_tfm *tfm) |
|---|
| 3002 | | -{ |
|---|
| 3003 | | - struct crypto_alg *alg = tfm->__crt_alg; |
|---|
| 3004 | | - struct talitos_crypto_alg *talitos_alg; |
|---|
| 3005 | | - struct talitos_ctx *ctx = crypto_tfm_ctx(tfm); |
|---|
| 3006 | | - |
|---|
| 3007 | | - if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_AHASH) |
|---|
| 3008 | | - talitos_alg = container_of(__crypto_ahash_alg(alg), |
|---|
| 3009 | | - struct talitos_crypto_alg, |
|---|
| 3010 | | - algt.alg.hash); |
|---|
| 3011 | | - else |
|---|
| 3012 | | - talitos_alg = container_of(alg, struct talitos_crypto_alg, |
|---|
| 3013 | | - algt.alg.crypto); |
|---|
| 3014 | | - |
|---|
| 3015 | | - return talitos_init_common(ctx, talitos_alg); |
|---|
| 3016 | | -} |
|---|
| 3017 | | - |
|---|
| 3018 | 3068 | static int talitos_cra_init_aead(struct crypto_aead *tfm) |
|---|
| 3019 | 3069 | { |
|---|
| 3020 | 3070 | struct aead_alg *alg = crypto_aead_alg(tfm); |
|---|
| .. | .. |
|---|
| 3027 | 3077 | return talitos_init_common(ctx, talitos_alg); |
|---|
| 3028 | 3078 | } |
|---|
| 3029 | 3079 | |
|---|
| 3080 | +static int talitos_cra_init_skcipher(struct crypto_skcipher *tfm) |
|---|
| 3081 | +{ |
|---|
| 3082 | + struct skcipher_alg *alg = crypto_skcipher_alg(tfm); |
|---|
| 3083 | + struct talitos_crypto_alg *talitos_alg; |
|---|
| 3084 | + struct talitos_ctx *ctx = crypto_skcipher_ctx(tfm); |
|---|
| 3085 | + |
|---|
| 3086 | + talitos_alg = container_of(alg, struct talitos_crypto_alg, |
|---|
| 3087 | + algt.alg.skcipher); |
|---|
| 3088 | + |
|---|
| 3089 | + return talitos_init_common(ctx, talitos_alg); |
|---|
| 3090 | +} |
|---|
| 3091 | + |
|---|
| 3030 | 3092 | static int talitos_cra_init_ahash(struct crypto_tfm *tfm) |
|---|
| 3031 | 3093 | { |
|---|
| 3094 | + struct crypto_alg *alg = tfm->__crt_alg; |
|---|
| 3095 | + struct talitos_crypto_alg *talitos_alg; |
|---|
| 3032 | 3096 | struct talitos_ctx *ctx = crypto_tfm_ctx(tfm); |
|---|
| 3033 | 3097 | |
|---|
| 3034 | | - talitos_cra_init(tfm); |
|---|
| 3098 | + talitos_alg = container_of(__crypto_ahash_alg(alg), |
|---|
| 3099 | + struct talitos_crypto_alg, |
|---|
| 3100 | + algt.alg.hash); |
|---|
| 3035 | 3101 | |
|---|
| 3036 | 3102 | ctx->keylen = 0; |
|---|
| 3037 | 3103 | crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm), |
|---|
| 3038 | 3104 | sizeof(struct talitos_ahash_req_ctx)); |
|---|
| 3039 | 3105 | |
|---|
| 3040 | | - return 0; |
|---|
| 3106 | + return talitos_init_common(ctx, talitos_alg); |
|---|
| 3041 | 3107 | } |
|---|
| 3042 | 3108 | |
|---|
| 3043 | 3109 | static void talitos_cra_exit(struct crypto_tfm *tfm) |
|---|
| .. | .. |
|---|
| 3078 | 3144 | |
|---|
| 3079 | 3145 | list_for_each_entry_safe(t_alg, n, &priv->alg_list, entry) { |
|---|
| 3080 | 3146 | switch (t_alg->algt.type) { |
|---|
| 3081 | | - case CRYPTO_ALG_TYPE_ABLKCIPHER: |
|---|
| 3147 | + case CRYPTO_ALG_TYPE_SKCIPHER: |
|---|
| 3148 | + crypto_unregister_skcipher(&t_alg->algt.alg.skcipher); |
|---|
| 3082 | 3149 | break; |
|---|
| 3083 | 3150 | case CRYPTO_ALG_TYPE_AEAD: |
|---|
| 3084 | 3151 | crypto_unregister_aead(&t_alg->algt.alg.aead); |
|---|
| .. | .. |
|---|
| 3122 | 3189 | t_alg->algt = *template; |
|---|
| 3123 | 3190 | |
|---|
| 3124 | 3191 | switch (t_alg->algt.type) { |
|---|
| 3125 | | - case CRYPTO_ALG_TYPE_ABLKCIPHER: |
|---|
| 3126 | | - alg = &t_alg->algt.alg.crypto; |
|---|
| 3127 | | - alg->cra_init = talitos_cra_init; |
|---|
| 3192 | + case CRYPTO_ALG_TYPE_SKCIPHER: |
|---|
| 3193 | + alg = &t_alg->algt.alg.skcipher.base; |
|---|
| 3128 | 3194 | alg->cra_exit = talitos_cra_exit; |
|---|
| 3129 | | - alg->cra_type = &crypto_ablkcipher_type; |
|---|
| 3130 | | - alg->cra_ablkcipher.setkey = ablkcipher_setkey; |
|---|
| 3131 | | - alg->cra_ablkcipher.encrypt = ablkcipher_encrypt; |
|---|
| 3132 | | - alg->cra_ablkcipher.decrypt = ablkcipher_decrypt; |
|---|
| 3133 | | - alg->cra_ablkcipher.geniv = "eseqiv"; |
|---|
| 3195 | + t_alg->algt.alg.skcipher.init = talitos_cra_init_skcipher; |
|---|
| 3196 | + t_alg->algt.alg.skcipher.setkey = |
|---|
| 3197 | + t_alg->algt.alg.skcipher.setkey ?: skcipher_setkey; |
|---|
| 3198 | + t_alg->algt.alg.skcipher.encrypt = skcipher_encrypt; |
|---|
| 3199 | + t_alg->algt.alg.skcipher.decrypt = skcipher_decrypt; |
|---|
| 3200 | + if (!strcmp(alg->cra_name, "ctr(aes)") && !has_ftr_sec1(priv) && |
|---|
| 3201 | + DESC_TYPE(t_alg->algt.desc_hdr_template) != |
|---|
| 3202 | + DESC_TYPE(DESC_HDR_TYPE_AESU_CTR_NONSNOOP)) { |
|---|
| 3203 | + devm_kfree(dev, t_alg); |
|---|
| 3204 | + return ERR_PTR(-ENOTSUPP); |
|---|
| 3205 | + } |
|---|
| 3134 | 3206 | break; |
|---|
| 3135 | 3207 | case CRYPTO_ALG_TYPE_AEAD: |
|---|
| 3136 | 3208 | alg = &t_alg->algt.alg.aead.base; |
|---|
| 3137 | 3209 | alg->cra_exit = talitos_cra_exit; |
|---|
| 3138 | 3210 | t_alg->algt.alg.aead.init = talitos_cra_init_aead; |
|---|
| 3139 | | - t_alg->algt.alg.aead.setkey = aead_setkey; |
|---|
| 3211 | + t_alg->algt.alg.aead.setkey = t_alg->algt.alg.aead.setkey ?: |
|---|
| 3212 | + aead_setkey; |
|---|
| 3140 | 3213 | t_alg->algt.alg.aead.encrypt = aead_encrypt; |
|---|
| 3141 | 3214 | t_alg->algt.alg.aead.decrypt = aead_decrypt; |
|---|
| 3142 | 3215 | if (!(priv->features & TALITOS_FTR_SHA224_HWINIT) && |
|---|
| .. | .. |
|---|
| 3336 | 3409 | if (err) |
|---|
| 3337 | 3410 | goto err_out; |
|---|
| 3338 | 3411 | |
|---|
| 3339 | | - if (of_device_is_compatible(np, "fsl,sec1.0")) { |
|---|
| 3412 | + if (has_ftr_sec1(priv)) { |
|---|
| 3340 | 3413 | if (priv->num_channels == 1) |
|---|
| 3341 | 3414 | tasklet_init(&priv->done_task[0], talitos1_done_ch0, |
|---|
| 3342 | 3415 | (unsigned long)dev); |
|---|
| .. | .. |
|---|
| 3426 | 3499 | } |
|---|
| 3427 | 3500 | |
|---|
| 3428 | 3501 | switch (t_alg->algt.type) { |
|---|
| 3429 | | - case CRYPTO_ALG_TYPE_ABLKCIPHER: |
|---|
| 3430 | | - err = crypto_register_alg( |
|---|
| 3431 | | - &t_alg->algt.alg.crypto); |
|---|
| 3432 | | - alg = &t_alg->algt.alg.crypto; |
|---|
| 3502 | + case CRYPTO_ALG_TYPE_SKCIPHER: |
|---|
| 3503 | + err = crypto_register_skcipher( |
|---|
| 3504 | + &t_alg->algt.alg.skcipher); |
|---|
| 3505 | + alg = &t_alg->algt.alg.skcipher.base; |
|---|
| 3433 | 3506 | break; |
|---|
| 3434 | 3507 | |
|---|
| 3435 | 3508 | case CRYPTO_ALG_TYPE_AEAD: |
|---|