4dcf1ac72623ca66054146cf37ced9d685f0084b
[openwrt/staging/jow.git] / target / linux / ipq40xx / patches-5.4 / 0009-v5.6-crypto-qce-fix-xts-aes-qce-key-sizes.patch
1 From 7de4c2bd196f111e39cc60f6197654aff23ba2b4 Mon Sep 17 00:00:00 2001
2 From: Eneas U de Queiroz <cotequeiroz@gmail.com>
3 Date: Fri, 20 Dec 2019 16:02:14 -0300
4 Subject: [PATCH 03/11] crypto: qce - fix xts-aes-qce key sizes
5
6 XTS-mode uses two keys, so the keysizes should be doubled in
7 skcipher_def, and halved when checking if it is AES-128/192/256.
8
9 Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
10 Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
11 ---
12 drivers/crypto/qce/skcipher.c | 13 ++++++++-----
13 1 file changed, 8 insertions(+), 5 deletions(-)
14
15 --- a/drivers/crypto/qce/skcipher.c
16 +++ b/drivers/crypto/qce/skcipher.c
17 @@ -154,12 +154,13 @@ static int qce_skcipher_setkey(struct cr
18 {
19 struct crypto_tfm *tfm = crypto_skcipher_tfm(ablk);
20 struct qce_cipher_ctx *ctx = crypto_tfm_ctx(tfm);
21 + unsigned long flags = to_cipher_tmpl(ablk)->alg_flags;
22 int ret;
23
24 if (!key || !keylen)
25 return -EINVAL;
26
27 - switch (keylen) {
28 + switch (IS_XTS(flags) ? keylen >> 1 : keylen) {
29 case AES_KEYSIZE_128:
30 case AES_KEYSIZE_256:
31 break;
32 @@ -213,13 +214,15 @@ static int qce_skcipher_crypt(struct skc
33 struct qce_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
34 struct qce_cipher_reqctx *rctx = skcipher_request_ctx(req);
35 struct qce_alg_template *tmpl = to_cipher_tmpl(tfm);
36 + int keylen;
37 int ret;
38
39 rctx->flags = tmpl->alg_flags;
40 rctx->flags |= encrypt ? QCE_ENCRYPT : QCE_DECRYPT;
41 + keylen = IS_XTS(rctx->flags) ? ctx->enc_keylen >> 1 : ctx->enc_keylen;
42
43 - if (IS_AES(rctx->flags) && ctx->enc_keylen != AES_KEYSIZE_128 &&
44 - ctx->enc_keylen != AES_KEYSIZE_256) {
45 + if (IS_AES(rctx->flags) && keylen != AES_KEYSIZE_128 &&
46 + keylen != AES_KEYSIZE_256) {
47 SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, ctx->fallback);
48
49 skcipher_request_set_sync_tfm(subreq, ctx->fallback);
50 @@ -311,8 +314,8 @@ static const struct qce_skcipher_def skc
51 .drv_name = "xts-aes-qce",
52 .blocksize = AES_BLOCK_SIZE,
53 .ivsize = AES_BLOCK_SIZE,
54 - .min_keysize = AES_MIN_KEY_SIZE,
55 - .max_keysize = AES_MAX_KEY_SIZE,
56 + .min_keysize = AES_MIN_KEY_SIZE * 2,
57 + .max_keysize = AES_MAX_KEY_SIZE * 2,
58 },
59 {
60 .flags = QCE_ALG_DES | QCE_MODE_ECB,