hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/crypto/talitos.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * talitos - Freescale Integrated Security Engine (SEC) device driver
34 *
....@@ -9,20 +10,6 @@
910 * Crypto algorithm registration code copied from hifn driver:
1011 * 2007+ Copyright (c) Evgeniy Polyakov <johnpol@2ka.mipt.ru>
1112 * 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
2613 */
2714
2815 #include <linux/kernel.h>
....@@ -43,12 +30,12 @@
4330
4431 #include <crypto/algapi.h>
4532 #include <crypto/aes.h>
46
-#include <crypto/des.h>
33
+#include <crypto/internal/des.h>
4734 #include <crypto/sha.h>
4835 #include <crypto/md5.h>
4936 #include <crypto/internal/aead.h>
5037 #include <crypto/authenc.h>
51
-#include <crypto/skcipher.h>
38
+#include <crypto/internal/skcipher.h>
5239 #include <crypto/hash.h>
5340 #include <crypto/internal/hash.h>
5441 #include <crypto/scatterwalk.h>
....@@ -278,11 +265,11 @@
278265 * callback must check err and feedback in descriptor header
279266 * for device processing status.
280267 */
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)
286273 {
287274 struct talitos_private *priv = dev_get_drvdata(dev);
288275 struct talitos_request *request;
....@@ -332,7 +319,6 @@
332319
333320 return -EINPROGRESS;
334321 }
335
-EXPORT_SYMBOL(talitos_submit);
336322
337323 static __be32 get_request_hdr(struct talitos_request *request, bool is_sec1)
338324 {
....@@ -820,10 +806,10 @@
820806 struct talitos_private *priv = dev_get_drvdata(dev);
821807 int err;
822808
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;
827813 priv->rng.priv = (unsigned long)dev;
828814
829815 err = hwrng_register(&priv->rng);
....@@ -928,9 +914,45 @@
928914 return 0;
929915
930916 badkey:
931
- crypto_aead_set_flags(authenc, CRYPTO_TFM_RES_BAD_KEY_LEN);
932917 memzero_explicit(&keys, sizeof(keys));
933918 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;
934956 }
935957
936958 static void talitos_sg_unmap(struct device *dev,
....@@ -1253,9 +1275,6 @@
12531275 is_ipsec_esp && !encrypt, 1);
12541276 tbl_off += ret;
12551277
1256
- /* ICV data */
1257
- edesc->icv_ool = !encrypt;
1258
-
12591278 if (!encrypt && is_ipsec_esp) {
12601279 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];
12611280
....@@ -1468,24 +1487,11 @@
14681487 return ipsec_esp(edesc, req, false, ipsec_esp_decrypt_swauth_done);
14691488 }
14701489
1471
-static int ablkcipher_setkey(struct crypto_ablkcipher *cipher,
1490
+static int skcipher_setkey(struct crypto_skcipher *cipher,
14721491 const u8 *key, unsigned int keylen)
14731492 {
1474
- struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher);
1493
+ struct talitos_ctx *ctx = crypto_skcipher_ctx(cipher);
14751494 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
- }
14891495
14901496 if (ctx->keylen)
14911497 dma_unmap_single(dev, ctx->dma_key, ctx->keylen, DMA_TO_DEVICE);
....@@ -1498,25 +1504,37 @@
14981504 return 0;
14991505 }
15001506
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,
15021522 const u8 *key, unsigned int keylen)
15031523 {
15041524 if (keylen == AES_KEYSIZE_128 || keylen == AES_KEYSIZE_192 ||
15051525 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);
15091527
15101528 return -EINVAL;
15111529 }
15121530
15131531 static void common_nonsnoop_unmap(struct device *dev,
15141532 struct talitos_edesc *edesc,
1515
- struct ablkcipher_request *areq)
1533
+ struct skcipher_request *areq)
15161534 {
15171535 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE);
15181536
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);
15201538 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1], DMA_TO_DEVICE);
15211539
15221540 if (edesc->dma_len)
....@@ -1524,20 +1542,20 @@
15241542 DMA_BIDIRECTIONAL);
15251543 }
15261544
1527
-static void ablkcipher_done(struct device *dev,
1545
+static void skcipher_done(struct device *dev,
15281546 struct talitos_desc *desc, void *context,
15291547 int err)
15301548 {
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);
15351553 struct talitos_edesc *edesc;
15361554
15371555 edesc = container_of(desc, struct talitos_edesc, desc);
15381556
15391557 common_nonsnoop_unmap(dev, edesc, areq);
1540
- memcpy(areq->info, ctx->iv, ivsize);
1558
+ memcpy(areq->iv, ctx->iv, ivsize);
15411559
15421560 kfree(edesc);
15431561
....@@ -1545,17 +1563,17 @@
15451563 }
15461564
15471565 static int common_nonsnoop(struct talitos_edesc *edesc,
1548
- struct ablkcipher_request *areq,
1566
+ struct skcipher_request *areq,
15491567 void (*callback) (struct device *dev,
15501568 struct talitos_desc *desc,
15511569 void *context, int error))
15521570 {
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);
15551573 struct device *dev = ctx->dev;
15561574 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);
15591577 int sg_count, ret;
15601578 bool sync_needed = false;
15611579 struct talitos_private *priv = dev_get_drvdata(dev);
....@@ -1617,65 +1635,65 @@
16171635 return ret;
16181636 }
16191637
1620
-static struct talitos_edesc *ablkcipher_edesc_alloc(struct ablkcipher_request *
1638
+static struct talitos_edesc *skcipher_edesc_alloc(struct skcipher_request *
16211639 areq, bool encrypt)
16221640 {
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);
16261644
16271645 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,
16291647 areq->base.flags, encrypt);
16301648 }
16311649
1632
-static int ablkcipher_encrypt(struct ablkcipher_request *areq)
1650
+static int skcipher_encrypt(struct skcipher_request *areq)
16331651 {
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);
16361654 struct talitos_edesc *edesc;
16371655 unsigned int blocksize =
1638
- crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(cipher));
1656
+ crypto_tfm_alg_blocksize(crypto_skcipher_tfm(cipher));
16391657
1640
- if (!areq->nbytes)
1658
+ if (!areq->cryptlen)
16411659 return 0;
16421660
1643
- if (areq->nbytes % blocksize)
1661
+ if (areq->cryptlen % blocksize)
16441662 return -EINVAL;
16451663
16461664 /* allocate extended descriptor */
1647
- edesc = ablkcipher_edesc_alloc(areq, true);
1665
+ edesc = skcipher_edesc_alloc(areq, true);
16481666 if (IS_ERR(edesc))
16491667 return PTR_ERR(edesc);
16501668
16511669 /* set encrypt */
16521670 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT;
16531671
1654
- return common_nonsnoop(edesc, areq, ablkcipher_done);
1672
+ return common_nonsnoop(edesc, areq, skcipher_done);
16551673 }
16561674
1657
-static int ablkcipher_decrypt(struct ablkcipher_request *areq)
1675
+static int skcipher_decrypt(struct skcipher_request *areq)
16581676 {
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);
16611679 struct talitos_edesc *edesc;
16621680 unsigned int blocksize =
1663
- crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(cipher));
1681
+ crypto_tfm_alg_blocksize(crypto_skcipher_tfm(cipher));
16641682
1665
- if (!areq->nbytes)
1683
+ if (!areq->cryptlen)
16661684 return 0;
16671685
1668
- if (areq->nbytes % blocksize)
1686
+ if (areq->cryptlen % blocksize)
16691687 return -EINVAL;
16701688
16711689 /* allocate extended descriptor */
1672
- edesc = ablkcipher_edesc_alloc(areq, false);
1690
+ edesc = skcipher_edesc_alloc(areq, false);
16731691 if (IS_ERR(edesc))
16741692 return PTR_ERR(edesc);
16751693
16761694 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_DIR_INBOUND;
16771695
1678
- return common_nonsnoop(edesc, areq, ablkcipher_done);
1696
+ return common_nonsnoop(edesc, areq, skcipher_done);
16791697 }
16801698
16811699 static void common_nonsnoop_hash_unmap(struct device *dev,
....@@ -1683,6 +1701,7 @@
16831701 struct ahash_request *areq)
16841702 {
16851703 struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq);
1704
+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
16861705 struct talitos_private *priv = dev_get_drvdata(dev);
16871706 bool is_sec1 = has_ftr_sec1(priv);
16881707 struct talitos_desc *desc = &edesc->desc;
....@@ -1693,6 +1712,9 @@
16931712 if (desc->next_desc &&
16941713 desc->ptr[5].ptr != desc2->ptr[5].ptr)
16951714 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));
16961718
16971719 if (req_ctx->psrc)
16981720 talitos_sg_unmap(dev, edesc, req_ctx->psrc, NULL, 0, 0);
....@@ -1824,7 +1846,7 @@
18241846 if (req_ctx->last)
18251847 map_single_talitos_ptr(dev, &desc->ptr[5],
18261848 crypto_ahash_digestsize(tfm),
1827
- areq->result, DMA_FROM_DEVICE);
1849
+ req_ctx->hw_context, DMA_FROM_DEVICE);
18281850 else
18291851 map_single_talitos_ptr_nosync(dev, &desc->ptr[5],
18301852 req_ctx->hw_context_size,
....@@ -2209,10 +2231,8 @@
22092231 /* Must get the hash of the long key */
22102232 ret = keyhash(tfm, key, keylen, hash);
22112233
2212
- if (ret) {
2213
- crypto_ahash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
2234
+ if (ret)
22142235 return -EINVAL;
2215
- }
22162236
22172237 keysize = digestsize;
22182238 memcpy(ctx->key, hash, digestsize);
....@@ -2232,7 +2252,7 @@
22322252 u32 type;
22332253 u32 priority;
22342254 union {
2235
- struct crypto_alg crypto;
2255
+ struct skcipher_alg skcipher;
22362256 struct ahash_alg hash;
22372257 struct aead_alg aead;
22382258 } alg;
....@@ -2248,7 +2268,8 @@
22482268 .cra_driver_name = "authenc-hmac-sha1-"
22492269 "cbc-aes-talitos",
22502270 .cra_blocksize = AES_BLOCK_SIZE,
2251
- .cra_flags = CRYPTO_ALG_ASYNC,
2271
+ .cra_flags = CRYPTO_ALG_ASYNC |
2272
+ CRYPTO_ALG_ALLOCATES_MEMORY,
22522273 },
22532274 .ivsize = AES_BLOCK_SIZE,
22542275 .maxauthsize = SHA1_DIGEST_SIZE,
....@@ -2269,7 +2290,8 @@
22692290 .cra_driver_name = "authenc-hmac-sha1-"
22702291 "cbc-aes-talitos-hsna",
22712292 .cra_blocksize = AES_BLOCK_SIZE,
2272
- .cra_flags = CRYPTO_ALG_ASYNC,
2293
+ .cra_flags = CRYPTO_ALG_ASYNC |
2294
+ CRYPTO_ALG_ALLOCATES_MEMORY,
22732295 },
22742296 .ivsize = AES_BLOCK_SIZE,
22752297 .maxauthsize = SHA1_DIGEST_SIZE,
....@@ -2290,10 +2312,12 @@
22902312 .cra_driver_name = "authenc-hmac-sha1-"
22912313 "cbc-3des-talitos",
22922314 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2293
- .cra_flags = CRYPTO_ALG_ASYNC,
2315
+ .cra_flags = CRYPTO_ALG_ASYNC |
2316
+ CRYPTO_ALG_ALLOCATES_MEMORY,
22942317 },
22952318 .ivsize = DES3_EDE_BLOCK_SIZE,
22962319 .maxauthsize = SHA1_DIGEST_SIZE,
2320
+ .setkey = aead_des3_setkey,
22972321 },
22982322 .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP |
22992323 DESC_HDR_SEL0_DEU |
....@@ -2313,10 +2337,12 @@
23132337 .cra_driver_name = "authenc-hmac-sha1-"
23142338 "cbc-3des-talitos-hsna",
23152339 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2316
- .cra_flags = CRYPTO_ALG_ASYNC,
2340
+ .cra_flags = CRYPTO_ALG_ASYNC |
2341
+ CRYPTO_ALG_ALLOCATES_MEMORY,
23172342 },
23182343 .ivsize = DES3_EDE_BLOCK_SIZE,
23192344 .maxauthsize = SHA1_DIGEST_SIZE,
2345
+ .setkey = aead_des3_setkey,
23202346 },
23212347 .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU |
23222348 DESC_HDR_SEL0_DEU |
....@@ -2334,7 +2360,8 @@
23342360 .cra_driver_name = "authenc-hmac-sha224-"
23352361 "cbc-aes-talitos",
23362362 .cra_blocksize = AES_BLOCK_SIZE,
2337
- .cra_flags = CRYPTO_ALG_ASYNC,
2363
+ .cra_flags = CRYPTO_ALG_ASYNC |
2364
+ CRYPTO_ALG_ALLOCATES_MEMORY,
23382365 },
23392366 .ivsize = AES_BLOCK_SIZE,
23402367 .maxauthsize = SHA224_DIGEST_SIZE,
....@@ -2355,7 +2382,8 @@
23552382 .cra_driver_name = "authenc-hmac-sha224-"
23562383 "cbc-aes-talitos-hsna",
23572384 .cra_blocksize = AES_BLOCK_SIZE,
2358
- .cra_flags = CRYPTO_ALG_ASYNC,
2385
+ .cra_flags = CRYPTO_ALG_ASYNC |
2386
+ CRYPTO_ALG_ALLOCATES_MEMORY,
23592387 },
23602388 .ivsize = AES_BLOCK_SIZE,
23612389 .maxauthsize = SHA224_DIGEST_SIZE,
....@@ -2376,10 +2404,12 @@
23762404 .cra_driver_name = "authenc-hmac-sha224-"
23772405 "cbc-3des-talitos",
23782406 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2379
- .cra_flags = CRYPTO_ALG_ASYNC,
2407
+ .cra_flags = CRYPTO_ALG_ASYNC |
2408
+ CRYPTO_ALG_ALLOCATES_MEMORY,
23802409 },
23812410 .ivsize = DES3_EDE_BLOCK_SIZE,
23822411 .maxauthsize = SHA224_DIGEST_SIZE,
2412
+ .setkey = aead_des3_setkey,
23832413 },
23842414 .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP |
23852415 DESC_HDR_SEL0_DEU |
....@@ -2399,10 +2429,12 @@
23992429 .cra_driver_name = "authenc-hmac-sha224-"
24002430 "cbc-3des-talitos-hsna",
24012431 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2402
- .cra_flags = CRYPTO_ALG_ASYNC,
2432
+ .cra_flags = CRYPTO_ALG_ASYNC |
2433
+ CRYPTO_ALG_ALLOCATES_MEMORY,
24032434 },
24042435 .ivsize = DES3_EDE_BLOCK_SIZE,
24052436 .maxauthsize = SHA224_DIGEST_SIZE,
2437
+ .setkey = aead_des3_setkey,
24062438 },
24072439 .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU |
24082440 DESC_HDR_SEL0_DEU |
....@@ -2420,7 +2452,8 @@
24202452 .cra_driver_name = "authenc-hmac-sha256-"
24212453 "cbc-aes-talitos",
24222454 .cra_blocksize = AES_BLOCK_SIZE,
2423
- .cra_flags = CRYPTO_ALG_ASYNC,
2455
+ .cra_flags = CRYPTO_ALG_ASYNC |
2456
+ CRYPTO_ALG_ALLOCATES_MEMORY,
24242457 },
24252458 .ivsize = AES_BLOCK_SIZE,
24262459 .maxauthsize = SHA256_DIGEST_SIZE,
....@@ -2441,7 +2474,8 @@
24412474 .cra_driver_name = "authenc-hmac-sha256-"
24422475 "cbc-aes-talitos-hsna",
24432476 .cra_blocksize = AES_BLOCK_SIZE,
2444
- .cra_flags = CRYPTO_ALG_ASYNC,
2477
+ .cra_flags = CRYPTO_ALG_ASYNC |
2478
+ CRYPTO_ALG_ALLOCATES_MEMORY,
24452479 },
24462480 .ivsize = AES_BLOCK_SIZE,
24472481 .maxauthsize = SHA256_DIGEST_SIZE,
....@@ -2462,10 +2496,12 @@
24622496 .cra_driver_name = "authenc-hmac-sha256-"
24632497 "cbc-3des-talitos",
24642498 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2465
- .cra_flags = CRYPTO_ALG_ASYNC,
2499
+ .cra_flags = CRYPTO_ALG_ASYNC |
2500
+ CRYPTO_ALG_ALLOCATES_MEMORY,
24662501 },
24672502 .ivsize = DES3_EDE_BLOCK_SIZE,
24682503 .maxauthsize = SHA256_DIGEST_SIZE,
2504
+ .setkey = aead_des3_setkey,
24692505 },
24702506 .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP |
24712507 DESC_HDR_SEL0_DEU |
....@@ -2485,10 +2521,12 @@
24852521 .cra_driver_name = "authenc-hmac-sha256-"
24862522 "cbc-3des-talitos-hsna",
24872523 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2488
- .cra_flags = CRYPTO_ALG_ASYNC,
2524
+ .cra_flags = CRYPTO_ALG_ASYNC |
2525
+ CRYPTO_ALG_ALLOCATES_MEMORY,
24892526 },
24902527 .ivsize = DES3_EDE_BLOCK_SIZE,
24912528 .maxauthsize = SHA256_DIGEST_SIZE,
2529
+ .setkey = aead_des3_setkey,
24922530 },
24932531 .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU |
24942532 DESC_HDR_SEL0_DEU |
....@@ -2506,7 +2544,8 @@
25062544 .cra_driver_name = "authenc-hmac-sha384-"
25072545 "cbc-aes-talitos",
25082546 .cra_blocksize = AES_BLOCK_SIZE,
2509
- .cra_flags = CRYPTO_ALG_ASYNC,
2547
+ .cra_flags = CRYPTO_ALG_ASYNC |
2548
+ CRYPTO_ALG_ALLOCATES_MEMORY,
25102549 },
25112550 .ivsize = AES_BLOCK_SIZE,
25122551 .maxauthsize = SHA384_DIGEST_SIZE,
....@@ -2527,10 +2566,12 @@
25272566 .cra_driver_name = "authenc-hmac-sha384-"
25282567 "cbc-3des-talitos",
25292568 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2530
- .cra_flags = CRYPTO_ALG_ASYNC,
2569
+ .cra_flags = CRYPTO_ALG_ASYNC |
2570
+ CRYPTO_ALG_ALLOCATES_MEMORY,
25312571 },
25322572 .ivsize = DES3_EDE_BLOCK_SIZE,
25332573 .maxauthsize = SHA384_DIGEST_SIZE,
2574
+ .setkey = aead_des3_setkey,
25342575 },
25352576 .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP |
25362577 DESC_HDR_SEL0_DEU |
....@@ -2548,7 +2589,8 @@
25482589 .cra_driver_name = "authenc-hmac-sha512-"
25492590 "cbc-aes-talitos",
25502591 .cra_blocksize = AES_BLOCK_SIZE,
2551
- .cra_flags = CRYPTO_ALG_ASYNC,
2592
+ .cra_flags = CRYPTO_ALG_ASYNC |
2593
+ CRYPTO_ALG_ALLOCATES_MEMORY,
25522594 },
25532595 .ivsize = AES_BLOCK_SIZE,
25542596 .maxauthsize = SHA512_DIGEST_SIZE,
....@@ -2569,10 +2611,12 @@
25692611 .cra_driver_name = "authenc-hmac-sha512-"
25702612 "cbc-3des-talitos",
25712613 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2572
- .cra_flags = CRYPTO_ALG_ASYNC,
2614
+ .cra_flags = CRYPTO_ALG_ASYNC |
2615
+ CRYPTO_ALG_ALLOCATES_MEMORY,
25732616 },
25742617 .ivsize = DES3_EDE_BLOCK_SIZE,
25752618 .maxauthsize = SHA512_DIGEST_SIZE,
2619
+ .setkey = aead_des3_setkey,
25762620 },
25772621 .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP |
25782622 DESC_HDR_SEL0_DEU |
....@@ -2590,7 +2634,8 @@
25902634 .cra_driver_name = "authenc-hmac-md5-"
25912635 "cbc-aes-talitos",
25922636 .cra_blocksize = AES_BLOCK_SIZE,
2593
- .cra_flags = CRYPTO_ALG_ASYNC,
2637
+ .cra_flags = CRYPTO_ALG_ASYNC |
2638
+ CRYPTO_ALG_ALLOCATES_MEMORY,
25942639 },
25952640 .ivsize = AES_BLOCK_SIZE,
25962641 .maxauthsize = MD5_DIGEST_SIZE,
....@@ -2611,7 +2656,8 @@
26112656 .cra_driver_name = "authenc-hmac-md5-"
26122657 "cbc-aes-talitos-hsna",
26132658 .cra_blocksize = AES_BLOCK_SIZE,
2614
- .cra_flags = CRYPTO_ALG_ASYNC,
2659
+ .cra_flags = CRYPTO_ALG_ASYNC |
2660
+ CRYPTO_ALG_ALLOCATES_MEMORY,
26152661 },
26162662 .ivsize = AES_BLOCK_SIZE,
26172663 .maxauthsize = MD5_DIGEST_SIZE,
....@@ -2631,10 +2677,12 @@
26312677 .cra_driver_name = "authenc-hmac-md5-"
26322678 "cbc-3des-talitos",
26332679 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2634
- .cra_flags = CRYPTO_ALG_ASYNC,
2680
+ .cra_flags = CRYPTO_ALG_ASYNC |
2681
+ CRYPTO_ALG_ALLOCATES_MEMORY,
26352682 },
26362683 .ivsize = DES3_EDE_BLOCK_SIZE,
26372684 .maxauthsize = MD5_DIGEST_SIZE,
2685
+ .setkey = aead_des3_setkey,
26382686 },
26392687 .desc_hdr_template = DESC_HDR_TYPE_IPSEC_ESP |
26402688 DESC_HDR_SEL0_DEU |
....@@ -2653,10 +2701,12 @@
26532701 .cra_driver_name = "authenc-hmac-md5-"
26542702 "cbc-3des-talitos-hsna",
26552703 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2656
- .cra_flags = CRYPTO_ALG_ASYNC,
2704
+ .cra_flags = CRYPTO_ALG_ASYNC |
2705
+ CRYPTO_ALG_ALLOCATES_MEMORY,
26572706 },
26582707 .ivsize = DES3_EDE_BLOCK_SIZE,
26592708 .maxauthsize = MD5_DIGEST_SIZE,
2709
+ .setkey = aead_des3_setkey,
26602710 },
26612711 .desc_hdr_template = DESC_HDR_TYPE_HMAC_SNOOP_NO_AFEU |
26622712 DESC_HDR_SEL0_DEU |
....@@ -2667,120 +2717,125 @@
26672717 DESC_HDR_MODE1_MDEU_PAD |
26682718 DESC_HDR_MODE1_MDEU_MD5_HMAC,
26692719 },
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,
26822731 },
26832732 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
26842733 DESC_HDR_SEL0_AESU,
26852734 },
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,
26992746 },
27002747 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
27012748 DESC_HDR_SEL0_AESU |
27022749 DESC_HDR_MODE0_AESU_CBC,
27032750 },
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,
27172762 },
27182763 .desc_hdr_template = DESC_HDR_TYPE_AESU_CTR_NONSNOOP |
27192764 DESC_HDR_SEL0_AESU |
27202765 DESC_HDR_MODE0_AESU_CTR,
27212766 },
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,
27342793 },
27352794 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
27362795 DESC_HDR_SEL0_DEU,
27372796 },
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,
27502808 },
27512809 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
27522810 DESC_HDR_SEL0_DEU |
27532811 DESC_HDR_MODE0_DEU_CBC,
27542812 },
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,
27672823 },
27682824 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
27692825 DESC_HDR_SEL0_DEU |
27702826 DESC_HDR_MODE0_DEU_3DES,
27712827 },
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,
27842839 },
27852840 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
27862841 DESC_HDR_SEL0_DEU |
....@@ -2796,7 +2851,8 @@
27962851 .cra_name = "md5",
27972852 .cra_driver_name = "md5-talitos",
27982853 .cra_blocksize = MD5_HMAC_BLOCK_SIZE,
2799
- .cra_flags = CRYPTO_ALG_ASYNC,
2854
+ .cra_flags = CRYPTO_ALG_ASYNC |
2855
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28002856 }
28012857 },
28022858 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2811,7 +2867,8 @@
28112867 .cra_name = "sha1",
28122868 .cra_driver_name = "sha1-talitos",
28132869 .cra_blocksize = SHA1_BLOCK_SIZE,
2814
- .cra_flags = CRYPTO_ALG_ASYNC,
2870
+ .cra_flags = CRYPTO_ALG_ASYNC |
2871
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28152872 }
28162873 },
28172874 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2826,7 +2883,8 @@
28262883 .cra_name = "sha224",
28272884 .cra_driver_name = "sha224-talitos",
28282885 .cra_blocksize = SHA224_BLOCK_SIZE,
2829
- .cra_flags = CRYPTO_ALG_ASYNC,
2886
+ .cra_flags = CRYPTO_ALG_ASYNC |
2887
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28302888 }
28312889 },
28322890 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2841,7 +2899,8 @@
28412899 .cra_name = "sha256",
28422900 .cra_driver_name = "sha256-talitos",
28432901 .cra_blocksize = SHA256_BLOCK_SIZE,
2844
- .cra_flags = CRYPTO_ALG_ASYNC,
2902
+ .cra_flags = CRYPTO_ALG_ASYNC |
2903
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28452904 }
28462905 },
28472906 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2856,7 +2915,8 @@
28562915 .cra_name = "sha384",
28572916 .cra_driver_name = "sha384-talitos",
28582917 .cra_blocksize = SHA384_BLOCK_SIZE,
2859
- .cra_flags = CRYPTO_ALG_ASYNC,
2918
+ .cra_flags = CRYPTO_ALG_ASYNC |
2919
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28602920 }
28612921 },
28622922 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2871,7 +2931,8 @@
28712931 .cra_name = "sha512",
28722932 .cra_driver_name = "sha512-talitos",
28732933 .cra_blocksize = SHA512_BLOCK_SIZE,
2874
- .cra_flags = CRYPTO_ALG_ASYNC,
2934
+ .cra_flags = CRYPTO_ALG_ASYNC |
2935
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28752936 }
28762937 },
28772938 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2886,7 +2947,8 @@
28862947 .cra_name = "hmac(md5)",
28872948 .cra_driver_name = "hmac-md5-talitos",
28882949 .cra_blocksize = MD5_HMAC_BLOCK_SIZE,
2889
- .cra_flags = CRYPTO_ALG_ASYNC,
2950
+ .cra_flags = CRYPTO_ALG_ASYNC |
2951
+ CRYPTO_ALG_ALLOCATES_MEMORY,
28902952 }
28912953 },
28922954 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2901,7 +2963,8 @@
29012963 .cra_name = "hmac(sha1)",
29022964 .cra_driver_name = "hmac-sha1-talitos",
29032965 .cra_blocksize = SHA1_BLOCK_SIZE,
2904
- .cra_flags = CRYPTO_ALG_ASYNC,
2966
+ .cra_flags = CRYPTO_ALG_ASYNC |
2967
+ CRYPTO_ALG_ALLOCATES_MEMORY,
29052968 }
29062969 },
29072970 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2916,7 +2979,8 @@
29162979 .cra_name = "hmac(sha224)",
29172980 .cra_driver_name = "hmac-sha224-talitos",
29182981 .cra_blocksize = SHA224_BLOCK_SIZE,
2919
- .cra_flags = CRYPTO_ALG_ASYNC,
2982
+ .cra_flags = CRYPTO_ALG_ASYNC |
2983
+ CRYPTO_ALG_ALLOCATES_MEMORY,
29202984 }
29212985 },
29222986 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2931,7 +2995,8 @@
29312995 .cra_name = "hmac(sha256)",
29322996 .cra_driver_name = "hmac-sha256-talitos",
29332997 .cra_blocksize = SHA256_BLOCK_SIZE,
2934
- .cra_flags = CRYPTO_ALG_ASYNC,
2998
+ .cra_flags = CRYPTO_ALG_ASYNC |
2999
+ CRYPTO_ALG_ALLOCATES_MEMORY,
29353000 }
29363001 },
29373002 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2946,7 +3011,8 @@
29463011 .cra_name = "hmac(sha384)",
29473012 .cra_driver_name = "hmac-sha384-talitos",
29483013 .cra_blocksize = SHA384_BLOCK_SIZE,
2949
- .cra_flags = CRYPTO_ALG_ASYNC,
3014
+ .cra_flags = CRYPTO_ALG_ASYNC |
3015
+ CRYPTO_ALG_ALLOCATES_MEMORY,
29503016 }
29513017 },
29523018 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2961,7 +3027,8 @@
29613027 .cra_name = "hmac(sha512)",
29623028 .cra_driver_name = "hmac-sha512-talitos",
29633029 .cra_blocksize = SHA512_BLOCK_SIZE,
2964
- .cra_flags = CRYPTO_ALG_ASYNC,
3030
+ .cra_flags = CRYPTO_ALG_ASYNC |
3031
+ CRYPTO_ALG_ALLOCATES_MEMORY,
29653032 }
29663033 },
29673034 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
....@@ -2998,23 +3065,6 @@
29983065 return 0;
29993066 }
30003067
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
-
30183068 static int talitos_cra_init_aead(struct crypto_aead *tfm)
30193069 {
30203070 struct aead_alg *alg = crypto_aead_alg(tfm);
....@@ -3027,17 +3077,33 @@
30273077 return talitos_init_common(ctx, talitos_alg);
30283078 }
30293079
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
+
30303092 static int talitos_cra_init_ahash(struct crypto_tfm *tfm)
30313093 {
3094
+ struct crypto_alg *alg = tfm->__crt_alg;
3095
+ struct talitos_crypto_alg *talitos_alg;
30323096 struct talitos_ctx *ctx = crypto_tfm_ctx(tfm);
30333097
3034
- talitos_cra_init(tfm);
3098
+ talitos_alg = container_of(__crypto_ahash_alg(alg),
3099
+ struct talitos_crypto_alg,
3100
+ algt.alg.hash);
30353101
30363102 ctx->keylen = 0;
30373103 crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
30383104 sizeof(struct talitos_ahash_req_ctx));
30393105
3040
- return 0;
3106
+ return talitos_init_common(ctx, talitos_alg);
30413107 }
30423108
30433109 static void talitos_cra_exit(struct crypto_tfm *tfm)
....@@ -3078,7 +3144,8 @@
30783144
30793145 list_for_each_entry_safe(t_alg, n, &priv->alg_list, entry) {
30803146 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);
30823149 break;
30833150 case CRYPTO_ALG_TYPE_AEAD:
30843151 crypto_unregister_aead(&t_alg->algt.alg.aead);
....@@ -3122,21 +3189,27 @@
31223189 t_alg->algt = *template;
31233190
31243191 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;
31283194 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
+ }
31343206 break;
31353207 case CRYPTO_ALG_TYPE_AEAD:
31363208 alg = &t_alg->algt.alg.aead.base;
31373209 alg->cra_exit = talitos_cra_exit;
31383210 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;
31403213 t_alg->algt.alg.aead.encrypt = aead_encrypt;
31413214 t_alg->algt.alg.aead.decrypt = aead_decrypt;
31423215 if (!(priv->features & TALITOS_FTR_SHA224_HWINIT) &&
....@@ -3336,7 +3409,7 @@
33363409 if (err)
33373410 goto err_out;
33383411
3339
- if (of_device_is_compatible(np, "fsl,sec1.0")) {
3412
+ if (has_ftr_sec1(priv)) {
33403413 if (priv->num_channels == 1)
33413414 tasklet_init(&priv->done_task[0], talitos1_done_ch0,
33423415 (unsigned long)dev);
....@@ -3426,10 +3499,10 @@
34263499 }
34273500
34283501 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;
34333506 break;
34343507
34353508 case CRYPTO_ALG_TYPE_AEAD: