/* 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 */
