summaryrefslogtreecommitdiffstats
path: root/partition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'partition.cpp')
-rw-r--r--partition.cpp93
1 files changed, 16 insertions, 77 deletions
diff --git a/partition.cpp b/partition.cpp
index 4bd545b17..123e9fa3f 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -45,21 +45,12 @@
extern "C" {
#include "mtdutils/mtdutils.h"
#include "mtdutils/mounts.h"
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
- #include "crypto/libcrypt_samsung/include/libcrypt_samsung.h"
-#endif
#ifdef USE_EXT4
#include "make_ext4fs.h"
#endif
#ifdef TW_INCLUDE_CRYPTO
- #ifdef TW_INCLUDE_JB_CRYPTO
- #include "crypto/jb/cryptfs.h"
- #elif defined(TW_INCLUDE_L_CRYPTO)
- #include "crypto/lollipop/cryptfs.h"
- #else
- #include "crypto/ics/cryptfs.h"
- #endif
+ #include "crypto/lollipop/cryptfs.h"
#endif
}
#ifdef HAVE_SELINUX
@@ -137,6 +128,7 @@ TWPartition::TWPartition() {
Can_Be_Encrypted = false;
Is_Encrypted = false;
Is_Decrypted = false;
+ Mount_To_Decrypt = false;
Decrypted_Block_Device = "";
Display_Name = "";
Backup_Display_Name = "";
@@ -159,9 +151,7 @@ TWPartition::TWPartition() {
Format_Block_Size = 0;
Ignore_Blkid = false;
Retain_Layout_Version = false;
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
- EcryptFS_Password = "";
-#endif
+ Crypto_Key_Location = "footer";
}
TWPartition::~TWPartition(void) {
@@ -289,22 +279,7 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) {
LOGINFO("Data already decrypted, new block device: '%s'\n", crypto_blkdev);
} else if (!Mount(false)) {
if (Is_Present) {
-#if defined(TW_INCLUDE_JB_CRYPTO) || defined(TW_INCLUDE_L_CRYPTO)
- // No extra flags needed
-#else
- property_set("ro.crypto.fs_type", CRYPTO_FS_TYPE);
- property_set("ro.crypto.fs_real_blkdev", CRYPTO_REAL_BLKDEV);
- property_set("ro.crypto.fs_mnt_point", CRYPTO_MNT_POINT);
- property_set("ro.crypto.fs_options", CRYPTO_FS_OPTIONS);
- property_set("ro.crypto.fs_flags", CRYPTO_FS_FLAGS);
- property_set("ro.crypto.keyfile.userdata", CRYPTO_KEY_LOC);
-#ifdef CRYPTO_SD_FS_TYPE
- property_set("ro.crypto.sd_fs_type", CRYPTO_SD_FS_TYPE);
- property_set("ro.crypto.sd_fs_real_blkdev", CRYPTO_SD_REAL_BLKDEV);
- property_set("ro.crypto.sd_fs_mnt_point", EXPAND(TW_INTERNAL_STORAGE_PATH));
-#endif
- property_set("rw.km_fips_status", "ready");
-#endif
+ set_partition_data(Actual_Block_Device.c_str(), Crypto_Key_Location.c_str(), Fstab_File_System.c_str());
if (cryptfs_check_footer() == 0) {
Is_Encrypted = true;
Is_Decrypted = false;
@@ -572,6 +547,17 @@ bool TWPartition::Process_Flags(string Flags, bool Display_Error) {
Mount_Options.resize(Mount_Options.size() - 1);
}
Process_FS_Flags(Mount_Options, Mount_Flags);
+ } else if ((ptr_len > 12 && strncmp(ptr, "encryptable=", 12) == 0) || (ptr_len > 13 && strncmp(ptr, "forceencrypt=", 13) == 0)) {
+ ptr += 12;
+ if (*ptr == '=') ptr++;
+ if (*ptr == '\"') ptr++;
+
+ Crypto_Key_Location = ptr;
+ if (Crypto_Key_Location.substr(Crypto_Key_Location.size() - 1, 1) == "\"") {
+ Crypto_Key_Location.resize(Crypto_Key_Location.size() - 1);
+ }
+ } else if (ptr_len > 8 && strncmp(ptr, "mounttodecrypt", 14) == 0) {
+ Mount_To_Decrypt = true;
} else {
if (Display_Error)
LOGERR("Unhandled flag: '%s'\n", ptr);
@@ -1021,25 +1007,7 @@ bool TWPartition::Mount(bool Display_Error) {
}
#endif
}
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
- string MetaEcfsFile = EXPAND(TW_EXTERNAL_STORAGE_PATH);
- MetaEcfsFile += "/.MetaEcfsFile";
- if (EcryptFS_Password.size() > 0 && PartitionManager.Mount_By_Path("/data", false) && TWFunc::Path_Exists(MetaEcfsFile)) {
- if (mount_ecryptfs_drive(EcryptFS_Password.c_str(), Mount_Point.c_str(), Mount_Point.c_str(), 0) != 0) {
- if (Display_Error)
- LOGERR("Unable to mount ecryptfs for '%s'\n", Mount_Point.c_str());
- else
- LOGINFO("Unable to mount ecryptfs for '%s'\n", Mount_Point.c_str());
- } else {
- LOGINFO("Successfully mounted ecryptfs for '%s'\n", Mount_Point.c_str());
- Is_Decrypted = true;
- }
- } else if (Mount_Point == EXPAND(TW_EXTERNAL_STORAGE_PATH)) {
- if (Is_Decrypted)
- LOGINFO("Mounting external storage, '%s' is not encrypted\n", Mount_Point.c_str());
- Is_Decrypted = false;
- }
-#endif
+
if (Removable)
Update_Size(Display_Error);
@@ -1061,19 +1029,6 @@ bool TWPartition::UnMount(bool Display_Error) {
if (Is_Storage)
TWFunc::Toggle_MTP(false);
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
- if (EcryptFS_Password.size() > 0) {
- if (unmount_ecryptfs_drive(Mount_Point.c_str()) != 0) {
- if (Display_Error)
- LOGERR("Unable to unmount ecryptfs for '%s'\n", Mount_Point.c_str());
- else
- LOGINFO("Unable to unmount ecryptfs for '%s'\n", Mount_Point.c_str());
- } else {
- LOGINFO("Successfully unmounted ecryptfs for '%s'\n", Mount_Point.c_str());
- }
- }
-#endif
-
if (!Symlink_Mount_Point.empty())
umount(Symlink_Mount_Point.c_str());
@@ -1105,13 +1060,6 @@ bool TWPartition::Wipe(string New_File_System) {
if (Mount_Point == "/cache")
Log_Offset = 0;
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
- if (Mount_Point == "/data" && Mount(false)) {
- if (TWFunc::Path_Exists("/data/system/edk_p_sd"))
- TWFunc::copy_file("/data/system/edk_p_sd", "/tmp/edk_p_sd", 0600);
- }
-#endif
-
if (Retain_Layout_Version && Mount(false) && TWFunc::Path_Exists(Layout_Filename))
TWFunc::copy_file(Layout_Filename, "/.layout_version", 0600);
else
@@ -1150,15 +1098,6 @@ bool TWPartition::Wipe(string New_File_System) {
}
if (wiped) {
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
- if (Mount_Point == "/data" && Mount(false)) {
- if (TWFunc::Path_Exists("/tmp/edk_p_sd")) {
- Make_Dir("/data/system", true);
- TWFunc::copy_file("/tmp/edk_p_sd", "/data/system/edk_p_sd", 0600);
- }
- }
-#endif
-
if (Mount_Point == "/cache")
DataManager::Output_Version();