Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
ce004556 JK |
2 | #ifndef _CRYPTO_XTS_H |
3 | #define _CRYPTO_XTS_H | |
4 | ||
5 | #include <crypto/b128ops.h> | |
f1c131b4 | 6 | #include <crypto/internal/skcipher.h> |
28856a9e | 7 | #include <linux/fips.h> |
ce004556 | 8 | |
ce004556 JK |
9 | #define XTS_BLOCK_SIZE 16 |
10 | ||
f1c131b4 HX |
11 | static inline int xts_verify_key(struct crypto_skcipher *tfm, |
12 | const u8 *key, unsigned int keylen) | |
13 | { | |
14 | /* | |
15 | * key consists of keys of equal size concatenated, therefore | |
16 | * the length must be even. | |
17 | */ | |
674f368a | 18 | if (keylen % 2) |
f1c131b4 | 19 | return -EINVAL; |
f1c131b4 | 20 | |
1c4428b2 NS |
21 | /* |
22 | * In FIPS mode only a combined key length of either 256 or | |
23 | * 512 bits is allowed, c.f. FIPS 140-3 IG C.I. | |
24 | */ | |
25 | if (fips_enabled && keylen != 32 && keylen != 64) | |
26 | return -EINVAL; | |
27 | ||
0ee43367 VD |
28 | /* |
29 | * Ensure that the AES and tweak key are not identical when | |
30 | * in FIPS mode or the FORBID_WEAK_KEYS flag is set. | |
31 | */ | |
231baecd EB |
32 | if ((fips_enabled || (crypto_skcipher_get_flags(tfm) & |
33 | CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) && | |
c4c4db0d | 34 | !crypto_memneq(key, key + (keylen / 2), keylen / 2)) |
f1c131b4 | 35 | return -EINVAL; |
f1c131b4 HX |
36 | |
37 | return 0; | |
38 | } | |
39 | ||
ce004556 | 40 | #endif /* _CRYPTO_XTS_H */ |