cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xts.h (1125B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _CRYPTO_XTS_H
      3#define _CRYPTO_XTS_H
      4
      5#include <crypto/b128ops.h>
      6#include <crypto/internal/skcipher.h>
      7#include <linux/fips.h>
      8
      9#define XTS_BLOCK_SIZE 16
     10
     11static inline int xts_check_key(struct crypto_tfm *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	 */
     18	if (keylen % 2)
     19		return -EINVAL;
     20
     21	/* ensure that the AES and tweak key are not identical */
     22	if (fips_enabled && !crypto_memneq(key, key + (keylen / 2), keylen / 2))
     23		return -EINVAL;
     24
     25	return 0;
     26}
     27
     28static 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	 */
     35	if (keylen % 2)
     36		return -EINVAL;
     37
     38	/* ensure that the AES and tweak key are not identical */
     39	if ((fips_enabled || (crypto_skcipher_get_flags(tfm) &
     40			      CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) &&
     41	    !crypto_memneq(key, key + (keylen / 2), keylen / 2))
     42		return -EINVAL;
     43
     44	return 0;
     45}
     46
     47#endif  /* _CRYPTO_XTS_H */