]>
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 | ||
28856a9e SM |
11 | static inline int xts_check_key(struct crypto_tfm *tfm, |
12 | const u8 *key, unsigned int keylen) | |
13 | { | |
28856a9e SM |
14 | /* |
15 | * key consists of keys of equal size concatenated, therefore | |
16 | * the length must be even. | |
17 | */ | |
674f368a | 18 | if (keylen % 2) |
28856a9e | 19 | return -EINVAL; |
28856a9e SM |
20 | |
21 | /* ensure that the AES and tweak key are not identical */ | |
c4c4db0d | 22 | if (fips_enabled && !crypto_memneq(key, key + (keylen / 2), keylen / 2)) |
28856a9e | 23 | return -EINVAL; |
28856a9e SM |
24 | |
25 | return 0; | |
26 | } | |
27 | ||
f1c131b4 HX |
28 | static inline int xts_verify_key(struct crypto_skcipher *tfm, |
29 | const u8 *key, unsigned int keylen) | |
30 | { | |
31 | /* | |
32 | * key consists of keys of equal size concatenated, therefore | |
33 | * the length must be even. | |
34 | */ | |
674f368a | 35 | if (keylen % 2) |
f1c131b4 | 36 | return -EINVAL; |
f1c131b4 HX |
37 | |
38 | /* ensure that the AES and tweak key are not identical */ | |
231baecd EB |
39 | if ((fips_enabled || (crypto_skcipher_get_flags(tfm) & |
40 | CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) && | |
c4c4db0d | 41 | !crypto_memneq(key, key + (keylen / 2), keylen / 2)) |
f1c131b4 | 42 | return -EINVAL; |
f1c131b4 HX |
43 | |
44 | return 0; | |
45 | } | |
46 | ||
ce004556 | 47 | #endif /* _CRYPTO_XTS_H */ |