Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051/* SPDX-License-Identifier: GPL-2.0 */#ifndef _CRYPTO_XTS_H#define _CRYPTO_XTS_H
#include <crypto/b128ops.h>#include <crypto/internal/skcipher.h>#include <linux/fips.h>
#define XTS_BLOCK_SIZE 16#define XTS_FORBID_WEAK_KEYS (1 << 0)
static inline int __xts_verify_key(const u8 *key, size_t keylen, int flags){ /* * key consists of keys of equal size concatenated, therefore * the length must be even. */ if (keylen % 2) return -EINVAL;
/* * In FIPS mode only a combined key length of either 256 or * 512 bits is allowed, c.f. FIPS 140-3 IG C.I. */ if (fips_enabled && keylen != 32 && keylen != 64) return -EINVAL;
/* * Ensure that the AES and tweak key are not identical when * in FIPS mode or the FORBID_WEAK_KEYS flag is set. */ if ((fips_enabled || (flags & XTS_FORBID_WEAK_KEYS)) && !crypto_memneq(key, key + (keylen / 2), keylen / 2)) return -EINVAL;
return 0;}
static inline int xts_verify_key(struct crypto_skcipher *tfm, const u8 *key, unsigned int keylen){ int flags = (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) ? XTS_FORBID_WEAK_KEYS : 0;
return __xts_verify_key(key, keylen, flags);}
#endif /* _CRYPTO_XTS_H */