Merge "Fix AOSP decrypt when TouchWiz code is present" into twrp2.5
diff --git a/crypto/ics/cryptfs.c b/crypto/ics/cryptfs.c
index d994449..193339e 100644
--- a/crypto/ics/cryptfs.c
+++ b/crypto/ics/cryptfs.c
@@ -75,6 +75,7 @@
 static int  using_samsung_encryption = 0;
 //static edk_t saved_master_key;
 static unsigned char saved_master_key[KEY_LEN_BYTES_SAMSUNG];
+edk_payload_t edk_payload;
 #else
 static unsigned char saved_master_key[KEY_LEN_BYTES];
 #endif
@@ -187,8 +188,15 @@
 	} else {
 		printf("Using Samsung encryption.\n");
 		using_samsung_encryption = 1;
-		memcpy(key, &crypt_ftr->edk_payload, sizeof(edk_payload_t));
-
+        if ( (cnt = read(fd, &edk_payload, sizeof(edk_payload_t))) != sizeof(edk_payload_t)) {
+            printf("Cannot read EDK payload from real block device footer\n");
+            goto errout;
+        }
+        if (lseek64(fd, sizeof(__le32), SEEK_CUR) == -1) {
+            printf("Cannot seek past unknown data from real block device footer\n");
+            goto errout;
+        }
+        memcpy(key, &edk_payload, sizeof(edk_payload_t));
 	}
 #else
     printf("Bad magic for real block device %s\n", fname);
@@ -217,7 +225,7 @@
     }
   }
 
-  if (crypt_ftr->keysize != sizeof(saved_master_key)) {
+  if (crypt_ftr->keysize > sizeof(saved_master_key)) {
     printf("Keysize of %d bits not supported for real block device %s\n",
           crypt_ftr->keysize * 8, fname);
     goto errout;
diff --git a/crypto/ics/cryptfs.h b/crypto/ics/cryptfs.h
index e2fb7a7..eee43b3 100644
--- a/crypto/ics/cryptfs.h
+++ b/crypto/ics/cryptfs.h
@@ -68,10 +68,6 @@
   char crypto_type_name[MAX_CRYPTO_TYPE_NAME_LEN]; /* The type of encryption
 							       needed to decrypt this
 							       partition, null terminated */
-#ifdef TW_INCLUDE_CRYPTO_SAMSUNG
-    edk_payload_t edk_payload;
-  __le32 unknown_end;
-#endif
 };
 
 #pragma pack()
diff --git a/partition.cpp b/partition.cpp
index 7cf0ab3..f81748d 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -902,7 +902,9 @@
 			LOGINFO("Successfully mounted ecryptfs for '%s'\n", Mount_Point.c_str());
 			Is_Decrypted = true;
 		}
-	} else {
+	} 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
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index fb3da5a..71e5e34 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -1453,6 +1453,7 @@
 					sdcard->Mount(false);
 				}
 			} else {
+				LOGINFO("External storage '%s' is not encrypted.\n", sdcard->Mount_Point.c_str());
 				sdcard->Is_Decrypted = false;
 				sdcard->Decrypted_Block_Device = "";
 			}