From 54e70eb7ce231f6a1bef4ffdedb6008b3a949820 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 15 Oct 2022 09:33:56 +0000 Subject: [PATCH 6/6] Revert "Remove more FDE methods from StorageManager" This reverts commit bd13f84152449a3ead6fa8604fd31f48c0224676. --- .../android/os/storage/StorageManager.java | 69 ++++++++++++++++--- .../internal/os/RoSystemProperties.java | 4 ++ 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index d9604b3f0145..603612e82007 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -1681,13 +1681,18 @@ public class StorageManager { } /** {@hide} - * Is this device encrypted? - *

- * Note: all devices launching with Android 10 (API level 29) or later are - * required to be encrypted. This should only ever return false for - * in-development devices on which encryption has not yet been configured. - * - * @return true if encrypted, false if not encrypted + * Is this device encryptable or already encrypted? + * @return true for encryptable or encrypted + * false not encrypted and not encryptable + */ + public static boolean isEncryptable() { + return RoSystemProperties.CRYPTO_ENCRYPTABLE; + } + + /** {@hide} + * Is this device already encrypted? + * @return true for encrypted. (Implies isEncryptable() == true) + * false not encrypted */ public static boolean isEncrypted() { return RoSystemProperties.CRYPTO_ENCRYPTED; @@ -1696,7 +1701,7 @@ public class StorageManager { /** {@hide} * Is this device file encrypted? * @return true for file encrypted. (Implies isEncrypted() == true) - * false not encrypted or using "managed" encryption + * false not encrypted or block encrypted */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static boolean isFileEncryptedNativeOnly() { @@ -1706,6 +1711,54 @@ public class StorageManager { return RoSystemProperties.CRYPTO_FILE_ENCRYPTED; } + /** {@hide} + * Is this device block encrypted? + * @return true for block encrypted. (Implies isEncrypted() == true) + * false not encrypted or file encrypted + */ + public static boolean isBlockEncrypted() { + return false; + } + + /** {@hide} + * Is this device block encrypted with credentials? + * @return true for crediential block encrypted. + * (Implies isBlockEncrypted() == true) + * false not encrypted, file encrypted or default block encrypted + */ + public static boolean isNonDefaultBlockEncrypted() { + return false; + } + + /** {@hide} + * Is this device in the process of being block encrypted? + * @return true for encrypting. + * false otherwise + * Whether device isEncrypted at this point is undefined + * Note that only system services and CryptKeeper will ever see this return + * true - no app will ever be launched in this state. + * Also note that this state will not change without a teardown of the + * framework, so no service needs to check for changes during their lifespan + */ + public static boolean isBlockEncrypting() { + return false; + } + + /** {@hide} + * Is this device non default block encrypted and in the process of + * prompting for credentials? + * @return true for prompting for credentials. + * (Implies isNonDefaultBlockEncrypted() == true) + * false otherwise + * Note that only system services and CryptKeeper will ever see this return + * true - no app will ever be launched in this state. + * Also note that this state will not change without a teardown of the + * framework, so no service needs to check for changes during their lifespan + */ + public static boolean inCryptKeeperBounce() { + return false; + } + /** {@hide} */ public static boolean isFileEncryptedEmulatedOnly() { return SystemProperties.getBoolean(StorageManager.PROP_EMULATE_FBE, false); diff --git a/core/java/com/android/internal/os/RoSystemProperties.java b/core/java/com/android/internal/os/RoSystemProperties.java index cccd80e82420..adb5c107bc62 100644 --- a/core/java/com/android/internal/os/RoSystemProperties.java +++ b/core/java/com/android/internal/os/RoSystemProperties.java @@ -62,10 +62,14 @@ public class RoSystemProperties { public static final CryptoProperties.type_values CRYPTO_TYPE = CryptoProperties.type().orElse(CryptoProperties.type_values.NONE); // These are pseudo-properties + public static final boolean CRYPTO_ENCRYPTABLE = + CRYPTO_STATE != CryptoProperties.state_values.UNSUPPORTED; public static final boolean CRYPTO_ENCRYPTED = CRYPTO_STATE == CryptoProperties.state_values.ENCRYPTED; public static final boolean CRYPTO_FILE_ENCRYPTED = CRYPTO_TYPE == CryptoProperties.type_values.FILE; + public static final boolean CRYPTO_BLOCK_ENCRYPTED = + CRYPTO_TYPE == CryptoProperties.type_values.BLOCK; public static final boolean CONTROL_PRIVAPP_PERMISSIONS_LOG = "log".equalsIgnoreCase(CONTROL_PRIVAPP_PERMISSIONS); -- 2.41.0