]> Git Repo - linux.git/commitdiff
fscrypt: Add SM4 XTS/CTS symmetric algorithm support
authorTianjia Zhang <[email protected]>
Thu, 1 Dec 2022 12:58:19 +0000 (20:58 +0800)
committerEric Biggers <[email protected]>
Thu, 1 Dec 2022 19:23:58 +0000 (11:23 -0800)
Add support for XTS and CTS mode variant of SM4 algorithm. The former is
used to encrypt file contents, while the latter (SM4-CTS-CBC) is used to
encrypt filenames.

SM4 is a symmetric algorithm widely used in China, and is even mandatory
algorithm in some special scenarios. We need to provide these users with
the ability to encrypt files or disks using SM4-XTS.

Signed-off-by: Tianjia Zhang <[email protected]>
Signed-off-by: Eric Biggers <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Documentation/filesystems/fscrypt.rst
fs/crypto/keysetup.c
fs/crypto/policy.c
include/uapi/linux/fscrypt.h

index 5ba5817c17c2ab6564ab33a835d1468dc8c4b134..c0784ec0555307a8712ce02b93aea7ff89105c20 100644 (file)
@@ -338,6 +338,7 @@ Currently, the following pairs of encryption modes are supported:
 - AES-128-CBC for contents and AES-128-CTS-CBC for filenames
 - Adiantum for both contents and filenames
 - AES-256-XTS for contents and AES-256-HCTR2 for filenames (v2 policies only)
+- SM4-XTS for contents and SM4-CTS-CBC for filenames (v2 policies only)
 
 If unsure, you should use the (AES-256-XTS, AES-256-CTS-CBC) pair.
 
index 9e44dc078a81a4d10d8a4e1b105ec0d00a2facda..94757ccd3056873e9c000d3bc040531e84089372 100644 (file)
@@ -44,6 +44,21 @@ struct fscrypt_mode fscrypt_modes[] = {
                .security_strength = 16,
                .ivsize = 16,
        },
+       [FSCRYPT_MODE_SM4_XTS] = {
+               .friendly_name = "SM4-XTS",
+               .cipher_str = "xts(sm4)",
+               .keysize = 32,
+               .security_strength = 16,
+               .ivsize = 16,
+               .blk_crypto_mode = BLK_ENCRYPTION_MODE_SM4_XTS,
+       },
+       [FSCRYPT_MODE_SM4_CTS] = {
+               .friendly_name = "SM4-CTS-CBC",
+               .cipher_str = "cts(cbc(sm4))",
+               .keysize = 16,
+               .security_strength = 16,
+               .ivsize = 16,
+       },
        [FSCRYPT_MODE_ADIANTUM] = {
                .friendly_name = "Adiantum",
                .cipher_str = "adiantum(xchacha12,aes)",
index 84fa51604b15136e331bad8d7677ca297b6b0cd7..893661b523769f4ad44e4afa735341908e8884b6 100644 (file)
@@ -90,6 +90,11 @@ static bool fscrypt_valid_enc_modes_v2(u32 contents_mode, u32 filenames_mode)
        if (contents_mode == FSCRYPT_MODE_AES_256_XTS &&
            filenames_mode == FSCRYPT_MODE_AES_256_HCTR2)
                return true;
+
+       if (contents_mode == FSCRYPT_MODE_SM4_XTS &&
+           filenames_mode == FSCRYPT_MODE_SM4_CTS)
+               return true;
+
        return fscrypt_valid_enc_modes_v1(contents_mode, filenames_mode);
 }
 
index a756b29afcc23749f4102902a22d445d6fad9628..47dbd1994bfe5401ab14bdc8d8ae7eb4142029f5 100644 (file)
@@ -26,6 +26,8 @@
 #define FSCRYPT_MODE_AES_256_CTS               4
 #define FSCRYPT_MODE_AES_128_CBC               5
 #define FSCRYPT_MODE_AES_128_CTS               6
+#define FSCRYPT_MODE_SM4_XTS                   7
+#define FSCRYPT_MODE_SM4_CTS                   8
 #define FSCRYPT_MODE_ADIANTUM                  9
 #define FSCRYPT_MODE_AES_256_HCTR2             10
 /* If adding a mode number > 10, update FSCRYPT_MODE_MAX in fscrypt_private.h */
This page took 0.058146 seconds and 4 git commands to generate.