Update lock pattern types for android 11
The stored id for the different types of the lock pattern was chnaged
with Android 11. You can find the updated list in the LockPatternUtils:
https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-11.0.0_r25/core/java/com/android/internal/widget/LockPatternUtils.java#113
It was changed in 5e891bcc04556a3595ab349381acc2a2e36a69d1:
https://android.googlesource.com/platform/frameworks/base/+/5e891bcc04556a3595ab349381acc2a2e36a69d1
The old CREDENTIAL_TYPE_PASSWORD_OR_PIN was essentialy split in
CREDENTIAL_TYPE_PASSWORD and CREDENTIAL_TYPE_PASSWORD_OR_PIN.
This code updates the matching in twrp, so that the correct unlocking
method for file base decryption can be found. Without these changes twrp
always try to use the default password and obviously fails. With these
changes the usual password dialog is shown and the decryption is
successfully.
Change-Id: Ia8d47223b30a5301d4b9d2230241039612055ebb
Signed-off-by: Alexander Sulfrian <asulfrian@zedat.fu-berlin.de>
Co-authored-by: althafvly <althafvly@gmail.com>
diff --git a/crypto/ext4crypt/Decrypt.cpp b/crypto/ext4crypt/Decrypt.cpp
index d486aa4..3f82aa1 100755
--- a/crypto/ext4crypt/Decrypt.cpp
+++ b/crypto/ext4crypt/Decrypt.cpp
@@ -1203,7 +1203,9 @@
}
if (pwd.password_type == 1) // In Android this means pattern
return 2; // In TWRP this means pattern
- else if (pwd.password_type == 2) // In Android this means PIN or password
+ // In Android <11 type 2 is PIN or password
+ // In Android 11 type 3 is PIN and type 4 is password
+ else if (pwd.password_type > 1)
return 1; // In TWRP this means PIN or password
return 0; // We'll try the default password
#else
diff --git a/crypto/fscrypt/Decrypt.cpp b/crypto/fscrypt/Decrypt.cpp
index 1e62ce2..80ad407 100755
--- a/crypto/fscrypt/Decrypt.cpp
+++ b/crypto/fscrypt/Decrypt.cpp
@@ -1041,7 +1041,9 @@
printf("password type: pattern\n");
return 2; // In TWRP this means pattern
}
- else if (pwd.password_type == 2) { // In Android this means PIN or password
+ // In Android <11 type 2 is PIN or password
+ // In Android 11 type 3 is PIN and type 4 is password
+ else if (pwd.password_type > 1) {
printf("password type: pin\n");
return 1; // In TWRP this means PIN or password
}