crypto: xts - restrict key lengths to approved values in FIPS mode
authorNicolai Stange <nstange@suse.de>
Thu, 29 Dec 2022 21:17:05 +0000 (22:17 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 6 Jan 2023 09:15:46 +0000 (17:15 +0800)
According to FIPS 140-3 IG C.I., only (total) key lengths of either
256 bits or 512 bits are allowed with xts(aes). Make xts_verify_key() to
reject anything else in FIPS mode.

As xts(aes) is the only approved xts() template instantiation in FIPS mode,
the new restriction implemented in xts_verify_key() effectively only
applies to this particular construction.

Signed-off-by: Nicolai Stange <nstange@suse.de>
Signed-off-by: Vladis Dronov <vdronov@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
include/crypto/xts.h

index 0f8dba6..a233c10 100644 (file)
@@ -35,6 +35,13 @@ static inline int xts_verify_key(struct crypto_skcipher *tfm,
        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 */
        if ((fips_enabled || (crypto_skcipher_get_flags(tfm) &
                              CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) &&