diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj
index d6ec9600e9f25cc321c52924e73b7edbf10e492c..751942459cf4ef26f9cff358b98e8b589252250f 100644
--- a/enzevalos_iphone.xcodeproj/project.pbxproj
+++ b/enzevalos_iphone.xcodeproj/project.pbxproj
@@ -13,7 +13,26 @@
 		0E1C457D24055F87006D104A /* signencinlineK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457924055F87006D104A /* signencinlineK9.eml */; };
 		0E1C458024055FB7006D104A /* Alice.v3.pubsec.asc in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */; };
 		0E1C458124055FB7006D104A /* Alice.v3.pub.asc in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */; };
-		0E6551A72406A42300DE30FC /* SearchHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E6551A62406A42300DE30FC /* SearchHelper.swift */; };
+		0ECA5798240D496800B0F231 /* SMIME.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECA5797240D496800B0F231 /* SMIME.swift */; };
+		0ECEA0E8240E7081007DC71E /* SearchHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECEA0E7240E7081007DC71E /* SearchHelper.swift */; };
+		0ECEA0EA240E7D64007DC71E /* SMIME Test 1 S.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0E9240E7D64007DC71E /* SMIME Test 1 S.eml */; };
+		0ECEA0EC240E7D85007DC71E /* johnny C1.json.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0EB240E7D85007DC71E /* johnny C1.json.eml */; };
+		0ECEA0F7240E7DB1007DC71E /* evilCA.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0ED240E7DB0007DC71E /* evilCA.p12 */; };
+		0ECEA0F8240E7DB1007DC71E /* myTestCA.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0EE240E7DB0007DC71E /* myTestCA.pem */; };
+		0ECEA0F9240E7DB1007DC71E /* evilkey1.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0EF240E7DB0007DC71E /* evilkey1.p12 */; };
+		0ECEA0FA240E7DB1007DC71E /* otherkey1.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F0240E7DB0007DC71E /* otherkey1.pem */; };
+		0ECEA0FB240E7DB1007DC71E /* mykey.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F1240E7DB0007DC71E /* mykey.pem */; };
+		0ECEA0FC240E7DB1007DC71E /* myTestCA.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F2240E7DB0007DC71E /* myTestCA.p12 */; };
+		0ECEA0FD240E7DB1007DC71E /* otherkey1.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F3240E7DB0007DC71E /* otherkey1.p12 */; };
+		0ECEA0FE240E7DB1007DC71E /* mykey.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F4240E7DB0007DC71E /* mykey.p12 */; };
+		0ECEA0FF240E7DB1007DC71E /* evilCA.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F5240E7DB0007DC71E /* evilCA.pem */; };
+		0ECEA100240E7DB1007DC71E /* evilkey1.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */; };
+		0ED9073024338E3C008CF9D0 /* SMIMETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */; };
+		0EF148052422543E00B3C198 /* Certificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF148042422543E00B3C198 /* Certificate.swift */; };
+		0EF148082422572500B3C198 /* general-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EF148072422572500B3C198 /* general-helpers.c */; };
+		0EF1480B2422584F00B3C198 /* certificate-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EF1480A2422584F00B3C198 /* certificate-helpers.c */; };
+		0EF73F4324237E6500932FA0 /* SMIMEHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF73F4224237E6500932FA0 /* SMIMEHelpers.swift */; };
+		0EFEF0952417C0B400BB2FF7 /* CHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFEF0942417C0B400BB2FF7 /* CHelpers.swift */; };
 		3E6B07DE2011246500E49609 /* invitationText.html in Resources */ = {isa = PBXBuildFile; fileRef = 3E6B07DD2011246500E49609 /* invitationText.html */; };
 		3EB4FA9F2012007C001D0625 /* DialogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB4FA9D2012007C001D0625 /* DialogViewController.swift */; };
 		3EB4FAA12012007C001D0625 /* Dialog.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3EB4FA9E2012007C001D0625 /* Dialog.storyboard */; };
@@ -152,6 +171,10 @@
 		47F867E22052B48E00AA832F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E12052B48E00AA832F /* libz.tbd */; };
 		47F867E42052B49800AA832F /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E32052B49800AA832F /* libbz2.tbd */; };
 		50F2E7D66366C779705987A7 /* Pods_enzevalos_iphoneUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF67EF30BB065CC9C0D17940 /* Pods_enzevalos_iphoneUITests.framework */; };
+		676C2D3024321F8100B631B3 /* TyposquattingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 676C2D2F24321F8100B631B3 /* TyposquattingTests.swift */; };
+		6789425F2430C3B300C746D1 /* MailComparison.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6789425E2430C3B300C746D1 /* MailComparison.swift */; };
+		678942612430C3D600C746D1 /* Typosquatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 678942602430C3D600C746D1 /* Typosquatting.swift */; };
+		678942632430C40600C746D1 /* MailComparisonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 678942622430C40600C746D1 /* MailComparisonTests.swift */; };
 		71DF08982421520D00162B74 /* EmailStringExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71DF08972421520D00162B74 /* EmailStringExtensionTests.swift */; };
 		71DFE5BA240679E80042019C /* HeaderExtractionValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */; };
 		7500EE9D4F3130671F5C1AE2 /* Pods_enzevalos_iphoneTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7977EA7012D8E98D186D5C60 /* Pods_enzevalos_iphoneTests.framework */; };
@@ -234,6 +257,7 @@
 		A1F992291DA7C9100073BF1B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A1F9922B1DA7C9100073BF1B /* Main.storyboard */; };
 		A1F992391DA7DD2E0073BF1B /* InboxTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1F9923B1DA7DD2E0073BF1B /* InboxTableViewCell.xib */; };
 		A1FA44A721E10E1400DB02AC /* TravelHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1FA44A621E10E1400DB02AC /* TravelHandler.swift */; };
+		A5E303D824110F6400310264 /* smime-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = A5E303D724110F6400310264 /* smime-helpers.c */; };
 		AC4001CA169DC07A7A1E3AD3 /* Pods_enzevalos_iphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94EE54279AB591E0CAB8EFD8 /* Pods_enzevalos_iphone.framework */; };
 		F113C3851F30D06800E7F1D6 /* QRScannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F113C3841F30D06800E7F1D6 /* QRScannerView.swift */; };
 		F113C38B1F3344C200E7F1D6 /* ViewControllerPannable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F113C38A1F3344C200E7F1D6 /* ViewControllerPannable.swift */; };
@@ -295,7 +319,28 @@
 		0E1C457924055F87006D104A /* signencinlineK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signencinlineK9.eml; sourceTree = "<group>"; };
 		0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Alice.v3.pubsec.asc; sourceTree = "<group>"; };
 		0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Alice.v3.pub.asc; sourceTree = "<group>"; };
-		0E6551A62406A42300DE30FC /* SearchHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchHelper.swift; sourceTree = "<group>"; };
+		0ECA5797240D496800B0F231 /* SMIME.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIME.swift; sourceTree = "<group>"; };
+		0ECEA0E7240E7081007DC71E /* SearchHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchHelper.swift; sourceTree = "<group>"; };
+		0ECEA0E9240E7D64007DC71E /* SMIME Test 1 S.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "SMIME Test 1 S.eml"; sourceTree = "<group>"; };
+		0ECEA0EB240E7D85007DC71E /* johnny C1.json.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "johnny C1.json.eml"; sourceTree = "<group>"; };
+		0ECEA0ED240E7DB0007DC71E /* evilCA.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = evilCA.p12; sourceTree = "<group>"; };
+		0ECEA0EE240E7DB0007DC71E /* myTestCA.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = myTestCA.pem; sourceTree = "<group>"; };
+		0ECEA0EF240E7DB0007DC71E /* evilkey1.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = evilkey1.p12; sourceTree = "<group>"; };
+		0ECEA0F0240E7DB0007DC71E /* otherkey1.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = otherkey1.pem; sourceTree = "<group>"; };
+		0ECEA0F1240E7DB0007DC71E /* mykey.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mykey.pem; sourceTree = "<group>"; };
+		0ECEA0F2240E7DB0007DC71E /* myTestCA.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = myTestCA.p12; sourceTree = "<group>"; };
+		0ECEA0F3240E7DB0007DC71E /* otherkey1.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = otherkey1.p12; sourceTree = "<group>"; };
+		0ECEA0F4240E7DB0007DC71E /* mykey.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = mykey.p12; sourceTree = "<group>"; };
+		0ECEA0F5240E7DB0007DC71E /* evilCA.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = evilCA.pem; sourceTree = "<group>"; };
+		0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = evilkey1.pem; sourceTree = "<group>"; };
+		0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIMETests.swift; sourceTree = "<group>"; };
+		0EF148042422543E00B3C198 /* Certificate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Certificate.swift; sourceTree = "<group>"; };
+		0EF148062422570F00B3C198 /* generic-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "generic-helpers.h"; sourceTree = "<group>"; };
+		0EF148072422572500B3C198 /* general-helpers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "general-helpers.c"; sourceTree = "<group>"; };
+		0EF148092422584F00B3C198 /* certificate-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "certificate-helpers.h"; sourceTree = "<group>"; };
+		0EF1480A2422584F00B3C198 /* certificate-helpers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "certificate-helpers.c"; sourceTree = "<group>"; };
+		0EF73F4224237E6500932FA0 /* SMIMEHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIMEHelpers.swift; sourceTree = "<group>"; };
+		0EFEF0942417C0B400BB2FF7 /* CHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CHelpers.swift; sourceTree = "<group>"; };
 		1D4A9E60565DECF52C011BC0 /* Pods-enzevalos_iphone-AdHoc.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-AdHoc.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-AdHoc/Pods-enzevalos_iphone-AdHoc.release.xcconfig"; sourceTree = "<group>"; };
 		3E6B07DD2011246500E49609 /* invitationText.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = invitationText.html; path = Invitation/invitationText.html; sourceTree = "<group>"; };
 		3E9708AD1FAC925D005825C9 /* enzevalos_iphone.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = enzevalos_iphone.entitlements; sourceTree = "<group>"; };
@@ -552,6 +597,10 @@
 		48C250BB32BF11B683003BA1 /* Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-enzevalos_iphoneUITests/Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig"; sourceTree = "<group>"; };
 		66E758F271CD65AB3E5FE7A7 /* Pods-enzevalos_iphoneUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneUITests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneUITests/Pods-enzevalos_iphoneUITests.debug.xcconfig"; sourceTree = "<group>"; };
 		670159DF240FB4E800797FA5 /* enzevalos_iphone 9.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 9.xcdatamodel"; sourceTree = "<group>"; };
+		676C2D2F24321F8100B631B3 /* TyposquattingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TyposquattingTests.swift; sourceTree = "<group>"; };
+		6789425E2430C3B300C746D1 /* MailComparison.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailComparison.swift; sourceTree = "<group>"; };
+		678942602430C3D600C746D1 /* Typosquatting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Typosquatting.swift; sourceTree = "<group>"; };
+		678942622430C40600C746D1 /* MailComparisonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailComparisonTests.swift; sourceTree = "<group>"; };
 		6EBCCD02AD3B95D8317810E2 /* Pods-enzevalos_iphoneTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneTests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests.debug.xcconfig"; sourceTree = "<group>"; };
 		71DF08972421520D00162B74 /* EmailStringExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailStringExtensionTests.swift; sourceTree = "<group>"; };
 		71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderExtractionValues.swift; sourceTree = "<group>"; };
@@ -661,6 +710,8 @@
 		A1F9923D1DA7DD350073BF1B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InboxTableViewCell.strings; sourceTree = "<group>"; };
 		A1F9923F1DA7DD370073BF1B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InboxTableViewCell.strings; sourceTree = "<group>"; };
 		A1FA44A621E10E1400DB02AC /* TravelHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TravelHandler.swift; sourceTree = "<group>"; };
+		A5E303D624110F6400310264 /* smime-helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "smime-helpers.h"; sourceTree = "<group>"; };
+		A5E303D724110F6400310264 /* smime-helpers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "smime-helpers.c"; sourceTree = "<group>"; };
 		AA686D4FC9B86445A0C87F0F /* Pods-enzevalos_iphone.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone.release.xcconfig"; sourceTree = "<group>"; };
 		AF67EF30BB065CC9C0D17940 /* Pods_enzevalos_iphoneUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_enzevalos_iphoneUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		BC7D006B3B40A23E53B4F317 /* Pods-enzevalos_iphoneTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneTests.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests.release.xcconfig"; sourceTree = "<group>"; };
@@ -732,6 +783,25 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		0ECEA101240EA905007DC71E /* SMIME */ = {
+			isa = PBXGroup;
+			children = (
+				0EF148042422543E00B3C198 /* Certificate.swift */,
+				A5E303D524110F6400310264 /* c */,
+				0ECA5797240D496800B0F231 /* SMIME.swift */,
+				0EF73F4224237E6500932FA0 /* SMIMEHelpers.swift */,
+			);
+			name = SMIME;
+			sourceTree = "<group>";
+		};
+		0EFEF0932417C08B00BB2FF7 /* C Helpers */ = {
+			isa = PBXGroup;
+			children = (
+				0EFEF0942417C0B400BB2FF7 /* CHelpers.swift */,
+			);
+			name = "C Helpers";
+			sourceTree = "<group>";
+		};
 		24472862977D71D3F0AD0D58 /* Pods */ = {
 			isa = PBXGroup;
 			children = (
@@ -786,6 +856,8 @@
 		470709112189BB4A00DF71A3 /* testMails */ = {
 			isa = PBXGroup;
 			children = (
+				0ECEA0EB240E7D85007DC71E /* johnny C1.json.eml */,
+				0ECEA0E9240E7D64007DC71E /* SMIME Test 1 S.eml */,
 				4774DD7422D0015F00BD8CF6 /* multiIDs.eml */,
 				4774DD7A22D3F5D100BD8CF6 /* multiIDs2.eml */,
 				4774DD8022D4067D00BD8CF6 /* signedEncMailFromApple.eml */,
@@ -1160,11 +1232,22 @@
 			path = private;
 			sourceTree = "<group>";
 		};
+		6789425D2430C38800C746D1 /* Phishing */ = {
+			isa = PBXGroup;
+			children = (
+				6789425E2430C3B300C746D1 /* MailComparison.swift */,
+				678942602430C3D600C746D1 /* Typosquatting.swift */,
+			);
+			name = Phishing;
+			sourceTree = "<group>";
+		};
 		71DF0896242151E200162B74 /* phishing */ = {
 			isa = PBXGroup;
 			children = (
 				988C9C5C240D507A006213F0 /* UrlStringExtensionTests.swift */,
 				71DF08972421520D00162B74 /* EmailStringExtensionTests.swift */,
+				678942622430C40600C746D1 /* MailComparisonTests.swift */,
+				676C2D2F24321F8100B631B3 /* TyposquattingTests.swift */,
 			);
 			path = phishing;
 			sourceTree = "<group>";
@@ -1277,6 +1360,7 @@
 		A1230BD81E2F881E006642C7 /* Encryption */ = {
 			isa = PBXGroup;
 			children = (
+				0ECEA101240EA905007DC71E /* SMIME */,
 				475B00301F7B9565006CDD41 /* SwiftPGP.swift */,
 				476801DA218436B600F7F259 /* Autocrypt.swift */,
 				47A5D6E12294BF3A0084F81D /* TempKey.swift */,
@@ -1322,6 +1406,8 @@
 		A13526771D955BDF00D3BFE1 /* enzevalos_iphone */ = {
 			isa = PBXGroup;
 			children = (
+				0EFEF0932417C08B00BB2FF7 /* C Helpers */,
+				6789425D2430C38800C746D1 /* Phishing */,
 				971D40482428C852002FCD31 /* gamification_2 */,
 				47EABF05241A9C7000774A93 /* Authentication */,
 				476406872416B54D00C7D426 /* SwiftUI */,
@@ -1366,7 +1452,8 @@
 		A135268F1D955BE000D3BFE1 /* enzevalos_iphoneTests */ = {
 			isa = PBXGroup;
 			children = (
-				71DF0896242151E200162B74 /* phishing */,
+				0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */,
+                71DF0896242151E200162B74 /* phishing */,
 				97C5279D241A9F690030BBC9 /* authentication */,
 				47F0376C22A7278A0005C9DE /* private */,
 				470709202189C24800DF71A3 /* testKeys */,
@@ -1483,6 +1570,16 @@
 		A1C7FF8B1E895316000D1E92 /* keys */ = {
 			isa = PBXGroup;
 			children = (
+				0ECEA0ED240E7DB0007DC71E /* evilCA.p12 */,
+				0ECEA0F5240E7DB0007DC71E /* evilCA.pem */,
+				0ECEA0EF240E7DB0007DC71E /* evilkey1.p12 */,
+				0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */,
+				0ECEA0F4240E7DB0007DC71E /* mykey.p12 */,
+				0ECEA0F1240E7DB0007DC71E /* mykey.pem */,
+				0ECEA0F2240E7DB0007DC71E /* myTestCA.p12 */,
+				0ECEA0EE240E7DB0007DC71E /* myTestCA.pem */,
+				0ECEA0F3240E7DB0007DC71E /* otherkey1.p12 */,
+				0ECEA0F0240E7DB0007DC71E /* otherkey1.pem */,
 				A1E5960D1FCC871E003791E9 /* researchteam.asc */,
 				479C649521F2139B00A01071 /* support_pk.asc */,
 				47CD5AAC2012369300E771A1 /* support_pk2.asc */,
@@ -1540,6 +1637,19 @@
 			name = read;
 			sourceTree = "<group>";
 		};
+		A5E303D524110F6400310264 /* c */ = {
+			isa = PBXGroup;
+			children = (
+				A5E303D624110F6400310264 /* smime-helpers.h */,
+				A5E303D724110F6400310264 /* smime-helpers.c */,
+				0EF148062422570F00B3C198 /* generic-helpers.h */,
+				0EF148072422572500B3C198 /* general-helpers.c */,
+				0EF148092422584F00B3C198 /* certificate-helpers.h */,
+				0EF1480A2422584F00B3C198 /* certificate-helpers.c */,
+			);
+			path = c;
+			sourceTree = "<group>";
+		};
 		F113C3831F30D01A00E7F1D6 /* QRCode */ = {
 			isa = PBXGroup;
 			children = (
@@ -1553,6 +1663,7 @@
 		F17654DF1F9E48F600D659B0 /* inbox */ = {
 			isa = PBXGroup;
 			children = (
+				0ECEA0E7240E7081007DC71E /* SearchHelper.swift */,
 				F1F070261FA0DF3F004A860A /* Inbox.storyboard */,
 				F12041FA1DA3FBF7002E4940 /* ListViewController.swift */,
 				F12041FC1DA409A5002E4940 /* ListViewCell.swift */,
@@ -1562,7 +1673,6 @@
 				A1EB05971D956947008659C1 /* InboxViewController.swift */,
 				F120607F1DA540FE00F6EF37 /* RefreshControlExtension.swift */,
 				A1F9923B1DA7DD2E0073BF1B /* InboxTableViewCell.xib */,
-				0E6551A62406A42300DE30FC /* SearchHelper.swift */,
 			);
 			name = inbox;
 			sourceTree = "<group>";
@@ -1745,9 +1855,14 @@
 				A102AA8A1EDDB4F40024B457 /* videoOnboarding2.m4v in Resources */,
 				A1F992391DA7DD2E0073BF1B /* InboxTableViewCell.xib in Resources */,
 				47E737742284610E00972401 /* KeyCell.xib in Resources */,
+				0ECEA0FE240E7DB1007DC71E /* mykey.p12 in Resources */,
+				0ECEA0FF240E7DB1007DC71E /* evilCA.pem in Resources */,
+				0ECEA0FA240E7DB1007DC71E /* otherkey1.pem in Resources */,
 				47CD5AAD2012369400E771A1 /* support_pk2.asc in Resources */,
 				A1EB058A1D956890008659C1 /* ContactCell.xib in Resources */,
 				F1F070281FA0DF3F004A860A /* Inbox.storyboard in Resources */,
+				0ECEA0FC240E7DB1007DC71E /* myTestCA.p12 in Resources */,
+				0ECEA0F8240E7DB1007DC71E /* myTestCA.pem in Resources */,
 				4761420A1E082F9C00FD5E4F /* Settings.bundle in Resources */,
 				A16BA2121E0439B6005E29E3 /* providers.json in Resources */,
 				F12D8DBB2069422A0068788E /* About.storyboard in Resources */,
@@ -1755,6 +1870,8 @@
 				477670C4228453FB00043604 /* ButtonCell.xib in Resources */,
 				47E7377022845F3A00972401 /* KeyViews.storyboard in Resources */,
 				4751C6F82343B37C006B2A4D /* Onboarding.Video.Click.Eng.m4v in Resources */,
+				0ECEA0F9240E7DB1007DC71E /* evilkey1.p12 in Resources */,
+				0ECEA0F7240E7DB1007DC71E /* evilCA.p12 in Resources */,
 				A1E5960E1FCC871F003791E9 /* researchteam.asc in Resources */,
 				A1123E6A1DA682850069551C /* Localizable.strings in Resources */,
 				A1F992291DA7C9100073BF1B /* Main.storyboard in Resources */,
@@ -1764,6 +1881,7 @@
 				A1B49E5F21E54EE700ED86FC /* IntroContactView.xib in Resources */,
 				A1BE3FF61E9664660040114B /* InfoPlist.strings in Resources */,
 				3E6B07DE2011246500E49609 /* invitationText.html in Resources */,
+				0ECEA0FB240E7DB1007DC71E /* mykey.pem in Resources */,
 				8428A8531F4369C0007649A5 /* Gamification.storyboard in Resources */,
 				8428A8551F4369CF007649A5 /* GamificationElements.xcassets in Resources */,
 				A182183221E518A400918A29 /* IntroContactCell.xib in Resources */,
@@ -1773,6 +1891,8 @@
 				4756DE0E20402F8E00452288 /* invitationTextCensor.html in Resources */,
 				A1EB058C1D9568AB008659C1 /* FrequentCell.xib in Resources */,
 				A182182721E5012300918A29 /* Intro.storyboard in Resources */,
+				0ECEA100240E7DB1007DC71E /* evilkey1.pem in Resources */,
+				0ECEA0FD240E7DB1007DC71E /* otherkey1.p12 in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1786,6 +1906,7 @@
 				479B597B20691C1A00B3944D /* ObjectivePGP.framework in Resources */,
 				470709282189C73900DF71A3 /* encInlineThunderbird.eml in Resources */,
 				479AFDA222571AB90063A332 /* EccAlice(777879D4)–Public.asc in Resources */,
+				0ECEA0EA240E7D64007DC71E /* SMIME Test 1 S.eml in Resources */,
 				470709292189C73900DF71A3 /* signedInlineThunderbird.eml in Resources */,
 				8428A8841F436ACC007649A5 /* GamificationElements.xcassets in Resources */,
 				4707092D2189C74200DF71A3 /* bobSecret.asc in Resources */,
@@ -1807,6 +1928,7 @@
 				0E1C457C24055F87006D104A /* signencK9.eml in Resources */,
 				4774DD8122D4067E00BD8CF6 /* signedEncMailFromApple.eml in Resources */,
 				4774DD7B22D3F5D100BD8CF6 /* multiIDs2.eml in Resources */,
+				0ECEA0EC240E7D85007DC71E /* johnny C1.json.eml in Resources */,
 				470709272189C73900DF71A3 /* encThunderbird.eml in Resources */,
 				0E1C457A24055F87006D104A /* signinlineK9.eml in Resources */,
 				47E7BE5D22319B7100C8EF94 /* SignedMailFromMac.eml in Resources */,
@@ -1847,12 +1969,15 @@
 				"${PODS_ROOT}/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone-frameworks.sh",
 				"${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework",
 				"${BUILT_PRODUCTS_DIR}/BZipCompression/BZipCompression.framework",
+				"${BUILT_PRODUCTS_DIR}/Cuckoo/Cuckoo.framework",
 				"${BUILT_PRODUCTS_DIR}/FrameAccessor/FrameAccessor.framework",
 				"${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework",
 				"${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework",
 				"${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework",
 				"${BUILT_PRODUCTS_DIR}/Onboard/Onboard.framework",
+				"${BUILT_PRODUCTS_DIR}/Punycode/Punycode.framework",
 				"${BUILT_PRODUCTS_DIR}/QAKit/QAKit.framework",
+				"${BUILT_PRODUCTS_DIR}/TLDExtract/TLDExtract.framework",
 				"${BUILT_PRODUCTS_DIR}/Travellib/Travellib.framework",
 				"${BUILT_PRODUCTS_DIR}/VENTokenField/VENTokenField.framework",
 			);
@@ -1860,12 +1985,15 @@
 			outputPaths = (
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BZipCompression.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cuckoo.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FrameAccessor.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KeychainAccess.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Onboard.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Punycode.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/QAKit.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TLDExtract.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Travellib.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VENTokenField.framework",
 			);
@@ -2008,16 +2136,20 @@
 				A1EB05801D956851008659C1 /* SendViewController.swift in Sources */,
 				479C649B21F45DAF00A01071 /* PasswordToggleVisibilityView.swift in Sources */,
 				47691A8C1ECC3EC7004BCFC5 /* EphemeralMail.swift in Sources */,
+				A5E303D824110F6400310264 /* smime-helpers.c in Sources */,
 				A142E70921E7919F000395E3 /* IntroContactViewController.swift in Sources */,
 				8428A8671F436A11007649A5 /* SubBadgeHeaderTableViewCell.swift in Sources */,
 				A1EB05981D956947008659C1 /* InboxViewController.swift in Sources */,
 				F1984D721E1D327200804E1E /* IconsStyleKit.swift in Sources */,
 				F1737ACB2031D7D70000312B /* StudySettings.swift in Sources */,
+				0ECA5798240D496800B0F231 /* SMIME.swift in Sources */,
+				6789425F2430C3B300C746D1 /* MailComparison.swift in Sources */,
 				8428A8691F436A11007649A5 /* UserNameGamificationTableViewCell.swift in Sources */,
 				A114E4321FACB23000E40243 /* StringExtension.swift in Sources */,
 				472F398C1E2519C8009260FB /* CNContactExtension.swift in Sources */,
 				476406A12416B5C800C7D426 /* OnboardingIntro.swift in Sources */,
 				476406972416B54D00C7D426 /* InboxCoordinator.swift in Sources */,
+				0EF148082422572500B3C198 /* general-helpers.c in Sources */,
 				F113C3851F30D06800E7F1D6 /* QRScannerView.swift in Sources */,
 				97BDE0432429188500B0BF03 /* BadgeProgressView.swift in Sources */,
 				477670C6228454F700043604 /* ButtonCell.swift in Sources */,
@@ -2081,6 +2213,7 @@
 				A182182C21E5072200918A29 /* IntroDescriptionViewController.swift in Sources */,
 				F1C7AC821FED6473007629DB /* AboutViewController.swift in Sources */,
 				A182183421E51DD200918A29 /* IntroContactCell.swift in Sources */,
+				678942612430C3D600C746D1 /* Typosquatting.swift in Sources */,
 				472F397C1E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift in Sources */,
 				8428A85C1F436A05007649A5 /* ArrowView.swift in Sources */,
 				47E737762284632F00972401 /* KeyCell.swift in Sources */,
@@ -2091,6 +2224,7 @@
 				A111F6AD1FA77B170060AFDE /* LoggerDetail.swift in Sources */,
 				A13526791D955BDF00D3BFE1 /* AppDelegate.swift in Sources */,
 				476916A2216B86CF00491527 /* EnzevalosContact+CoreDataClass.swift in Sources */,
+				0EF148052422543E00B3C198 /* Certificate.swift in Sources */,
 				A1ECE54B1EFBE7ED0009349F /* FolderCell.swift in Sources */,
 				8428A85F1F436A05007649A5 /* GamificationData.swift in Sources */,
 				475DF4791F0D54C9009D807F /* Folder+CoreDataClass.swift in Sources */,
@@ -2101,6 +2235,7 @@
 				475B00341F7B9565006CDD41 /* Cryptography.swift in Sources */,
 				A1EB057C1D956838008659C1 /* MailHandler.swift in Sources */,
 				A182182E21E50D8D00918A29 /* IntroButtonViewController.swift in Sources */,
+				0EFEF0952417C0B400BB2FF7 /* CHelpers.swift in Sources */,
 				4764069D2416B54D00C7D426 /* Stroke.swift in Sources */,
 				478AF715222FD5C600AEF69E /* IncomingMail.swift in Sources */,
 				47EABF09241A9C8700774A93 /* AuthenticationModel.swift in Sources */,
@@ -2109,12 +2244,12 @@
 				472F39701E14F75C009260FB /* DataHandler.swift in Sources */,
 				A1C62E9A2018F716000E5273 /* OnboardingValueState.swift in Sources */,
 				A1EB05901D956923008659C1 /* ReadViewController.swift in Sources */,
-				0E6551A72406A42300DE30FC /* SearchHelper.swift in Sources */,
 				472F398E1E251B8D009260FB /* MailAddress.swift in Sources */,
 				A198D2292056B384004CC838 /* SendViewDelegate.swift in Sources */,
 				479011492289975D0057AB04 /* NoSecIconStyleKit.swift in Sources */,
 				F12060821DA552FC00F6EF37 /* MailHandlerDelegator.swift in Sources */,
 				474994022261E4E6000F8DA5 /* SimpleSendIcon.swift in Sources */,
+				0ECEA0E8240E7081007DC71E /* SearchHelper.swift in Sources */,
 				A12F91D821F3A99800AB0589 /* NSLayoutConstraintExtension.swift in Sources */,
 				71DFE5BA240679E80042019C /* HeaderExtractionValues.swift in Sources */,
 				47EABF0D241A9CA800774A93 /* MailAccount.swift in Sources */,
@@ -2124,6 +2259,7 @@
 				47E7376E22845EC400972401 /* SecretKeyTableViewController.swift in Sources */,
 				478154A721FF3F0900A931EC /* Warning.swift in Sources */,
 				4764069F2416B5A600C7D426 /* NewOnboardingView.swift in Sources */,
+				0EF73F4324237E6500932FA0 /* SMIMEHelpers.swift in Sources */,
 				47EABF0B241A9C8700774A93 /* AuthenticationScreen.swift in Sources */,
 				8428A8681F436A11007649A5 /* SubBadgeTableViewCell.swift in Sources */,
 				A1EB05861D956872008659C1 /* FrequentCell.swift in Sources */,
@@ -2134,6 +2270,7 @@
 				478154AC21FF6A9600A931EC /* Mailbot.swift in Sources */,
 				8428A86E1F436A1E007649A5 /* BadgeCase.swift in Sources */,
 				A1B49E5D21E54CBF00ED86FC /* IntroContactTableViewController.swift in Sources */,
+				0EF1480B2422584F00B3C198 /* certificate-helpers.c in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2141,13 +2278,16 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				676C2D3024321F8100B631B3 /* TyposquattingTests.swift in Sources */,
 				8428A8831F436AC9007649A5 /* GamificationDataUnitTest.swift in Sources */,
 				71DF08982421520D00162B74 /* EmailStringExtensionTests.swift in Sources */,
 				3EC35F302003838E008BDF95 /* InvitationTests.swift in Sources */,
 				474054982244D7A9007CF83B /* MailServerConfigurationTest.swift in Sources */,
+				678942632430C40600C746D1 /* MailComparisonTests.swift in Sources */,
 				479B5977206914BE00B3944D /* CryptoTests.swift in Sources */,
 				A15D215F223BE6E4003E0CE0 /* MailTest.swift in Sources */,
-				47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */,
+				0ED9073024338E3C008CF9D0 /* SMIMETests.swift in Sources */,
+                47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */,
 				988C9C5D240D507A006213F0 /* UrlStringExtensionTests.swift in Sources */,
 				4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */,
 				47C22281218AFD6300BD2C2B /* AutocryptTest.swift in Sources */,
diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj.orig b/enzevalos_iphone.xcodeproj/project.pbxproj.orig
new file mode 100644
index 0000000000000000000000000000000000000000..28d911baec08c8a5d4bbbb5194599ed0d4f5a5df
--- /dev/null
+++ b/enzevalos_iphone.xcodeproj/project.pbxproj.orig
@@ -0,0 +1,2833 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		0E1C457A24055F87006D104A /* signinlineK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457624055F87006D104A /* signinlineK9.eml */; };
+		0E1C457B24055F87006D104A /* signK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457724055F87006D104A /* signK9.eml */; };
+		0E1C457C24055F87006D104A /* signencK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457824055F87006D104A /* signencK9.eml */; };
+		0E1C457D24055F87006D104A /* signencinlineK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457924055F87006D104A /* signencinlineK9.eml */; };
+		0E1C458024055FB7006D104A /* Alice.v3.pubsec.asc in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */; };
+		0E1C458124055FB7006D104A /* Alice.v3.pub.asc in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */; };
+		0ECA5798240D496800B0F231 /* SMIME.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECA5797240D496800B0F231 /* SMIME.swift */; };
+		0ECEA0E8240E7081007DC71E /* SearchHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECEA0E7240E7081007DC71E /* SearchHelper.swift */; };
+		0ECEA0EA240E7D64007DC71E /* SMIME Test 1 S.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0E9240E7D64007DC71E /* SMIME Test 1 S.eml */; };
+		0ECEA0EC240E7D85007DC71E /* johnny C1.json.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0EB240E7D85007DC71E /* johnny C1.json.eml */; };
+		0ECEA0F7240E7DB1007DC71E /* evilCA.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0ED240E7DB0007DC71E /* evilCA.p12 */; };
+		0ECEA0F8240E7DB1007DC71E /* myTestCA.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0EE240E7DB0007DC71E /* myTestCA.pem */; };
+		0ECEA0F9240E7DB1007DC71E /* evilkey1.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0EF240E7DB0007DC71E /* evilkey1.p12 */; };
+		0ECEA0FA240E7DB1007DC71E /* otherkey1.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F0240E7DB0007DC71E /* otherkey1.pem */; };
+		0ECEA0FB240E7DB1007DC71E /* mykey.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F1240E7DB0007DC71E /* mykey.pem */; };
+		0ECEA0FC240E7DB1007DC71E /* myTestCA.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F2240E7DB0007DC71E /* myTestCA.p12 */; };
+		0ECEA0FD240E7DB1007DC71E /* otherkey1.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F3240E7DB0007DC71E /* otherkey1.p12 */; };
+		0ECEA0FE240E7DB1007DC71E /* mykey.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F4240E7DB0007DC71E /* mykey.p12 */; };
+		0ECEA0FF240E7DB1007DC71E /* evilCA.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F5240E7DB0007DC71E /* evilCA.pem */; };
+		0ECEA100240E7DB1007DC71E /* evilkey1.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */; };
+		0ED9073024338E3C008CF9D0 /* SMIMETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */; };
+		0EF148052422543E00B3C198 /* Certificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF148042422543E00B3C198 /* Certificate.swift */; };
+		0EF148082422572500B3C198 /* general-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EF148072422572500B3C198 /* general-helpers.c */; };
+		0EF1480B2422584F00B3C198 /* certificate-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EF1480A2422584F00B3C198 /* certificate-helpers.c */; };
+		0EF73F4324237E6500932FA0 /* SMIMEHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF73F4224237E6500932FA0 /* SMIMEHelpers.swift */; };
+		0EFEF0952417C0B400BB2FF7 /* CHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFEF0942417C0B400BB2FF7 /* CHelpers.swift */; };
+		3E6B07DE2011246500E49609 /* invitationText.html in Resources */ = {isa = PBXBuildFile; fileRef = 3E6B07DD2011246500E49609 /* invitationText.html */; };
+		3EB4FA9F2012007C001D0625 /* DialogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB4FA9D2012007C001D0625 /* DialogViewController.swift */; };
+		3EB4FAA12012007C001D0625 /* Dialog.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3EB4FA9E2012007C001D0625 /* Dialog.storyboard */; };
+		3EB4FAA420120096001D0625 /* DialogOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB4FAA320120096001D0625 /* DialogOption.swift */; };
+		3EC35F2420037651008BDF95 /* InvitationHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EC35F2320037651008BDF95 /* InvitationHelper.swift */; };
+		3EC35F2D200376A1008BDF95 /* SendViewController+Invitation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EC35F2C200376A1008BDF95 /* SendViewController+Invitation.swift */; };
+		3EC35F302003838E008BDF95 /* InvitationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EC35F2F2003838E008BDF95 /* InvitationTests.swift */; };
+		4706D65F225B7B6B00B3F1D3 /* ItunesHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4706D65E225B7B6B00B3F1D3 /* ItunesHandler.swift */; };
+		4706D661225CD21D00B3F1D3 /* ExportKeyHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4706D660225CD21D00B3F1D3 /* ExportKeyHelper.swift */; };
+		4707091E2189BC3500DF71A3 /* plainThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 470709172189BC3500DF71A3 /* plainThunderbird.eml */; };
+		470709262189C73900DF71A3 /* enc+signedInlineThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 470709212189C73900DF71A3 /* enc+signedInlineThunderbird.eml */; };
+		470709272189C73900DF71A3 /* encThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 470709222189C73900DF71A3 /* encThunderbird.eml */; };
+		470709282189C73900DF71A3 /* encInlineThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 470709232189C73900DF71A3 /* encInlineThunderbird.eml */; };
+		470709292189C73900DF71A3 /* signedInlineThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 470709242189C73900DF71A3 /* signedInlineThunderbird.eml */; };
+		4707092A2189C73900DF71A3 /* signedThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 470709252189C73900DF71A3 /* signedThunderbird.eml */; };
+		4707092D2189C74200DF71A3 /* bobSecret.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4707092B2189C74200DF71A3 /* bobSecret.asc */; };
+		4707092E2189C74200DF71A3 /* alicePublic.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4707092C2189C74200DF71A3 /* alicePublic.asc */; };
+		470709302189E1C100DF71A3 /* enc+signedThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4707092F2189E1C000DF71A3 /* enc+signedThunderbird.eml */; };
+		4707096D1F8F9F4900657F41 /* ExportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4707096C1F8F9F4900657F41 /* ExportViewController.swift */; };
+		4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4715F636202A0248001BFFD0 /* CoreDataTests.swift */; };
+		47184C3922F0D8F200712A7A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47184C3822F0D8F200712A7A /* CFNetwork.framework */; };
+		471876F7223FACA900912135 /* BobPWTEST1234.asc in Resources */ = {isa = PBXBuildFile; fileRef = 471876F5223FACA900912135 /* BobPWTEST1234.asc */; };
+		471876F8223FACA900912135 /* BobWithoutPW.asc in Resources */ = {isa = PBXBuildFile; fileRef = 471876F6223FACA900912135 /* BobWithoutPW.asc */; };
+		472F396E1E14F384009260FB /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 472F396D1E14F384009260FB /* CoreData.framework */; };
+		472F39701E14F75C009260FB /* DataHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F396F1E14F75C009260FB /* DataHandler.swift */; };
+		472F397C1E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F39781E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift */; };
+		472F397E1E1D0B0B009260FB /* EnzevalosContact+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F397A1E1D0B0B009260FB /* EnzevalosContact+CoreDataProperties.swift */; };
+		472F39811E1E5347009260FB /* Mail_Address+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F397F1E1E5347009260FB /* Mail_Address+CoreDataClass.swift */; };
+		472F39821E1E5347009260FB /* Mail_Address+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F39801E1E5347009260FB /* Mail_Address+CoreDataProperties.swift */; };
+		472F39861E1FA34E009260FB /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F39851E1FA34E009260FB /* Record.swift */; };
+		472F398A1E251787009260FB /* Contact.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F39891E251787009260FB /* Contact.swift */; };
+		472F398C1E2519C8009260FB /* CNContactExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F398B1E2519C8009260FB /* CNContactExtension.swift */; };
+		472F398E1E251B8D009260FB /* MailAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F398D1E251B8D009260FB /* MailAddress.swift */; };
+		472F39901E252470009260FB /* CNMailAddressesExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472F398F1E252470009260FB /* CNMailAddressesExtension.swift */; };
+		474054982244D7A9007CF83B /* MailServerConfigurationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474054972244D7A9007CF83B /* MailServerConfigurationTest.swift */; };
+		474994022261E4E6000F8DA5 /* SimpleSendIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474994012261E4E6000F8DA5 /* SimpleSendIcon.swift */; };
+		4751C6EE233CA583006B2A4D /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751C6ED233CA583006B2A4D /* DateExtension.swift */; };
+		4751C6F82343B37C006B2A4D /* Onboarding.Video.Click.Eng.m4v in Resources */ = {isa = PBXBuildFile; fileRef = 4751C6F72343B377006B2A4D /* Onboarding.Video.Click.Eng.m4v */; };
+		4751C6FA23449699006B2A4D /* CryptoManagementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751C6F923449699006B2A4D /* CryptoManagementViewController.swift */; };
+		4751C6FC2344C8D1006B2A4D /* KeyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751C6FB2344C8D1006B2A4D /* KeyTableViewController.swift */; };
+		4751C7002344D37C006B2A4D /* SecretKey+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751C6FE2344D37C006B2A4D /* SecretKey+CoreDataClass.swift */; };
+		4751C7012344D37C006B2A4D /* SecretKey+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751C6FF2344D37C006B2A4D /* SecretKey+CoreDataProperties.swift */; };
+		4756DE0E20402F8E00452288 /* invitationTextCensor.html in Resources */ = {isa = PBXBuildFile; fileRef = 4756DE0D20402F8E00452288 /* invitationTextCensor.html */; };
+		475B00331F7B9565006CDD41 /* SwiftPGP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475B00301F7B9565006CDD41 /* SwiftPGP.swift */; };
+		475B00341F7B9565006CDD41 /* Cryptography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475B00311F7B9565006CDD41 /* Cryptography.swift */; };
+		475B00351F7B9565006CDD41 /* CryptoObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475B00321F7B9565006CDD41 /* CryptoObject.swift */; };
+		475B00421F7BB6D6006CDD41 /* PersistentKey+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475B00401F7BB6D6006CDD41 /* PersistentKey+CoreDataClass.swift */; };
+		475B00431F7BB6D6006CDD41 /* PersistentKey+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475B00411F7BB6D6006CDD41 /* PersistentKey+CoreDataProperties.swift */; };
+		475DF4791F0D54C9009D807F /* Folder+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475DF4771F0D54C9009D807F /* Folder+CoreDataClass.swift */; };
+		475DF47A1F0D54C9009D807F /* Folder+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475DF4781F0D54C9009D807F /* Folder+CoreDataProperties.swift */; };
+		476142081E07E52B00FD5E4F /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476142071E07E52B00FD5E4F /* Theme.swift */; };
+		4761420A1E082F9C00FD5E4F /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 476142091E082F9C00FD5E4F /* Settings.bundle */; };
+		476373C21E09BA88004D5EFE /* UserData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476373C11E09BA88004D5EFE /* UserData.swift */; };
+		4764067E2416AA6F00C7D426 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 476406092416AA6F00C7D426 /* libcrypto.a */; };
+		476406802416AA6F00C7D426 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4764060B2416AA6F00C7D426 /* libssl.a */; };
+		476406822416AA6F00C7D426 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 4764060F2416AA6F00C7D426 /* LICENSE */; };
+		476406842416AA9100C7D426 /* TestOpenSSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476406832416AA9100C7D426 /* TestOpenSSL.swift */; };
+		476406952416B54D00C7D426 /* KeyRecordRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476406892416B54D00C7D426 /* KeyRecordRow.swift */; };
+		476406962416B54D00C7D426 /* Inbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4764068A2416B54D00C7D426 /* Inbox.swift */; };
+		476406972416B54D00C7D426 /* InboxCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4764068B2416B54D00C7D426 /* InboxCoordinator.swift */; };
+		476406982416B54D00C7D426 /* CiricleImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4764068D2416B54D00C7D426 /* CiricleImage.swift */; };
+		476406992416B54D00C7D426 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4764068E2416B54D00C7D426 /* SearchView.swift */; };
+		4764069A2416B54D00C7D426 /* MailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4764068F2416B54D00C7D426 /* MailView.swift */; };
+		4764069C2416B54D00C7D426 /* VCSwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476406922416B54D00C7D426 /* VCSwiftUIView.swift */; };
+		4764069D2416B54D00C7D426 /* Stroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476406942416B54D00C7D426 /* Stroke.swift */; };
+		4764069F2416B5A600C7D426 /* NewOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4764069E2416B5A600C7D426 /* NewOnboardingView.swift */; };
+		476406A12416B5C800C7D426 /* OnboardingIntro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476406A02416B5C800C7D426 /* OnboardingIntro.swift */; };
+		476801DB218436B600F7F259 /* Autocrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476801DA218436B600F7F259 /* Autocrypt.swift */; };
+		476801DE21846A5A00F7F259 /* OutgoingMail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476801DD21846A5A00F7F259 /* OutgoingMail.swift */; };
+		476916A0216B86A100491527 /* PersistentMail +CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4769169F216B86A100491527 /* PersistentMail +CoreDataClass.swift */; };
+		476916A2216B86CF00491527 /* EnzevalosContact+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476916A1216B86CF00491527 /* EnzevalosContact+CoreDataClass.swift */; };
+		47691A8A1ECB56D1004BCFC5 /* Mail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47691A891ECB56D1004BCFC5 /* Mail.swift */; };
+		47691A8C1ECC3EC7004BCFC5 /* EphemeralMail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47691A8B1ECC3EC7004BCFC5 /* EphemeralMail.swift */; };
+		476EEF9922A872BF00BB4EF7 /* enzevalos_iphoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476EEF9822A872BF00BB4EF7 /* enzevalos_iphoneUITests.swift */; };
+		476EEFA122A873A800BB4EF7 /* OnboardingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476EEFA022A873A800BB4EF7 /* OnboardingTest.swift */; };
+		476EEFA722A87B9800BB4EF7 /* accounts.json in Resources */ = {isa = PBXBuildFile; fileRef = 476EEFA622A87B9800BB4EF7 /* accounts.json */; };
+		4774DD7322CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7222CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc */; };
+		4774DD7522D0015F00BD8CF6 /* multiIDs.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7422D0015F00BD8CF6 /* multiIDs.eml */; };
+		4774DD7B22D3F5D100BD8CF6 /* multiIDs2.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7A22D3F5D100BD8CF6 /* multiIDs2.eml */; };
+		4774DD7E22D4062200BD8CF6 /* Bob Letterbox (0B6CD0A0) – Secret.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7C22D4062200BD8CF6 /* Bob Letterbox (0B6CD0A0) – Secret.asc */; };
+		4774DD7F22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD7D22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc */; };
+		4774DD8122D4067E00BD8CF6 /* signedEncMailFromApple.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4774DD8022D4067D00BD8CF6 /* signedEncMailFromApple.eml */; };
+		477548DE21F5DABE000B22A8 /* MailServerConnectionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477548DD21F5DABE000B22A8 /* MailServerConnectionError.swift */; };
+		477548E221F77466000B22A8 /* SecurityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477548E121F77466000B22A8 /* SecurityIndicator.swift */; };
+		477548E421F77BA0000B22A8 /* StudyParameterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477548E321F77BA0000B22A8 /* StudyParameterProtocol.swift */; };
+		477670C4228453FB00043604 /* ButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 477670C3228453FB00043604 /* ButtonCell.xib */; };
+		477670C6228454F700043604 /* ButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477670C5228454F700043604 /* ButtonCell.swift */; };
+		478154A721FF3F0900A931EC /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478154A621FF3F0900A931EC /* Warning.swift */; };
+		478154A921FF3FF400A931EC /* Invitation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478154A821FF3FF400A931EC /* Invitation.swift */; };
+		478154AC21FF6A9600A931EC /* Mailbot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478154AB21FF6A9600A931EC /* Mailbot.swift */; };
+		478154AE2200641900A931EC /* StudyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478154AD2200641900A931EC /* StudyTest.swift */; };
+		478AF715222FD5C600AEF69E /* IncomingMail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478AF714222FD5C600AEF69E /* IncomingMail.swift */; };
+		479011492289975D0057AB04 /* NoSecIconStyleKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479011482289975C0057AB04 /* NoSecIconStyleKit.swift */; };
+		479AFDA222571AB90063A332 /* EccAlice(777879D4)–Public.asc in Resources */ = {isa = PBXBuildFile; fileRef = 479AFDA122571AB90063A332 /* EccAlice(777879D4)–Public.asc */; };
+		479B5977206914BE00B3944D /* CryptoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479B5976206914BE00B3944D /* CryptoTests.swift */; };
+		479B597820691BE400B3944D /* ObjectivePGP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47CEF4EC2052C3E600887CDB /* ObjectivePGP.framework */; };
+		479B597920691BFB00B3944D /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E32052B49800AA832F /* libbz2.tbd */; };
+		479B597A20691C0600B3944D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E12052B48E00AA832F /* libz.tbd */; };
+		479B597B20691C1A00B3944D /* ObjectivePGP.framework in Resources */ = {isa = PBXBuildFile; fileRef = 47CEF4EA2052C3C700887CDB /* ObjectivePGP.framework */; };
+		479C649621F2139B00A01071 /* support_pk.asc in Resources */ = {isa = PBXBuildFile; fileRef = 479C649521F2139B00A01071 /* support_pk.asc */; };
+		479C649A21F45DAF00A01071 /* HideShowPasswordTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479C649821F45DAF00A01071 /* HideShowPasswordTextField.swift */; };
+		479C649B21F45DAF00A01071 /* PasswordToggleVisibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479C649921F45DAF00A01071 /* PasswordToggleVisibilityView.swift */; };
+		47A2A56E2350A4EF0013883D /* MoreInformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2A56D2350A4EF0013883D /* MoreInformationViewController.swift */; };
+		47A2A57223599D180013883D /* FeedbackButtonHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2A57123599D180013883D /* FeedbackButtonHelper.swift */; };
+		47A5D6E22294BF3B0084F81D /* TempKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5D6E12294BF3A0084F81D /* TempKey.swift */; };
+		47A5D6E42294BFF50084F81D /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5D6E32294BFF50084F81D /* Logger.swift */; };
+		47C036FF2347C0F5006295E8 /* ImportKeyOverviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C036FE2347C0F4006295E8 /* ImportKeyOverviewController.swift */; };
+		47C037032347D4D1006295E8 /* PasteKeyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C037022347D4D1006295E8 /* PasteKeyViewController.swift */; };
+		47C22281218AFD6300BD2C2B /* AutocryptTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C22280218AFD6300BD2C2B /* AutocryptTest.swift */; };
+		47C22283218B02C700BD2C2B /* autocryptSimpleExample1.eml in Resources */ = {isa = PBXBuildFile; fileRef = 47C22282218B02C700BD2C2B /* autocryptSimpleExample1.eml */; };
+		47CD5AAA2012368D00E771A1 /* logging_pk.asc in Resources */ = {isa = PBXBuildFile; fileRef = 47CD5AA82012368D00E771A1 /* logging_pk.asc */; };
+		47CD5AAD2012369400E771A1 /* support_pk2.asc in Resources */ = {isa = PBXBuildFile; fileRef = 47CD5AAC2012369300E771A1 /* support_pk2.asc */; };
+		47CEAC98222541B40075B7DC /* MailSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CEAC97222541B40075B7DC /* MailSession.swift */; };
+		47CEF4EB2052C3C800887CDB /* ObjectivePGP.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 47CEF4EA2052C3C700887CDB /* ObjectivePGP.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		47CEF4ED2052C3E700887CDB /* ObjectivePGP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47CEF4EC2052C3E600887CDB /* ObjectivePGP.framework */; };
+		47D1302B1F7CEE6D007B14DF /* DebugSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D1302A1F7CEE6D007B14DF /* DebugSettings.swift */; };
+		47E7376E22845EC400972401 /* SecretKeyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E7376D22845EC400972401 /* SecretKeyTableViewController.swift */; };
+		47E7377022845F3A00972401 /* KeyViews.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47E7376F22845F3A00972401 /* KeyViews.storyboard */; };
+		47E737742284610E00972401 /* KeyCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 47E737732284610E00972401 /* KeyCell.xib */; };
+		47E737762284632F00972401 /* KeyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E737752284632F00972401 /* KeyCell.swift */; };
+		47E7BE5B22319B6900C8EF94 /* EncMailFromMac.eml in Resources */ = {isa = PBXBuildFile; fileRef = 47E7BE5A22319B6900C8EF94 /* EncMailFromMac.eml */; };
+		47E7BE5D22319B7100C8EF94 /* SignedMailFromMac.eml in Resources */ = {isa = PBXBuildFile; fileRef = 47E7BE5C22319B7000C8EF94 /* SignedMailFromMac.eml */; };
+		47E7BE5F22319B7D00C8EF94 /* SecureMailFromMac.eml in Resources */ = {isa = PBXBuildFile; fileRef = 47E7BE5E22319B7D00C8EF94 /* SecureMailFromMac.eml */; };
+		47E7BE6122319B8F00C8EF94 /* PlainMailFromMac.eml in Resources */ = {isa = PBXBuildFile; fileRef = 47E7BE6022319B8F00C8EF94 /* PlainMailFromMac.eml */; };
+		47E7BE632232BD0A00C8EF94 /* SignedEncMailFromMac.eml in Resources */ = {isa = PBXBuildFile; fileRef = 47E7BE622232BD0A00C8EF94 /* SignedEncMailFromMac.eml */; };
+		47EABF09241A9C8700774A93 /* AuthenticationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EABF06241A9C8700774A93 /* AuthenticationModel.swift */; };
+		47EABF0A241A9C8700774A93 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EABF07241A9C8700774A93 /* AuthenticationViewModel.swift */; };
+		47EABF0B241A9C8700774A93 /* AuthenticationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EABF08241A9C8700774A93 /* AuthenticationScreen.swift */; };
+		47EABF0D241A9CA800774A93 /* MailAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EABF0C241A9CA800774A93 /* MailAccount.swift */; };
+		47EABF0E2420C63600774A93 /* GeneratedMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C527A0241AA4090030BBC9 /* GeneratedMocks.swift */; };
+		47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C5279E241A9F7B0030BBC9 /* AuthenticationTests.swift */; };
+		47F0376E22A7278A0005C9DE /* accounts.json in Resources */ = {isa = PBXBuildFile; fileRef = 47F0376D22A7278A0005C9DE /* accounts.json */; };
+		47F79240203492E3005E7DB6 /* KeyRecord+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F7923E203492E3005E7DB6 /* KeyRecord+CoreDataClass.swift */; };
+		47F79241203492E3005E7DB6 /* KeyRecord+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F7923F203492E3005E7DB6 /* KeyRecord+CoreDataProperties.swift */; };
+		47F867E02052B47C00AA832F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867DF2052B47C00AA832F /* Security.framework */; };
+		47F867E22052B48E00AA832F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E12052B48E00AA832F /* libz.tbd */; };
+		47F867E42052B49800AA832F /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 47F867E32052B49800AA832F /* libbz2.tbd */; };
+		50F2E7D66366C779705987A7 /* Pods_enzevalos_iphoneUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF67EF30BB065CC9C0D17940 /* Pods_enzevalos_iphoneUITests.framework */; };
+		71DF08982421520D00162B74 /* EmailStringExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71DF08972421520D00162B74 /* EmailStringExtensionTests.swift */; };
+		71DFE5BA240679E80042019C /* HeaderExtractionValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */; };
+		7500EE9D4F3130671F5C1AE2 /* Pods_enzevalos_iphoneTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7977EA7012D8E98D186D5C60 /* Pods_enzevalos_iphoneTests.framework */; };
+		8428A8531F4369C0007649A5 /* Gamification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8428A8521F4369C0007649A5 /* Gamification.storyboard */; };
+		8428A8551F4369CF007649A5 /* GamificationElements.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8428A8541F4369CF007649A5 /* GamificationElements.xcassets */; };
+		8428A85C1F436A05007649A5 /* ArrowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8581F436A05007649A5 /* ArrowView.swift */; };
+		8428A85D1F436A05007649A5 /* Badges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8591F436A05007649A5 /* Badges.swift */; };
+		8428A85E1F436A05007649A5 /* CircleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A85A1F436A05007649A5 /* CircleView.swift */; };
+		8428A85F1F436A05007649A5 /* GamificationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A85B1F436A05007649A5 /* GamificationData.swift */; };
+		8428A8651F436A11007649A5 /* BadgeCaseCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8601F436A11007649A5 /* BadgeCaseCollectionViewCell.swift */; };
+		8428A8661F436A11007649A5 /* ArrowTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8611F436A11007649A5 /* ArrowTableViewCell.swift */; };
+		8428A8671F436A11007649A5 /* SubBadgeHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8621F436A11007649A5 /* SubBadgeHeaderTableViewCell.swift */; };
+		8428A8681F436A11007649A5 /* SubBadgeTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8631F436A11007649A5 /* SubBadgeTableViewCell.swift */; };
+		8428A8691F436A11007649A5 /* UserNameGamificationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8641F436A11007649A5 /* UserNameGamificationTableViewCell.swift */; };
+		8428A86E1F436A1E007649A5 /* BadgeCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A86A1F436A1E007649A5 /* BadgeCase.swift */; };
+		8428A86F1F436A1E007649A5 /* InviteFriendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A86B1F436A1E007649A5 /* InviteFriendViewController.swift */; };
+		8428A8701F436A1E007649A5 /* LinearBadgeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A86C1F436A1E007649A5 /* LinearBadgeViewController.swift */; };
+		8428A8711F436A1E007649A5 /* GamificationStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A86D1F436A1E007649A5 /* GamificationStatusViewController.swift */; };
+		8428A8831F436AC9007649A5 /* GamificationDataUnitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428A8561F4369EA007649A5 /* GamificationDataUnitTest.swift */; };
+		8428A8841F436ACC007649A5 /* GamificationElements.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8428A8541F4369CF007649A5 /* GamificationElements.xcassets */; };
+		988C9C5D240D507A006213F0 /* UrlStringExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988C9C5C240D507A006213F0 /* UrlStringExtensionTests.swift */; };
+		A102AA8A1EDDB4F40024B457 /* videoOnboarding2.m4v in Resources */ = {isa = PBXBuildFile; fileRef = A102AA891EDDB4E80024B457 /* videoOnboarding2.m4v */; };
+		A1083A541E8BFEA6003666B7 /* Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1083A531E8BFEA6003666B7 /* Onboarding.swift */; };
+		A10DAA5721F37600005D8BBB /* IntroInfoButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10DAA5621F37600005D8BBB /* IntroInfoButton.swift */; };
+		A10DE4201EFAA2CE005E8189 /* FolderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10DE41F1EFAA2CE005E8189 /* FolderViewController.swift */; };
+		A111F6AD1FA77B170060AFDE /* LoggerDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = A111F6AC1FA77B170060AFDE /* LoggerDetail.swift */; };
+		A1123E6A1DA682850069551C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1123E6C1DA682850069551C /* Localizable.strings */; };
+		A114E4321FACB23000E40243 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A114E4311FACB23000E40243 /* StringExtension.swift */; };
+		A12F91D821F3A99800AB0589 /* NSLayoutConstraintExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12F91D721F3A99800AB0589 /* NSLayoutConstraintExtension.swift */; };
+		A12FC23120221A1400196008 /* ExportInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12FC23020221A1400196008 /* ExportInfoViewController.swift */; };
+		A13526791D955BDF00D3BFE1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A13526781D955BDF00D3BFE1 /* AppDelegate.swift */; };
+		A13526811D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A135267F1D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodeld */; };
+		A13526861D955BDF00D3BFE1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A13526841D955BDF00D3BFE1 /* LaunchScreen.storyboard */; };
+		A142E70921E7919F000395E3 /* IntroContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A142E70821E7919F000395E3 /* IntroContactViewController.swift */; };
+		A15D215B223BE5F4003E0CE0 /* TempAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15D215A223BE5F4003E0CE0 /* TempAttachment.swift */; };
+		A15D215D223BE614003E0CE0 /* attachment.eml in Resources */ = {isa = PBXBuildFile; fileRef = A15D215C223BE614003E0CE0 /* attachment.eml */; };
+		A15D215F223BE6E4003E0CE0 /* MailTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15D215E223BE6E4003E0CE0 /* MailTest.swift */; };
+		A16BA2121E0439B6005E29E3 /* providers.json in Resources */ = {isa = PBXBuildFile; fileRef = A16BA2111E0439B6005E29E3 /* providers.json */; };
+		A1735DFA205AB88500B336DB /* SendViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1735DF9205AB88500B336DB /* SendViewState.swift */; };
+		A182182721E5012300918A29 /* Intro.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A182182621E5012300918A29 /* Intro.storyboard */; };
+		A182182C21E5072200918A29 /* IntroDescriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A182182B21E5072200918A29 /* IntroDescriptionViewController.swift */; };
+		A182182E21E50D8D00918A29 /* IntroButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A182182D21E50D8D00918A29 /* IntroButtonViewController.swift */; };
+		A182183221E518A400918A29 /* IntroContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A182183121E518A400918A29 /* IntroContactCell.xib */; };
+		A182183421E51DD200918A29 /* IntroContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A182183321E51DD200918A29 /* IntroContactCell.swift */; };
+		A18E7D771FBDE5D9002F7CC9 /* LoggingEventType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A18E7D761FBDE5D9002F7CC9 /* LoggingEventType.swift */; };
+		A198D2292056B384004CC838 /* SendViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A198D2282056B384004CC838 /* SendViewDelegate.swift */; };
+		A1A9DE731F864B0500B808AA /* ExportCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1A9DE721F864B0500B808AA /* ExportCells.swift */; };
+		A1ACDD0921EB9C4C00A059D0 /* IntroInputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1ACDD0821EB9C4C00A059D0 /* IntroInputViewController.swift */; };
+		A1AEBA5921E808CB00C84E59 /* IntroYesNoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1AEBA5821E808CB00C84E59 /* IntroYesNoViewController.swift */; };
+		A1B49E5D21E54CBF00ED86FC /* IntroContactTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B49E5C21E54CBF00ED86FC /* IntroContactTableViewController.swift */; };
+		A1B49E5F21E54EE700ED86FC /* IntroContactView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1B49E5E21E54EE700ED86FC /* IntroContactView.xib */; };
+		A1B49E6421E55ECD00ED86FC /* IntroPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B49E6321E55ECD00ED86FC /* IntroPageViewController.swift */; };
+		A1BE3FF61E9664660040114B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1BE3FF81E9664660040114B /* InfoPlist.strings */; };
+		A1C3270E1DB907D900CE2ED5 /* TextFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C3270D1DB907D900CE2ED5 /* TextFormatter.swift */; };
+		A1C62E9A2018F716000E5273 /* OnboardingValueState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C62E992018F716000E5273 /* OnboardingValueState.swift */; };
+		A1D5076F1E80257A00B68B38 /* KeyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1D5076E1E80257A00B68B38 /* KeyViewController.swift */; };
+		A1E2324E1F0FA41A00DC9D40 /* FolderListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1E2324D1F0FA41A00DC9D40 /* FolderListCell.swift */; };
+		A1E5960E1FCC871F003791E9 /* researchteam.asc in Resources */ = {isa = PBXBuildFile; fileRef = A1E5960D1FCC871E003791E9 /* researchteam.asc */; };
+		A1EB057A1D956829008659C1 /* ContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05791D956829008659C1 /* ContactCell.swift */; };
+		A1EB057C1D956838008659C1 /* MailHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB057B1D956838008659C1 /* MailHandler.swift */; };
+		A1EB057E1D956848008659C1 /* VENDataDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB057D1D956848008659C1 /* VENDataDelegate.swift */; };
+		A1EB05801D956851008659C1 /* SendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB057F1D956851008659C1 /* SendViewController.swift */; };
+		A1EB05821D95685B008659C1 /* CollectionDataDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05811D95685B008659C1 /* CollectionDataDelegate.swift */; };
+		A1EB05841D956867008659C1 /* TableViewDataDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05831D956867008659C1 /* TableViewDataDelegate.swift */; };
+		A1EB05861D956872008659C1 /* FrequentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05851D956872008659C1 /* FrequentCell.swift */; };
+		A1EB05881D956879008659C1 /* AddressHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05871D956879008659C1 /* AddressHandler.swift */; };
+		A1EB058A1D956890008659C1 /* ContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1EB05891D956890008659C1 /* ContactCell.xib */; };
+		A1EB058C1D9568AB008659C1 /* FrequentCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1EB058B1D9568AB008659C1 /* FrequentCell.xib */; };
+		A1EB05901D956923008659C1 /* ReadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB058F1D956923008659C1 /* ReadViewController.swift */; };
+		A1EB05941D956931008659C1 /* InboxCellDelegator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05931D956931008659C1 /* InboxCellDelegator.swift */; };
+		A1EB05961D956939008659C1 /* InboxTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05951D956939008659C1 /* InboxTableViewCell.swift */; };
+		A1EB05981D956947008659C1 /* InboxViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB05971D956947008659C1 /* InboxViewController.swift */; };
+		A1EB05A01D95696C008659C1 /* MessageBodyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EB059F1D95696C008659C1 /* MessageBodyTableViewCell.swift */; };
+		A1EB05A41D956E32008659C1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A1EB05A31D956E32008659C1 /* Assets.xcassets */; };
+		A1ECE54B1EFBE7ED0009349F /* FolderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1ECE54A1EFBE7ED0009349F /* FolderCell.swift */; };
+		A1EFF93321E6655C003BB240 /* IntroTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EFF93221E6655C003BB240 /* IntroTableView.swift */; };
+		A1F8541021E8A60800614514 /* IntroSecretViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F8540F21E8A60800614514 /* IntroSecretViewController.swift */; };
+		A1F992291DA7C9100073BF1B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A1F9922B1DA7C9100073BF1B /* Main.storyboard */; };
+		A1F992391DA7DD2E0073BF1B /* InboxTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1F9923B1DA7DD2E0073BF1B /* InboxTableViewCell.xib */; };
+		A1FA44A721E10E1400DB02AC /* TravelHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1FA44A621E10E1400DB02AC /* TravelHandler.swift */; };
+		A5E303D824110F6400310264 /* smime-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = A5E303D724110F6400310264 /* smime-helpers.c */; };
+		AC4001CA169DC07A7A1E3AD3 /* Pods_enzevalos_iphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94EE54279AB591E0CAB8EFD8 /* Pods_enzevalos_iphone.framework */; };
+		F113C3851F30D06800E7F1D6 /* QRScannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F113C3841F30D06800E7F1D6 /* QRScannerView.swift */; };
+		F113C38B1F3344C200E7F1D6 /* ViewControllerPannable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F113C38A1F3344C200E7F1D6 /* ViewControllerPannable.swift */; };
+		F119D2901E364B59001D732A /* AnimatedSendIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F119D28F1E364B59001D732A /* AnimatedSendIcon.swift */; };
+		F12041FB1DA3FBF7002E4940 /* ListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12041FA1DA3FBF7002E4940 /* ListViewController.swift */; };
+		F12041FD1DA409A5002E4940 /* ListViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12041FC1DA409A5002E4940 /* ListViewCell.swift */; };
+		F12060801DA540FE00F6EF37 /* RefreshControlExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F120607F1DA540FE00F6EF37 /* RefreshControlExtension.swift */; };
+		F12060821DA552FC00F6EF37 /* MailHandlerDelegator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12060811DA552FC00F6EF37 /* MailHandlerDelegator.swift */; };
+		F12D8DBB2069422A0068788E /* About.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F12D8DBD2069422A0068788E /* About.storyboard */; };
+		F14239C11F30A99C00998A83 /* QRCodeGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14239C01F30A99C00998A83 /* QRCodeGenerator.swift */; };
+		F1737ACB2031D7D70000312B /* StudySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A17FDFF2202C685800F7BA89 /* StudySettings.swift */; };
+		F1866C86201F707200B72453 /* EmailHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F1866C85201F707200B72453 /* EmailHelper.m */; };
+		F18B445E1E7044B70080C041 /* FlipTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F18B445D1E7044B70080C041 /* FlipTransition.swift */; };
+		F18B44601E704C550080C041 /* ReplaceSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = F18B445F1E704C550080C041 /* ReplaceSegue.swift */; };
+		F18B44621E73286C0080C041 /* ReadVENDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F18B44611E73286C0080C041 /* ReadVENDelegate.swift */; };
+		F18C5E561FE025D300C3B86D /* BadgeCase.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F18C5E551FE025D300C3B86D /* BadgeCase.storyboard */; };
+		F1984D721E1D327200804E1E /* IconsStyleKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1984D711E1D327200804E1E /* IconsStyleKit.swift */; };
+		F1984D741E1E92B300804E1E /* LabelStyleKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1984D731E1E92B300804E1E /* LabelStyleKit.swift */; };
+		F1ACF21C1E0C1C6800C1B843 /* ContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1ACF21B1E0C1C6800C1B843 /* ContactViewController.swift */; };
+		F1AF938F1E2D04BA00755128 /* CustomCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1AF938E1E2D04BA00755128 /* CustomCells.swift */; };
+		F1C7AC821FED6473007629DB /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1C7AC811FED6473007629DB /* AboutViewController.swift */; };
+		F1F070281FA0DF3F004A860A /* Inbox.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F1F070261FA0DF3F004A860A /* Inbox.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		476EEF9B22A872BF00BB4EF7 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A135266D1D955BDF00D3BFE1 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = A13526741D955BDF00D3BFE1;
+			remoteInfo = enzevalos_iphone;
+		};
+		A135268D1D955BE000D3BFE1 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A135266D1D955BDF00D3BFE1 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = A13526741D955BDF00D3BFE1;
+			remoteInfo = enzevalos_iphone;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		47F867DB2052B33C00AA832F /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				47CEF4EB2052C3C800887CDB /* ObjectivePGP.framework in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		0E1C457624055F87006D104A /* signinlineK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signinlineK9.eml; sourceTree = "<group>"; };
+		0E1C457724055F87006D104A /* signK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signK9.eml; sourceTree = "<group>"; };
+		0E1C457824055F87006D104A /* signencK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signencK9.eml; sourceTree = "<group>"; };
+		0E1C457924055F87006D104A /* signencinlineK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signencinlineK9.eml; sourceTree = "<group>"; };
+		0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Alice.v3.pubsec.asc; sourceTree = "<group>"; };
+		0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Alice.v3.pub.asc; sourceTree = "<group>"; };
+		0ECA5797240D496800B0F231 /* SMIME.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIME.swift; sourceTree = "<group>"; };
+		0ECEA0E7240E7081007DC71E /* SearchHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchHelper.swift; sourceTree = "<group>"; };
+		0ECEA0E9240E7D64007DC71E /* SMIME Test 1 S.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "SMIME Test 1 S.eml"; sourceTree = "<group>"; };
+		0ECEA0EB240E7D85007DC71E /* johnny C1.json.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "johnny C1.json.eml"; sourceTree = "<group>"; };
+		0ECEA0ED240E7DB0007DC71E /* evilCA.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = evilCA.p12; sourceTree = "<group>"; };
+		0ECEA0EE240E7DB0007DC71E /* myTestCA.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = myTestCA.pem; sourceTree = "<group>"; };
+		0ECEA0EF240E7DB0007DC71E /* evilkey1.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = evilkey1.p12; sourceTree = "<group>"; };
+		0ECEA0F0240E7DB0007DC71E /* otherkey1.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = otherkey1.pem; sourceTree = "<group>"; };
+		0ECEA0F1240E7DB0007DC71E /* mykey.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mykey.pem; sourceTree = "<group>"; };
+		0ECEA0F2240E7DB0007DC71E /* myTestCA.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = myTestCA.p12; sourceTree = "<group>"; };
+		0ECEA0F3240E7DB0007DC71E /* otherkey1.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = otherkey1.p12; sourceTree = "<group>"; };
+		0ECEA0F4240E7DB0007DC71E /* mykey.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = mykey.p12; sourceTree = "<group>"; };
+		0ECEA0F5240E7DB0007DC71E /* evilCA.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = evilCA.pem; sourceTree = "<group>"; };
+		0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = evilkey1.pem; sourceTree = "<group>"; };
+		0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIMETests.swift; sourceTree = "<group>"; };
+		0EF148042422543E00B3C198 /* Certificate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Certificate.swift; sourceTree = "<group>"; };
+		0EF148062422570F00B3C198 /* generic-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "generic-helpers.h"; sourceTree = "<group>"; };
+		0EF148072422572500B3C198 /* general-helpers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "general-helpers.c"; sourceTree = "<group>"; };
+		0EF148092422584F00B3C198 /* certificate-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "certificate-helpers.h"; sourceTree = "<group>"; };
+		0EF1480A2422584F00B3C198 /* certificate-helpers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "certificate-helpers.c"; sourceTree = "<group>"; };
+		0EF73F4224237E6500932FA0 /* SMIMEHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIMEHelpers.swift; sourceTree = "<group>"; };
+		0EFEF0942417C0B400BB2FF7 /* CHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CHelpers.swift; sourceTree = "<group>"; };
+		1D4A9E60565DECF52C011BC0 /* Pods-enzevalos_iphone-AdHoc.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-AdHoc.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-AdHoc/Pods-enzevalos_iphone-AdHoc.release.xcconfig"; sourceTree = "<group>"; };
+		3E6B07DD2011246500E49609 /* invitationText.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = invitationText.html; path = Invitation/invitationText.html; sourceTree = "<group>"; };
+		3E9708AD1FAC925D005825C9 /* enzevalos_iphone.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = enzevalos_iphone.entitlements; sourceTree = "<group>"; };
+		3E9708AE1FAC925D005825C9 /* enzevalos-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "enzevalos-Info.plist"; sourceTree = "<group>"; };
+		3EB4FA9D2012007C001D0625 /* DialogViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DialogViewController.swift; sourceTree = "<group>"; };
+		3EB4FA9E2012007C001D0625 /* Dialog.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Dialog.storyboard; sourceTree = "<group>"; };
+		3EB4FAA320120096001D0625 /* DialogOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DialogOption.swift; sourceTree = "<group>"; };
+		3EC35F2320037651008BDF95 /* InvitationHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InvitationHelper.swift; path = Invitation/InvitationHelper.swift; sourceTree = "<group>"; };
+		3EC35F2C200376A1008BDF95 /* SendViewController+Invitation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SendViewController+Invitation.swift"; sourceTree = "<group>"; };
+		3EC35F2F2003838E008BDF95 /* InvitationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitationTests.swift; sourceTree = "<group>"; };
+		411EB2B85F99B48FFD36F966 /* Pods-enzevalos_iphoneTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneTests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests.debug.xcconfig"; sourceTree = "<group>"; };
+		4706D65E225B7B6B00B3F1D3 /* ItunesHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItunesHandler.swift; sourceTree = "<group>"; };
+		4706D660225CD21D00B3F1D3 /* ExportKeyHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportKeyHelper.swift; sourceTree = "<group>"; };
+		470709172189BC3500DF71A3 /* plainThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = plainThunderbird.eml; sourceTree = "<group>"; };
+		470709212189C73900DF71A3 /* enc+signedInlineThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "enc+signedInlineThunderbird.eml"; sourceTree = "<group>"; };
+		470709222189C73900DF71A3 /* encThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = encThunderbird.eml; sourceTree = "<group>"; };
+		470709232189C73900DF71A3 /* encInlineThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = encInlineThunderbird.eml; sourceTree = "<group>"; };
+		470709242189C73900DF71A3 /* signedInlineThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signedInlineThunderbird.eml; sourceTree = "<group>"; };
+		470709252189C73900DF71A3 /* signedThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signedThunderbird.eml; sourceTree = "<group>"; };
+		4707092B2189C74200DF71A3 /* bobSecret.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bobSecret.asc; sourceTree = "<group>"; };
+		4707092C2189C74200DF71A3 /* alicePublic.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = alicePublic.asc; sourceTree = "<group>"; };
+		4707092F2189E1C000DF71A3 /* enc+signedThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "enc+signedThunderbird.eml"; sourceTree = "<group>"; };
+		4707096C1F8F9F4900657F41 /* ExportViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportViewController.swift; sourceTree = "<group>"; };
+		4715F636202A0248001BFFD0 /* CoreDataTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataTests.swift; sourceTree = "<group>"; };
+		47184C3822F0D8F200712A7A /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
+		471876F5223FACA900912135 /* BobPWTEST1234.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BobPWTEST1234.asc; sourceTree = "<group>"; };
+		471876F6223FACA900912135 /* BobWithoutPW.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BobWithoutPW.asc; sourceTree = "<group>"; };
+		472F396D1E14F384009260FB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		472F396F1E14F75C009260FB /* DataHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataHandler.swift; sourceTree = "<group>"; };
+		472F39781E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PersistentMail +CoreDataProperties.swift"; sourceTree = "<group>"; };
+		472F397A1E1D0B0B009260FB /* EnzevalosContact+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "EnzevalosContact+CoreDataProperties.swift"; sourceTree = "<group>"; };
+		472F397F1E1E5347009260FB /* Mail_Address+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Mail_Address+CoreDataClass.swift"; sourceTree = "<group>"; };
+		472F39801E1E5347009260FB /* Mail_Address+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Mail_Address+CoreDataProperties.swift"; sourceTree = "<group>"; };
+		472F39851E1FA34E009260FB /* Record.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Record.swift; sourceTree = "<group>"; };
+		472F39891E251787009260FB /* Contact.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contact.swift; sourceTree = "<group>"; };
+		472F398B1E2519C8009260FB /* CNContactExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNContactExtension.swift; sourceTree = "<group>"; };
+		472F398D1E251B8D009260FB /* MailAddress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailAddress.swift; sourceTree = "<group>"; };
+		472F398F1E252470009260FB /* CNMailAddressesExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNMailAddressesExtension.swift; sourceTree = "<group>"; };
+		474054972244D7A9007CF83B /* MailServerConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailServerConfigurationTest.swift; sourceTree = "<group>"; };
+		474994012261E4E6000F8DA5 /* SimpleSendIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleSendIcon.swift; sourceTree = "<group>"; };
+		4751C6ED233CA583006B2A4D /* DateExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateExtension.swift; sourceTree = "<group>"; };
+		4751C6F0233CE1E4006B2A4D /* enzevalos_iphone 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 7.xcdatamodel"; sourceTree = "<group>"; };
+		4751C6F72343B377006B2A4D /* Onboarding.Video.Click.Eng.m4v */ = {isa = PBXFileReference; lastKnownFileType = file; path = Onboarding.Video.Click.Eng.m4v; sourceTree = "<group>"; };
+		4751C6F923449699006B2A4D /* CryptoManagementViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CryptoManagementViewController.swift; sourceTree = "<group>"; };
+		4751C6FB2344C8D1006B2A4D /* KeyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyTableViewController.swift; sourceTree = "<group>"; };
+		4751C6FD2344D169006B2A4D /* enzevalos_iphone 8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 8.xcdatamodel"; sourceTree = "<group>"; };
+		4751C6FE2344D37C006B2A4D /* SecretKey+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SecretKey+CoreDataClass.swift"; sourceTree = "<group>"; };
+		4751C6FF2344D37C006B2A4D /* SecretKey+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SecretKey+CoreDataProperties.swift"; sourceTree = "<group>"; };
+		4756DE0D20402F8E00452288 /* invitationTextCensor.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = invitationTextCensor.html; path = Invitation/invitationTextCensor.html; sourceTree = "<group>"; };
+		475B00301F7B9565006CDD41 /* SwiftPGP.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftPGP.swift; sourceTree = "<group>"; };
+		475B00311F7B9565006CDD41 /* Cryptography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cryptography.swift; sourceTree = "<group>"; };
+		475B00321F7B9565006CDD41 /* CryptoObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoObject.swift; sourceTree = "<group>"; };
+		475B00401F7BB6D6006CDD41 /* PersistentKey+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PersistentKey+CoreDataClass.swift"; sourceTree = "<group>"; };
+		475B00411F7BB6D6006CDD41 /* PersistentKey+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PersistentKey+CoreDataProperties.swift"; sourceTree = "<group>"; };
+		475DF4771F0D54C9009D807F /* Folder+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Folder+CoreDataClass.swift"; sourceTree = "<group>"; };
+		475DF4781F0D54C9009D807F /* Folder+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Folder+CoreDataProperties.swift"; sourceTree = "<group>"; };
+		476142071E07E52B00FD5E4F /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
+		476142091E082F9C00FD5E4F /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
+		476373C11E09BA88004D5EFE /* UserData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserData.swift; sourceTree = "<group>"; };
+		476406092416AA6F00C7D426 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = "<group>"; };
+		4764060B2416AA6F00C7D426 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = "<group>"; };
+		4764060E2416AA6F00C7D426 /* opensslconf-template.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "opensslconf-template.h"; sourceTree = "<group>"; };
+		4764060F2416AA6F00C7D426 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
+		476406112416AA6F00C7D426 /* pem2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem2.h; sourceTree = "<group>"; };
+		476406122416AA6F00C7D426 /* kdf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kdf.h; sourceTree = "<group>"; };
+		476406132416AA6F00C7D426 /* pem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem.h; sourceTree = "<group>"; };
+		476406142416AA6F00C7D426 /* asyncerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asyncerr.h; sourceTree = "<group>"; };
+		476406152416AA6F00C7D426 /* md2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md2.h; sourceTree = "<group>"; };
+		476406162416AA6F00C7D426 /* ssl3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl3.h; sourceTree = "<group>"; };
+		476406172416AA6F00C7D426 /* ossl_typ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ossl_typ.h; sourceTree = "<group>"; };
+		476406182416AA6F00C7D426 /* dtls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtls1.h; sourceTree = "<group>"; };
+		476406192416AA6F00C7D426 /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = "<group>"; };
+		4764061A2416AA6F00C7D426 /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bn.h; sourceTree = "<group>"; };
+		4764061B2416AA6F00C7D426 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = "<group>"; };
+		4764061C2416AA6F00C7D426 /* cms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cms.h; sourceTree = "<group>"; };
+		4764061D2416AA6F00C7D426 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = "<group>"; };
+		4764061E2416AA6F00C7D426 /* conf_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf_api.h; sourceTree = "<group>"; };
+		4764061F2416AA6F00C7D426 /* x509.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509.h; sourceTree = "<group>"; };
+		476406202416AA6F00C7D426 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = "<group>"; };
+		476406212416AA6F00C7D426 /* objectserr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objectserr.h; sourceTree = "<group>"; };
+		476406222416AA6F00C7D426 /* opensslconf_ios_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf_ios_x86_64.h; sourceTree = "<group>"; };
+		476406232416AA6F00C7D426 /* cmserr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmserr.h; sourceTree = "<group>"; };
+		476406242416AA6F00C7D426 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = "<group>"; };
+		476406252416AA6F00C7D426 /* opensslconf_tvos_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf_tvos_x86_64.h; sourceTree = "<group>"; };
+		476406262416AA6F00C7D426 /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = "<group>"; };
+		476406272416AA6F00C7D426 /* symhacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = symhacks.h; sourceTree = "<group>"; };
+		476406282416AA6F00C7D426 /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = "<group>"; };
+		476406292416AA6F00C7D426 /* bioerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bioerr.h; sourceTree = "<group>"; };
+		4764062A2416AA6F00C7D426 /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = "<group>"; };
+		4764062B2416AA6F00C7D426 /* bio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = "<group>"; };
+		4764062C2416AA6F00C7D426 /* rc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc2.h; sourceTree = "<group>"; };
+		4764062D2416AA6F00C7D426 /* dh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dh.h; sourceTree = "<group>"; };
+		4764062E2416AA6F00C7D426 /* x509v3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509v3.h; sourceTree = "<group>"; };
+		4764062F2416AA6F00C7D426 /* conf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf.h; sourceTree = "<group>"; };
+		476406302416AA6F00C7D426 /* rand_drbg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand_drbg.h; sourceTree = "<group>"; };
+		476406312416AA6F00C7D426 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = "<group>"; };
+		476406322416AA6F00C7D426 /* pemerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pemerr.h; sourceTree = "<group>"; };
+		476406332416AA6F00C7D426 /* x509_vfy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509_vfy.h; sourceTree = "<group>"; };
+		476406342416AA6F00C7D426 /* txt_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = txt_db.h; sourceTree = "<group>"; };
+		476406352416AA6F00C7D426 /* comperr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comperr.h; sourceTree = "<group>"; };
+		476406362416AA6F00C7D426 /* cterr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cterr.h; sourceTree = "<group>"; };
+		476406372416AA6F00C7D426 /* safestack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = safestack.h; sourceTree = "<group>"; };
+		476406382416AA6F00C7D426 /* ecdsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = "<group>"; };
+		476406392416AA6F00C7D426 /* sslerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sslerr.h; sourceTree = "<group>"; };
+		4764063A2416AA6F00C7D426 /* rc5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc5.h; sourceTree = "<group>"; };
+		4764063B2416AA6F00C7D426 /* uierr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uierr.h; sourceTree = "<group>"; };
+		4764063C2416AA6F00C7D426 /* x509v3err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509v3err.h; sourceTree = "<group>"; };
+		4764063D2416AA6F00C7D426 /* objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objects.h; sourceTree = "<group>"; };
+		4764063E2416AA6F00C7D426 /* pkcs12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs12.h; sourceTree = "<group>"; };
+		4764063F2416AA6F00C7D426 /* crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto.h; sourceTree = "<group>"; };
+		476406402416AA6F00C7D426 /* opensslv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslv.h; sourceTree = "<group>"; };
+		476406412416AA6F00C7D426 /* evperr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evperr.h; sourceTree = "<group>"; };
+		476406422416AA6F00C7D426 /* pkcs7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs7.h; sourceTree = "<group>"; };
+		476406432416AA6F00C7D426 /* obj_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = obj_mac.h; sourceTree = "<group>"; };
+		476406442416AA6F00C7D426 /* ct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ct.h; sourceTree = "<group>"; };
+		476406452416AA6F00C7D426 /* async.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = async.h; sourceTree = "<group>"; };
+		476406462416AA6F00C7D426 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
+		476406472416AA6F00C7D426 /* ssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl.h; sourceTree = "<group>"; };
+		476406482416AA6F00C7D426 /* srp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srp.h; sourceTree = "<group>"; };
+		476406492416AA6F00C7D426 /* camellia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = "<group>"; };
+		4764064A2416AA6F00C7D426 /* opensslconf_ios_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf_ios_arm64.h; sourceTree = "<group>"; };
+		4764064B2416AA6F00C7D426 /* dherr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dherr.h; sourceTree = "<group>"; };
+		4764064C2416AA6F00C7D426 /* evp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evp.h; sourceTree = "<group>"; };
+		4764064D2416AA6F00C7D426 /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = "<group>"; };
+		4764064E2416AA6F00C7D426 /* md4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = "<group>"; };
+		4764064F2416AA6F00C7D426 /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = "<group>"; };
+		476406502416AA6F00C7D426 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
+		476406512416AA6F00C7D426 /* engineerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engineerr.h; sourceTree = "<group>"; };
+		476406522416AA6F00C7D426 /* comp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comp.h; sourceTree = "<group>"; };
+		476406532416AA6F00C7D426 /* pkcs12err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs12err.h; sourceTree = "<group>"; };
+		476406542416AA6F00C7D426 /* cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast.h; sourceTree = "<group>"; };
+		476406552416AA6F00C7D426 /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = "<group>"; };
+		476406562416AA6F00C7D426 /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = "<group>"; };
+		476406572416AA6F00C7D426 /* des.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = "<group>"; };
+		476406582416AA6F00C7D426 /* ocsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ocsp.h; sourceTree = "<group>"; };
+		476406592416AA6F00C7D426 /* ec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ec.h; sourceTree = "<group>"; };
+		4764065A2416AA6F00C7D426 /* ecdh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdh.h; sourceTree = "<group>"; };
+		4764065B2416AA6F00C7D426 /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = "<group>"; };
+		4764065C2416AA6F00C7D426 /* opensslconf_tvos_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf_tvos_arm64.h; sourceTree = "<group>"; };
+		4764065D2416AA6F00C7D426 /* ecerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecerr.h; sourceTree = "<group>"; };
+		4764065E2416AA6F00C7D426 /* ts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts.h; sourceTree = "<group>"; };
+		4764065F2416AA6F00C7D426 /* cryptoerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cryptoerr.h; sourceTree = "<group>"; };
+		476406602416AA6F00C7D426 /* storeerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = storeerr.h; sourceTree = "<group>"; };
+		476406612416AA6F00C7D426 /* buffererr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffererr.h; sourceTree = "<group>"; };
+		476406622416AA6F00C7D426 /* seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seed.h; sourceTree = "<group>"; };
+		476406632416AA6F00C7D426 /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = "<group>"; };
+		476406642416AA6F00C7D426 /* ssl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl2.h; sourceTree = "<group>"; };
+		476406652416AA6F00C7D426 /* tserr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tserr.h; sourceTree = "<group>"; };
+		476406662416AA6F00C7D426 /* rsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsa.h; sourceTree = "<group>"; };
+		476406672416AA6F00C7D426 /* ripemd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripemd.h; sourceTree = "<group>"; };
+		476406682416AA6F00C7D426 /* whrlpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = whrlpool.h; sourceTree = "<group>"; };
+		476406692416AA6F00C7D426 /* tls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.h; sourceTree = "<group>"; };
+		4764066A2416AA6F00C7D426 /* rsaerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsaerr.h; sourceTree = "<group>"; };
+		4764066B2416AA6F00C7D426 /* randerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = randerr.h; sourceTree = "<group>"; };
+		4764066C2416AA6F00C7D426 /* mdc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mdc2.h; sourceTree = "<group>"; };
+		4764066D2416AA6F00C7D426 /* ocsperr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ocsperr.h; sourceTree = "<group>"; };
+		4764066E2416AA6F00C7D426 /* x509err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509err.h; sourceTree = "<group>"; };
+		4764066F2416AA6F00C7D426 /* pkcs7err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs7err.h; sourceTree = "<group>"; };
+		476406702416AA6F00C7D426 /* dsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsa.h; sourceTree = "<group>"; };
+		476406712416AA6F00C7D426 /* kdferr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kdferr.h; sourceTree = "<group>"; };
+		476406722416AA6F00C7D426 /* srtp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srtp.h; sourceTree = "<group>"; };
+		476406732416AA6F00C7D426 /* asn1t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1t.h; sourceTree = "<group>"; };
+		476406742416AA6F00C7D426 /* dsaerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsaerr.h; sourceTree = "<group>"; };
+		476406752416AA6F00C7D426 /* bnerr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bnerr.h; sourceTree = "<group>"; };
+		476406762416AA6F00C7D426 /* conferr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conferr.h; sourceTree = "<group>"; };
+		476406772416AA6F00C7D426 /* cmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmac.h; sourceTree = "<group>"; };
+		476406782416AA6F00C7D426 /* ebcdic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ebcdic.h; sourceTree = "<group>"; };
+		476406792416AA6F00C7D426 /* opensslconf_ios_arm64e.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf_ios_arm64e.h; sourceTree = "<group>"; };
+		4764067A2416AA6F00C7D426 /* store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = store.h; sourceTree = "<group>"; };
+		4764067B2416AA6F00C7D426 /* idea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = idea.h; sourceTree = "<group>"; };
+		4764067C2416AA6F00C7D426 /* lhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lhash.h; sourceTree = "<group>"; };
+		4764067D2416AA6F00C7D426 /* asn1err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1err.h; sourceTree = "<group>"; };
+		476406832416AA9100C7D426 /* TestOpenSSL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestOpenSSL.swift; sourceTree = "<group>"; };
+		476406892416B54D00C7D426 /* KeyRecordRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyRecordRow.swift; sourceTree = "<group>"; };
+		4764068A2416B54D00C7D426 /* Inbox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Inbox.swift; sourceTree = "<group>"; };
+		4764068B2416B54D00C7D426 /* InboxCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InboxCoordinator.swift; sourceTree = "<group>"; };
+		4764068D2416B54D00C7D426 /* CiricleImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CiricleImage.swift; sourceTree = "<group>"; };
+		4764068E2416B54D00C7D426 /* SearchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
+		4764068F2416B54D00C7D426 /* MailView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailView.swift; sourceTree = "<group>"; };
+		476406922416B54D00C7D426 /* VCSwiftUIView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSwiftUIView.swift; sourceTree = "<group>"; };
+		476406942416B54D00C7D426 /* Stroke.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stroke.swift; sourceTree = "<group>"; };
+		4764069E2416B5A600C7D426 /* NewOnboardingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewOnboardingView.swift; sourceTree = "<group>"; };
+		476406A02416B5C800C7D426 /* OnboardingIntro.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingIntro.swift; sourceTree = "<group>"; };
+		476801DA218436B600F7F259 /* Autocrypt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Autocrypt.swift; sourceTree = "<group>"; };
+		476801DD21846A5A00F7F259 /* OutgoingMail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutgoingMail.swift; sourceTree = "<group>"; };
+		4769169F216B86A100491527 /* PersistentMail +CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PersistentMail +CoreDataClass.swift"; sourceTree = "<group>"; };
+		476916A1216B86CF00491527 /* EnzevalosContact+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "EnzevalosContact+CoreDataClass.swift"; sourceTree = "<group>"; };
+		47691A891ECB56D1004BCFC5 /* Mail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mail.swift; sourceTree = "<group>"; };
+		47691A8B1ECC3EC7004BCFC5 /* EphemeralMail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EphemeralMail.swift; sourceTree = "<group>"; };
+		476EEF9622A872BF00BB4EF7 /* enzevalos_iphoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = enzevalos_iphoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		476EEF9822A872BF00BB4EF7 /* enzevalos_iphoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = enzevalos_iphoneUITests.swift; sourceTree = "<group>"; };
+		476EEF9A22A872BF00BB4EF7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		476EEFA022A873A800BB4EF7 /* OnboardingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTest.swift; sourceTree = "<group>"; };
+		476EEFA622A87B9800BB4EF7 /* accounts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = accounts.json; sourceTree = "<group>"; };
+		4774DD7222CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "AliceMultiIDs (439EE43C) – Public.asc"; sourceTree = "<group>"; };
+		4774DD7422D0015F00BD8CF6 /* multiIDs.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = multiIDs.eml; sourceTree = "<group>"; };
+		4774DD7A22D3F5D100BD8CF6 /* multiIDs2.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = multiIDs2.eml; sourceTree = "<group>"; };
+		4774DD7C22D4062200BD8CF6 /* Bob Letterbox (0B6CD0A0) – Secret.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Bob Letterbox (0B6CD0A0) – Secret.asc"; sourceTree = "<group>"; };
+		4774DD7D22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Alice Letterbox (439EE43C) – Public.asc"; sourceTree = "<group>"; };
+		4774DD8022D4067D00BD8CF6 /* signedEncMailFromApple.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signedEncMailFromApple.eml; sourceTree = "<group>"; };
+		477548DD21F5DABE000B22A8 /* MailServerConnectionError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailServerConnectionError.swift; sourceTree = "<group>"; };
+		477548E121F77466000B22A8 /* SecurityIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityIndicator.swift; sourceTree = "<group>"; };
+		477548E321F77BA0000B22A8 /* StudyParameterProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyParameterProtocol.swift; sourceTree = "<group>"; };
+		477670C3228453FB00043604 /* ButtonCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ButtonCell.xib; sourceTree = "<group>"; };
+		477670C5228454F700043604 /* ButtonCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonCell.swift; sourceTree = "<group>"; };
+		478154A621FF3F0900A931EC /* Warning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Warning.swift; sourceTree = "<group>"; };
+		478154A821FF3FF400A931EC /* Invitation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Invitation.swift; sourceTree = "<group>"; };
+		478154AB21FF6A9600A931EC /* Mailbot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mailbot.swift; sourceTree = "<group>"; };
+		478154AD2200641900A931EC /* StudyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyTest.swift; sourceTree = "<group>"; };
+		478AF714222FD5C600AEF69E /* IncomingMail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IncomingMail.swift; path = mail/IncomingMail.swift; sourceTree = "<group>"; };
+		479011482289975C0057AB04 /* NoSecIconStyleKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoSecIconStyleKit.swift; sourceTree = "<group>"; };
+		479AFDA122571AB90063A332 /* EccAlice(777879D4)–Public.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "EccAlice(777879D4)–Public.asc"; sourceTree = "<group>"; };
+		479B5976206914BE00B3944D /* CryptoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CryptoTests.swift; sourceTree = "<group>"; };
+		479C649521F2139B00A01071 /* support_pk.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = support_pk.asc; sourceTree = "<group>"; };
+		479C649821F45DAF00A01071 /* HideShowPasswordTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HideShowPasswordTextField.swift; sourceTree = "<group>"; };
+		479C649921F45DAF00A01071 /* PasswordToggleVisibilityView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordToggleVisibilityView.swift; sourceTree = "<group>"; };
+		47A2A56D2350A4EF0013883D /* MoreInformationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreInformationViewController.swift; sourceTree = "<group>"; };
+		47A2A57123599D180013883D /* FeedbackButtonHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackButtonHelper.swift; sourceTree = "<group>"; };
+		47A5D6D52294B4830084F81D /* GTMAppAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GTMAppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		47A5D6DB2294B5220084F81D /* libz.1.1.3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.1.3.tbd; path = usr/lib/libz.1.1.3.tbd; sourceTree = SDKROOT; };
+		47A5D6DD2294B5480084F81D /* AppAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		47A5D6E12294BF3A0084F81D /* TempKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TempKey.swift; sourceTree = "<group>"; };
+		47A5D6E32294BFF50084F81D /* Logger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
+		47B2318A1F0D458100961B28 /* enzevalos_iphone 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 2.xcdatamodel"; sourceTree = "<group>"; };
+		47C036FE2347C0F4006295E8 /* ImportKeyOverviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportKeyOverviewController.swift; sourceTree = "<group>"; };
+		47C037022347D4D1006295E8 /* PasteKeyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasteKeyViewController.swift; sourceTree = "<group>"; };
+		47C22280218AFD6300BD2C2B /* AutocryptTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocryptTest.swift; sourceTree = "<group>"; };
+		47C22282218B02C700BD2C2B /* autocryptSimpleExample1.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = autocryptSimpleExample1.eml; sourceTree = "<group>"; };
+		47CD5AA82012368D00E771A1 /* logging_pk.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = logging_pk.asc; path = keys/logging_pk.asc; sourceTree = "<group>"; };
+		47CD5AAC2012369300E771A1 /* support_pk2.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = support_pk2.asc; path = keys/support_pk2.asc; sourceTree = "<group>"; };
+		47CEAC97222541B40075B7DC /* MailSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailSession.swift; sourceTree = "<group>"; };
+		47CEF4EA2052C3C700887CDB /* ObjectivePGP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ObjectivePGP.framework; sourceTree = "<group>"; };
+		47CEF4EC2052C3E600887CDB /* ObjectivePGP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectivePGP.framework; path = ../enzevalos_iphone_workspace/ObjectivePGP.framework; sourceTree = "<group>"; };
+		47D1302A1F7CEE6D007B14DF /* DebugSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugSettings.swift; sourceTree = "<group>"; };
+		47E7376D22845EC400972401 /* SecretKeyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretKeyTableViewController.swift; sourceTree = "<group>"; };
+		47E7376F22845F3A00972401 /* KeyViews.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = KeyViews.storyboard; sourceTree = "<group>"; };
+		47E737732284610E00972401 /* KeyCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyCell.xib; sourceTree = "<group>"; };
+		47E737752284632F00972401 /* KeyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyCell.swift; sourceTree = "<group>"; };
+		47E7BE5A22319B6900C8EF94 /* EncMailFromMac.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EncMailFromMac.eml; sourceTree = "<group>"; };
+		47E7BE5C22319B7000C8EF94 /* SignedMailFromMac.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SignedMailFromMac.eml; sourceTree = "<group>"; };
+		47E7BE5E22319B7D00C8EF94 /* SecureMailFromMac.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SecureMailFromMac.eml; sourceTree = "<group>"; };
+		47E7BE6022319B8F00C8EF94 /* PlainMailFromMac.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PlainMailFromMac.eml; sourceTree = "<group>"; };
+		47E7BE622232BD0A00C8EF94 /* SignedEncMailFromMac.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SignedEncMailFromMac.eml; sourceTree = "<group>"; };
+		47EABF06241A9C8700774A93 /* AuthenticationModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationModel.swift; sourceTree = "<group>"; };
+		47EABF07241A9C8700774A93 /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = "<group>"; };
+		47EABF08241A9C8700774A93 /* AuthenticationScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationScreen.swift; sourceTree = "<group>"; };
+		47EABF0C241A9CA800774A93 /* MailAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailAccount.swift; sourceTree = "<group>"; };
+		47F0376D22A7278A0005C9DE /* accounts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = accounts.json; sourceTree = "<group>"; };
+		47F7923E203492E3005E7DB6 /* KeyRecord+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyRecord+CoreDataClass.swift"; sourceTree = "<group>"; };
+		47F7923F203492E3005E7DB6 /* KeyRecord+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyRecord+CoreDataProperties.swift"; sourceTree = "<group>"; };
+		47F867DF2052B47C00AA832F /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
+		47F867E12052B48E00AA832F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		47F867E32052B49800AA832F /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
+		48C250BB32BF11B683003BA1 /* Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-enzevalos_iphoneUITests/Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig"; sourceTree = "<group>"; };
+		66E758F271CD65AB3E5FE7A7 /* Pods-enzevalos_iphoneUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneUITests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneUITests/Pods-enzevalos_iphoneUITests.debug.xcconfig"; sourceTree = "<group>"; };
+		670159DF240FB4E800797FA5 /* enzevalos_iphone 9.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 9.xcdatamodel"; sourceTree = "<group>"; };
+		6EBCCD02AD3B95D8317810E2 /* Pods-enzevalos_iphoneTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneTests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests.debug.xcconfig"; sourceTree = "<group>"; };
+		71DF08972421520D00162B74 /* EmailStringExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailStringExtensionTests.swift; sourceTree = "<group>"; };
+		71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderExtractionValues.swift; sourceTree = "<group>"; };
+		796D16D79BED5D60B580E602 /* Pods-enzevalos_iphoneUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneUITests.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneUITests/Pods-enzevalos_iphoneUITests.release.xcconfig"; sourceTree = "<group>"; };
+		7977EA7012D8E98D186D5C60 /* Pods_enzevalos_iphoneTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_enzevalos_iphoneTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		8428A8521F4369C0007649A5 /* Gamification.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Gamification.storyboard; sourceTree = "<group>"; };
+		8428A8541F4369CF007649A5 /* GamificationElements.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = GamificationElements.xcassets; sourceTree = "<group>"; };
+		8428A8561F4369EA007649A5 /* GamificationDataUnitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamificationDataUnitTest.swift; sourceTree = "<group>"; };
+		8428A8581F436A05007649A5 /* ArrowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrowView.swift; sourceTree = "<group>"; };
+		8428A8591F436A05007649A5 /* Badges.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Badges.swift; sourceTree = "<group>"; };
+		8428A85A1F436A05007649A5 /* CircleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircleView.swift; sourceTree = "<group>"; };
+		8428A85B1F436A05007649A5 /* GamificationData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamificationData.swift; sourceTree = "<group>"; };
+		8428A8601F436A11007649A5 /* BadgeCaseCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BadgeCaseCollectionViewCell.swift; sourceTree = "<group>"; };
+		8428A8611F436A11007649A5 /* ArrowTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrowTableViewCell.swift; sourceTree = "<group>"; };
+		8428A8621F436A11007649A5 /* SubBadgeHeaderTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubBadgeHeaderTableViewCell.swift; sourceTree = "<group>"; };
+		8428A8631F436A11007649A5 /* SubBadgeTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubBadgeTableViewCell.swift; sourceTree = "<group>"; };
+		8428A8641F436A11007649A5 /* UserNameGamificationTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserNameGamificationTableViewCell.swift; sourceTree = "<group>"; };
+		8428A86A1F436A1E007649A5 /* BadgeCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BadgeCase.swift; sourceTree = "<group>"; };
+		8428A86B1F436A1E007649A5 /* InviteFriendViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InviteFriendViewController.swift; sourceTree = "<group>"; };
+		8428A86C1F436A1E007649A5 /* LinearBadgeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinearBadgeViewController.swift; sourceTree = "<group>"; };
+		8428A86D1F436A1E007649A5 /* GamificationStatusViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamificationStatusViewController.swift; sourceTree = "<group>"; };
+		8478C5F0EC1CB76AEBE1F47A /* Pods-enzevalos_iphone-enzevalos_iphoneUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-enzevalos_iphoneUITests.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-enzevalos_iphoneUITests/Pods-enzevalos_iphone-enzevalos_iphoneUITests.release.xcconfig"; sourceTree = "<group>"; };
+		8B87EFB6CEAA31452F744015 /* Pods-enzevalos_iphoneUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneUITests.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneUITests/Pods-enzevalos_iphoneUITests.release.xcconfig"; sourceTree = "<group>"; };
+		91B6C9020C660BEA78FAEF28 /* Pods-enzevalos_iphone.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone.debug.xcconfig"; sourceTree = "<group>"; };
+		94EE54279AB591E0CAB8EFD8 /* Pods_enzevalos_iphone.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_enzevalos_iphone.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		9771AA8B241161190023A096 /* MailAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailAccount.swift; sourceTree = "<group>"; };
+		97AACD2324178C230078A68E /* AuthenticationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationModel.swift; sourceTree = "<group>"; };
+		97C5279E241A9F7B0030BBC9 /* AuthenticationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationTests.swift; sourceTree = "<group>"; };
+		97C527A0241AA4090030BBC9 /* GeneratedMocks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GeneratedMocks.swift; path = enzevalos_iphoneTests/GeneratedMocks.swift; sourceTree = SOURCE_ROOT; };
+<<<<<<< HEAD
+		988C9C5C240D507A006213F0 /* PhishingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingTests.swift; sourceTree = "<group>"; };
+=======
+		988C9C5C240D507A006213F0 /* UrlStringExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UrlStringExtensionTests.swift; sourceTree = "<group>"; };
+>>>>>>> dev
+		9A132EDE8BCA06ACDB505C22 /* Pods-enzevalos_iphoneUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneUITests.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneUITests/Pods-enzevalos_iphoneUITests.debug.xcconfig"; sourceTree = "<group>"; };
+		9B3D62838C729BAC6832270A /* Pods-enzevalos_iphone-AdHoc.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-AdHoc.debug.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-AdHoc/Pods-enzevalos_iphone-AdHoc.debug.xcconfig"; sourceTree = "<group>"; };
+		A102AA891EDDB4E80024B457 /* videoOnboarding2.m4v */ = {isa = PBXFileReference; lastKnownFileType = file; path = videoOnboarding2.m4v; sourceTree = "<group>"; };
+		A1083A531E8BFEA6003666B7 /* Onboarding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Onboarding.swift; sourceTree = "<group>"; };
+		A10DAA5621F37600005D8BBB /* IntroInfoButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroInfoButton.swift; sourceTree = "<group>"; };
+		A10DE41F1EFAA2CE005E8189 /* FolderViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderViewController.swift; sourceTree = "<group>"; };
+		A111F6AC1FA77B170060AFDE /* LoggerDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggerDetail.swift; sourceTree = "<group>"; };
+		A1123E6B1DA682850069551C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
+		A1123E6D1DA682870069551C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
+		A114E4311FACB23000E40243 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
+		A12F91D721F3A99800AB0589 /* NSLayoutConstraintExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSLayoutConstraintExtension.swift; sourceTree = "<group>"; };
+		A12FC23020221A1400196008 /* ExportInfoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportInfoViewController.swift; sourceTree = "<group>"; };
+		A13526751D955BDF00D3BFE1 /* enzevalos_iphone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = enzevalos_iphone.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		A13526781D955BDF00D3BFE1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		A13526801D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = enzevalos_iphone.xcdatamodel; sourceTree = "<group>"; };
+		A135268C1D955BE000D3BFE1 /* enzevalos_iphoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = enzevalos_iphoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		A13526921D955BE000D3BFE1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		A142E70821E7919F000395E3 /* IntroContactViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroContactViewController.swift; sourceTree = "<group>"; };
+		A15D215A223BE5F4003E0CE0 /* TempAttachment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TempAttachment.swift; sourceTree = "<group>"; };
+		A15D215C223BE614003E0CE0 /* attachment.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = attachment.eml; sourceTree = "<group>"; };
+		A15D215E223BE6E4003E0CE0 /* MailTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailTest.swift; sourceTree = "<group>"; };
+		A15D2D0B21F4CF13007AF2F4 /* enzevalos_iphone 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 5.xcdatamodel"; sourceTree = "<group>"; };
+		A16BA2111E0439B6005E29E3 /* providers.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; lineEnding = 0; path = providers.json; sourceTree = "<group>"; };
+		A1735DF9205AB88500B336DB /* SendViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendViewState.swift; sourceTree = "<group>"; };
+		A17FDFF2202C685800F7BA89 /* StudySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudySettings.swift; sourceTree = "<group>"; };
+		A182182621E5012300918A29 /* Intro.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Intro.storyboard; sourceTree = "<group>"; };
+		A182182B21E5072200918A29 /* IntroDescriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroDescriptionViewController.swift; sourceTree = "<group>"; };
+		A182182D21E50D8D00918A29 /* IntroButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroButtonViewController.swift; sourceTree = "<group>"; };
+		A182183121E518A400918A29 /* IntroContactCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntroContactCell.xib; sourceTree = "<group>"; };
+		A182183321E51DD200918A29 /* IntroContactCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroContactCell.swift; sourceTree = "<group>"; };
+		A18E7D761FBDE5D9002F7CC9 /* LoggingEventType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggingEventType.swift; sourceTree = "<group>"; };
+		A1909719220F887D00FA7B2A /* enzevalos_iphone 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 6.xcdatamodel"; sourceTree = "<group>"; };
+		A198270D1D9A8ABC0027F65C /* enzevalos_iphone-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "enzevalos_iphone-Bridging-Header.h"; sourceTree = "<group>"; };
+		A198D2282056B384004CC838 /* SendViewDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendViewDelegate.swift; sourceTree = "<group>"; };
+		A19BD0A721ED62AE00E4D603 /* enzevalos_iphone 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 3.xcdatamodel"; sourceTree = "<group>"; };
+		A19F3FFB21F0BE79005334F2 /* enzevalos_iphone 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "enzevalos_iphone 4.xcdatamodel"; sourceTree = "<group>"; };
+		A1A9DE721F864B0500B808AA /* ExportCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportCells.swift; sourceTree = "<group>"; };
+		A1ACDD0821EB9C4C00A059D0 /* IntroInputViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroInputViewController.swift; sourceTree = "<group>"; };
+		A1AEBA5821E808CB00C84E59 /* IntroYesNoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroYesNoViewController.swift; sourceTree = "<group>"; };
+		A1B49E5C21E54CBF00ED86FC /* IntroContactTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroContactTableViewController.swift; sourceTree = "<group>"; };
+		A1B49E5E21E54EE700ED86FC /* IntroContactView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntroContactView.xib; sourceTree = "<group>"; };
+		A1B49E6321E55ECD00ED86FC /* IntroPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroPageViewController.swift; sourceTree = "<group>"; };
+		A1BE3FF71E9664660040114B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		A1BE3FF91E96646A0040114B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		A1C3270D1DB907D900CE2ED5 /* TextFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFormatter.swift; sourceTree = "<group>"; };
+		A1C62E992018F716000E5273 /* OnboardingValueState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingValueState.swift; sourceTree = "<group>"; };
+		A1D5076E1E80257A00B68B38 /* KeyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyViewController.swift; sourceTree = "<group>"; };
+		A1E2324D1F0FA41A00DC9D40 /* FolderListCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderListCell.swift; sourceTree = "<group>"; };
+		A1E5960D1FCC871E003791E9 /* researchteam.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = researchteam.asc; path = keys/researchteam.asc; sourceTree = "<group>"; };
+		A1EB05791D956829008659C1 /* ContactCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactCell.swift; sourceTree = "<group>"; };
+		A1EB057B1D956838008659C1 /* MailHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailHandler.swift; sourceTree = "<group>"; };
+		A1EB057D1D956848008659C1 /* VENDataDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VENDataDelegate.swift; sourceTree = "<group>"; };
+		A1EB057F1D956851008659C1 /* SendViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewController.swift; sourceTree = "<group>"; };
+		A1EB05811D95685B008659C1 /* CollectionDataDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionDataDelegate.swift; sourceTree = "<group>"; };
+		A1EB05831D956867008659C1 /* TableViewDataDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewDataDelegate.swift; sourceTree = "<group>"; };
+		A1EB05851D956872008659C1 /* FrequentCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrequentCell.swift; sourceTree = "<group>"; };
+		A1EB05871D956879008659C1 /* AddressHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressHandler.swift; sourceTree = "<group>"; };
+		A1EB05891D956890008659C1 /* ContactCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactCell.xib; sourceTree = "<group>"; };
+		A1EB058B1D9568AB008659C1 /* FrequentCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FrequentCell.xib; sourceTree = "<group>"; };
+		A1EB058F1D956923008659C1 /* ReadViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadViewController.swift; sourceTree = "<group>"; };
+		A1EB05931D956931008659C1 /* InboxCellDelegator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InboxCellDelegator.swift; sourceTree = "<group>"; };
+		A1EB05951D956939008659C1 /* InboxTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InboxTableViewCell.swift; sourceTree = "<group>"; };
+		A1EB05971D956947008659C1 /* InboxViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InboxViewController.swift; sourceTree = "<group>"; };
+		A1EB059F1D95696C008659C1 /* MessageBodyTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageBodyTableViewCell.swift; sourceTree = "<group>"; };
+		A1EB05A31D956E32008659C1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		A1ECE54A1EFBE7ED0009349F /* FolderCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderCell.swift; sourceTree = "<group>"; };
+		A1EFF93221E6655C003BB240 /* IntroTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroTableView.swift; sourceTree = "<group>"; };
+		A1F8540F21E8A60800614514 /* IntroSecretViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroSecretViewController.swift; sourceTree = "<group>"; };
+		A1F992301DA7D22D0073BF1B /* de */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = de; path = de.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		A1F992321DA7D2360073BF1B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		A1F992341DA7DA570073BF1B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		A1F992371DA7DC760073BF1B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = "<group>"; };
+		A1F992381DA7DC7B0073BF1B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = "<group>"; };
+		A1F9923A1DA7DD2E0073BF1B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/InboxTableViewCell.xib; sourceTree = "<group>"; };
+		A1F9923D1DA7DD350073BF1B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InboxTableViewCell.strings; sourceTree = "<group>"; };
+		A1F9923F1DA7DD370073BF1B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InboxTableViewCell.strings; sourceTree = "<group>"; };
+		A1FA44A621E10E1400DB02AC /* TravelHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TravelHandler.swift; sourceTree = "<group>"; };
+		A5E303D624110F6400310264 /* smime-helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "smime-helpers.h"; sourceTree = "<group>"; };
+		A5E303D724110F6400310264 /* smime-helpers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "smime-helpers.c"; sourceTree = "<group>"; };
+		AA686D4FC9B86445A0C87F0F /* Pods-enzevalos_iphone.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone.release.xcconfig"; sourceTree = "<group>"; };
+		AF67EF30BB065CC9C0D17940 /* Pods_enzevalos_iphoneUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_enzevalos_iphoneUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		BC7D006B3B40A23E53B4F317 /* Pods-enzevalos_iphoneTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneTests.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests.release.xcconfig"; sourceTree = "<group>"; };
+		C1F4458FC892EBE555836F55 /* Pods_enzevalos_iphone_AdHoc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_enzevalos_iphone_AdHoc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		C7733DFEFB7E7CFF38EC1665 /* Pods-enzevalos_iphoneTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphoneTests.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests.release.xcconfig"; sourceTree = "<group>"; };
+		F113C3841F30D06800E7F1D6 /* QRScannerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRScannerView.swift; sourceTree = "<group>"; };
+		F113C38A1F3344C200E7F1D6 /* ViewControllerPannable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewControllerPannable.swift; sourceTree = "<group>"; };
+		F119D28F1E364B59001D732A /* AnimatedSendIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedSendIcon.swift; sourceTree = "<group>"; };
+		F12041FA1DA3FBF7002E4940 /* ListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListViewController.swift; sourceTree = "<group>"; };
+		F12041FC1DA409A5002E4940 /* ListViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListViewCell.swift; sourceTree = "<group>"; };
+		F120607F1DA540FE00F6EF37 /* RefreshControlExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshControlExtension.swift; sourceTree = "<group>"; };
+		F12060811DA552FC00F6EF37 /* MailHandlerDelegator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailHandlerDelegator.swift; sourceTree = "<group>"; };
+		F12D8DB320692E280068788E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Inbox.strings; sourceTree = "<group>"; };
+		F12D8DB520692E2D0068788E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Inbox.strings; sourceTree = "<group>"; };
+		F12D8DBC2069422A0068788E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/About.storyboard; sourceTree = "<group>"; };
+		F14239C01F30A99C00998A83 /* QRCodeGenerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeGenerator.swift; sourceTree = "<group>"; };
+		F176A216206943080068788E /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/About.storyboard; sourceTree = "<group>"; };
+		F1866C85201F707200B72453 /* EmailHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EmailHelper.m; sourceTree = "<group>"; };
+		F1866C87201F70B700B72453 /* EmailHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EmailHelper.h; sourceTree = "<group>"; };
+		F18B445D1E7044B70080C041 /* FlipTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlipTransition.swift; sourceTree = "<group>"; };
+		F18B445F1E704C550080C041 /* ReplaceSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplaceSegue.swift; sourceTree = "<group>"; };
+		F18B44611E73286C0080C041 /* ReadVENDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadVENDelegate.swift; sourceTree = "<group>"; };
+		F18C5E551FE025D300C3B86D /* BadgeCase.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = BadgeCase.storyboard; sourceTree = "<group>"; };
+		F1984D711E1D327200804E1E /* IconsStyleKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IconsStyleKit.swift; sourceTree = "<group>"; };
+		F1984D731E1E92B300804E1E /* LabelStyleKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LabelStyleKit.swift; sourceTree = "<group>"; };
+		F1ACF21B1E0C1C6800C1B843 /* ContactViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactViewController.swift; sourceTree = "<group>"; };
+		F1AF938E1E2D04BA00755128 /* CustomCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomCells.swift; sourceTree = "<group>"; };
+		F1C7AC811FED6473007629DB /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
+		F1E918D61FBDEECA00D60418 /* LoggerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggerTests.swift; sourceTree = "<group>"; };
+		F1F070271FA0DF3F004A860A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Inbox.storyboard; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		476EEF9322A872BF00BB4EF7 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				50F2E7D66366C779705987A7 /* Pods_enzevalos_iphoneUITests.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A13526721D955BDF00D3BFE1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				476406802416AA6F00C7D426 /* libssl.a in Frameworks */,
+				47184C3922F0D8F200712A7A /* CFNetwork.framework in Frameworks */,
+				47CEF4ED2052C3E700887CDB /* ObjectivePGP.framework in Frameworks */,
+				4764067E2416AA6F00C7D426 /* libcrypto.a in Frameworks */,
+				47F867E42052B49800AA832F /* libbz2.tbd in Frameworks */,
+				47F867E22052B48E00AA832F /* libz.tbd in Frameworks */,
+				47F867E02052B47C00AA832F /* Security.framework in Frameworks */,
+				472F396E1E14F384009260FB /* CoreData.framework in Frameworks */,
+				AC4001CA169DC07A7A1E3AD3 /* Pods_enzevalos_iphone.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A13526891D955BE000D3BFE1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				479B597A20691C0600B3944D /* libz.tbd in Frameworks */,
+				479B597920691BFB00B3944D /* libbz2.tbd in Frameworks */,
+				479B597820691BE400B3944D /* ObjectivePGP.framework in Frameworks */,
+				7500EE9D4F3130671F5C1AE2 /* Pods_enzevalos_iphoneTests.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		0ECEA101240EA905007DC71E /* SMIME */ = {
+			isa = PBXGroup;
+			children = (
+				0EF148042422543E00B3C198 /* Certificate.swift */,
+				A5E303D524110F6400310264 /* c */,
+				0ECA5797240D496800B0F231 /* SMIME.swift */,
+				0EF73F4224237E6500932FA0 /* SMIMEHelpers.swift */,
+			);
+			name = SMIME;
+			sourceTree = "<group>";
+		};
+		0EFEF0932417C08B00BB2FF7 /* C Helpers */ = {
+			isa = PBXGroup;
+			children = (
+				0EFEF0942417C0B400BB2FF7 /* CHelpers.swift */,
+			);
+			name = "C Helpers";
+			sourceTree = "<group>";
+		};
+		24472862977D71D3F0AD0D58 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				411EB2B85F99B48FFD36F966 /* Pods-enzevalos_iphoneTests.debug.xcconfig */,
+				C7733DFEFB7E7CFF38EC1665 /* Pods-enzevalos_iphoneTests.release.xcconfig */,
+				9A132EDE8BCA06ACDB505C22 /* Pods-enzevalos_iphoneUITests.debug.xcconfig */,
+				796D16D79BED5D60B580E602 /* Pods-enzevalos_iphoneUITests.release.xcconfig */,
+				6EBCCD02AD3B95D8317810E2 /* Pods-enzevalos_iphoneTests.debug.xcconfig */,
+				BC7D006B3B40A23E53B4F317 /* Pods-enzevalos_iphoneTests.release.xcconfig */,
+				66E758F271CD65AB3E5FE7A7 /* Pods-enzevalos_iphoneUITests.debug.xcconfig */,
+				8B87EFB6CEAA31452F744015 /* Pods-enzevalos_iphoneUITests.release.xcconfig */,
+				91B6C9020C660BEA78FAEF28 /* Pods-enzevalos_iphone.debug.xcconfig */,
+				AA686D4FC9B86445A0C87F0F /* Pods-enzevalos_iphone.release.xcconfig */,
+				1D4A9E60565DECF52C011BC0 /* Pods-enzevalos_iphone-AdHoc.release.xcconfig */,
+				9B3D62838C729BAC6832270A /* Pods-enzevalos_iphone-AdHoc.debug.xcconfig */,
+				48C250BB32BF11B683003BA1 /* Pods-enzevalos_iphone-enzevalos_iphoneUITests.debug.xcconfig */,
+				8478C5F0EC1CB76AEBE1F47A /* Pods-enzevalos_iphone-enzevalos_iphoneUITests.release.xcconfig */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+		3E9708AC1FAC925D005825C9 /* PLists */ = {
+			isa = PBXGroup;
+			children = (
+				3E9708AD1FAC925D005825C9 /* enzevalos_iphone.entitlements */,
+				3E9708AE1FAC925D005825C9 /* enzevalos-Info.plist */,
+			);
+			path = PLists;
+			sourceTree = "<group>";
+		};
+		3EB4FA9C2012007C001D0625 /* Dialog */ = {
+			isa = PBXGroup;
+			children = (
+				3EB4FA9E2012007C001D0625 /* Dialog.storyboard */,
+				3EB4FAA320120096001D0625 /* DialogOption.swift */,
+				3EB4FA9D2012007C001D0625 /* DialogViewController.swift */,
+			);
+			path = Dialog;
+			sourceTree = "<group>";
+		};
+		3EC35F1F2003755F008BDF95 /* Invitation */ = {
+			isa = PBXGroup;
+			children = (
+				3EC35F2320037651008BDF95 /* InvitationHelper.swift */,
+				3EC35F2C200376A1008BDF95 /* SendViewController+Invitation.swift */,
+				4756DE0D20402F8E00452288 /* invitationTextCensor.html */,
+				3E6B07DD2011246500E49609 /* invitationText.html */,
+			);
+			name = Invitation;
+			sourceTree = "<group>";
+		};
+		470709112189BB4A00DF71A3 /* testMails */ = {
+			isa = PBXGroup;
+			children = (
+				0ECEA0EB240E7D85007DC71E /* johnny C1.json.eml */,
+				0ECEA0E9240E7D64007DC71E /* SMIME Test 1 S.eml */,
+				4774DD7422D0015F00BD8CF6 /* multiIDs.eml */,
+				4774DD7A22D3F5D100BD8CF6 /* multiIDs2.eml */,
+				4774DD8022D4067D00BD8CF6 /* signedEncMailFromApple.eml */,
+				A15D215C223BE614003E0CE0 /* attachment.eml */,
+				47E7BE622232BD0A00C8EF94 /* SignedEncMailFromMac.eml */,
+				47E7BE5A22319B6900C8EF94 /* EncMailFromMac.eml */,
+				0E1C457924055F87006D104A /* signencinlineK9.eml */,
+				0E1C457824055F87006D104A /* signencK9.eml */,
+				0E1C457624055F87006D104A /* signinlineK9.eml */,
+				0E1C457724055F87006D104A /* signK9.eml */,
+				47E7BE6022319B8F00C8EF94 /* PlainMailFromMac.eml */,
+				47E7BE5E22319B7D00C8EF94 /* SecureMailFromMac.eml */,
+				47E7BE5C22319B7000C8EF94 /* SignedMailFromMac.eml */,
+				47C22282218B02C700BD2C2B /* autocryptSimpleExample1.eml */,
+				4707092F2189E1C000DF71A3 /* enc+signedThunderbird.eml */,
+				470709212189C73900DF71A3 /* enc+signedInlineThunderbird.eml */,
+				470709232189C73900DF71A3 /* encInlineThunderbird.eml */,
+				470709222189C73900DF71A3 /* encThunderbird.eml */,
+				470709242189C73900DF71A3 /* signedInlineThunderbird.eml */,
+				470709252189C73900DF71A3 /* signedThunderbird.eml */,
+				470709172189BC3500DF71A3 /* plainThunderbird.eml */,
+			);
+			path = testMails;
+			sourceTree = "<group>";
+		};
+		470709202189C24800DF71A3 /* testKeys */ = {
+			isa = PBXGroup;
+			children = (
+				4774DD7222CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc */,
+				4707092C2189C74200DF71A3 /* alicePublic.asc */,
+				4774DD7D22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc */,
+				0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */,
+				0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */,
+				4774DD7C22D4062200BD8CF6 /* Bob Letterbox (0B6CD0A0) – Secret.asc */,
+				471876F5223FACA900912135 /* BobPWTEST1234.asc */,
+				479AFDA122571AB90063A332 /* EccAlice(777879D4)–Public.asc */,
+				471876F6223FACA900912135 /* BobWithoutPW.asc */,
+				4707092B2189C74200DF71A3 /* bobSecret.asc */,
+			);
+			path = testKeys;
+			sourceTree = "<group>";
+		};
+		472F39921E279792009260FB /* protocols */ = {
+			isa = PBXGroup;
+			children = (
+				472F398D1E251B8D009260FB /* MailAddress.swift */,
+				472F39851E1FA34E009260FB /* Record.swift */,
+				472F39891E251787009260FB /* Contact.swift */,
+				47691A891ECB56D1004BCFC5 /* Mail.swift */,
+			);
+			name = protocols;
+			sourceTree = "<group>";
+		};
+		476403FA2413F95300C7D426 /* OpenSSL */ = {
+			isa = PBXGroup;
+			children = (
+				4764060D2416AA6F00C7D426 /* include */,
+				476406082416AA6F00C7D426 /* lib */,
+			);
+			path = OpenSSL;
+			sourceTree = "<group>";
+		};
+		476406082416AA6F00C7D426 /* lib */ = {
+			isa = PBXGroup;
+			children = (
+				476406092416AA6F00C7D426 /* libcrypto.a */,
+				4764060B2416AA6F00C7D426 /* libssl.a */,
+			);
+			path = lib;
+			sourceTree = "<group>";
+		};
+		4764060D2416AA6F00C7D426 /* include */ = {
+			isa = PBXGroup;
+			children = (
+				4764060E2416AA6F00C7D426 /* opensslconf-template.h */,
+				4764060F2416AA6F00C7D426 /* LICENSE */,
+				476406102416AA6F00C7D426 /* openssl */,
+			);
+			path = include;
+			sourceTree = "<group>";
+		};
+		476406102416AA6F00C7D426 /* openssl */ = {
+			isa = PBXGroup;
+			children = (
+				476406112416AA6F00C7D426 /* pem2.h */,
+				476406122416AA6F00C7D426 /* kdf.h */,
+				476406132416AA6F00C7D426 /* pem.h */,
+				476406142416AA6F00C7D426 /* asyncerr.h */,
+				476406152416AA6F00C7D426 /* md2.h */,
+				476406162416AA6F00C7D426 /* ssl3.h */,
+				476406172416AA6F00C7D426 /* ossl_typ.h */,
+				476406182416AA6F00C7D426 /* dtls1.h */,
+				476406192416AA6F00C7D426 /* err.h */,
+				4764061A2416AA6F00C7D426 /* bn.h */,
+				4764061B2416AA6F00C7D426 /* blowfish.h */,
+				4764061C2416AA6F00C7D426 /* cms.h */,
+				4764061D2416AA6F00C7D426 /* engine.h */,
+				4764061E2416AA6F00C7D426 /* conf_api.h */,
+				4764061F2416AA6F00C7D426 /* x509.h */,
+				476406202416AA6F00C7D426 /* asn1_mac.h */,
+				476406212416AA6F00C7D426 /* objectserr.h */,
+				476406222416AA6F00C7D426 /* opensslconf_ios_x86_64.h */,
+				476406232416AA6F00C7D426 /* cmserr.h */,
+				476406242416AA6F00C7D426 /* ui.h */,
+				476406252416AA6F00C7D426 /* opensslconf_tvos_x86_64.h */,
+				476406262416AA6F00C7D426 /* sha.h */,
+				476406272416AA6F00C7D426 /* symhacks.h */,
+				476406282416AA6F00C7D426 /* asn1.h */,
+				476406292416AA6F00C7D426 /* bioerr.h */,
+				4764062A2416AA6F00C7D426 /* opensslconf.h */,
+				4764062B2416AA6F00C7D426 /* bio.h */,
+				4764062C2416AA6F00C7D426 /* rc2.h */,
+				4764062D2416AA6F00C7D426 /* dh.h */,
+				4764062E2416AA6F00C7D426 /* x509v3.h */,
+				4764062F2416AA6F00C7D426 /* conf.h */,
+				476406302416AA6F00C7D426 /* rand_drbg.h */,
+				476406312416AA6F00C7D426 /* md5.h */,
+				476406322416AA6F00C7D426 /* pemerr.h */,
+				476406332416AA6F00C7D426 /* x509_vfy.h */,
+				476406342416AA6F00C7D426 /* txt_db.h */,
+				476406352416AA6F00C7D426 /* comperr.h */,
+				476406362416AA6F00C7D426 /* cterr.h */,
+				476406372416AA6F00C7D426 /* safestack.h */,
+				476406382416AA6F00C7D426 /* ecdsa.h */,
+				476406392416AA6F00C7D426 /* sslerr.h */,
+				4764063A2416AA6F00C7D426 /* rc5.h */,
+				4764063B2416AA6F00C7D426 /* uierr.h */,
+				4764063C2416AA6F00C7D426 /* x509v3err.h */,
+				4764063D2416AA6F00C7D426 /* objects.h */,
+				4764063E2416AA6F00C7D426 /* pkcs12.h */,
+				4764063F2416AA6F00C7D426 /* crypto.h */,
+				476406402416AA6F00C7D426 /* opensslv.h */,
+				476406412416AA6F00C7D426 /* evperr.h */,
+				476406422416AA6F00C7D426 /* pkcs7.h */,
+				476406432416AA6F00C7D426 /* obj_mac.h */,
+				476406442416AA6F00C7D426 /* ct.h */,
+				476406452416AA6F00C7D426 /* async.h */,
+				476406462416AA6F00C7D426 /* buffer.h */,
+				476406472416AA6F00C7D426 /* ssl.h */,
+				476406482416AA6F00C7D426 /* srp.h */,
+				476406492416AA6F00C7D426 /* camellia.h */,
+				4764064A2416AA6F00C7D426 /* opensslconf_ios_arm64.h */,
+				4764064B2416AA6F00C7D426 /* dherr.h */,
+				4764064C2416AA6F00C7D426 /* evp.h */,
+				4764064D2416AA6F00C7D426 /* e_os2.h */,
+				4764064E2416AA6F00C7D426 /* md4.h */,
+				4764064F2416AA6F00C7D426 /* hmac.h */,
+				476406502416AA6F00C7D426 /* aes.h */,
+				476406512416AA6F00C7D426 /* engineerr.h */,
+				476406522416AA6F00C7D426 /* comp.h */,
+				476406532416AA6F00C7D426 /* pkcs12err.h */,
+				476406542416AA6F00C7D426 /* cast.h */,
+				476406552416AA6F00C7D426 /* rc4.h */,
+				476406562416AA6F00C7D426 /* stack.h */,
+				476406572416AA6F00C7D426 /* des.h */,
+				476406582416AA6F00C7D426 /* ocsp.h */,
+				476406592416AA6F00C7D426 /* ec.h */,
+				4764065A2416AA6F00C7D426 /* ecdh.h */,
+				4764065B2416AA6F00C7D426 /* rand.h */,
+				4764065C2416AA6F00C7D426 /* opensslconf_tvos_arm64.h */,
+				4764065D2416AA6F00C7D426 /* ecerr.h */,
+				4764065E2416AA6F00C7D426 /* ts.h */,
+				4764065F2416AA6F00C7D426 /* cryptoerr.h */,
+				476406602416AA6F00C7D426 /* storeerr.h */,
+				476406612416AA6F00C7D426 /* buffererr.h */,
+				476406622416AA6F00C7D426 /* seed.h */,
+				476406632416AA6F00C7D426 /* modes.h */,
+				476406642416AA6F00C7D426 /* ssl2.h */,
+				476406652416AA6F00C7D426 /* tserr.h */,
+				476406662416AA6F00C7D426 /* rsa.h */,
+				476406672416AA6F00C7D426 /* ripemd.h */,
+				476406682416AA6F00C7D426 /* whrlpool.h */,
+				476406692416AA6F00C7D426 /* tls1.h */,
+				4764066A2416AA6F00C7D426 /* rsaerr.h */,
+				4764066B2416AA6F00C7D426 /* randerr.h */,
+				4764066C2416AA6F00C7D426 /* mdc2.h */,
+				4764066D2416AA6F00C7D426 /* ocsperr.h */,
+				4764066E2416AA6F00C7D426 /* x509err.h */,
+				4764066F2416AA6F00C7D426 /* pkcs7err.h */,
+				476406702416AA6F00C7D426 /* dsa.h */,
+				476406712416AA6F00C7D426 /* kdferr.h */,
+				476406722416AA6F00C7D426 /* srtp.h */,
+				476406732416AA6F00C7D426 /* asn1t.h */,
+				476406742416AA6F00C7D426 /* dsaerr.h */,
+				476406752416AA6F00C7D426 /* bnerr.h */,
+				476406762416AA6F00C7D426 /* conferr.h */,
+				476406772416AA6F00C7D426 /* cmac.h */,
+				476406782416AA6F00C7D426 /* ebcdic.h */,
+				476406792416AA6F00C7D426 /* opensslconf_ios_arm64e.h */,
+				4764067A2416AA6F00C7D426 /* store.h */,
+				4764067B2416AA6F00C7D426 /* idea.h */,
+				4764067C2416AA6F00C7D426 /* lhash.h */,
+				4764067D2416AA6F00C7D426 /* asn1err.h */,
+			);
+			path = openssl;
+			sourceTree = "<group>";
+		};
+		476406872416B54D00C7D426 /* SwiftUI */ = {
+			isa = PBXGroup;
+			children = (
+				476406882416B54D00C7D426 /* Inbox */,
+				4764068C2416B54D00C7D426 /* SupportingViews */,
+			);
+			path = SwiftUI;
+			sourceTree = "<group>";
+		};
+		476406882416B54D00C7D426 /* Inbox */ = {
+			isa = PBXGroup;
+			children = (
+				476406892416B54D00C7D426 /* KeyRecordRow.swift */,
+				4764068A2416B54D00C7D426 /* Inbox.swift */,
+				4764068B2416B54D00C7D426 /* InboxCoordinator.swift */,
+			);
+			path = Inbox;
+			sourceTree = "<group>";
+		};
+		4764068C2416B54D00C7D426 /* SupportingViews */ = {
+			isa = PBXGroup;
+			children = (
+				4764068D2416B54D00C7D426 /* CiricleImage.swift */,
+				4764068E2416B54D00C7D426 /* SearchView.swift */,
+				4764068F2416B54D00C7D426 /* MailView.swift */,
+				476406902416B54D00C7D426 /* SwiftUI to UIKit */,
+				476406932416B54D00C7D426 /* Geometry */,
+			);
+			path = SupportingViews;
+			sourceTree = "<group>";
+		};
+		476406902416B54D00C7D426 /* SwiftUI to UIKit */ = {
+			isa = PBXGroup;
+			children = (
+				476406922416B54D00C7D426 /* VCSwiftUIView.swift */,
+			);
+			path = "SwiftUI to UIKit";
+			sourceTree = "<group>";
+		};
+		476406932416B54D00C7D426 /* Geometry */ = {
+			isa = PBXGroup;
+			children = (
+				476406942416B54D00C7D426 /* Stroke.swift */,
+			);
+			path = Geometry;
+			sourceTree = "<group>";
+		};
+		476EEF9722A872BF00BB4EF7 /* enzevalos_iphoneUITests */ = {
+			isa = PBXGroup;
+			children = (
+				476EEF9822A872BF00BB4EF7 /* enzevalos_iphoneUITests.swift */,
+				476EEFA522A87B9800BB4EF7 /* private */,
+				476EEFA022A873A800BB4EF7 /* OnboardingTest.swift */,
+				476EEF9A22A872BF00BB4EF7 /* Info.plist */,
+			);
+			path = enzevalos_iphoneUITests;
+			sourceTree = "<group>";
+		};
+		476EEFA522A87B9800BB4EF7 /* private */ = {
+			isa = PBXGroup;
+			children = (
+				476EEFA622A87B9800BB4EF7 /* accounts.json */,
+			);
+			name = private;
+			path = enzevalos_iphoneTests/private;
+			sourceTree = SOURCE_ROOT;
+		};
+		477548DC21F5DA46000B22A8 /* mail */ = {
+			isa = PBXGroup;
+			children = (
+				476801DD21846A5A00F7F259 /* OutgoingMail.swift */,
+				A16BA2111E0439B6005E29E3 /* providers.json */,
+				A1EB057B1D956838008659C1 /* MailHandler.swift */,
+				477548DD21F5DABE000B22A8 /* MailServerConnectionError.swift */,
+				47CEAC97222541B40075B7DC /* MailSession.swift */,
+				478AF714222FD5C600AEF69E /* IncomingMail.swift */,
+				71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */,
+			);
+			name = mail;
+			sourceTree = "<group>";
+		};
+		477548E021F77445000B22A8 /* study parameters */ = {
+			isa = PBXGroup;
+			children = (
+				477548E121F77466000B22A8 /* SecurityIndicator.swift */,
+				478154A621FF3F0900A931EC /* Warning.swift */,
+				477548E321F77BA0000B22A8 /* StudyParameterProtocol.swift */,
+				478154A821FF3FF400A931EC /* Invitation.swift */,
+			);
+			path = "study parameters";
+			sourceTree = "<group>";
+		};
+		478154AA21FF6A5300A931EC /* mailbot */ = {
+			isa = PBXGroup;
+			children = (
+				478154AB21FF6A9600A931EC /* Mailbot.swift */,
+			);
+			name = mailbot;
+			path = "New Group";
+			sourceTree = "<group>";
+		};
+		4790114A228997620057AB04 /* StyleKits */ = {
+			isa = PBXGroup;
+			children = (
+				479011482289975C0057AB04 /* NoSecIconStyleKit.swift */,
+				F1984D711E1D327200804E1E /* IconsStyleKit.swift */,
+				F1984D731E1E92B300804E1E /* LabelStyleKit.swift */,
+			);
+			path = StyleKits;
+			sourceTree = "<group>";
+		};
+		47B91AC01EC0C1CF000AE3EE /* coredata */ = {
+			isa = PBXGroup;
+			children = (
+				4751C6FE2344D37C006B2A4D /* SecretKey+CoreDataClass.swift */,
+				4751C6FF2344D37C006B2A4D /* SecretKey+CoreDataProperties.swift */,
+				47F7923E203492E3005E7DB6 /* KeyRecord+CoreDataClass.swift */,
+				47F7923F203492E3005E7DB6 /* KeyRecord+CoreDataProperties.swift */,
+				475B00401F7BB6D6006CDD41 /* PersistentKey+CoreDataClass.swift */,
+				475B00411F7BB6D6006CDD41 /* PersistentKey+CoreDataProperties.swift */,
+				472F39781E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift */,
+				4769169F216B86A100491527 /* PersistentMail +CoreDataClass.swift */,
+				472F396F1E14F75C009260FB /* DataHandler.swift */,
+				475DF4771F0D54C9009D807F /* Folder+CoreDataClass.swift */,
+				475DF4781F0D54C9009D807F /* Folder+CoreDataProperties.swift */,
+				472F397A1E1D0B0B009260FB /* EnzevalosContact+CoreDataProperties.swift */,
+				472F39801E1E5347009260FB /* Mail_Address+CoreDataProperties.swift */,
+				476916A1216B86CF00491527 /* EnzevalosContact+CoreDataClass.swift */,
+				472F397F1E1E5347009260FB /* Mail_Address+CoreDataClass.swift */,
+			);
+			name = coredata;
+			sourceTree = "<group>";
+		};
+		47B91AC11EC0C1FB000AE3EE /* data */ = {
+			isa = PBXGroup;
+			children = (
+				A15D215A223BE5F4003E0CE0 /* TempAttachment.swift */,
+				472F39921E279792009260FB /* protocols */,
+				A114E4311FACB23000E40243 /* StringExtension.swift */,
+				4751C6ED233CA583006B2A4D /* DateExtension.swift */,
+				47691A8B1ECC3EC7004BCFC5 /* EphemeralMail.swift */,
+				472F398B1E2519C8009260FB /* CNContactExtension.swift */,
+				472F398F1E252470009260FB /* CNMailAddressesExtension.swift */,
+				A1EB05871D956879008659C1 /* AddressHandler.swift */,
+				47B91AC01EC0C1CF000AE3EE /* coredata */,
+			);
+			name = data;
+			sourceTree = "<group>";
+		};
+		47EABF04241A9C6400774A93 /* Recovered References */ = {
+			isa = PBXGroup;
+			children = (
+				97AACD2324178C230078A68E /* AuthenticationModel.swift */,
+				9771AA8B241161190023A096 /* MailAccount.swift */,
+			);
+			name = "Recovered References";
+			sourceTree = "<group>";
+		};
+		47EABF05241A9C7000774A93 /* Authentication */ = {
+			isa = PBXGroup;
+			children = (
+				47EABF0C241A9CA800774A93 /* MailAccount.swift */,
+				47EABF06241A9C8700774A93 /* AuthenticationModel.swift */,
+				47EABF08241A9C8700774A93 /* AuthenticationScreen.swift */,
+				47EABF07241A9C8700774A93 /* AuthenticationViewModel.swift */,
+			);
+			name = Authentication;
+			sourceTree = "<group>";
+		};
+		47F0376C22A7278A0005C9DE /* private */ = {
+			isa = PBXGroup;
+			children = (
+				47F0376D22A7278A0005C9DE /* accounts.json */,
+			);
+			path = private;
+			sourceTree = "<group>";
+		};
+		71DF0896242151E200162B74 /* phishing */ = {
+			isa = PBXGroup;
+			children = (
+				988C9C5C240D507A006213F0 /* UrlStringExtensionTests.swift */,
+				71DF08972421520D00162B74 /* EmailStringExtensionTests.swift */,
+			);
+			path = phishing;
+			sourceTree = "<group>";
+		};
+		78280F99990BFF65543B7F0B /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				47184C3822F0D8F200712A7A /* CFNetwork.framework */,
+				47A5D6DD2294B5480084F81D /* AppAuth.framework */,
+				47A5D6DB2294B5220084F81D /* libz.1.1.3.tbd */,
+				47A5D6D52294B4830084F81D /* GTMAppAuth.framework */,
+				47CEF4EC2052C3E600887CDB /* ObjectivePGP.framework */,
+				47F867E32052B49800AA832F /* libbz2.tbd */,
+				47F867E12052B48E00AA832F /* libz.tbd */,
+				47F867DF2052B47C00AA832F /* Security.framework */,
+				472F396D1E14F384009260FB /* CoreData.framework */,
+				C1F4458FC892EBE555836F55 /* Pods_enzevalos_iphone_AdHoc.framework */,
+				94EE54279AB591E0CAB8EFD8 /* Pods_enzevalos_iphone.framework */,
+				7977EA7012D8E98D186D5C60 /* Pods_enzevalos_iphoneTests.framework */,
+				AF67EF30BB065CC9C0D17940 /* Pods_enzevalos_iphoneUITests.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		8428A8511F436952007649A5 /* Gamification */ = {
+			isa = PBXGroup;
+			children = (
+				8428A8521F4369C0007649A5 /* Gamification.storyboard */,
+				F18C5E551FE025D300C3B86D /* BadgeCase.storyboard */,
+				8428A8541F4369CF007649A5 /* GamificationElements.xcassets */,
+				8428A8751F436A81007649A5 /* Data */,
+				8428A8731F436A45007649A5 /* Views und Cells */,
+				8428A8741F436A71007649A5 /* ViewControllers */,
+			);
+			name = Gamification;
+			sourceTree = "<group>";
+		};
+		8428A8731F436A45007649A5 /* Views und Cells */ = {
+			isa = PBXGroup;
+			children = (
+				8428A8581F436A05007649A5 /* ArrowView.swift */,
+				8428A85A1F436A05007649A5 /* CircleView.swift */,
+				8428A8601F436A11007649A5 /* BadgeCaseCollectionViewCell.swift */,
+				8428A8621F436A11007649A5 /* SubBadgeHeaderTableViewCell.swift */,
+				8428A8631F436A11007649A5 /* SubBadgeTableViewCell.swift */,
+				8428A8641F436A11007649A5 /* UserNameGamificationTableViewCell.swift */,
+				8428A8611F436A11007649A5 /* ArrowTableViewCell.swift */,
+			);
+			name = "Views und Cells";
+			sourceTree = "<group>";
+		};
+		8428A8741F436A71007649A5 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				8428A86A1F436A1E007649A5 /* BadgeCase.swift */,
+				8428A86B1F436A1E007649A5 /* InviteFriendViewController.swift */,
+				8428A86C1F436A1E007649A5 /* LinearBadgeViewController.swift */,
+				8428A86D1F436A1E007649A5 /* GamificationStatusViewController.swift */,
+			);
+			name = ViewControllers;
+			sourceTree = "<group>";
+		};
+		8428A8751F436A81007649A5 /* Data */ = {
+			isa = PBXGroup;
+			children = (
+				8428A8591F436A05007649A5 /* Badges.swift */,
+				8428A85B1F436A05007649A5 /* GamificationData.swift */,
+			);
+			name = Data;
+			sourceTree = "<group>";
+		};
+		97C5279D241A9F690030BBC9 /* authentication */ = {
+			isa = PBXGroup;
+			children = (
+				97C527A0241AA4090030BBC9 /* GeneratedMocks.swift */,
+				97C5279E241A9F7B0030BBC9 /* AuthenticationTests.swift */,
+			);
+			path = authentication;
+			sourceTree = "<group>";
+		};
+		A10DE41E1EFAA140005E8189 /* folders */ = {
+			isa = PBXGroup;
+			children = (
+				A10DE41F1EFAA2CE005E8189 /* FolderViewController.swift */,
+				A1ECE54A1EFBE7ED0009349F /* FolderCell.swift */,
+				A1E2324D1F0FA41A00DC9D40 /* FolderListCell.swift */,
+			);
+			name = folders;
+			sourceTree = "<group>";
+		};
+		A111F6AB1FA77AF80060AFDE /* Logging */ = {
+			isa = PBXGroup;
+			children = (
+				A111F6AC1FA77B170060AFDE /* LoggerDetail.swift */,
+				47A5D6E32294BFF50084F81D /* Logger.swift */,
+				A18E7D761FBDE5D9002F7CC9 /* LoggingEventType.swift */,
+			);
+			name = Logging;
+			sourceTree = "<group>";
+		};
+		A1230BD81E2F881E006642C7 /* Encryption */ = {
+			isa = PBXGroup;
+			children = (
+				0ECEA101240EA905007DC71E /* SMIME */,
+				475B00301F7B9565006CDD41 /* SwiftPGP.swift */,
+				476801DA218436B600F7F259 /* Autocrypt.swift */,
+				47A5D6E12294BF3A0084F81D /* TempKey.swift */,
+				475B00311F7B9565006CDD41 /* Cryptography.swift */,
+				475B00321F7B9565006CDD41 /* CryptoObject.swift */,
+				476406832416AA9100C7D426 /* TestOpenSSL.swift */,
+			);
+			name = Encryption;
+			sourceTree = "<group>";
+		};
+		A12F91D621F3A96300AB0589 /* extensions */ = {
+			isa = PBXGroup;
+			children = (
+				A12F91D721F3A99800AB0589 /* NSLayoutConstraintExtension.swift */,
+			);
+			name = extensions;
+			sourceTree = "<group>";
+		};
+		A135266C1D955BDF00D3BFE1 = {
+			isa = PBXGroup;
+			children = (
+				47CEF4EA2052C3C700887CDB /* ObjectivePGP.framework */,
+				A13526771D955BDF00D3BFE1 /* enzevalos_iphone */,
+				A135268F1D955BE000D3BFE1 /* enzevalos_iphoneTests */,
+				476EEF9722A872BF00BB4EF7 /* enzevalos_iphoneUITests */,
+				A13526761D955BDF00D3BFE1 /* Products */,
+				24472862977D71D3F0AD0D58 /* Pods */,
+				78280F99990BFF65543B7F0B /* Frameworks */,
+				47EABF04241A9C6400774A93 /* Recovered References */,
+			);
+			sourceTree = "<group>";
+		};
+		A13526761D955BDF00D3BFE1 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				A13526751D955BDF00D3BFE1 /* enzevalos_iphone.app */,
+				A135268C1D955BE000D3BFE1 /* enzevalos_iphoneTests.xctest */,
+				476EEF9622A872BF00BB4EF7 /* enzevalos_iphoneUITests.xctest */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A13526771D955BDF00D3BFE1 /* enzevalos_iphone */ = {
+			isa = PBXGroup;
+			children = (
+<<<<<<< HEAD
+				0EFEF0932417C08B00BB2FF7 /* C Helpers */,
+=======
+>>>>>>> dev
+				47EABF05241A9C7000774A93 /* Authentication */,
+				476406872416B54D00C7D426 /* SwiftUI */,
+				476403FA2413F95300C7D426 /* OpenSSL */,
+				A1B9999D21DE7CD2002563F6 /* Travel */,
+				477548DC21F5DA46000B22A8 /* mail */,
+				F1866C84201F703200B72453 /* OAuth */,
+				3EB4FA9C2012007C001D0625 /* Dialog */,
+				3EC35F1F2003755F008BDF95 /* Invitation */,
+				F1C733331FEC1CAC005A497E /* About */,
+				8428A8511F436952007649A5 /* Gamification */,
+				A17FDFF1202C680A00F7BA89 /* debug and study */,
+				47B91AC11EC0C1FB000AE3EE /* data */,
+				A1C7FF8B1E895316000D1E92 /* keys */,
+				A10DE41E1EFAA140005E8189 /* folders */,
+				A18C76851E8185ED00B21414 /* onboarding */,
+				A1EB05761D9567F2008659C1 /* read */,
+				F17654DF1F9E48F600D659B0 /* inbox */,
+				A1EB05751D956748008659C1 /* send */,
+				F1ACF21D1E0C290500C1B843 /* contactView */,
+				A19028E01F852D730030EA98 /* exportKey */,
+				A1D5076D1E80254D00B68B38 /* keyView */,
+				A13526781D955BDF00D3BFE1 /* AppDelegate.swift */,
+				F113C3831F30D01A00E7F1D6 /* QRCode */,
+				476142071E07E52B00FD5E4F /* Theme.swift */,
+				A1230BD81E2F881E006642C7 /* Encryption */,
+				476373C11E09BA88004D5EFE /* UserData.swift */,
+				A198270D1D9A8ABC0027F65C /* enzevalos_iphone-Bridging-Header.h */,
+				A1F9922B1DA7C9100073BF1B /* Main.storyboard */,
+				4790114A228997620057AB04 /* StyleKits */,
+				A1123E6C1DA682850069551C /* Localizable.strings */,
+				A13526841D955BDF00D3BFE1 /* LaunchScreen.storyboard */,
+				A1EB05A31D956E32008659C1 /* Assets.xcassets */,
+				476142091E082F9C00FD5E4F /* Settings.bundle */,
+				A1BE3FF81E9664660040114B /* InfoPlist.strings */,
+				A135267F1D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodeld */,
+				3E9708AC1FAC925D005825C9 /* PLists */,
+			);
+			path = enzevalos_iphone;
+			sourceTree = "<group>";
+		};
+		A135268F1D955BE000D3BFE1 /* enzevalos_iphoneTests */ = {
+			isa = PBXGroup;
+			children = (
+<<<<<<< HEAD
+				0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */,
+				97C5279D241A9F690030BBC9 /* authentication */,
+				988C9C5C240D507A006213F0 /* PhishingTests.swift */,
+=======
+				71DF0896242151E200162B74 /* phishing */,
+				97C5279D241A9F690030BBC9 /* authentication */,
+>>>>>>> dev
+				47F0376C22A7278A0005C9DE /* private */,
+				470709202189C24800DF71A3 /* testKeys */,
+				470709112189BB4A00DF71A3 /* testMails */,
+				4715F636202A0248001BFFD0 /* CoreDataTests.swift */,
+				A15D215E223BE6E4003E0CE0 /* MailTest.swift */,
+				A13526921D955BE000D3BFE1 /* Info.plist */,
+				F1E918D61FBDEECA00D60418 /* LoggerTests.swift */,
+				3EC35F2F2003838E008BDF95 /* InvitationTests.swift */,
+				8428A8561F4369EA007649A5 /* GamificationDataUnitTest.swift */,
+				479B5976206914BE00B3944D /* CryptoTests.swift */,
+				47C22280218AFD6300BD2C2B /* AutocryptTest.swift */,
+				478154AD2200641900A931EC /* StudyTest.swift */,
+				474054972244D7A9007CF83B /* MailServerConfigurationTest.swift */,
+			);
+			path = enzevalos_iphoneTests;
+			sourceTree = "<group>";
+		};
+		A13A166421E6918600757890 /* views */ = {
+			isa = PBXGroup;
+			children = (
+				A182183321E51DD200918A29 /* IntroContactCell.swift */,
+				A1EFF93221E6655C003BB240 /* IntroTableView.swift */,
+				A10DAA5621F37600005D8BBB /* IntroInfoButton.swift */,
+			);
+			name = views;
+			sourceTree = "<group>";
+		};
+		A17FDFF1202C680A00F7BA89 /* debug and study */ = {
+			isa = PBXGroup;
+			children = (
+				478154AA21FF6A5300A931EC /* mailbot */,
+				477548E021F77445000B22A8 /* study parameters */,
+				A17FDFF2202C685800F7BA89 /* StudySettings.swift */,
+				47D1302A1F7CEE6D007B14DF /* DebugSettings.swift */,
+				A111F6AB1FA77AF80060AFDE /* Logging */,
+				47A2A57123599D180013883D /* FeedbackButtonHelper.swift */,
+			);
+			name = "debug and study";
+			sourceTree = "<group>";
+		};
+		A182182521E500BC00918A29 /* Intro */ = {
+			isa = PBXGroup;
+			children = (
+				A12F91D621F3A96300AB0589 /* extensions */,
+				A182182A21E5060F00918A29 /* templates */,
+				A13A166421E6918600757890 /* views */,
+				A182182921E505F200918A29 /* controller */,
+			);
+			name = Intro;
+			sourceTree = "<group>";
+		};
+		A182182921E505F200918A29 /* controller */ = {
+			isa = PBXGroup;
+			children = (
+				A182182B21E5072200918A29 /* IntroDescriptionViewController.swift */,
+				A182182D21E50D8D00918A29 /* IntroButtonViewController.swift */,
+				A1B49E5C21E54CBF00ED86FC /* IntroContactTableViewController.swift */,
+				A1B49E6321E55ECD00ED86FC /* IntroPageViewController.swift */,
+				A142E70821E7919F000395E3 /* IntroContactViewController.swift */,
+				A1AEBA5821E808CB00C84E59 /* IntroYesNoViewController.swift */,
+				A1F8540F21E8A60800614514 /* IntroSecretViewController.swift */,
+				A1ACDD0821EB9C4C00A059D0 /* IntroInputViewController.swift */,
+			);
+			name = controller;
+			sourceTree = "<group>";
+		};
+		A182182A21E5060F00918A29 /* templates */ = {
+			isa = PBXGroup;
+			children = (
+				A182182621E5012300918A29 /* Intro.storyboard */,
+				A182183121E518A400918A29 /* IntroContactCell.xib */,
+				A1B49E5E21E54EE700ED86FC /* IntroContactView.xib */,
+			);
+			name = templates;
+			sourceTree = "<group>";
+		};
+		A18C76851E8185ED00B21414 /* onboarding */ = {
+			isa = PBXGroup;
+			children = (
+				476406A02416B5C800C7D426 /* OnboardingIntro.swift */,
+				4764069E2416B5A600C7D426 /* NewOnboardingView.swift */,
+				479C649821F45DAF00A01071 /* HideShowPasswordTextField.swift */,
+				479C649921F45DAF00A01071 /* PasswordToggleVisibilityView.swift */,
+				A1083A531E8BFEA6003666B7 /* Onboarding.swift */,
+				4751C6F72343B377006B2A4D /* Onboarding.Video.Click.Eng.m4v */,
+				A102AA891EDDB4E80024B457 /* videoOnboarding2.m4v */,
+				A1C62E992018F716000E5273 /* OnboardingValueState.swift */,
+			);
+			name = onboarding;
+			sourceTree = "<group>";
+		};
+		A19028E01F852D730030EA98 /* exportKey */ = {
+			isa = PBXGroup;
+			children = (
+				A12FC23020221A1400196008 /* ExportInfoViewController.swift */,
+				4707096C1F8F9F4900657F41 /* ExportViewController.swift */,
+				A1A9DE721F864B0500B808AA /* ExportCells.swift */,
+				4706D65E225B7B6B00B3F1D3 /* ItunesHandler.swift */,
+				4706D660225CD21D00B3F1D3 /* ExportKeyHelper.swift */,
+			);
+			name = exportKey;
+			sourceTree = "<group>";
+		};
+		A1B9999D21DE7CD2002563F6 /* Travel */ = {
+			isa = PBXGroup;
+			children = (
+				A182182521E500BC00918A29 /* Intro */,
+				A1FA44A621E10E1400DB02AC /* TravelHandler.swift */,
+			);
+			name = Travel;
+			sourceTree = "<group>";
+		};
+		A1C7FF8B1E895316000D1E92 /* keys */ = {
+			isa = PBXGroup;
+			children = (
+				0ECEA0ED240E7DB0007DC71E /* evilCA.p12 */,
+				0ECEA0F5240E7DB0007DC71E /* evilCA.pem */,
+				0ECEA0EF240E7DB0007DC71E /* evilkey1.p12 */,
+				0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */,
+				0ECEA0F4240E7DB0007DC71E /* mykey.p12 */,
+				0ECEA0F1240E7DB0007DC71E /* mykey.pem */,
+				0ECEA0F2240E7DB0007DC71E /* myTestCA.p12 */,
+				0ECEA0EE240E7DB0007DC71E /* myTestCA.pem */,
+				0ECEA0F3240E7DB0007DC71E /* otherkey1.p12 */,
+				0ECEA0F0240E7DB0007DC71E /* otherkey1.pem */,
+				A1E5960D1FCC871E003791E9 /* researchteam.asc */,
+				479C649521F2139B00A01071 /* support_pk.asc */,
+				47CD5AAC2012369300E771A1 /* support_pk2.asc */,
+				47CD5AA82012368D00E771A1 /* logging_pk.asc */,
+			);
+			name = keys;
+			sourceTree = "<group>";
+		};
+		A1D5076D1E80254D00B68B38 /* keyView */ = {
+			isa = PBXGroup;
+			children = (
+				4751C6F923449699006B2A4D /* CryptoManagementViewController.swift */,
+				A1D5076E1E80257A00B68B38 /* KeyViewController.swift */,
+				477670C3228453FB00043604 /* ButtonCell.xib */,
+				477670C5228454F700043604 /* ButtonCell.swift */,
+				47A2A56D2350A4EF0013883D /* MoreInformationViewController.swift */,
+				47E7376D22845EC400972401 /* SecretKeyTableViewController.swift */,
+				47C037022347D4D1006295E8 /* PasteKeyViewController.swift */,
+				47E7376F22845F3A00972401 /* KeyViews.storyboard */,
+				47E737732284610E00972401 /* KeyCell.xib */,
+				47E737752284632F00972401 /* KeyCell.swift */,
+				4751C6FB2344C8D1006B2A4D /* KeyTableViewController.swift */,
+				47C036FE2347C0F4006295E8 /* ImportKeyOverviewController.swift */,
+			);
+			name = keyView;
+			sourceTree = "<group>";
+		};
+		A1EB05751D956748008659C1 /* send */ = {
+			isa = PBXGroup;
+			children = (
+				A1EB057F1D956851008659C1 /* SendViewController.swift */,
+				F119D28F1E364B59001D732A /* AnimatedSendIcon.swift */,
+				474994012261E4E6000F8DA5 /* SimpleSendIcon.swift */,
+				A1EB057D1D956848008659C1 /* VENDataDelegate.swift */,
+				A1EB05811D95685B008659C1 /* CollectionDataDelegate.swift */,
+				A1EB05831D956867008659C1 /* TableViewDataDelegate.swift */,
+				A1EB05791D956829008659C1 /* ContactCell.swift */,
+				A1EB05851D956872008659C1 /* FrequentCell.swift */,
+				A1C3270D1DB907D900CE2ED5 /* TextFormatter.swift */,
+				A1EB05891D956890008659C1 /* ContactCell.xib */,
+				A1EB058B1D9568AB008659C1 /* FrequentCell.xib */,
+				A198D2282056B384004CC838 /* SendViewDelegate.swift */,
+				A1735DF9205AB88500B336DB /* SendViewState.swift */,
+			);
+			name = send;
+			sourceTree = "<group>";
+		};
+		A1EB05761D9567F2008659C1 /* read */ = {
+			isa = PBXGroup;
+			children = (
+				A1EB058F1D956923008659C1 /* ReadViewController.swift */,
+				F18B44611E73286C0080C041 /* ReadVENDelegate.swift */,
+				A1EB059F1D95696C008659C1 /* MessageBodyTableViewCell.swift */,
+			);
+			name = read;
+			sourceTree = "<group>";
+		};
+		A5E303D524110F6400310264 /* c */ = {
+			isa = PBXGroup;
+			children = (
+				A5E303D624110F6400310264 /* smime-helpers.h */,
+				A5E303D724110F6400310264 /* smime-helpers.c */,
+				0EF148062422570F00B3C198 /* generic-helpers.h */,
+				0EF148072422572500B3C198 /* general-helpers.c */,
+				0EF148092422584F00B3C198 /* certificate-helpers.h */,
+				0EF1480A2422584F00B3C198 /* certificate-helpers.c */,
+			);
+			path = c;
+			sourceTree = "<group>";
+		};
+		F113C3831F30D01A00E7F1D6 /* QRCode */ = {
+			isa = PBXGroup;
+			children = (
+				F113C3841F30D06800E7F1D6 /* QRScannerView.swift */,
+				F113C38A1F3344C200E7F1D6 /* ViewControllerPannable.swift */,
+				F14239C01F30A99C00998A83 /* QRCodeGenerator.swift */,
+			);
+			name = QRCode;
+			sourceTree = "<group>";
+		};
+		F17654DF1F9E48F600D659B0 /* inbox */ = {
+			isa = PBXGroup;
+			children = (
+				0ECEA0E7240E7081007DC71E /* SearchHelper.swift */,
+				F1F070261FA0DF3F004A860A /* Inbox.storyboard */,
+				F12041FA1DA3FBF7002E4940 /* ListViewController.swift */,
+				F12041FC1DA409A5002E4940 /* ListViewCell.swift */,
+				F12060811DA552FC00F6EF37 /* MailHandlerDelegator.swift */,
+				A1EB05931D956931008659C1 /* InboxCellDelegator.swift */,
+				A1EB05951D956939008659C1 /* InboxTableViewCell.swift */,
+				A1EB05971D956947008659C1 /* InboxViewController.swift */,
+				F120607F1DA540FE00F6EF37 /* RefreshControlExtension.swift */,
+				A1F9923B1DA7DD2E0073BF1B /* InboxTableViewCell.xib */,
+			);
+			name = inbox;
+			sourceTree = "<group>";
+		};
+		F1866C84201F703200B72453 /* OAuth */ = {
+			isa = PBXGroup;
+			children = (
+				F1866C85201F707200B72453 /* EmailHelper.m */,
+				F1866C87201F70B700B72453 /* EmailHelper.h */,
+			);
+			path = OAuth;
+			sourceTree = "<group>";
+		};
+		F1ACF21D1E0C290500C1B843 /* contactView */ = {
+			isa = PBXGroup;
+			children = (
+				F1ACF21B1E0C1C6800C1B843 /* ContactViewController.swift */,
+				F1AF938E1E2D04BA00755128 /* CustomCells.swift */,
+				F18B445D1E7044B70080C041 /* FlipTransition.swift */,
+				F18B445F1E704C550080C041 /* ReplaceSegue.swift */,
+			);
+			name = contactView;
+			sourceTree = "<group>";
+		};
+		F1C733331FEC1CAC005A497E /* About */ = {
+			isa = PBXGroup;
+			children = (
+				F12D8DBD2069422A0068788E /* About.storyboard */,
+				F1C7AC811FED6473007629DB /* AboutViewController.swift */,
+			);
+			path = About;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		476EEF9522A872BF00BB4EF7 /* enzevalos_iphoneUITests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 476EEF9D22A872BF00BB4EF7 /* Build configuration list for PBXNativeTarget "enzevalos_iphoneUITests" */;
+			buildPhases = (
+				E1C52B0447A565FBE3CAA203 /* [CP] Check Pods Manifest.lock */,
+				476EEF9222A872BF00BB4EF7 /* Sources */,
+				476EEF9322A872BF00BB4EF7 /* Frameworks */,
+				476EEF9422A872BF00BB4EF7 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				476EEF9C22A872BF00BB4EF7 /* PBXTargetDependency */,
+			);
+			name = enzevalos_iphoneUITests;
+			productName = enzevalos_iphoneUITests;
+			productReference = 476EEF9622A872BF00BB4EF7 /* enzevalos_iphoneUITests.xctest */;
+			productType = "com.apple.product-type.bundle.ui-testing";
+		};
+		A13526741D955BDF00D3BFE1 /* enzevalos_iphone */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = A13526A01D955BE000D3BFE1 /* Build configuration list for PBXNativeTarget "enzevalos_iphone" */;
+			buildPhases = (
+				60E197910FD6B0523F9273AE /* [CP] Check Pods Manifest.lock */,
+				A13526711D955BDF00D3BFE1 /* Sources */,
+				A13526721D955BDF00D3BFE1 /* Frameworks */,
+				A13526731D955BDF00D3BFE1 /* Resources */,
+				47F867DB2052B33C00AA832F /* CopyFiles */,
+				47F867E52052B4B500AA832F /* ShellScript */,
+				3992B0CB6412E8526773B814 /* [CP] Embed Pods Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = enzevalos_iphone;
+			productName = enzevalos_iphone;
+			productReference = A13526751D955BDF00D3BFE1 /* enzevalos_iphone.app */;
+			productType = "com.apple.product-type.application";
+		};
+		A135268B1D955BE000D3BFE1 /* enzevalos_iphoneTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = A13526A31D955BE000D3BFE1 /* Build configuration list for PBXNativeTarget "enzevalos_iphoneTests" */;
+			buildPhases = (
+				D6F0EB205D61EA8C8A045390 /* [CP] Check Pods Manifest.lock */,
+				47EABF01241A99DA00774A93 /* Cockoo run script */,
+				A13526881D955BE000D3BFE1 /* Sources */,
+				A13526891D955BE000D3BFE1 /* Frameworks */,
+				A135268A1D955BE000D3BFE1 /* Resources */,
+				0811D368D52F1D9B243500D4 /* [CP] Embed Pods Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				A135268E1D955BE000D3BFE1 /* PBXTargetDependency */,
+			);
+			name = enzevalos_iphoneTests;
+			productName = enzevalos_iphoneTests;
+			productReference = A135268C1D955BE000D3BFE1 /* enzevalos_iphoneTests.xctest */;
+			productType = "com.apple.product-type.bundle.unit-test";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		A135266D1D955BDF00D3BFE1 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				KnownAssetTags = (
+					MailCoreRessources,
+				);
+				LastSwiftUpdateCheck = 1010;
+				LastUpgradeCheck = 0940;
+				ORGANIZATIONNAME = "fu-berlin";
+				TargetAttributes = {
+					476EEF9522A872BF00BB4EF7 = {
+						CreatedOnToolsVersion = 10.1;
+						DevelopmentTeam = VJ9C93G68Y;
+						LastSwiftMigration = 1020;
+						ProvisioningStyle = Automatic;
+						TestTargetID = A13526741D955BDF00D3BFE1;
+					};
+					A13526741D955BDF00D3BFE1 = {
+						CreatedOnToolsVersion = 7.3.1;
+						DevelopmentTeam = VJ9C93G68Y;
+						LastSwiftMigration = 1020;
+						ProvisioningStyle = Automatic;
+						SystemCapabilities = {
+							com.apple.BackgroundModes = {
+								enabled = 1;
+							};
+							com.apple.DataProtection = {
+								enabled = 1;
+							};
+							com.apple.Keychain = {
+								enabled = 1;
+							};
+							com.apple.Push = {
+								enabled = 1;
+							};
+						};
+					};
+					A135268B1D955BE000D3BFE1 = {
+						CreatedOnToolsVersion = 7.3.1;
+						DevelopmentTeam = 4377G946WP;
+						LastSwiftMigration = 1020;
+					};
+				};
+			};
+			buildConfigurationList = A13526701D955BDF00D3BFE1 /* Build configuration list for PBXProject "enzevalos_iphone" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				English,
+				en,
+				Base,
+				de,
+			);
+			mainGroup = A135266C1D955BDF00D3BFE1;
+			productRefGroup = A13526761D955BDF00D3BFE1 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				A13526741D955BDF00D3BFE1 /* enzevalos_iphone */,
+				A135268B1D955BE000D3BFE1 /* enzevalos_iphoneTests */,
+				476EEF9522A872BF00BB4EF7 /* enzevalos_iphoneUITests */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		476EEF9422A872BF00BB4EF7 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				476EEFA722A87B9800BB4EF7 /* accounts.json in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A13526731D955BDF00D3BFE1 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A102AA8A1EDDB4F40024B457 /* videoOnboarding2.m4v in Resources */,
+				A1F992391DA7DD2E0073BF1B /* InboxTableViewCell.xib in Resources */,
+				47E737742284610E00972401 /* KeyCell.xib in Resources */,
+				0ECEA0FE240E7DB1007DC71E /* mykey.p12 in Resources */,
+				0ECEA0FF240E7DB1007DC71E /* evilCA.pem in Resources */,
+				0ECEA0FA240E7DB1007DC71E /* otherkey1.pem in Resources */,
+				47CD5AAD2012369400E771A1 /* support_pk2.asc in Resources */,
+				A1EB058A1D956890008659C1 /* ContactCell.xib in Resources */,
+				F1F070281FA0DF3F004A860A /* Inbox.storyboard in Resources */,
+				0ECEA0FC240E7DB1007DC71E /* myTestCA.p12 in Resources */,
+				0ECEA0F8240E7DB1007DC71E /* myTestCA.pem in Resources */,
+				4761420A1E082F9C00FD5E4F /* Settings.bundle in Resources */,
+				A16BA2121E0439B6005E29E3 /* providers.json in Resources */,
+				F12D8DBB2069422A0068788E /* About.storyboard in Resources */,
+				476406822416AA6F00C7D426 /* LICENSE in Resources */,
+				477670C4228453FB00043604 /* ButtonCell.xib in Resources */,
+				47E7377022845F3A00972401 /* KeyViews.storyboard in Resources */,
+				4751C6F82343B37C006B2A4D /* Onboarding.Video.Click.Eng.m4v in Resources */,
+				0ECEA0F9240E7DB1007DC71E /* evilkey1.p12 in Resources */,
+				0ECEA0F7240E7DB1007DC71E /* evilCA.p12 in Resources */,
+				A1E5960E1FCC871F003791E9 /* researchteam.asc in Resources */,
+				A1123E6A1DA682850069551C /* Localizable.strings in Resources */,
+				A1F992291DA7C9100073BF1B /* Main.storyboard in Resources */,
+				F18C5E561FE025D300C3B86D /* BadgeCase.storyboard in Resources */,
+				479C649621F2139B00A01071 /* support_pk.asc in Resources */,
+				3EB4FAA12012007C001D0625 /* Dialog.storyboard in Resources */,
+				A1B49E5F21E54EE700ED86FC /* IntroContactView.xib in Resources */,
+				A1BE3FF61E9664660040114B /* InfoPlist.strings in Resources */,
+				3E6B07DE2011246500E49609 /* invitationText.html in Resources */,
+				0ECEA0FB240E7DB1007DC71E /* mykey.pem in Resources */,
+				8428A8531F4369C0007649A5 /* Gamification.storyboard in Resources */,
+				8428A8551F4369CF007649A5 /* GamificationElements.xcassets in Resources */,
+				A182183221E518A400918A29 /* IntroContactCell.xib in Resources */,
+				A13526861D955BDF00D3BFE1 /* LaunchScreen.storyboard in Resources */,
+				47CD5AAA2012368D00E771A1 /* logging_pk.asc in Resources */,
+				A1EB05A41D956E32008659C1 /* Assets.xcassets in Resources */,
+				4756DE0E20402F8E00452288 /* invitationTextCensor.html in Resources */,
+				A1EB058C1D9568AB008659C1 /* FrequentCell.xib in Resources */,
+				A182182721E5012300918A29 /* Intro.storyboard in Resources */,
+				0ECEA100240E7DB1007DC71E /* evilkey1.pem in Resources */,
+				0ECEA0FD240E7DB1007DC71E /* otherkey1.p12 in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A135268A1D955BE000D3BFE1 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				470709262189C73900DF71A3 /* enc+signedInlineThunderbird.eml in Resources */,
+				47E7BE632232BD0A00C8EF94 /* SignedEncMailFromMac.eml in Resources */,
+				471876F8223FACA900912135 /* BobWithoutPW.asc in Resources */,
+				479B597B20691C1A00B3944D /* ObjectivePGP.framework in Resources */,
+				470709282189C73900DF71A3 /* encInlineThunderbird.eml in Resources */,
+				479AFDA222571AB90063A332 /* EccAlice(777879D4)–Public.asc in Resources */,
+				0ECEA0EA240E7D64007DC71E /* SMIME Test 1 S.eml in Resources */,
+				470709292189C73900DF71A3 /* signedInlineThunderbird.eml in Resources */,
+				8428A8841F436ACC007649A5 /* GamificationElements.xcassets in Resources */,
+				4707092D2189C74200DF71A3 /* bobSecret.asc in Resources */,
+				0E1C457D24055F87006D104A /* signencinlineK9.eml in Resources */,
+				47F0376E22A7278A0005C9DE /* accounts.json in Resources */,
+				47E7BE5B22319B6900C8EF94 /* EncMailFromMac.eml in Resources */,
+				4774DD7522D0015F00BD8CF6 /* multiIDs.eml in Resources */,
+				4774DD7322CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc in Resources */,
+				4707091E2189BC3500DF71A3 /* plainThunderbird.eml in Resources */,
+				4707092E2189C74200DF71A3 /* alicePublic.asc in Resources */,
+				4707092A2189C73900DF71A3 /* signedThunderbird.eml in Resources */,
+				4774DD7E22D4062200BD8CF6 /* Bob Letterbox (0B6CD0A0) – Secret.asc in Resources */,
+				A15D215D223BE614003E0CE0 /* attachment.eml in Resources */,
+				47C22283218B02C700BD2C2B /* autocryptSimpleExample1.eml in Resources */,
+				471876F7223FACA900912135 /* BobPWTEST1234.asc in Resources */,
+				4774DD7F22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc in Resources */,
+				470709302189E1C100DF71A3 /* enc+signedThunderbird.eml in Resources */,
+				47E7BE6122319B8F00C8EF94 /* PlainMailFromMac.eml in Resources */,
+				0E1C457C24055F87006D104A /* signencK9.eml in Resources */,
+				4774DD8122D4067E00BD8CF6 /* signedEncMailFromApple.eml in Resources */,
+				4774DD7B22D3F5D100BD8CF6 /* multiIDs2.eml in Resources */,
+				0ECEA0EC240E7D85007DC71E /* johnny C1.json.eml in Resources */,
+				470709272189C73900DF71A3 /* encThunderbird.eml in Resources */,
+				0E1C457A24055F87006D104A /* signinlineK9.eml in Resources */,
+				47E7BE5D22319B7100C8EF94 /* SignedMailFromMac.eml in Resources */,
+				47E7BE5F22319B7D00C8EF94 /* SecureMailFromMac.eml in Resources */,
+				0E1C457B24055F87006D104A /* signK9.eml in Resources */,
+				0E1C458024055FB7006D104A /* Alice.v3.pubsec.asc in Resources */,
+				0E1C458124055FB7006D104A /* Alice.v3.pub.asc in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		0811D368D52F1D9B243500D4 /* [CP] Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests-frameworks.sh",
+				"${BUILT_PRODUCTS_DIR}/Cuckoo/Cuckoo.framework",
+			);
+			name = "[CP] Embed Pods Frameworks";
+			outputPaths = (
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cuckoo.framework",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-enzevalos_iphoneTests/Pods-enzevalos_iphoneTests-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		3992B0CB6412E8526773B814 /* [CP] Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone-frameworks.sh",
+				"${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework",
+				"${BUILT_PRODUCTS_DIR}/BZipCompression/BZipCompression.framework",
+				"${BUILT_PRODUCTS_DIR}/Cuckoo/Cuckoo.framework",
+				"${BUILT_PRODUCTS_DIR}/FrameAccessor/FrameAccessor.framework",
+				"${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework",
+				"${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework",
+				"${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework",
+				"${BUILT_PRODUCTS_DIR}/Onboard/Onboard.framework",
+				"${BUILT_PRODUCTS_DIR}/QAKit/QAKit.framework",
+				"${BUILT_PRODUCTS_DIR}/Travellib/Travellib.framework",
+				"${BUILT_PRODUCTS_DIR}/VENTokenField/VENTokenField.framework",
+			);
+			name = "[CP] Embed Pods Frameworks";
+			outputPaths = (
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BZipCompression.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cuckoo.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FrameAccessor.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KeychainAccess.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Onboard.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/QAKit.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Travellib.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VENTokenField.framework",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		47EABF01241A99DA00774A93 /* Cockoo run script */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+			);
+			inputPaths = (
+			);
+			name = "Cockoo run script";
+			outputFileListPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "# Define output file. Change \"${PROJECT_DIR}/${PROJECT_NAME}Tests\" to your test's root source folder, if it's not the default name.\nOUTPUT_FILE=\"${PROJECT_DIR}/${PROJECT_NAME}Tests/GeneratedMocks.swift\"\necho \"Generated Mocks File = ${OUTPUT_FILE}\"\n\n# Define input directory. Change \"${PROJECT_DIR}/${PROJECT_NAME}\" to your project's root source folder, if it's not the default name.\nINPUT_DIR=\"${PROJECT_DIR}/${PROJECT_NAME}\"\necho \"Mocks Input Directory = ${INPUT_DIR}\"\n\n# Generate mock files, include as many input files as you'd like to create mocks for.\n\"${PODS_ROOT}/Cuckoo/run\" generate --testable \"${PROJECT_NAME}\" \\\n--output \"${OUTPUT_FILE}\" \\\n\"${INPUT_DIR}/AuthenticationModel.swift\" \\\n\"${INPUT_DIR}/AuthenticationViewModel.swift\" \n# ... and so forth, the last line should never end with a backslash\n\n# After running once, locate `GeneratedMocks.swift` and drag it into your Xcode test target group.\n";
+		};
+		47F867E52052B4B500AA832F /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 8;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 1;
+			shellPath = /bin/sh;
+			shellScript = "bash \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectivePGP.framework/strip-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		60E197910FD6B0523F9273AE /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-enzevalos_iphone-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+		D6F0EB205D61EA8C8A045390 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-enzevalos_iphoneTests-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+		E1C52B0447A565FBE3CAA203 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputFileListPaths = (
+			);
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-enzevalos_iphoneUITests-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		476EEF9222A872BF00BB4EF7 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				476EEFA122A873A800BB4EF7 /* OnboardingTest.swift in Sources */,
+				476EEF9922A872BF00BB4EF7 /* enzevalos_iphoneUITests.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A13526711D955BDF00D3BFE1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				47691A8A1ECB56D1004BCFC5 /* Mail.swift in Sources */,
+				476801DE21846A5A00F7F259 /* OutgoingMail.swift in Sources */,
+				472F398A1E251787009260FB /* Contact.swift in Sources */,
+				472F39861E1FA34E009260FB /* Record.swift in Sources */,
+				A1C3270E1DB907D900CE2ED5 /* TextFormatter.swift in Sources */,
+				F12041FD1DA409A5002E4940 /* ListViewCell.swift in Sources */,
+				A1EFF93321E6655C003BB240 /* IntroTableView.swift in Sources */,
+				4764069A2416B54D00C7D426 /* MailView.swift in Sources */,
+				A1E2324E1F0FA41A00DC9D40 /* FolderListCell.swift in Sources */,
+				A1F8541021E8A60800614514 /* IntroSecretViewController.swift in Sources */,
+				A1ACDD0921EB9C4C00A059D0 /* IntroInputViewController.swift in Sources */,
+				476406952416B54D00C7D426 /* KeyRecordRow.swift in Sources */,
+				476916A0216B86A100491527 /* PersistentMail +CoreDataClass.swift in Sources */,
+				4751C7002344D37C006B2A4D /* SecretKey+CoreDataClass.swift in Sources */,
+				A1AEBA5921E808CB00C84E59 /* IntroYesNoViewController.swift in Sources */,
+				A1EB05941D956931008659C1 /* InboxCellDelegator.swift in Sources */,
+				8428A85D1F436A05007649A5 /* Badges.swift in Sources */,
+				8428A8651F436A11007649A5 /* BadgeCaseCollectionViewCell.swift in Sources */,
+				472F39811E1E5347009260FB /* Mail_Address+CoreDataClass.swift in Sources */,
+				A1EB05821D95685B008659C1 /* CollectionDataDelegate.swift in Sources */,
+				47A5D6E22294BF3B0084F81D /* TempKey.swift in Sources */,
+				4751C7012344D37C006B2A4D /* SecretKey+CoreDataProperties.swift in Sources */,
+				476406992416B54D00C7D426 /* SearchView.swift in Sources */,
+				47D1302B1F7CEE6D007B14DF /* DebugSettings.swift in Sources */,
+				A1EB05801D956851008659C1 /* SendViewController.swift in Sources */,
+				479C649B21F45DAF00A01071 /* PasswordToggleVisibilityView.swift in Sources */,
+				47691A8C1ECC3EC7004BCFC5 /* EphemeralMail.swift in Sources */,
+				A5E303D824110F6400310264 /* smime-helpers.c in Sources */,
+				A142E70921E7919F000395E3 /* IntroContactViewController.swift in Sources */,
+				8428A8671F436A11007649A5 /* SubBadgeHeaderTableViewCell.swift in Sources */,
+				A1EB05981D956947008659C1 /* InboxViewController.swift in Sources */,
+				F1984D721E1D327200804E1E /* IconsStyleKit.swift in Sources */,
+				F1737ACB2031D7D70000312B /* StudySettings.swift in Sources */,
+				0ECA5798240D496800B0F231 /* SMIME.swift in Sources */,
+				8428A8691F436A11007649A5 /* UserNameGamificationTableViewCell.swift in Sources */,
+				A114E4321FACB23000E40243 /* StringExtension.swift in Sources */,
+				472F398C1E2519C8009260FB /* CNContactExtension.swift in Sources */,
+				476406A12416B5C800C7D426 /* OnboardingIntro.swift in Sources */,
+				476406972416B54D00C7D426 /* InboxCoordinator.swift in Sources */,
+<<<<<<< HEAD
+				0EF148082422572500B3C198 /* general-helpers.c in Sources */,
+=======
+>>>>>>> dev
+				F113C3851F30D06800E7F1D6 /* QRScannerView.swift in Sources */,
+				477670C6228454F700043604 /* ButtonCell.swift in Sources */,
+				F18B44601E704C550080C041 /* ReplaceSegue.swift in Sources */,
+				8428A8661F436A11007649A5 /* ArrowTableViewCell.swift in Sources */,
+				F1ACF21C1E0C1C6800C1B843 /* ContactViewController.swift in Sources */,
+				476406962416B54D00C7D426 /* Inbox.swift in Sources */,
+				475B00351F7B9565006CDD41 /* CryptoObject.swift in Sources */,
+				A1EB057E1D956848008659C1 /* VENDataDelegate.swift in Sources */,
+				4706D661225CD21D00B3F1D3 /* ExportKeyHelper.swift in Sources */,
+				8428A86F1F436A1E007649A5 /* InviteFriendViewController.swift in Sources */,
+				A1735DFA205AB88500B336DB /* SendViewState.swift in Sources */,
+				475B00331F7B9565006CDD41 /* SwiftPGP.swift in Sources */,
+				477548E421F77BA0000B22A8 /* StudyParameterProtocol.swift in Sources */,
+				47A5D6E42294BFF50084F81D /* Logger.swift in Sources */,
+				3EB4FAA420120096001D0625 /* DialogOption.swift in Sources */,
+				F14239C11F30A99C00998A83 /* QRCodeGenerator.swift in Sources */,
+				4764069C2416B54D00C7D426 /* VCSwiftUIView.swift in Sources */,
+				478154A921FF3FF400A931EC /* Invitation.swift in Sources */,
+				47A2A56E2350A4EF0013883D /* MoreInformationViewController.swift in Sources */,
+				F1AF938F1E2D04BA00755128 /* CustomCells.swift in Sources */,
+				8428A8711F436A1E007649A5 /* GamificationStatusViewController.swift in Sources */,
+				F1866C86201F707200B72453 /* EmailHelper.m in Sources */,
+				47F79241203492E3005E7DB6 /* KeyRecord+CoreDataProperties.swift in Sources */,
+				A10DE4201EFAA2CE005E8189 /* FolderViewController.swift in Sources */,
+				3EB4FA9F2012007C001D0625 /* DialogViewController.swift in Sources */,
+				476142081E07E52B00FD5E4F /* Theme.swift in Sources */,
+				47C037032347D4D1006295E8 /* PasteKeyViewController.swift in Sources */,
+				8428A8701F436A1E007649A5 /* LinearBadgeViewController.swift in Sources */,
+				476801DB218436B600F7F259 /* Autocrypt.swift in Sources */,
+				A1EB057A1D956829008659C1 /* ContactCell.swift in Sources */,
+				A12FC23120221A1400196008 /* ExportInfoViewController.swift in Sources */,
+				4751C6EE233CA583006B2A4D /* DateExtension.swift in Sources */,
+				477548DE21F5DABE000B22A8 /* MailServerConnectionError.swift in Sources */,
+				475DF47A1F0D54C9009D807F /* Folder+CoreDataProperties.swift in Sources */,
+				475B00431F7BB6D6006CDD41 /* PersistentKey+CoreDataProperties.swift in Sources */,
+				479C649A21F45DAF00A01071 /* HideShowPasswordTextField.swift in Sources */,
+				47CEAC98222541B40075B7DC /* MailSession.swift in Sources */,
+				F119D2901E364B59001D732A /* AnimatedSendIcon.swift in Sources */,
+				4707096D1F8F9F4900657F41 /* ExportViewController.swift in Sources */,
+				F12060801DA540FE00F6EF37 /* RefreshControlExtension.swift in Sources */,
+				4751C6FC2344C8D1006B2A4D /* KeyTableViewController.swift in Sources */,
+				A13526811D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodeld in Sources */,
+				472F39821E1E5347009260FB /* Mail_Address+CoreDataProperties.swift in Sources */,
+				477548E221F77466000B22A8 /* SecurityIndicator.swift in Sources */,
+				476373C21E09BA88004D5EFE /* UserData.swift in Sources */,
+				A1EB05A01D95696C008659C1 /* MessageBodyTableViewCell.swift in Sources */,
+				F18B44621E73286C0080C041 /* ReadVENDelegate.swift in Sources */,
+				475B00421F7BB6D6006CDD41 /* PersistentKey+CoreDataClass.swift in Sources */,
+				A10DAA5721F37600005D8BBB /* IntroInfoButton.swift in Sources */,
+				47A2A57223599D180013883D /* FeedbackButtonHelper.swift in Sources */,
+				476406842416AA9100C7D426 /* TestOpenSSL.swift in Sources */,
+				3EC35F2420037651008BDF95 /* InvitationHelper.swift in Sources */,
+				A1B49E6421E55ECD00ED86FC /* IntroPageViewController.swift in Sources */,
+				A1D5076F1E80257A00B68B38 /* KeyViewController.swift in Sources */,
+				A1A9DE731F864B0500B808AA /* ExportCells.swift in Sources */,
+				472F39901E252470009260FB /* CNMailAddressesExtension.swift in Sources */,
+				F113C38B1F3344C200E7F1D6 /* ViewControllerPannable.swift in Sources */,
+				A1EB05841D956867008659C1 /* TableViewDataDelegate.swift in Sources */,
+				8428A85E1F436A05007649A5 /* CircleView.swift in Sources */,
+				A182182C21E5072200918A29 /* IntroDescriptionViewController.swift in Sources */,
+				F1C7AC821FED6473007629DB /* AboutViewController.swift in Sources */,
+				A182183421E51DD200918A29 /* IntroContactCell.swift in Sources */,
+				472F397C1E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift in Sources */,
+				8428A85C1F436A05007649A5 /* ArrowView.swift in Sources */,
+				47E737762284632F00972401 /* KeyCell.swift in Sources */,
+				A1EB05961D956939008659C1 /* InboxTableViewCell.swift in Sources */,
+				47F79240203492E3005E7DB6 /* KeyRecord+CoreDataClass.swift in Sources */,
+				A1083A541E8BFEA6003666B7 /* Onboarding.swift in Sources */,
+				476406982416B54D00C7D426 /* CiricleImage.swift in Sources */,
+				A111F6AD1FA77B170060AFDE /* LoggerDetail.swift in Sources */,
+				A13526791D955BDF00D3BFE1 /* AppDelegate.swift in Sources */,
+				476916A2216B86CF00491527 /* EnzevalosContact+CoreDataClass.swift in Sources */,
+				0EF148052422543E00B3C198 /* Certificate.swift in Sources */,
+				A1ECE54B1EFBE7ED0009349F /* FolderCell.swift in Sources */,
+				8428A85F1F436A05007649A5 /* GamificationData.swift in Sources */,
+				475DF4791F0D54C9009D807F /* Folder+CoreDataClass.swift in Sources */,
+				A15D215B223BE5F4003E0CE0 /* TempAttachment.swift in Sources */,
+				4706D65F225B7B6B00B3F1D3 /* ItunesHandler.swift in Sources */,
+				3EC35F2D200376A1008BDF95 /* SendViewController+Invitation.swift in Sources */,
+				47EABF0A241A9C8700774A93 /* AuthenticationViewModel.swift in Sources */,
+				475B00341F7B9565006CDD41 /* Cryptography.swift in Sources */,
+				A1EB057C1D956838008659C1 /* MailHandler.swift in Sources */,
+				A182182E21E50D8D00918A29 /* IntroButtonViewController.swift in Sources */,
+<<<<<<< HEAD
+				0EFEF0952417C0B400BB2FF7 /* CHelpers.swift in Sources */,
+=======
+>>>>>>> dev
+				4764069D2416B54D00C7D426 /* Stroke.swift in Sources */,
+				478AF715222FD5C600AEF69E /* IncomingMail.swift in Sources */,
+				47EABF09241A9C8700774A93 /* AuthenticationModel.swift in Sources */,
+				47C036FF2347C0F5006295E8 /* ImportKeyOverviewController.swift in Sources */,
+				A1EB05881D956879008659C1 /* AddressHandler.swift in Sources */,
+				472F39701E14F75C009260FB /* DataHandler.swift in Sources */,
+				A1C62E9A2018F716000E5273 /* OnboardingValueState.swift in Sources */,
+				A1EB05901D956923008659C1 /* ReadViewController.swift in Sources */,
+				472F398E1E251B8D009260FB /* MailAddress.swift in Sources */,
+				A198D2292056B384004CC838 /* SendViewDelegate.swift in Sources */,
+				479011492289975D0057AB04 /* NoSecIconStyleKit.swift in Sources */,
+				F12060821DA552FC00F6EF37 /* MailHandlerDelegator.swift in Sources */,
+				474994022261E4E6000F8DA5 /* SimpleSendIcon.swift in Sources */,
+				0ECEA0E8240E7081007DC71E /* SearchHelper.swift in Sources */,
+				A12F91D821F3A99800AB0589 /* NSLayoutConstraintExtension.swift in Sources */,
+				71DFE5BA240679E80042019C /* HeaderExtractionValues.swift in Sources */,
+				47EABF0D241A9CA800774A93 /* MailAccount.swift in Sources */,
+				A18E7D771FBDE5D9002F7CC9 /* LoggingEventType.swift in Sources */,
+				F1984D741E1E92B300804E1E /* LabelStyleKit.swift in Sources */,
+				A1FA44A721E10E1400DB02AC /* TravelHandler.swift in Sources */,
+				47E7376E22845EC400972401 /* SecretKeyTableViewController.swift in Sources */,
+				478154A721FF3F0900A931EC /* Warning.swift in Sources */,
+				4764069F2416B5A600C7D426 /* NewOnboardingView.swift in Sources */,
+<<<<<<< HEAD
+				0EF73F4324237E6500932FA0 /* SMIMEHelpers.swift in Sources */,
+=======
+>>>>>>> dev
+				47EABF0B241A9C8700774A93 /* AuthenticationScreen.swift in Sources */,
+				8428A8681F436A11007649A5 /* SubBadgeTableViewCell.swift in Sources */,
+				A1EB05861D956872008659C1 /* FrequentCell.swift in Sources */,
+				F12041FB1DA3FBF7002E4940 /* ListViewController.swift in Sources */,
+				F18B445E1E7044B70080C041 /* FlipTransition.swift in Sources */,
+				472F397E1E1D0B0B009260FB /* EnzevalosContact+CoreDataProperties.swift in Sources */,
+				4751C6FA23449699006B2A4D /* CryptoManagementViewController.swift in Sources */,
+				478154AC21FF6A9600A931EC /* Mailbot.swift in Sources */,
+				8428A86E1F436A1E007649A5 /* BadgeCase.swift in Sources */,
+				A1B49E5D21E54CBF00ED86FC /* IntroContactTableViewController.swift in Sources */,
+				0EF1480B2422584F00B3C198 /* certificate-helpers.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A13526881D955BE000D3BFE1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8428A8831F436AC9007649A5 /* GamificationDataUnitTest.swift in Sources */,
+				71DF08982421520D00162B74 /* EmailStringExtensionTests.swift in Sources */,
+				3EC35F302003838E008BDF95 /* InvitationTests.swift in Sources */,
+				474054982244D7A9007CF83B /* MailServerConfigurationTest.swift in Sources */,
+				479B5977206914BE00B3944D /* CryptoTests.swift in Sources */,
+				A15D215F223BE6E4003E0CE0 /* MailTest.swift in Sources */,
+<<<<<<< HEAD
+				0ED9073024338E3C008CF9D0 /* SMIMETests.swift in Sources */,
+				47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */,
+				988C9C5D240D507A006213F0 /* PhishingTests.swift in Sources */,
+=======
+				47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */,
+				988C9C5D240D507A006213F0 /* UrlStringExtensionTests.swift in Sources */,
+>>>>>>> dev
+				4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */,
+				47C22281218AFD6300BD2C2B /* AutocryptTest.swift in Sources */,
+				478154AE2200641900A931EC /* StudyTest.swift in Sources */,
+				47EABF0E2420C63600774A93 /* GeneratedMocks.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		476EEF9C22A872BF00BB4EF7 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = A13526741D955BDF00D3BFE1 /* enzevalos_iphone */;
+			targetProxy = 476EEF9B22A872BF00BB4EF7 /* PBXContainerItemProxy */;
+		};
+		A135268E1D955BE000D3BFE1 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = A13526741D955BDF00D3BFE1 /* enzevalos_iphone */;
+			targetProxy = A135268D1D955BE000D3BFE1 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		A1123E6C1DA682850069551C /* Localizable.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				A1123E6B1DA682850069551C /* en */,
+				A1123E6D1DA682870069551C /* de */,
+			);
+			name = Localizable.strings;
+			sourceTree = "<group>";
+		};
+		A13526841D955BDF00D3BFE1 /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				A1F992301DA7D22D0073BF1B /* de */,
+				A1F992321DA7D2360073BF1B /* en */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+		A1BE3FF81E9664660040114B /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				A1BE3FF71E9664660040114B /* en */,
+				A1BE3FF91E96646A0040114B /* de */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		A1F9922B1DA7C9100073BF1B /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				A1F992341DA7DA570073BF1B /* Base */,
+				A1F992371DA7DC760073BF1B /* en */,
+				A1F992381DA7DC7B0073BF1B /* de */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		A1F9923B1DA7DD2E0073BF1B /* InboxTableViewCell.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				A1F9923A1DA7DD2E0073BF1B /* Base */,
+				A1F9923D1DA7DD350073BF1B /* en */,
+				A1F9923F1DA7DD370073BF1B /* de */,
+			);
+			name = InboxTableViewCell.xib;
+			sourceTree = "<group>";
+		};
+		F12D8DBD2069422A0068788E /* About.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F12D8DBC2069422A0068788E /* Base */,
+				F176A216206943080068788E /* en */,
+			);
+			name = About.storyboard;
+			sourceTree = "<group>";
+		};
+		F1F070261FA0DF3F004A860A /* Inbox.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F1F070271FA0DF3F004A860A /* Base */,
+				F12D8DB320692E280068788E /* en */,
+				F12D8DB520692E2D0068788E /* de */,
+			);
+			name = Inbox.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		476EEF9E22A872BF00BB4EF7 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9A132EDE8BCA06ACDB505C22 /* Pods-enzevalos_iphoneUITests.debug.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = VJ9C93G68Y;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				INFOPLIST_FILE = enzevalos_iphoneUITests/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = "FU-Berlin.enzevalos-iphoneUITests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = enzevalos_iphone;
+			};
+			name = Debug;
+		};
+		476EEF9F22A872BF00BB4EF7 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 796D16D79BED5D60B580E602 /* Pods-enzevalos_iphoneUITests.release.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = VJ9C93G68Y;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				INFOPLIST_FILE = enzevalos_iphoneUITests/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MTL_FAST_MATH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = "FU-Berlin.enzevalos-iphoneUITests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = enzevalos_iphone;
+			};
+			name = Release;
+		};
+		A135269E1D955BE000D3BFE1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_BITCODE = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = "-fprofile-instr-generate";
+				SDKROOT = iphoneos;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_VERSION = "";
+			};
+			name = Debug;
+		};
+		A135269F1D955BE000D3BFE1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_BITCODE = NO;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				OTHER_LDFLAGS = "-fprofile-instr-generate";
+				SDKROOT = iphoneos;
+				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+				SWIFT_VERSION = "";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		A13526A11D955BE000D3BFE1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 91B6C9020C660BEA78FAEF28 /* Pods-enzevalos_iphone.debug.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
+				ASSETCATALOG_COMPILER_APPICON_NAME = Mailbox;
+				CLANG_ENABLE_MODULES = NO;
+				CODE_SIGN_ENTITLEMENTS = enzevalos_iphone/PLists/enzevalos_iphone.entitlements;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				DEFINES_MODULE = NO;
+				DEVELOPMENT_TEAM = VJ9C93G68Y;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone",
+					"$(PROJECT_DIR)_workspace",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/BZipCompression/BZipCompression.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/FrameAccessor/FrameAccessor.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Onboard/Onboard.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/QAKit/QAKit.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Travellib/Travellib.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/VENTokenField/VENTokenField.framework/Headers\"",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"\"${PODS_ROOT}/Headers/Public/mailcore2-ios\"",
+					"$(SRCROOT)/enzevalos_iphone/OpenSSL/include",
+				);
+				INFOPLIST_FILE = "enzevalos_iphone/PLists/enzevalos-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(inherited)",
+					"$(PROJECT_DIR)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
+				);
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-ObjC",
+					"-l\"MailCore-ios\"",
+					"-l\"c++\"",
+					"-l\"crypto\"",
+					"-l\"iconv\"",
+					"-l\"resolv\"",
+					"-l\"ssl\"",
+					"-l\"xml2\"",
+					"-l\"z\"",
+					"-lbz2",
+					"-framework",
+					"\"BZipCompression\"",
+					"-framework",
+					"\"FrameAccessor\"",
+					"-framework",
+					"\"VENTokenField\"",
+				);
+				OTHER_SWIFT_FLAGS = "$(inherited) -D DEBUG";
+				PRODUCT_BUNDLE_IDENTIFIER = "fu-berlin.enzevalos-iphone";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE = "";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				SWIFT_INCLUDE_PATHS = "";
+				"SWIFT_INCLUDE_PATHS[arch=*]" = "";
+				SWIFT_OBJC_BRIDGING_HEADER = "enzevalos_iphone-Bridging-Header.h";
+				"SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = "enzevalos_iphone/enzevalos_iphone-Bridging-Header.h";
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_VERSION = 5.0;
+			};
+			name = Debug;
+		};
+		A13526A21D955BE000D3BFE1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = AA686D4FC9B86445A0C87F0F /* Pods-enzevalos_iphone.release.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
+				ASSETCATALOG_COMPILER_APPICON_NAME = Mailbox;
+				CLANG_ENABLE_MODULES = NO;
+				CODE_SIGN_ENTITLEMENTS = enzevalos_iphone/PLists/enzevalos_iphone.entitlements;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				DEFINES_MODULE = NO;
+				DEVELOPMENT_TEAM = VJ9C93G68Y;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone",
+					"$(PROJECT_DIR)_workspace",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/BZipCompression/BZipCompression.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/FrameAccessor/FrameAccessor.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Onboard/Onboard.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/QAKit/QAKit.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Travellib/Travellib.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/VENTokenField/VENTokenField.framework/Headers\"",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"\"${PODS_ROOT}/Headers/Public/mailcore2-ios\"",
+					"$(SRCROOT)/enzevalos_iphone/OpenSSL/include",
+				);
+				INFOPLIST_FILE = "enzevalos_iphone/PLists/enzevalos-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(inherited)",
+					"$(PROJECT_DIR)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
+				);
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-ObjC",
+					"-l\"MailCore-ios\"",
+					"-l\"c++\"",
+					"-l\"crypto\"",
+					"-l\"iconv\"",
+					"-l\"resolv\"",
+					"-l\"ssl\"",
+					"-l\"xml2\"",
+					"-l\"z\"",
+					"-lbz2",
+					"-framework",
+					"\"BZipCompression\"",
+					"-framework",
+					"\"FrameAccessor\"",
+					"-framework",
+					"\"VENTokenField\"",
+				);
+				OTHER_SWIFT_FLAGS = "$(inherited) -D RELEASE";
+				PRODUCT_BUNDLE_IDENTIFIER = "fu-berlin.enzevalos-iphone";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE = "";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				SWIFT_INCLUDE_PATHS = "";
+				SWIFT_OBJC_BRIDGING_HEADER = "enzevalos_iphone-Bridging-Header.h";
+				"SWIFT_OBJC_BRIDGING_HEADER[sdk=*]" = "enzevalos_iphone/enzevalos_iphone-Bridging-Header.h";
+				SWIFT_VERSION = 5.0;
+			};
+			name = Release;
+		};
+		A13526A41D955BE000D3BFE1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 6EBCCD02AD3B95D8317810E2 /* Pods-enzevalos_iphoneTests.debug.xcconfig */;
+			buildSettings = {
+				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/enzevalos_iphone.app/enzevalos_iphone";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone",
+					"$(PROJECT_DIR)_workspace",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/BZipCompression/BZipCompression.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/FrameAccessor/FrameAccessor.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Onboard/Onboard.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/QAKit/QAKit.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Travellib/Travellib.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/VENTokenField/VENTokenField.framework/Headers\"",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"\"${PODS_ROOT}/Headers/Public/mailcore2-ios\"",
+					"$(SRCROOT)/enzevalos_iphone/OpenSSL/include",
+				);
+				INFOPLIST_FILE = enzevalos_iphoneTests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "fu-berlin.enzevalos-iphoneTests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_VERSION = 5.0;
+				TEST_HOST = "$(BUNDLE_LOADER)";
+			};
+			name = Debug;
+		};
+		A13526A51D955BE000D3BFE1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = BC7D006B3B40A23E53B4F317 /* Pods-enzevalos_iphoneTests.release.xcconfig */;
+			buildSettings = {
+				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/enzevalos_iphone.app/enzevalos_iphone";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone",
+					"$(PROJECT_DIR)_workspace",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/BZipCompression/BZipCompression.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/FrameAccessor/FrameAccessor.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Onboard/Onboard.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/QAKit/QAKit.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/Travellib/Travellib.framework/Headers\"",
+					"\"${PODS_CONFIGURATION_BUILD_DIR}/VENTokenField/VENTokenField.framework/Headers\"",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"\"${PODS_ROOT}/Headers/Public/mailcore2-ios\"",
+					"$(SRCROOT)/enzevalos_iphone/OpenSSL/include",
+				);
+				INFOPLIST_FILE = enzevalos_iphoneTests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "fu-berlin.enzevalos-iphoneTests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_VERSION = 5.0;
+				TEST_HOST = "$(BUNDLE_LOADER)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		476EEF9D22A872BF00BB4EF7 /* Build configuration list for PBXNativeTarget "enzevalos_iphoneUITests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				476EEF9E22A872BF00BB4EF7 /* Debug */,
+				476EEF9F22A872BF00BB4EF7 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		A13526701D955BDF00D3BFE1 /* Build configuration list for PBXProject "enzevalos_iphone" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A135269E1D955BE000D3BFE1 /* Debug */,
+				A135269F1D955BE000D3BFE1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		A13526A01D955BE000D3BFE1 /* Build configuration list for PBXNativeTarget "enzevalos_iphone" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A13526A11D955BE000D3BFE1 /* Debug */,
+				A13526A21D955BE000D3BFE1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		A13526A31D955BE000D3BFE1 /* Build configuration list for PBXNativeTarget "enzevalos_iphoneTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A13526A41D955BE000D3BFE1 /* Debug */,
+				A13526A51D955BE000D3BFE1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+
+/* Begin XCVersionGroup section */
+		A135267F1D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodeld */ = {
+			isa = XCVersionGroup;
+			children = (
+				670159DF240FB4E800797FA5 /* enzevalos_iphone 9.xcdatamodel */,
+				4751C6FD2344D169006B2A4D /* enzevalos_iphone 8.xcdatamodel */,
+				4751C6F0233CE1E4006B2A4D /* enzevalos_iphone 7.xcdatamodel */,
+				A1909719220F887D00FA7B2A /* enzevalos_iphone 6.xcdatamodel */,
+				A15D2D0B21F4CF13007AF2F4 /* enzevalos_iphone 5.xcdatamodel */,
+				A19F3FFB21F0BE79005334F2 /* enzevalos_iphone 4.xcdatamodel */,
+				A19BD0A721ED62AE00E4D603 /* enzevalos_iphone 3.xcdatamodel */,
+				47B2318A1F0D458100961B28 /* enzevalos_iphone 2.xcdatamodel */,
+				A13526801D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodel */,
+			);
+			currentVersion = 670159DF240FB4E800797FA5 /* enzevalos_iphone 9.xcdatamodel */;
+			path = enzevalos_iphone.xcdatamodeld;
+			sourceTree = "<group>";
+			versionGroupType = wrapper.xcdatamodel;
+		};
+/* End XCVersionGroup section */
+	};
+	rootObject = A135266D1D955BDF00D3BFE1 /* Project object */;
+}
diff --git a/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme b/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme
index a96d2b4f5b40e52bd3d386370f8e2734d997743e..3a73a19b36e716b830ae25b5f3732b80a63ac844 100644
--- a/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme
+++ b/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme
@@ -26,8 +26,17 @@
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      codeCoverageEnabled = "YES"
-      shouldUseLaunchSchemeArgsEnv = "YES">
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      codeCoverageEnabled = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A13526741D955BDF00D3BFE1"
+            BuildableName = "enzevalos_iphone.app"
+            BlueprintName = "enzevalos_iphone"
+            ReferencedContainer = "container:enzevalos_iphone.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
       <Testables>
          <TestableReference
             skipped = "NO">
@@ -39,9 +48,39 @@
                ReferencedContainer = "container:enzevalos_iphone.xcodeproj">
             </BuildableReference>
             <SkippedTests>
+               <Test
+                  Identifier = "CryptoTests/testfindNotSignedMailForPublicKey()">
+               </Test>
                <Test
                   Identifier = "GamificationDataUnitTest">
                </Test>
+               <Test
+                  Identifier = "MailServerConfigurationTest">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testK9SecureInlineMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testK9SecureMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testK9SigedInlineMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testK9SigedMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testMacSecureMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testMacSigedMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testThunderbirdSigedInlineMail()">
+               </Test>
+               <Test
+                  Identifier = "MailTest/testThunderbirdSigedMail()">
+               </Test>
             </SkippedTests>
          </TestableReference>
          <TestableReference
@@ -55,17 +94,6 @@
             </BuildableReference>
          </TestableReference>
       </Testables>
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "A13526741D955BDF00D3BFE1"
-            BuildableName = "enzevalos_iphone.app"
-            BlueprintName = "enzevalos_iphone"
-            ReferencedContainer = "container:enzevalos_iphone.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <AdditionalOptions>
-      </AdditionalOptions>
    </TestAction>
    <LaunchAction
       buildConfiguration = "Debug"
@@ -88,8 +116,6 @@
             ReferencedContainer = "container:enzevalos_iphone.xcodeproj">
          </BuildableReference>
       </BuildableProductRunnable>
-      <AdditionalOptions>
-      </AdditionalOptions>
       <LocationScenarioReference
          identifier = "com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier"
          referenceType = "1">
diff --git a/enzevalos_iphone/CHelpers.swift b/enzevalos_iphone/CHelpers.swift
new file mode 100644
index 0000000000000000000000000000000000000000..7a492ac9b17f086d56161c8cb635c4350ad73997
--- /dev/null
+++ b/enzevalos_iphone/CHelpers.swift
@@ -0,0 +1,31 @@
+//
+//  CHelpers.swift
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 10.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+
+/**
+ Creates an arraz of C Strings from an array of swift strings
+ Always call deallocateCStrArr after using this!
+ */
+func createCStrArr(sarr: [String]) -> UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?{
+    let len = sarr.count
+    let carr = init_str_arr(Int32(len))
+    for i in 0..<len
+    {
+        let str = sarr[i]
+        add_str_to_arr(str,carr,Int32(i))
+    }
+    return carr
+}
+
+/**
+ Deallocates an array of c strings
+ */
+func deallocateCStrArr(arr: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?, len: Int){
+    return deallocate_str_arr(arr, Int32(len))
+}
diff --git a/enzevalos_iphone/Certificate.swift b/enzevalos_iphone/Certificate.swift
new file mode 100644
index 0000000000000000000000000000000000000000..5ad3a33b51451c993f55f42e1b5e5370b2771837
--- /dev/null
+++ b/enzevalos_iphone/Certificate.swift
@@ -0,0 +1,142 @@
+//
+//  Certificate.swift
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 18.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+
+/**
+ Contains information about a certificate
+ */
+class Certificate {
+    let pem: String // raw PEM string
+    let fingerPrint: String
+    let eMails: [String]?
+    let issuer: String?
+    let hasPrivateKey: Bool
+    let subject: String?
+    let startDate: String?
+    let endDate: String?
+    
+    init(pem: String) {
+        let cCertInfo = get_cert_data(pem)
+        
+        defer {
+            deallocateCertInfo(certInfo: cCertInfo)
+        }
+        
+        let certInfo = cCertInfo?.pointee
+        
+        self.hasPrivateKey = pem.contains("PRIVATE KEY")
+        
+        let (fingerPrint, _, errors) = getFingerprintFromPem(pem: pem)
+        
+        // if it crashes on this line, you can loop through the errors and see what's wrong
+        self.fingerPrint = fingerPrint!
+        self.pem = pem
+        
+        self.eMails = certInfo?.extractField(field: CertInfoString.emails)
+        self.endDate = certInfo?.extractField(field: CertInfoString.endDate)
+        self.startDate = certInfo?.extractField(field: CertInfoString.startDate)
+        self.subject = certInfo?.extractField(field: CertInfoString.subject)
+        self.issuer = certInfo?.extractField(field: CertInfoString.issuer)
+    }
+}
+
+/**
+ An enum used in the extractString() method of cert_info
+ */
+enum CertInfoString {
+    case issuer;
+    case subject;
+    case startDate;
+    case endDate;
+    case emails;
+}
+
+/**
+ extensions to the C struct so that memory deallocation is automatic
+ */
+extension cert_info {
+    /**
+    Extracts an array of certs in PEM of the respective function from the result object
+    Deallocates the "errors" part of the result object
+    Only use in combination with_extractOutput and _extractErrors
+    */
+    private func extractEmails() -> [String]? {
+        let arr = self.emails
+        var strArr: [String]? = nil
+        
+        if arr != nil {
+            strArr = []
+            let size = self.num_emails
+            //print("Size:",size)
+            for i in 0..<size {
+                let str = String(cString: arr![Int(i)]!)
+                strArr?.append(str)
+                // (arr![Int(i)])!.deallocate()
+            }
+            // arr?.deallocate()
+        }
+        
+        return strArr
+    }
+
+    /**
+    Extracts the output of the respective function from the result object
+    Deallocates the "res" part of the result object
+    Only use in combination with_extractErrors
+     
+     - parameters:
+        - field: the result object
+     */
+    private func extractString(field: CertInfoString) -> String? {
+        let cStr: UnsafeMutablePointer<Int8>?
+        switch field {
+        case .endDate:
+            cStr = self.date_end
+        case .startDate:
+            cStr = self.date_start
+        case .issuer:
+            cStr = self.issuer
+        case .subject:
+            cStr = self.subject
+        default:
+            return nil
+        }
+         
+         var swiftStr: String? = nil
+         
+         if cStr != nil {
+             swiftStr = String(cString: cStr!)
+         }
+         
+         return swiftStr
+    }
+    
+    /**
+     A generic function that reads a field and casts it to the type of the variable that stores the result. The variable must therefore have the correct type
+     
+     - parameters:
+        - field: enum, specifiying the field to extract
+     */
+    func extractField<T>(field: CertInfoString) -> T? {
+        switch field {
+        case .emails:
+            let emails = self.extractEmails()
+            if emails is T? {
+                return emails as! T?
+            }
+        default:
+            let res = self.extractString(field: field)
+            if res is T? {
+                return res as! T?
+            }
+        }
+        
+        return nil
+    }
+}
diff --git a/enzevalos_iphone/CryptoObject.swift b/enzevalos_iphone/CryptoObject.swift
index 3486804c7c46d4e031318377a544b9501f705f66..3deca6a04495ff95f59f66a4850a8b09e6779b24 100644
--- a/enzevalos_iphone/CryptoObject.swift
+++ b/enzevalos_iphone/CryptoObject.swift
@@ -55,12 +55,15 @@ enum EncryptionState: Int16 {
 
 public enum CryptoScheme {
     case PGP
+    case SMIME
     case UNKNOWN
 
     var description: String {
         switch self {
         case .PGP:
             return "PGP"
+        case .SMIME:
+            return "SMIME"
         default:
             return ""
         }
@@ -78,6 +81,8 @@ public enum CryptoScheme {
         switch self {
         case CryptoScheme.PGP:
             return 0
+        case CryptoScheme.SMIME:
+            return 1
         case CryptoScheme.UNKNOWN:
             return 99
         }
@@ -91,6 +96,7 @@ public class CryptoObject {
     let signatureState: SignatureState
     var encryptionState: EncryptionState
     let signKey: String?
+    let signedKeys: [String]
     let encType: CryptoScheme
     let passcode: String?
     let signedAdrs: [String]
@@ -109,7 +115,6 @@ public class CryptoObject {
         return nil
     }
 
-
     init(chiphertext: Data?, plaintext: String?, decryptedData: Data?, sigState: SignatureState, encState: EncryptionState, signKey: String?, encType: CryptoScheme, signedAdrs: [String]) {
         self.chiphertext = chiphertext
         self.plaintext = plaintext
@@ -120,5 +125,25 @@ public class CryptoObject {
         self.encType = encType
         self.passcode = nil
         self.signedAdrs = signedAdrs
+        if signKey != nil
+        {
+            self.signedKeys = [signKey!]
+        }
+        else{
+            self.signedKeys = []
+        }
+    }
+
+    init(chiphertext: Data?, plaintext: String?, decryptedData: Data?, sigState: SignatureState, encState: EncryptionState, signKey: String?, encType: CryptoScheme, signedAdrs: [String], signedKeys: [String]) {
+        self.chiphertext = chiphertext
+        self.plaintext = plaintext
+        self.decryptedData = decryptedData
+        self.signatureState = sigState
+        self.encryptionState = encState
+        self.signKey = signKey
+        self.encType = encType
+        self.passcode = nil
+        self.signedAdrs = signedAdrs
+        self.signedKeys = signedKeys
     }
 }
diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift
index 402f99c00c383dced15b6323e628c6a4c7ec60c5..c3f22f4c655dfa15235ae34bb2d69983c97c6403 100644
--- a/enzevalos_iphone/DataHandler.swift
+++ b/enzevalos_iphone/DataHandler.swift
@@ -1119,19 +1119,17 @@ class DataHandler {
         return []
     }
     
+    /**
+        Filters all Presistent Mails with encState == EncryptionState.UnableToDecrypt
+     */
     func getAllNotDecryptedPersistentMail() -> [PersistentMail] {
         let result = getAllPersistentMails().filter({ $0.encState == EncryptionState.UnableToDecrypt })
         return result
     }
     
-    // filter all presistent mails without public key
-    func getAllNoPublicKeyPersistentMail() -> [PersistentMail] {
-        let result = getAllPersistentMails().filter({ $0.sigState == SignatureState.NoPublicKey })
-        return result
-    }
-    
-    
-    
+    /**
+     Filters all Presistent Mails with sigState == SignatureState.NoPublicKey
+     */
     func getAllNotSignedPersistentMail() -> [PersistentMail] {
         let result = getAllPersistentMails().filter({ $0.sigState == SignatureState.NoPublicKey })
         return result
diff --git a/enzevalos_iphone/InboxViewController.swift.orig b/enzevalos_iphone/InboxViewController.swift.orig
new file mode 100644
index 0000000000000000000000000000000000000000..24180e8f25d14e98f688a487df7619001b0ed786
--- /dev/null
+++ b/enzevalos_iphone/InboxViewController.swift.orig
@@ -0,0 +1,371 @@
+//
+//  InboxViewController.swift
+//  readView
+//
+//  Created by Joscha on 26.08.16.
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <https://www.gnu.org/licenses/>.
+//
+
+import UIKit
+import Foundation
+import Contacts
+
+class InboxViewController: UITableViewController, InboxCellDelegator {
+    let dateFormatter = DateFormatter()
+    let searchController = UISearchController(searchResultsController: nil)
+    var filteredRecords = [KeyRecord]()
+    var counterRefreshs = 0
+    let folder = DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath)
+    var loading = false {
+        didSet {
+            if loading {
+                let activityIndicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.medium)
+                activityIndicator.frame = CGRect(x: 0, y: 0, width: 200, height: 44)
+                activityIndicator.startAnimating()
+                tableView.tableFooterView = activityIndicator
+            } else {
+                tableView.tableFooterView = nil
+            }
+        }
+    }
+    
+    // how many seconds should the app wait before processing search bar input
+    private let searchDelay = 0.5
+    // holds the currently active search timer (if it exists) so it can be terminated if a new character is typed before the execution
+    private var searchBarTimer: Timer?
+
+    @IBOutlet weak var lastUpdateButton: UIBarButtonItem!
+    var lastUpdateLabel = UILabel(frame: CGRect.zero)
+    var lastUpdateText: String? {
+        didSet {
+            lastUpdateLabel.text = lastUpdateText
+            lastUpdateLabel.sizeToFit()
+        }
+    }
+
+    var lastUpdate: Date?
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+
+        self.navigationController?.navigationBar.barTintColor = ThemeManager.defaultColor
+
+        tableView.sectionHeaderHeight = 1
+        tableView.sectionFooterHeight = 0
+
+        self.refreshControl?.addTarget(self, action: #selector(InboxViewController.refresh(_:)), for: UIControl.Event.valueChanged)
+        self.refreshControl?.attributedTitle = NSAttributedString(string: NSLocalizedString("PullToRefresh", comment: "Pull to refresh"))
+
+        lastUpdateLabel.sizeToFit()
+        lastUpdateLabel.backgroundColor = UIColor.clear
+        lastUpdateLabel.textAlignment = .center
+        lastUpdateLabel.font = UIFont.systemFont(ofSize: 13)
+        lastUpdateLabel.textColor = UIColor.black
+        lastUpdateButton.customView = lastUpdateLabel
+
+        searchController.searchResultsUpdater = self
+        searchController.obscuresBackgroundDuringPresentation = false
+        searchController.searchBar.scopeButtonTitles = [NSLocalizedString("Sender", comment: ""), NSLocalizedString("Subject", comment: ""), NSLocalizedString("Body", comment: ""), NSLocalizedString("All", comment: "")]
+        searchController.searchBar.delegate = self
+        if #available(iOS 11.0, *) {
+            navigationItem.searchController = searchController
+        } else {
+            tableView.tableHeaderView = searchController.searchBar
+        }
+        definesPresentationContext = true
+        dateFormatter.locale = Locale.current
+        dateFormatter.timeStyle = .medium
+
+        tableView.register(UINib(nibName: "InboxTableViewCell", bundle: nil), forCellReuseIdentifier: "inboxCell")
+        do{
+            try AppDelegate.getAppDelegate().mailHandler.startIMAPIdleIfSupported()
+        } catch {
+            print("ERROR: Could not establish connection to server!")
+        }
+        NotificationCenter.default.addObserver(forName: Notification.Name.NSManagedObjectContextDidSave, object: nil, queue: nil, using: {
+            [weak self] _ in
+            self?.tableView.reloadData()
+        })
+        let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback))
+        self.toolbarItems?.append(feedbackButton)
+    }
+    
+    @objc func feedback() {
+        FeedbackButtonHelper.composeFeedback(view: .Inbox, navigationController: self.navigationController)
+    }
+
+    @objc func refresh(_ refreshControl: UIRefreshControl?) {
+        lastUpdateText = NSLocalizedString("Updating", comment: "Getting new data")
+        let folder = DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath)
+        AppDelegate.getAppDelegate().mailHandler.updateFolder(folder: folder, completionCallback: getMailCompleted)
+    }
+
+    deinit {
+        print("===============|| InboxViewController deinitialized ||===============")
+    }
+
+    func getMailCompleted(_ error: Error?) {
+        if let rc = self.refreshControl {
+            if error == nil {
+                lastUpdate = Date()
+                counterRefreshs = 0
+            } else {
+                lastUpdateText = NSLocalizedString("NeverUpdated", comment: "Error while loading mailscomment")
+                if AppDelegate.getAppDelegate().currentReachabilityStatus != .notReachable && counterRefreshs < 100{
+                    counterRefreshs += 1
+                    refresh(nil)
+                }
+            }
+            rc.endRefreshing()
+            lastUpdateText = lastUpdate != nil ? "\(NSLocalizedString("LastUpdate", comment: "When the last update occured")): \(dateFormatter.string(from: lastUpdate!))" : NSLocalizedString("NeverUpdated", comment: "No internet connection since last launch")
+        }
+    }
+
+    override func viewWillAppear(_ animated: Bool) {
+        tableView.reloadData()
+        if lastUpdate == nil || Date().timeIntervalSince(lastUpdate!) > 50 {
+            counterRefreshs = 0
+            refresh(nil)
+        }
+    }
+
+    func loadData() {
+        refresh(nil)
+    }
+    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return 1
+    }
+
+    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = tableView.dequeueReusableCell(withIdentifier: "inboxCell", for: indexPath) as! InboxTableViewCell
+
+        cell.delegate = self
+        if isFiltering {
+            cell.enzContact = filteredRecords[indexPath.section]
+        } else {
+            cell.enzContact = folder.records[indexPath.section]
+        }
+
+        return cell
+    }
+
+    override func numberOfSections(in tableView: UITableView) -> Int {
+        if isFiltering {
+            return filteredRecords.count
+        }
+
+        return folder.records.count
+    }
+
+    // set top and bottom seperator height
+    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        if section == 0 {
+            return 0.01
+        }
+        return tableView.sectionHeaderHeight
+    }
+
+    override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        return 0.01
+    }
+
+    func callSegueFromCell(_ mail: PersistentMail?) {
+        if isFiltering, Logger.logging {
+            let categoryIndex = searchController.searchBar.selectedScopeButtonIndex
+            Logger.log(search: self.filteredRecords.count, category: categoryIndex, opened: "mail")
+        }
+        performSegue(withIdentifier: "readMailSegue", sender: mail)
+    }
+
+    func callSegueFromCell2(_ contact: KeyRecord?) {
+        if isFiltering, Logger.logging {
+            let categoryIndex = searchController.searchBar.selectedScopeButtonIndex
+            Logger.log(search: self.filteredRecords.count, category: categoryIndex, opened: "mailList")
+        }
+        performSegue(withIdentifier: "mailListSegue", sender: contact)
+    }
+
+    func callSegueToContact(_ contact: KeyRecord?) {
+        if isFiltering, Logger.logging {
+            let categoryIndex = searchController.searchBar.selectedScopeButtonIndex
+            Logger.log(search: self.filteredRecords.count, category: categoryIndex, opened: "contact")
+        }
+        performSegue(withIdentifier: "contactSegue", sender: contact)
+    }
+
+    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
+        if segue.identifier == "readMailSegue" {
+            if let mail = sender as? PersistentMail {
+                let DestinationViewController: ReadViewController = segue.destination as! ReadViewController
+                DestinationViewController.mail = mail
+            }
+        } else if segue.identifier == "mailListSegue" {
+            if let contact = sender as? KeyRecord {
+                let DestinationViewController: ListViewController = segue.destination as! ListViewController
+                DestinationViewController.contact = contact
+            }
+        } else if segue.identifier == "contactSegue" {
+            if let contact = sender as? KeyRecord {
+                let DestinationViewController: ContactViewController = segue.destination as! ContactViewController
+                DestinationViewController.keyRecord = contact
+            }
+        } else if segue.identifier == "yourTraySegue" {
+            if let DestinationNavigationController = segue.destination as? UINavigationController {
+                if let DestinationViewController = DestinationNavigationController.topViewController as? ContactViewController {
+                    //DestinationViewController.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismissView)) 
+                    let records = folder.records.filter({
+                        $0.isUser
+                    })
+                    let prefKeyID = UserManager.loadUserValue(Attribute.prefSecretKeyID) as? String
+                    if let record = records.filter({ $0.isSecure && ($0.keyID == prefKeyID)}).first {
+                        DestinationViewController.keyRecord = record
+                    } else {
+                        let keyID = UserManager.loadUserValue(Attribute.prefSecretKeyID) as! String
+                        let addr = UserManager.loadUserValue(Attribute.userAddr) as! String
+                        DestinationViewController.keyRecord = DataHandler.handler.getKeyRecord(addr: addr, keyID: keyID)
+                    }
+                }
+            }
+        }
+    }
+
+    @objc func dismissView() {
+        self.dismiss(animated: true, completion: nil)
+    }
+
+    /// Is true if the text is empty or nil
+    var searchBarIsEmpty: Bool {
+        return searchController.searchBar.text?.isEmpty ?? true
+    }
+
+    var isFiltering: Bool {
+        return searchController.isActive && !searchBarIsEmpty
+    }
+
+    /**
+     searches a given string with a delay so that the entire client doesn't lag if the inbox is very big
+     
+     - parameters:
+        - searchText: srtring to look for
+        - scope: where to search (look at _filterContentForSearchText)
+     */
+    func startSearch(searchText: String, scope: Int = 0) {
+        // check if a search has been scheduled already and stop it to prevent multiple searches
+        if let searchBarTimer: Timer = self.searchBarTimer {
+            searchBarTimer.invalidate()
+        }
+        
+        self.searchBarTimer = Timer.scheduledTimer(withTimeInterval: searchDelay, repeats: false, block: { _ in
+            self._filterContentForSearchText(searchText, scope: scope)
+        })
+    }
+    
+    /**
+    Filters emails by a user input string and scope
+     
+     - parameters:
+        - scope: 0 = contact name; 1 = subject; 2 = body; 3 = all
+        - searchText: the string we are looking for
+     */
+    private func _filterContentForSearchText(_ searchText: String, scope: Int = 0) {
+        let records = folder.records.filter({ (record: KeyRecord) -> Bool in
+            if scope == 0
+            {
+                 return containsSearchTerms(content: record.name, searchText: searchText)
+            }
+            let mails = record.inboxMails
+            return mails.filter({ (mail: PersistentMail) -> Bool in
+                // concatenate all strings that fall in our scope
+                var str = ""
+                if scope == 1 || scope == 3
+                {
+                    str.append(contentsOf: mail.subject ?? "")
+                }
+                if scope == 2 || scope == 3
+                {
+                    if let decryptedBody = mail.decryptedBody {
+                        str.append(decryptedBody)
+                    } else if !mail.isEncrypted {
+                        str.append(contentsOf: mail.body ?? "")
+                    }
+                }
+                if scope == 3
+                {
+                    str.append(contentsOf: record.name)
+                }
+                return containsSearchTerms(content: str, searchText: searchText)
+                }).count > 0
+<<<<<<< Updated upstream
+        })
+
+=======
+            })
+        }
+        
+>>>>>>> Stashed changes
+        filteredRecords = records.unique.sorted()
+        tableView.reloadData()
+    }
+}
+
+extension InboxViewController: UISearchResultsUpdating {
+    // https://www.raywenderlich.com/157864/uisearchcontroller-tutorial-getting-started
+
+    func updateSearchResults(for searchController: UISearchController) {
+        startSearch(searchText: searchController.searchBar.text!, scope: searchController.searchBar.selectedScopeButtonIndex)
+    }
+}
+
+extension InboxViewController: UISearchBarDelegate {
+    func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
+        startSearch(searchText: searchBar.text!, scope: selectedScope)
+    }
+}
+
+extension InboxViewController {
+    override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
+        let offset = scrollView.contentOffset
+        let bounds = scrollView.bounds
+        let size = scrollView.contentSize
+        let inset = scrollView.contentInset
+        let y = offset.y + bounds.size.height - inset.bottom
+        let h = size.height
+
+        let reload_distance: CGFloat = 200
+        if y > h + reload_distance && !loading {
+            loading = true
+
+            AppDelegate.getAppDelegate().mailHandler.loadMailsForInbox(completionCallback: doneLoading)
+        }
+    }
+
+    func doneLoading(_ error: Error?) {
+        if error != nil {
+            lastUpdateText = NSLocalizedString("NeverUpdated", comment: "Error while loading mailscomment")
+        }
+        loading = false
+    }
+}
+
+extension Array where Element: Equatable {
+    var unique: [Element] {
+        var uniqueValues: [Element] = []
+        forEach { item in
+            if !uniqueValues.contains(item) {
+                uniqueValues += [item]
+            }
+        }
+        return uniqueValues
+    }
+}
diff --git a/enzevalos_iphone/MailComparison.swift b/enzevalos_iphone/MailComparison.swift
new file mode 100644
index 0000000000000000000000000000000000000000..b221bb319c57f101c8b932d50a8590b1c3b39816
--- /dev/null
+++ b/enzevalos_iphone/MailComparison.swift
@@ -0,0 +1,92 @@
+//
+//  MailComparison.swift
+//  enzevalos_iphone
+//
+//  Created by Katharina Müller and Viktoria Sorgalla on 04.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+import CoreData
+
+private let datahandler = DataHandler.handler
+
+public enum ResultCompareSenderToContacts {
+       case isContact, isSender, OnlyIdentity, Unknown
+   }
+
+extension String {
+    
+    /**
+     compares the given mail address to the persistant mails and returns the number of matches
+     ***/
+    private func countMatches(_ mailAddr: String, _ inboxMails: [PersistentMail]) -> Int {
+        var senders: [String] = []
+        for sender in inboxMails{
+            let sender: String = sender.from.mailAddress
+            senders.append(sender)
+        }
+        var numberOfFoundMatches = 0
+        for addr in senders{
+            if addr == mailAddr{
+                numberOfFoundMatches += 1
+            }
+        }
+        return numberOfFoundMatches
+    }
+    
+    /**
+     returns a mail address, wich has the same identity as the given one but a different domain
+     ***/
+    private func getIdentityWithDifferentDomain(_ mailAdd: String, inboxMails: [PersistentMail]) -> String{
+        let senderIdentity = mailAdd.getLocalMailIdentity()
+        var senderDomain = mailAdd.splitAddress()
+            senderDomain.removeFirst()
+        
+        var senders: [String] = []
+        for sender in inboxMails{
+            let sender: String = sender.from.mailAddress
+            senders.append(sender)
+        }
+        var foundMatch = ""
+        for addr in senders{
+            let foundIdentity = addr.getLocalMailIdentity()
+            var foundDomain = addr.splitAddress()
+            foundDomain.removeFirst()
+            if senderIdentity == foundIdentity && senderDomain != foundDomain{
+                foundMatch = addr
+                return foundMatch
+            }
+        }
+        return foundMatch
+    }
+    
+    /**
+     looks if the mail address of the sender is already known
+     ***/
+    public func compareSenderToContacts() -> ResultCompareSenderToContacts {
+        // Case 1: Is the address of the sender known through previous mails?
+        let inboxMails = datahandler.getAllPersistentMails()
+        if countMatches(self, inboxMails) >= 2{
+            return ResultCompareSenderToContacts.isSender
+        }
+        // Case 2: Is the address of the sender in the address book?
+        let enzContacts = datahandler.getContacts()
+        for contact in enzContacts {
+            let contMailAddr = contact.cnContact?.getMailAddresses()
+            if contMailAddr != nil{
+                for mAddr in contMailAddr!{
+                    if mAddr.mailAddress == self {
+                        return ResultCompareSenderToContacts.isContact
+                    }
+                }
+            }
+        }
+        // Case 3: The identity of an mail address is known, but not the (sub-)domain
+        let foundIdentity = getIdentityWithDifferentDomain(self, inboxMails: inboxMails)
+        if foundIdentity != ""{
+            return ResultCompareSenderToContacts.OnlyIdentity
+        }
+        return ResultCompareSenderToContacts.Unknown
+       }
+}
diff --git a/enzevalos_iphone/SMIME.swift b/enzevalos_iphone/SMIME.swift
new file mode 100644
index 0000000000000000000000000000000000000000..4d47ed147c888fa7dbc0c94f93dbad30393611c3
--- /dev/null
+++ b/enzevalos_iphone/SMIME.swift
@@ -0,0 +1,495 @@
+//
+//  SMIME.swift
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 02.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+import Security
+import KeychainAccess
+
+/**
+ The class is a swift wrapper around the C implementation for SMIME. It implements S/MIME ver 3.2 (RFC5751). S/MIME 4 isn't supported yet because OpenSSL currently does not support GCM mode for S/MIME encryption
+ */
+class SMIME {
+    // patterns used for extraction of keys and certs from PEMs
+    private let privateKeyPattern = "[-]*BEGIN[a-zA-Z ]*PRIVATE KEY[-]*[a-zA-Z+/\n\r=0-9]*[-]*END[a-zA-Z ]*PRIVATE KEY[-]*"
+    private let certificatePattern = "[-]*BEGIN[a-zA-Z ]* CERTIFICATE[-]*[a-zA-Z+/\n\r=0-9]*[-]*END[a-zA-Z ]* CERTIFICATE[-]*"
+    
+    private var privateKeyKeychain: Keychain {
+        get {
+            return Keychain(service: "Enzevalos/SMIME/privateKeys")
+        }
+    }
+
+    private var certsKeychain: Keychain {
+        get {
+            return Keychain(service: "Enzevalos/SMIME/certs")
+        }
+    }
+
+    private var CAKeychain: Keychain {
+        get {
+            return Keychain(service: "Enzevalos/SMIME/CAs")
+        }
+    }
+    
+    func getOwnCert() -> String? {
+        if let fp = getOwnKeyFP() {
+            return certsKeychain[fp]
+        }
+        return nil
+    }
+    
+    func getOwnKey() -> String? {
+        if let fp = getOwnKeyFP() {
+            return privateKeyKeychain[fp]
+        }
+        return nil
+    }
+    
+    func getCAs() -> [String] {
+        var CAs : [String] = []
+        for k in CAKeychain.allKeys()
+        {
+            CAs.append(CAKeychain[k]!)
+        }
+        
+        return CAs
+    }
+   
+    private func importInKeychain(certs: [String], keychain: Keychain) -> [String] {
+        var fingerprints: [String] = []
+        
+        for cert in certs {
+            let (fp, _, _) = getFingerprintFromPem(pem: cert)
+            
+            if fp != nil {
+                keychain[fp!] = cert
+                fingerprints.append(fp!)
+            }
+        }
+        
+        return fingerprints
+    }
+    
+    func importCerts(certs: [String]) -> [String] {
+        return importInKeychain(certs: certs.map({ (cert: String) -> String in
+            return cert.extractPattern(pattern: certificatePattern).joined(separator: "\r\n")
+        }), keychain: certsKeychain)
+    }
+    
+    func importCertForAddress(cert: String, addr: String) -> String {
+        let fp = importCerts(certs: [cert])[0]
+        certsKeychain[addr] = fp
+        return fp
+    }
+    
+    func importCA(certs: [String]) -> [String] {
+        return importInKeychain(certs: certs.map({ (cert: String) -> String in
+            return cert.extractPattern(pattern: certificatePattern).joined(separator: "\r\n")
+        }), keychain: CAKeychain)
+    }
+    
+    func importKeys(certsAndKeys: [(String, String)]) -> [String] {
+        var fingerprints: [String] = []
+        
+        for (cert, key) in certsAndKeys {
+            let (certFP, _, _) = getFingerprintFromPem(pem: cert)
+            if (certFP != nil) {
+                certsKeychain[certFP!] = cert
+                privateKeyKeychain[certFP!] = key
+                fingerprints.append(certFP!)
+            }
+        }
+        
+        return fingerprints
+    }
+    
+    func resetKeychain () {
+        do{
+            try privateKeyKeychain.removeAll()
+            try certsKeychain.removeAll()
+            try CAKeychain.removeAll()
+        }catch {
+            print("Can not reset keychains.")
+        }
+    }
+    
+    func importKeys(certsAndKeys: [String]) -> [String] {
+        var certsAndKeysSplit: [(String, String)] = []
+        
+        for str in certsAndKeys {
+            let keys = str.extractPattern(pattern: privateKeyPattern)
+            let certs = str.extractPattern(pattern: certificatePattern)
+            if keys.count != 1 {
+                print("Incorrect amount of keys: ", keys.count)
+                continue
+                // ToDo exception
+            }
+            if certs.count == 0
+            {
+                print("No certs")
+                continue
+                // ToDo exception
+            }
+            certsAndKeysSplit.append((certs.joined(separator: "\r\n"), keys[0]))
+        }
+        
+        return importKeys(certsAndKeys: certsAndKeysSplit)
+    }
+    
+    
+    func addPrivateKey(keyPlusCertPEM: String) -> String
+    {
+        let fp = importKeys(certsAndKeys: [keyPlusCertPEM])
+        privateKeyKeychain["ownkey"]=fp[0]
+        return fp[0]
+    }
+    
+    func addCertForContant(email: String, cert:String) -> String
+    {
+        let fp = importCerts(certs: [cert])
+        certsKeychain[email]=fp[0]
+        return fp[0]
+    }
+    
+    func getOwnKeyFP() -> String? {
+        return privateKeyKeychain["ownkey"]
+    }
+        
+    /**
+     Decrypts a message and verifies its signature.
+     
+     - returns: a `CryptoObject`, the `decryptedData` attribute contains the decrypted message
+     
+     - throws: `SMIMEError` decryption fails for whatever reason, the `errorArray` field can be iterated to print out the errors. See `getErrorReasonString()` and `getErrorString()`
+     
+     - parameters:
+        - data: the message to decrypt and verify as `Data`
+        - fromAddr: address of the sender
+        - isMailNew: used for the verification, see `SMIME.verify()`
+     */
+    func decrypt(data: Data, fromAddr: String, isMailNew: Bool) throws -> CryptoObject {
+        var outputData: Data = data
+        let text = String(data: data, encoding: .utf8)!
+        var fp = getOwnKeyFP()
+        let cert = certsKeychain[fp!]!
+        let key = privateKeyKeychain[fp!]!
+                
+        var (decStr, errArr) = decryptWithPem(message: text, certAsPem: cert, keyAsPem: key)
+        var encState = EncryptionState.UnableToDecrypt
+        if decStr != nil && (errArr == nil || errArr!.count == 0) {
+            encState = EncryptionState.ValidedEncryptedWithCurrentKey
+        }
+        else
+        {
+            let fps = privateKeyKeychain.allKeys()
+            for f in fps{
+                if f != fp{
+                    (decStr, errArr) = decryptWithPem(message: text, certAsPem: certsKeychain[f]!, keyAsPem: privateKeyKeychain[f]!)
+                    if decStr != nil{
+                        fp = f
+                        encState = EncryptionState.ValidEncryptedWithOldKey
+                        break
+                    }
+                }
+            }
+        }
+        
+        if decStr != nil {
+            outputData = decStr!.data(using: .utf8)!
+        }
+        
+        /**
+         we have tried to decrypt with our current key and with our older keys and if all of that failed then:
+            * the email wasn't meant for us and we shouldn't be able to decrypt it anyway
+            * there is something wrong with the e-mail
+        */
+        if (errArr != nil && errArr!.count > 0) {
+            throw SMIMEError(message: "Decryption failed!", errorArray: errArr, type: SMIMEError.ErrorType.decryption)
+        }
+        
+        let verifyCryptoObj = verify(data: outputData, email: fromAddr, isMailNew: isMailNew)
+        
+        let signedKeys = verifyCryptoObj.signedKeys
+        let signKey = verifyCryptoObj.signKey
+        let sigState = verifyCryptoObj.signatureState
+        let addresses = verifyCryptoObj.signedAdrs
+        let plainText = verifyCryptoObj.plaintext
+        let decryptedData = plainText!.data(using: .utf8)!
+        
+        return CryptoObject(chiphertext: data, plaintext: plainText, decryptedData: decryptedData, sigState: sigState, encState: encState, signKey: signKey, encType: CryptoScheme.SMIME, signedAdrs: addresses, signedKeys: signedKeys)
+    }
+    
+    /**
+     Signs a message.
+     
+     - returns: a `CryptoObject`, the `ciphertext` attribute contains the signed message
+     
+     - throws: `SMIMEError` signing fails for whatever reason, the `errorArray` field can be iterated to print out the errors. See `getErrorReasonString()` and `getErrorString()`
+     
+     - parameters:
+        - plainData: the message to sign as `Data`
+        - myEmail: the current user's e-mail
+        - detached: if true, the signature is detached (`multipart/signed`); else not (`application/pkcs7-mime`)
+     */
+    func sign(plainData: Data, myEmail: String, detached: Bool = true) throws -> CryptoObject {
+        let fp = getOwnKeyFP()
+        let cert = certsKeychain[fp!]!
+        let key = privateKeyKeychain[fp!]!
+        
+        let text = String(data: plainData, encoding: .utf8)
+        
+        let (sigText, errArr) = signWithPem(message: text!, certAsPem: cert, keyAsPem: key, detached: detached)
+        
+        if (errArr != nil && errArr!.count > 0) {
+            throw SMIMEError(message: "Signing failed!", errorArray: errArr, type: SMIMEError.ErrorType.signing)
+        }
+                
+        return CryptoObject(chiphertext: sigText!.data(using: .utf8), plaintext: text, decryptedData: plainData, sigState: SignatureState.ValidSignature, encState: EncryptionState.NoEncryption, signKey: fp, encType: CryptoScheme.SMIME, signedAdrs: [myEmail])
+    }
+    
+    /**
+     Verifies the signature of a signed message. If multiple signatures are present, ALL need to be valid AND have a matching mail address, else the signature is invalid.
+     Previously unknown (not present in the keychain) but valid certificates are stored in the keychain.
+    
+     - returns: a `CryptoObject` with all the information about the verification process
+     - parameters:
+        - data: the (signed) message to verify
+        - email: the e-mail of the sender
+        - isMailNew: if true and the certificate is unknown, the fingerprint of the certificate is mapped to the e-mail in the keychain so it can be used to encrypt future messages to the sender
+     */
+    func verify(data: Data, email: String, isMailNew: Bool) -> CryptoObject {
+        var CAs : [String] = []
+        CAKeychain.allKeys().forEach({ (key) in
+            CAs.append(CAKeychain[key]!)
+        })
+        let text = String(data: data, encoding: .utf8)!
+        
+        let (verStr, certsFPArr, errArr) = verifyWithCApem(message: text, pemCAArr: CAs)
+        
+        if certsFPArr == nil || certsFPArr!.count == 0 {
+            let errors = errArr!
+            
+            for error in errors {
+                let reason = getErrorReasonString(errCode: error)
+                // check reasons to identify different error causes
+                // string comaprison necessary because doesn't have fixed error codes...
+                if reason == "no content type" {
+                    return CryptoObject(chiphertext: data, plaintext: text, decryptedData: nil, sigState: .NoSignature, encState: EncryptionState.NoEncryption, signKey: nil, encType: .UNKNOWN, signedAdrs: [])
+                }
+            }
+            
+            return CryptoObject(chiphertext: data, plaintext: text, decryptedData: nil, sigState: .InvalidSignature, encState: EncryptionState.NoEncryption, signKey: nil, encType: .UNKNOWN, signedAdrs: [])
+        }
+        
+        var newCerts: [String] = [] // all certs that came from the email and weren't available before
+        var mailMatch = true
+        if certsFPArr?.count == 0 {mailMatch = false}
+        
+        for item in certsFPArr! {
+            var mailFound = false
+            let (fp, cert) = item
+            let certObj = Certificate(pem: cert)
+            // check if the email from the parameters matches with one of the emails in each of the certs used to sign the message
+            for addr in certObj.eMails ?? [] {
+                if addr == email {
+                    mailFound = true
+                    break
+                }
+            }
+            mailMatch = mailFound && mailMatch
+            // check if cert is already in the keychain
+            if let _ = try? certsKeychain.get(fp) {
+                continue
+            }
+            newCerts.append(cert)
+        }
+        
+        let fps = importCerts(certs: newCerts)
+        // check if the email has no certificate or the certificate is newer than the present one and update accordingly
+        for fp in fps{
+            let cert = Certificate(pem: certsKeychain[fp]!)
+            for email in cert.eMails ?? []
+            {
+                if isMailNew || certsKeychain[email] == nil
+                {
+                    certsKeychain[email] = fp
+                }
+            }
+        }
+        
+        let sigState = mailMatch ? SignatureState.ValidSignature : SignatureState.InvalidSignature
+        
+        let signedAddresses = getAllEmailsFromPEMs(certs: certsFPArr!.map( { (arg) -> String in
+            let (_, pem) = arg
+            return pem
+        }))
+        
+        let signKeyFps = certsFPArr!.map( { (arg) -> String in
+            let (fp, _) = arg
+            return fp
+        })
+    
+        return CryptoObject(chiphertext: data, plaintext: verStr!, decryptedData: nil, sigState: sigState, encState: EncryptionState.NoEncryption, signKey: nil, encType: .SMIME, signedAdrs: signedAddresses, signedKeys: signKeyFps)
+    }
+    
+    /**
+     Encrypts and signs a message. Signing isn't optional.
+     
+     - parameters:
+        - plainData: a `Data` object that contains the string to encrypt
+        - ids: an array with the e-mails of all users that need to be able to decrypt this. They need to have their certificates imported with `importCertForAddress(cert, addr)` beforehand
+        - ownAddr: the e-mail of the user of the app, only needed for the CryptoObject
+        - encryptForMyId: if true, message is also encrypted for the sender
+     
+     - returns: a `CryptoObject` with all needed information
+    
+     -  throws: `SMIMEError` if:
+        * any of the e-mails in `ids` doesn't have a certificate registered in the keychain (see `importCertForAddress(cert, addr)`)
+        * can't sign because the user doesn't have a private key
+        * if encryption or signing failsfor any other reason
+        the `errorArray` field can be iterated to print out the errors. See `getErrorReasonString()` and `getErrorString()`
+     */
+    func encrypt(plainData: Data, ids: [String], ownAddr: String, encryptForMyId: Bool = true) throws -> CryptoObject {
+        let plainText = String(data: plainData, encoding: .utf8)
+        var pems: [String] = []
+        let ownFp: String? = getOwnKeyFP()
+        var sigText: String? = nil
+        
+        // retrieve the certs as pems for each ID (email), certsKeychain stores for each email a fingerprint of the cert of that user and under a fingerprint a cert is stored
+        for id in ids {
+            if let fp = certsKeychain[id] {
+                pems.append(certsKeychain[fp]!)
+            }
+            else{
+                throw SMIMEError(message: "No cert for email " + id + "!", errorArray: nil, type: SMIMEError.ErrorType.other)
+            }
+        }
+        
+        // if we want to encrypt with the user's own key, retrieve the key and handle errors
+        if encryptForMyId {
+            if ownFp != nil {
+                pems.append(certsKeychain[ownFp!]!)
+            }
+            else {
+                throw SMIMEError(message: "Tried to encrypt email with the user's key but no cert for own key present!", errorArray: nil, type: SMIMEError.ErrorType.other)
+            }
+        }
+        
+        // check if the user has a certificate
+        if ownFp != nil {
+            var signObj: CryptoObject? = nil
+            do {
+                signObj = try sign(plainData: plainData, myEmail: ownAddr, detached: false)
+            } catch let error {
+                throw error
+            }
+
+            // reminder: signObj can't be nil here b/c we always get it unless we get an exception (and exceptions get instantly re-thrown)
+            sigText = String(data: signObj!.chiphertext!, encoding: .utf8)
+        } else {
+            throw SMIMEError(message: "Tried to sign with user's certificate but none was present!", errorArray: nil, type: SMIMEError.ErrorType.other)
+        }
+        
+        // do the actual encryption
+        // NOTE: sigText can't be nil b/c we force signing so we either sign successfully or we throw an exception and never reach this code block
+        let (encStr, errArr) = encryptWithPem(message: sigText!, certPems: pems)
+        if errArr != nil && errArr!.count > 0 {
+            throw SMIMEError(message: "Encryption failed!", errorArray: errArr, type: SMIMEError.ErrorType.encryption)
+        }
+        
+        return CryptoObject(chiphertext: encStr!.data(using: .utf8), plaintext: plainText, decryptedData: plainData, sigState: SignatureState.ValidSignature, encState: EncryptionState.ValidedEncryptedWithCurrentKey, signKey: ownFp, encType: CryptoScheme.SMIME, signedAdrs: [ownAddr])
+    }
+
+    /**
+     A wrapper for the C function for encryption. Takes care of memory managment. Only meant tobe used as a helper in the SMIME class.
+     */
+    private func encryptWithPem(message: String,certPems: [String]) -> (String?, [UInt]?) {
+        let cCertsArray = createCStrArr(sarr: certPems)
+        let enc = OpenSSL_encrypt(message, cCertsArray, Int32(certPems.count))
+        defer {
+            deallocateResult(res: enc)
+        }
+        
+        let result = enc?.pointee;
+        
+        let encStr: String? = result?.extractField(field: ResultAttribute.output)
+        let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+        
+        return (encStr, errArr)
+    }
+    
+    /**
+     A wrapper for the C function for decryption. Takes care of memory managment. Only meant tobe used as a helper in the SMIME class.
+     */
+    private func decryptWithPem(message:String, certAsPem: String, keyAsPem:String) -> (String?, [UInt]?) {
+        let dec = OpenSSL_decrypt(message, certAsPem, keyAsPem)
+        defer {
+            deallocateResult(res: dec)
+        }
+        let result = dec?.pointee;
+        
+        let decStr: String? = result?.extractField(field: ResultAttribute.output)
+        let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+        
+        return (decStr, errArr)
+    }
+    
+    /**
+     A wrapper for the C function for signing. Takes care of memory managment. Only meant tobe used as a helper in the SMIME class.
+     */
+    private func signWithPem(message:String, certAsPem: String, keyAsPem:String, detached:Bool) -> (String?, [UInt]?) {
+        var detFlag : Int32 = 0
+        if detached {
+            detFlag = 1
+        }
+        
+        let sig = OpenSSL_sign(message, certAsPem, keyAsPem, detFlag)
+        defer {
+            deallocateResult(res: sig)
+        }
+        
+        let result = sig?.pointee
+        
+        let sigStr: String? = result?.extractField(field: ResultAttribute.output)
+        let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+        
+        return (sigStr, errArr)
+    }
+
+    /**
+     A wrapper for the C function for verification. Takes care of memory managment. Only meant to be used as a helper in the SMIME class.
+    */
+    private func verifyWithCApem (message:String, pemCAArr: [String]) -> (String?, [(String, String)]?, [UInt]?) {
+        let pemCAArrC = createCStrArr(sarr: pemCAArr)
+        let ver = OpenSSL_verify(message, pemCAArrC, Int32(pemCAArr.count))
+        
+        defer {
+            deallocateResult(res: ver)
+        }
+        
+        deallocateCStrArr(arr: pemCAArrC, len:pemCAArr.count)
+        
+        let result = ver?.pointee;
+        
+        let verStr: String? = result?.extractField(field: ResultAttribute.output)
+        let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+        let certArr: [String]? = result?.extractField(field: ResultAttribute.certificates)
+        let fpArr: [String]? = result?.extractField(field: ResultAttribute.fingerprints)
+        
+        let numCerts = Int((result?.num_certs)!)
+        var certFPArr: [(String, String)] = []
+        
+        if (numCerts > 0) {
+            for i in 0...(numCerts-1) {
+                certFPArr.append( ((fpArr?[i])!, (certArr?[i])!) )
+            }
+        }
+        
+        return (verStr, certFPArr, errArr)
+    }
+}
diff --git a/enzevalos_iphone/SMIMEHelpers.swift b/enzevalos_iphone/SMIMEHelpers.swift
new file mode 100644
index 0000000000000000000000000000000000000000..50aeccef3b3faa9b33edba3567712ab8b073587c
--- /dev/null
+++ b/enzevalos_iphone/SMIMEHelpers.swift
@@ -0,0 +1,305 @@
+//
+//  SMIMEHelpers.swift
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 19.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+
+class SMIMEError : Error {
+    enum ErrorType {
+        case fingerPrint
+        case encryption
+        case decryption
+        case verification
+        case signing
+        case other
+    }
+    
+    func errorArrayToString() -> [String] {
+        var strArr: [String] = []
+        
+        for error in self.errorArray ?? [] {
+            strArr.append(getErrorString(errCode: error))
+        }
+        
+        return strArr
+    }
+    
+    let message: String?
+    let errorArray: [UInt]?
+    let type: ErrorType
+    
+    init(message: String?, errorArray: [UInt]?, type: ErrorType) {
+        self.message = message
+        self.errorArray = errorArray
+        self.type = type
+    }
+}
+
+
+/**
+ Returns a fingerprint hash of a certificate given a PEM
+ 
+ - parameters:
+    - pem: cerificate's PEM as a string
+ 
+ - returns:a tuple of the form (fingerprint, nil, array of errors)
+ */
+func getFingerprintFromPem (pem: String) -> (String?, [String]?, [UInt]?) {
+    let res = get_fingerprint_from_pem(pem, 0);
+    defer {
+        deallocateResult(res: res)
+    }
+    
+    let result = res?.pointee;
+    
+    let fpStr: String? = result?.extractField(field: ResultAttribute.output)
+    let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+    
+    return (fpStr, nil, errArr)
+}
+
+ /**
+ Exrtracts a private key from an ecnrypted PEM
+  
+  - parameters:
+    - pem: key's PEM as a string
+    - passwd: password to decrypt the PEM
+  - returns:(<decrypted PEM>, <array of errors>)
+  */
+ func getPKeyFromEncryptedPem(pem: String, passwd: String) -> (String?, [UInt]?) {
+     let res = get_pkey_from_enc_pem(pem, passwd)
+     defer {
+         deallocateResult(res: res)
+     }
+     
+     let result = res?.pointee
+     
+     let pKey: String? = result?.extractField(field: ResultAttribute.output)
+     let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+     
+     return (pKey, errArr)
+ }
+
+/**
+ Encrypts a private key's PEM with a password (encryption key)
+ 
+ - parameters:
+   - pem: key's PEM as a string
+   - passwd: password for the encryption
+ - returns:(<encrypted PEM>, <array of errors>)
+ */
+ func getEncryptedPemFromPKey(pem: String, passwd: String) -> (String?, [UInt]?) {
+     let res = get_enc_pem_from_pkey(pem, passwd)
+     defer {
+         deallocateResult(res: res)
+     }
+     
+     let result = res?.pointee
+     
+     let pKey: String? = result?.extractField(field: ResultAttribute.output)
+     let errArr: [UInt]? = result?.extractField(field: ResultAttribute.errors)
+     
+     return (pKey, errArr)
+ }
+
+/**
+ Returns the complete string of an OpenSSL error. Includes things such as reason, function that caused it and so on
+ 
+ - parameters;
+    - errCode: the error code
+ */
+func getErrorString(errCode: UInt) -> String {
+    let cStr = get_err_string(errCode);
+    defer {
+        cStr?.deallocate()
+    }
+    
+    if (cStr != nil) {
+        let str = String( cString: cStr!)
+        return str;
+    }
+    return "Invalid error code!"
+}
+
+/**
+ Returns the reason part of the string of an OpenSSL error.
+ 
+ - parameters;
+    - errCode: the error code
+ */
+func getErrorReasonString(errCode: UInt) -> String {
+    let cStr = get_err_reason_string(errCode);
+    defer {
+        cStr?.deallocate()
+    }
+    
+    if (cStr != nil) {
+        let str = String( cString: cStr!)
+        return str;
+    }
+    return "Invalid error code!"
+}
+
+/**
+ Returns the list of all e-mails from an array of certificates. Each email has only one instance in the array.
+ 
+ - parameters:
+    - certs: an array of PEMs
+ 
+ - returns:an array of emails
+ */
+func getAllEmailsFromPEMs(certs: [String]) -> [String] {
+    let certObjects = certs.map( { (arg) -> Certificate in
+        return Certificate(pem: arg)
+    })
+    
+    var addrs : [String:Bool] = [:]
+    for c in certObjects
+    {
+        for e in c.eMails!
+        {
+            addrs[e] = true
+        }
+    }
+    
+    return Array(addrs.keys)
+}
+
+func deallocateResult(res: UnsafeMutablePointer<result>?) {
+    deallocate_result(res)
+}
+
+func deallocateCertInfo(certInfo: UnsafeMutablePointer<cert_info>?) {
+    deallocate_cert_info(certInfo)
+}
+
+enum ResultAttribute {
+    case certificates
+    case errors
+    case output
+    case fingerprints
+}
+
+/**
+ A structure returned by the C crypto functions
+ 
+ This is not intended to be used outside of the SMIME library for letterbox. Look at the encryption/decryption functions for example usages
+ */
+extension result {
+    /**
+    Extracts an array of certs in PEM of the respective function from the result object
+    Deallocates the "errors" part of the result object
+    Only use in combination with_extractOutput and _extractErrors
+    */
+    private func extractStringArray(attrType: ResultAttribute) -> [String]? {
+        let arr: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?
+        switch (attrType) {
+        case .certificates:
+            arr = self.certs
+        case .fingerprints:
+            arr = self.fingerprints
+        default:
+            // TODO: Exceptions
+            return nil
+        }
+        var strArr: [String]? = nil
+        
+        if arr != nil {
+            strArr = []
+            let size = self.num_certs
+            for i in 0..<size {
+                let str = String(cString: arr![Int(i)]!)
+                strArr?.append(str)
+            }
+        }
+        
+        return strArr
+    }
+
+    /**
+    Extracts an array of errors of the respective function from the result object
+    Deallocates the "errors" part of the result object
+    Only use in combination with_extractOutput
+    */
+    private func extractErrors() -> [UInt]? {
+        let arr = self.errors
+        var errArr: [UInt]? = nil
+        
+        if arr != nil {
+            errArr = []
+            let size = self.num_errors
+            for i in 0..<size {
+                errArr?.append(arr![Int(i)])
+            }
+        }
+        
+        return errArr
+    }
+    
+    /**
+    Extracts the output of the respective function from the result object
+    Deallocates the "res" part of the result object
+    Only use in combination with_extractErrors
+     */
+    private func extractOutput() -> String? {
+         let cStr = self.res
+         
+         var swiftStr: String? = nil
+         
+         if cStr != nil {
+             swiftStr = String(cString: cStr!)
+         }
+         
+         return swiftStr
+    }
+        
+    /**
+     A generic function that reads a field and casts it to the type of the variable that stores the result. The variable must therefore have the correct type. Look at encrypWithPem() for example usage
+     
+     - parameters:
+        - field: enum, specifiying the field to extract
+     */
+    func extractField<T>(field: ResultAttribute) -> T? {
+        switch field {
+        case .certificates:
+            fallthrough
+        case .fingerprints:
+            let res = self.extractStringArray(attrType: field)
+            if res is T? {
+                return res as! T?
+            }
+            break
+        case .errors:
+            let res = self.extractErrors()
+            if res is T? {
+                return res as! T?
+            }
+        case .output:
+            let res = self.extractOutput()
+            if res is T? {
+                return res as! T?
+            }
+        }
+        
+        // TODO: exception
+        return nil
+    }
+}
+
+extension String {
+    func extractPattern(pattern: String) -> [String]{
+        let range = NSRange(location: 0, length: self.utf16.count)
+        let regex = try! NSRegularExpression(pattern: pattern)
+        let check = regex.matches(in: self, options: [], range: range)
+        var foundLinks:[String] = []
+        for match in check{
+            guard let range = Range(match.range, in: self) else {continue}
+            foundLinks.append(String(self[range]))
+        }
+        return (foundLinks)
+    }
+}
diff --git a/enzevalos_iphone/SearchHelper.swift b/enzevalos_iphone/SearchHelper.swift
index 33f5204ea9b24be2367b9e215fec560324016bd3..b6bffdc347dc16b1eb19dce08035fb3bdf18c4f4 100644
--- a/enzevalos_iphone/SearchHelper.swift
+++ b/enzevalos_iphone/SearchHelper.swift
@@ -28,7 +28,7 @@ func containsSearchTerms ( content : String?, searchText: String) -> Bool
         //Case Mail has no body/subject
         return false
     }
-    
+        
     var longterms : [String] = []
     var terms : [String] = []
     //Break String into substrings separated by quoatation marks
diff --git a/enzevalos_iphone/Settings.bundle/Acknowledgements.plist b/enzevalos_iphone/Settings.bundle/Acknowledgements.plist
index d355d4e85430fab7b5899d0fff297fec534a6ce7..41fc4f8b65bcafeade28b7a17e46dc5d359d9925 100644
--- a/enzevalos_iphone/Settings.bundle/Acknowledgements.plist
+++ b/enzevalos_iphone/Settings.bundle/Acknowledgements.plist
@@ -425,6 +425,37 @@ third-party archives.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
+Copyright (c) 2016 Brightify.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>Cuckoo</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>Copyright (c) 2012 Alexey Denisov
@@ -941,6 +972,37 @@ THE SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>MIT License
+
+Copyright (c) 2018 Gumob
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>Punycode</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>The MIT License (MIT)
@@ -971,6 +1033,37 @@ SOFTWARE.</string>
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>MIT License
+
+Copyright (c) 2018 Gumob
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>TLDExtract</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>                   GNU LESSER GENERAL PUBLIC LICENSE
diff --git a/enzevalos_iphone/StringExtension.swift b/enzevalos_iphone/StringExtension.swift
index a9656f4fd454fdb3c13cc00530b489bda328b586..c3806413ba900a87b3f4920570da7a17de9f65ac 100644
--- a/enzevalos_iphone/StringExtension.swift
+++ b/enzevalos_iphone/StringExtension.swift
@@ -19,8 +19,11 @@
 //
 
 import Foundation
+import TLDExtract
+
+let extractor = try! TLDExtract(useFrozenData: true)
+
 extension String {
-    
     static func random(length: Int = 20) -> String {
         var randomBytes = Data(count: length)
         
@@ -62,7 +65,45 @@ extension String {
 }
 
 extension String {
-    func splitAddress() -> [String]{
+    /**
+     Returns true if a String contains upper case letters.
+    */
+    func containsUpperCaseLetter() -> Bool {
+        let url = self
+        let regEx = "[A-Z]"
+        let range = NSRange(location: 0, length: url.utf16.count)
+        let regex = try! NSRegularExpression(pattern: regEx)
+        if regex.firstMatch(in: url, options:[], range: range) != nil {
+            return true
+        }
+        return false
+    }
+    
+    /**
+     Returns true if the string contains two or more consecutive dots
+     */
+    func twoDotsOrMore() -> Bool {
+        let url = self
+        // Finds 2 or more consecutive dots
+        let regEx = "\\.{2,}"
+        let range = NSRange(location: 0, length: url.utf16.count)
+        let regex = try! NSRegularExpression(pattern: regEx)
+        if regex.firstMatch(in: url, options:[], range: range) != nil {
+            return true
+        }
+        return false
+    }
+}
+
+/**
+functions to split an  emailadress  into their domains
+*/
+extension String {
+    /**
+    Returns the E-Mail address splitted by "." and "@":
+    Example: test@imp.fu-berlin.de -> ["test", "imp", "fu-berlin", "de"]
+    */
+    func splitAddress() -> [String] {
         if self == ""{
             return []
         }
@@ -73,13 +114,21 @@ extension String {
         return splittetMailArr
     }
     
-    func getLocalMailIdentity() -> String{
+    /**
+    Returns the extracted local mail identity from an E-Mail address in
+    Example: test@imp.fu-berlin.de -> test
+    */
+    func getLocalMailIdentity() -> String {
         guard let localIdentity = self.splitAddress().first
             else { return ""}
         return localIdentity
     }
     
-    func getSubdomains() -> [String]{
+    /**
+    Returns the extracted sub domain from an E-Mail address in
+    Example: test@imp.fu-berlin.de -> ["imp", "fu-berlin"]
+    */
+    func getSubdomains() -> [String] {
         if self == ""{
             return []
         }
@@ -88,18 +137,41 @@ extension String {
         subDomains.removeLast()
         return subDomains
     }
-    
-    
-    func getDomain() -> String{
+
+    /**
+    Returns the extracted top level domain from an E-Mail address
+    Example: test@imp.fu-berlin.de -> de
+    */
+     func getDomain() -> String {
         guard let domain = self.splitAddress().last
             else {return ""}
         return domain
+     }
+    
+    /**
+     Returns the extracted sub - and second evel domain from an E-Mail address in
+     Example: test@imp.fu-berlin.de -> imp.fu-berlin OR test@example.de -> example
+     */
+    func getMailDomains() -> String {
+        var domain = ""
+        if var domains = self.components(separatedBy: "@").last?.components(separatedBy: ".") {
+            domains.removeLast()
+            for dom in domains {
+                domain += dom + "."
+            }
+            domain.removeLast()
+            return domain
+        }
+        return ""
     }
 }
 
+/**
+Functions to find E-mail adresses and URLs
+*/
 extension String {
+    
     func isValidEmail() -> Bool {
-        
         let emailRegEx = "(?!\\u10000-\\uEFFFF.*\\.\\.)([^@\\s]{2,64}+@[^@\\s]+\\.[^@\\s\\.]+$)"
         let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
         return emailTest.evaluate(with: self)
@@ -136,16 +208,35 @@ extension String {
         }
         return nil
     }
+   
+    /**
+     Returns a list of E-Mail Addresses extracted from a given string
+     */
+    func findMailAddress() -> [String] {
+        let splitString = self.split(separator: " ").map(String.init)
+        var results:[String] = []
+            for val in splitString {
+                if val.contains("@") && val.isValidEmail(){
+                    results.append(val)
+                }
+            }
+       return(results)
+    }
     
-    //for text only, not for hyperlink detection
-    func findURL() -> [String]{
-        var urls : [String] = []
+    /**
+     For text only, not for hyperlink detection
+     Returns URLs from a given String
+     */
+    func findURL() -> [String?] {
+        var urls : [String?] = []
         do {
             let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
             detector.enumerateMatches(in: self, options: [], range: NSMakeRange(0, self.count), using: { (result, _, _) in
                 if let match = result{
                     if let match2 = match.url?.absoluteString, !match2.contains("@") {
-                        urls.append(match2)
+                        if !match2.twoDotsOrMore() {
+                            urls.append(match2)
+                        }
                     }
                 }
             })
@@ -155,7 +246,9 @@ extension String {
         return urls
     }
     
-    // to find HTML tags and hyperlinks
+    /**
+     To find HTML tags and hyperlinks
+     */
     func findHtmlTags() -> [String]{
         let htmlTagPattern = "<(.*?)a.*?href=.*?>(.*?)<\\/.*?a.*?>"
         let range = NSRange(location: 0, length: self.utf16.count)
@@ -195,4 +288,196 @@ extension String {
         }
         return (foundLinks)
     }
+    
+}
+
+/**
+Functions for splitting a URL  into their domains
+*/
+extension String {
+    
+    /**
+     Returns a list of all second level domains taken out of all URLs from a String.
+     */
+    func getSLD()-> [String] {
+        let urls = self.findURL()
+        var SLD: [String] = []
+        for url in urls {
+            let urlString: String = url!
+            guard let result: TLDResult = extractor.parse(urlString) else { continue }
+            if let sld = result.secondLevelDomain {
+                SLD.append(sld)
+            }
+        }
+        return SLD
+    }
+       
+    /**
+     Returns a list of all top level domains taken out of all URLs from a String.
+     */
+    func getTLD()-> [String] {
+        let urls = self.findURL()
+        var TLD: [String] = []
+        for url in urls {
+            let urlString: String = url!
+            guard let result: TLDResult = extractor.parse(urlString) else { continue }
+            if let tld = result.topLevelDomain {
+                TLD.append(tld)
+            }
+        }
+        return TLD
+    }
+    
+    /**
+     Returns a list of all root domains taken out of all URLs from a String.
+     */
+    func getRD() -> [String] {
+        let urls = self.findURL()
+        var RD: [String] = []
+        for url in urls {
+            let urlString: String = url!
+            guard let result: TLDResult = extractor.parse(urlString) else { continue }
+            if let rd = result.rootDomain {
+                RD.append(rd)
+            }
+        }
+        return RD
+    }
+    
+    /**
+    Returns the root domain of a URL.
+    */
+    func getRootDomain() -> String {
+        if let result: TLDResult = extractor.parse(self) {
+            if let rootDomain = result.rootDomain {
+                return rootDomain
+            }
+        }
+        return ""
+    }
+    
+    /**
+     Returns the second-level domain of a URL.
+     */
+    func getSecondLevelDomain() -> String {
+        if let result: TLDResult = extractor.parse(self) {
+            if let secondLevelDomain = result.secondLevelDomain {
+                return secondLevelDomain
+            }
+        }
+        return ""
+    }
+}
+
+/**
+Levenshtein Algorithm to calculate the editdistance
+Returns the editdistance betwenn two Strings
+Weights for transpositiona and editdistance are 2, weights for the rest is 1
+*/
+extension String {
+    
+    /**
+    Returns the editdistance between two strings
+    */
+    func getEditDistance(str: String) -> Int{
+       return self.levenshtein(str)
+    }
+    
+    /**
+    Returns an dictionary of every editdistance between every string of a given list and a given string
+    Key: string, Value: editdistance
+    */
+    func getEditDistances(list: [String]) -> [String : String]{
+        var editDistance = 0
+        var editDic : [String:String] = [:]
+        for elm in list {
+            editDistance = self.getEditDistance(str: elm)
+            editDic.updateValue(String(editDistance), forKey: elm)
+        }
+      return editDic
+    }
+    
+    /**
+     Compares two strings with each other. Return true if the edit distance is in the allowed range.
+     Not allowed distance: 0 < distance < allowedEditDistance.
+     */
+    func isAllowedDistance(str: String, allowedEditDistance: Int) -> Bool {
+        let distance = self.levenshtein(str)
+        if distance < allowedEditDistance && distance != 0 {
+            return false
+        }
+        return true
+    }
+    
+    /**
+     Compares a String with a list of strings and checks whether the edit distance between them is in the allowed range.
+     Returns a boolean value and a list of strings that had an un-allowed edit distance with the original string
+     The Bool values is returned False: if the string has an un-allowed edit distance with any other element from the list.
+     */
+    func compareWith(strings: [String], allowedEditDistance: Int) -> (Bool, [String]) {
+        var isAllowedEditDistance = true
+        var strList: [String] = []
+        for str in strings {
+            if !self.isAllowedDistance(str: str, allowedEditDistance: allowedEditDistance) {
+                isAllowedEditDistance = false
+                strList.append(str)
+            }
+        }
+        return (isAllowedEditDistance, strList)
+    }
+
+    /**
+     Levenshtein Algorithm
+     Resource: https://gist.github.com/RuiCarneiro/82bf91214e3e09222233b1fc04139c86
+     edited the source code: added transposition, edited weights
+     */
+    public func levenshtein(_ other: String) -> Int {
+        let sCount = self.count
+        let oCount = other.count
+        
+        let a = Array(self)
+        let b = Array(other)
+
+        guard sCount != 0 else {
+            return oCount
+        }
+
+        guard oCount != 0 else {
+            return sCount
+        }
+
+        let line : [Int]  = Array(repeating: 0, count: oCount + 1)
+        var mat : [[Int]] = Array(repeating: line, count: sCount + 1)
+
+        for i in 0...sCount {
+            mat[i][0] = i
+        }
+
+        for j in 0...oCount {
+            mat[0][j] = j
+        }
+
+        for j in 1...oCount {
+            for i in 1...sCount {
+                
+                if a[i - 1] == b[j - 1] {
+                    mat[i][j] = mat[i - 1][j - 1]       // no operation
+                }
+                    
+                else {
+                    // weight for transposition and substitution are 2, the others have weight 1
+                    let del = mat[i - 1][j] + 1         // deletion
+                    let ins = mat[i][j - 1] + 1         // insertion
+                    let sub = mat[i - 1][j - 1] + 2     // substitution
+                    mat[i][j] = min(min(del, ins), sub)
+                    
+                    if (i > 1) && (j > 1) && (i < sCount) && (j < oCount) && (a[i - 1] == b[j]) && (a[i] == b[j - 1]) {
+                        mat[i][j] = min(mat[i][j], mat[i-2][j-2]+1) // transposition
+                    }
+                }
+            }
+        }
+        return mat[sCount][oCount]
+    }
+    
 }
diff --git a/enzevalos_iphone/SwiftPGP.swift b/enzevalos_iphone/SwiftPGP.swift
index c240656c81588ab3c53557a52ff18c4c8f1e4368..fdb750554d55bd7dd5b1ca5860fa71a67b601a23 100644
--- a/enzevalos_iphone/SwiftPGP.swift
+++ b/enzevalos_iphone/SwiftPGP.swift
@@ -25,7 +25,6 @@ class SwiftPGP: Encryption {
         
     }
     
-    
     private func generatePW(size: Int, splitInBlocks: Bool) -> String{
         let file = open("/dev/urandom", O_RDONLY)
         if file >= 0{
@@ -596,7 +595,10 @@ class SwiftPGP: Encryption {
         return CryptoObject(chiphertext: data, plaintext: plaintext, decryptedData: plaindata, sigState: sigState, encState: encState, signKey: sigKeyID, encType: CryptoScheme.PGP, signedAdrs: signedAdr)
     }
     
-    // A help function for findMailForSecrectKey and findNotSignedMailForPublicKey
+    /**
+     A help function for findMailForSecrectKey and findNotSignedMailForPublicKey
+     Receives a keyID as String and returns the corresponding key as a [Key] List.
+     */
     func keyAsKeyList(keyID: String) -> [Key] {
         var keyList = [Key]()
         if let key: Key = loadKey(id: keyID) {
@@ -605,7 +607,9 @@ class SwiftPGP: Encryption {
         return keyList
     }
     
-    // Finds undecrypted mails in persistent mails and and tries to decrypt with the incoming secret key
+    /**
+     Receives a keyID as String and searches for undecrypted mails in persistent mails and and tries to decrypt them with the incoming secret key.
+     */
     func findMailForSecretKey(keyID: String) {
         var encState = EncryptionState.UnableToDecrypt
         var plaindata: Data? = nil
@@ -655,7 +659,9 @@ class SwiftPGP: Encryption {
         return (nil, EncryptionState.NoEncryption)
     }
     
-    // Finds unsigned mails in persistent mails and and tries to verify them with the incoming public key
+    /**
+    Receives a keyID as String and searches for unsigned mails in persistent mails and and tries to verify them with the incoming public key.
+    */
     func findNotSignedMailForPublicKey(keyID: String) {
         var sigState = SignatureState.NoPublicKey
         let key: [Key] = keyAsKeyList(keyID: keyID)
diff --git a/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift.orig b/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift.orig
new file mode 100644
index 0000000000000000000000000000000000000000..e735bbcc75bfecca40523976277a64de9340b638
--- /dev/null
+++ b/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift.orig
@@ -0,0 +1,145 @@
+//
+//  Inbox.swift
+//  enzevalos_iphone
+//
+//  Created by Oliver Wiese on 01.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import SwiftUI
+
+struct Inbox: View {
+    @Environment(\.managedObjectContext) var managedObjectContext
+    @FetchRequest(fetchRequest: KeyRecord.allRecordsFetchRequest(in: Folder.inbox)) var keyrecords: FetchedResults<KeyRecord>
+    
+    @ObservedObject var folder = Folder.inbox
+    
+    @State var updating = false
+    @State var showUser = false
+    @State var searchText = ""
+    @State var searchField = 0
+    @State var searchNow = false
+    
+    let coord: InboxCoordinator
+    
+    var body: some View {
+        VStack{
+            SearchView(searchText: $searchText, searchField: $searchField, searchNow: $searchNow)
+               .padding(6)
+            // Mails
+            mailList
+            // Toolbar
+            HStack {
+                self.idButton
+                Spacer()
+                self.lastUpdate
+                Spacer()
+                self.composeButton
+            }
+            .padding(6)
+        }
+        .navigationBarTitle(NSLocalizedString("Inbox", comment: "Inbox"))
+        .navigationBarItems(leading: self.folderButton)
+    }
+    
+    private var mailList: some View {
+        List (self.keyrecords.filter(filterKeyRecord), id: \.self){
+            record in
+<<<<<<< HEAD
+                KeyRecordRow(keyrecord: record, coord: self.coord)
+=======
+            KeyRecordRow(keyrecord: record, coord: self.coord).environment(\.managedObjectContext, self.managedObjectContext)
+>>>>>>> dev
+       }
+       .resignKeyboardOnDragGesture() // hide keyboard when dragging
+    }
+        
+    private var folderButton: some View {
+        Button(action: self.coord.pushFoldersView, label: {
+            Text(NSLocalizedString("Folders", comment: "Folder"))
+        })
+    }
+    
+    private var idButton: some View {
+        Button(action: {
+            self.coord.pushRecordView(record: self.userRecord)
+        }, label: {
+            Text(NSLocalizedString("KeyID", comment: "id"))
+        })
+    }
+    
+    private var composeButton: some View {
+        Button(action: self.coord.pushComposeView, label: {
+            Image(systemName: "message").imageScale(.large)
+        })
+    }
+    
+    private var lastUpdate: some View {
+        var text = NSLocalizedString("Updating", comment: "updating...")
+        if !updating {
+            if let last = Folder.inbox.lastUpdate {
+               let dateFormatter = DateFormatter()
+                dateFormatter.locale = Locale.current
+                dateFormatter.timeStyle = .medium
+                let dateString = dateFormatter.string(from: last)
+                text = NSLocalizedString("LastUpdate", comment: "") + " " + dateString
+            }
+            else {
+                text = NSLocalizedString("NeverUpdated", comment: "no upates...")
+            }
+        }
+        return Button(action: updateMails, label: {Text(text)
+            .font(.callout)
+
+        })
+    }
+    
+    var userRecord: KeyRecord {
+           get {
+               let keyID = UserManager.loadUserValue(Attribute.prefSecretKeyID) as? String
+               let addr = UserManager.loadUserValue(Attribute.userAddr) as! String
+               return DataHandler.handler.getKeyRecord(addr: addr, keyID: keyID)
+           }
+       }
+       
+       func updateMails() {
+           guard !updating else {
+               return
+           }
+           AppDelegate.getAppDelegate().mailHandler.updateFolder(folder: Folder.inbox, completionCallback: {_ in
+               self.updating = false
+           })
+           updating = true
+       }
+       
+       func filterKeyRecord(keyRecord: KeyRecord) -> Bool {
+           let searchType = SearchType.findType(i: searchField)
+           if self.searchText.isEmpty || self.searchText == NSLocalizedString("Searchbar.Title", comment: "Search") {
+               return true
+           }
+           let query = self.searchText.lowercased()
+           if (searchType == .All || searchType == .Sender) && containsSearchTerms(content: keyRecord.name, searchText: query){
+               return true
+           }
+           else if (searchType == .All || searchType == .Sender) && keyRecord.addresses.filter({containsSearchTerms(content: $0.mailAddress, searchText: query)}).count > 0 {
+               return true
+           }
+           else if (searchType == .All || searchType == .Subject) && keyRecord.mails.filter({containsSearchTerms(content: $0.subject, searchText: query)}).count > 0 {
+               return true
+               }
+           else if (searchType == .All || searchType == .Body) && keyRecord.mails.filter({containsSearchTerms(content: $0.body, searchText: query)}).count > 0 {
+               return true
+           }
+           return false
+       }
+}
+
+
+
+/*
+struct Inbox_Previews: PreviewProvider {
+    static var previews: some View {
+        Inbox()
+    }
+}
+ */
diff --git a/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift.orig b/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift.orig
new file mode 100644
index 0000000000000000000000000000000000000000..74fd5b458e9625c67404053aa56bf616fc74a6a6
--- /dev/null
+++ b/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift.orig
@@ -0,0 +1,94 @@
+//
+//  InboxCoordinator.swift
+//  enzevalos_iphone
+//
+//  Created by Oliver Wiese on 04.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+
+class InboxCoordinator {
+    let root: UINavigationController
+    
+    private let mainStoryboardName = "Main"
+    private let mainStoryboard: UIStoryboard
+    private var inbox: UIViewController?
+
+    
+    init(root: UINavigationController) {
+        self.root = root
+        mainStoryboard = UIStoryboard(name: self.mainStoryboardName, bundle: nil)
+    }
+    
+    func pushInbox(){
+        try? AppDelegate.getAppDelegate().mailHandler.startIMAPIdleIfSupported()
+        AppDelegate.getAppDelegate().mailHandler.updateFolder(folder: Folder.inbox, completionCallback: {_ in
+        })
+        
+        root.isToolbarHidden = true
+
+        if let vc = inbox {
+            if root.viewControllers.contains(vc) {
+                while root.topViewController != vc {
+                    root.popViewController(animated: true)
+                }
+            } else {
+                root.pushViewController(vc, animated: true)
+            }
+        }
+        else {
+            let context = DataHandler.handler.managedObjectContext
+<<<<<<< HEAD
+            let vc = UIHostingController(rootView: Inbox(coord: self).environment(\.managedObjectContext,context))
+=======
+            let vc = UIHostingController(rootView: Inbox(coord: self).environment(\.managedObjectContext, context))
+>>>>>>> dev
+            inbox = vc
+            root.pushViewController(vc, animated: true)
+        }
+    }
+
+    func pushFoldersView() {
+        let controller = mainStoryboard.instantiateViewController(withIdentifier: ViewID.FoldersView.rawValue)
+        root.isToolbarHidden = false
+        root.pushViewController(controller, animated: true)
+    }
+    
+    func pushReadView(mail: PersistentMail) {
+        let vc = mainStoryboard.instantiateViewController(withIdentifier: ViewID.ReadView.rawValue)
+        if let vc = vc as? ReadViewController {
+            vc.mail = mail
+        }
+        root.isToolbarHidden = false
+        root.pushViewController(vc, animated: true)
+    }
+    
+    func pushRecordView(record: KeyRecord){
+        let vc = mainStoryboard.instantiateViewController(withIdentifier: ViewID.KeyRecordView.rawValue)
+        if let vc = vc as? ContactViewController {
+            vc.keyRecord = record
+        }
+        root.isToolbarHidden = false
+        root.pushViewController(vc, animated: true)
+    }
+    
+    func pushComposeView() {
+        let vc = mainStoryboard.instantiateViewController(identifier: ViewID.ComposeView.rawValue)
+        if let vc = vc as? SendViewController {
+            vc.wasPushed = true
+        }
+        root.isToolbarHidden = false
+        root.pushViewController(vc, animated: true)
+    }
+    
+    func pushMailListView(record: KeyRecord) {
+        let vc = mainStoryboard.instantiateViewController(identifier: ViewID.MailListView.rawValue)
+        if let vc = vc as? ListViewController {
+            vc.contact = record
+        }
+        root.isToolbarHidden = false
+        root.pushViewController(vc, animated: true)
+    }
+}
diff --git a/enzevalos_iphone/SwiftUI/Inbox/KeyRecordRow.swift.orig b/enzevalos_iphone/SwiftUI/Inbox/KeyRecordRow.swift.orig
new file mode 100644
index 0000000000000000000000000000000000000000..2ddd602992c56f7b8d556d2a10bc670804ddec3c
--- /dev/null
+++ b/enzevalos_iphone/SwiftUI/Inbox/KeyRecordRow.swift.orig
@@ -0,0 +1,150 @@
+//
+//  KeyRecordRow.swift
+//  enzevalos_iphone
+//
+//  Created by Oliver Wiese on 02.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import SwiftUI
+
+struct KeyRecordRow: View {
+<<<<<<< HEAD
+    @ObservedObject var keyrecord: KeyRecord
+    let coord: InboxCoordinator
+    
+=======
+    @Environment(\.managedObjectContext) var managedObjectContext
+
+    var keyrecord: KeyRecord
+    let coord: InboxCoordinator
+    
+    var fetchRequest: FetchRequest<PersistentMail>
+    var mails: FetchedResults<PersistentMail> {
+        fetchRequest.wrappedValue
+    }
+
+    init(keyrecord: KeyRecord, coord: InboxCoordinator) {
+        self.keyrecord = keyrecord
+        self.coord = coord
+        let pred = NSPredicate(format: "record == %@", keyrecord)
+        let folderPredicate = NSPredicate(format: "folder == %@", Folder.inbox)
+        let predicates = NSCompoundPredicate(andPredicateWithSubpredicates: [pred, folderPredicate])
+        let sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]
+        fetchRequest = FetchRequest<PersistentMail>(entity: PersistentMail.entity(), sortDescriptors: sortDescriptors, predicate: predicates, animation: nil)
+    }
+    
+    
+>>>>>>> dev
+    var body: some View {
+        VStack {
+            HStack(alignment: .lastTextBaseline) {
+                icon
+                Spacer()
+                mailListView()
+                .offset(y: -10)
+            }
+            HStack {
+                name
+                Spacer()
+                moreMails
+            }
+        }
+    }
+    
+<<<<<<< HEAD
+=======
+    var secondMail: PersistentMail?{
+        if mails.count > 1 {
+            return mails[2]
+        }
+        return nil
+    }
+    
+>>>>>>> dev
+    /*
+     Displays the first (and second) mail
+     */
+    private func mailListView() -> AnyView {
+        let spacing = CGFloat(10)
+        let offset = -(spacing / 2)
+        
+<<<<<<< HEAD
+        if let first = self.keyrecord.firstMail {
+            if let second = self.keyrecord.secondMail {
+                return AnyView(VStack(alignment: .leading, spacing: spacing) {
+                        MailView(mail: first, coord: coord)
+                        MailView(mail: second, coord: coord)
+=======
+        if let first = mails.first {
+            if mails.count > 1 {
+                return AnyView(VStack(alignment: .leading, spacing: spacing) {
+                        MailView(mail: first, coord: coord)
+                        MailView(mail: mails[1], coord: coord)
+>>>>>>> dev
+                        .background(Stroke(offsetY: offset))
+                })
+            } else {
+                return AnyView(VStack(alignment: .leading,spacing: spacing) {
+                    MailView(mail: first, coord: coord)
+                    Text(NSLocalizedString("NoFurtherMessages", comment: "No more Mails"))
+                    .background(Stroke(offsetY: offset))
+                })
+            }
+        } else {
+            return AnyView(Text("NO MAILS..."))
+        }
+    }
+    
+    private var icon: some View{
+        self.keyrecord.image.img
+            .resizable()
+            .frame(width: 60, height: 60)
+            .shadow(radius: 5)
+            .onTapGesture {
+                self.coord.pushRecordView(record: self.keyrecord)
+        }
+    }
+    
+    private var name: some View {
+        Text(self.keyrecord.myNick)
+            .frame(maxWidth: 300, alignment: .leading)
+            .lineLimit(1)
+            .onTapGesture {
+                self.coord.pushRecordView(record: self.keyrecord)
+        }
+    }
+    
+    private var moreMails: some View {
+        Button(action: {
+            self.coord.pushMailListView(record: self.keyrecord)
+        }, label: {
+            Text(NSLocalizedString("MailView.MoreMails", comment: "More mails"))
+            .foregroundColor(.gray)
+        })
+    }
+}
+
+
+extension KeyRecord {
+<<<<<<< HEAD
+=======
+    
+>>>>>>> dev
+    public var firstMail: PersistentMail? {
+        get {
+            return mails.first
+        }
+    }
+    
+    public var secondMail: PersistentMail? {
+        get {
+            if mails.count > 1 {
+                return mails[1]
+            }
+            return nil
+        }
+    }
+}
+
+
diff --git a/enzevalos_iphone/Typosquatting.swift b/enzevalos_iphone/Typosquatting.swift
new file mode 100644
index 0000000000000000000000000000000000000000..580b709363e7afb198fcffb73df7ee60eed774e6
--- /dev/null
+++ b/enzevalos_iphone/Typosquatting.swift
@@ -0,0 +1,206 @@
+//
+//  Typosquatting.swift
+//  enzevalos_iphone
+//
+//  Created by Lauren Elden on 29.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+import TLDExtract
+
+class Typosquatting {
+    
+    /**
+     Compares a url's root domain with all root domain of all elements in a given url list.
+     false: if the URL's root domain has an unallowed edit distance with any other root domain.
+     */
+    func compareURLs(myUrl: String, urls: [String]) -> (Bool, [String]) {
+        let rootDomain = myUrl.getRootDomain()
+        var isAllowedEditDistance = true
+        var closeStrings = [String]()
+        for url in urls {
+            let rd = url.getRootDomain()
+            if !rootDomain.isAllowedDistance(str: rd, allowedEditDistance: 4) {
+                // 2 domains contain less than 4 differences --> warning here needed
+                isAllowedEditDistance = false
+                closeStrings.append(url)
+            }
+        }
+        return (isAllowedEditDistance , closeStrings)
+    }
+    
+    /**
+     Compares a url's root domain with all root domain of all elements in a given url list.
+     Returns an dictionary with the urls as the keys and and a bollean if it fits the allowed editdistance as  value
+     isAllowedDistance is false: if the URL's root domain has an unallowed edit distance with any other root domain.
+     */
+    func compareURLsAsDic(url: String, urls: [String], allowedEditDistance: Int) -> [String:Bool] {
+        let rootDomain = url.getRootDomain()
+        var isAllowedEditDistance = true
+        var typoDic: [String:Bool] = [:]
+        for url in urls {
+            let rd = url.getRootDomain()
+            if !rootDomain.isAllowedDistance(str: rd, allowedEditDistance: allowedEditDistance) {
+                // 2 domains contain less than 4 differences --> warning here needed
+                isAllowedEditDistance = false
+                typoDic.updateValue(isAllowedEditDistance, forKey : url)
+                isAllowedEditDistance = true
+            }
+            else{
+                typoDic.updateValue(isAllowedEditDistance, forKey : url)
+            }
+        }
+        return typoDic
+    }
+
+    /**
+    Compares a url's root domain with all root domain of all elements in a givin url list.
+    Returns an dictionary with the URLs as keys and the Editdistance as value
+    */
+      func getURLEditdistanceAsDic(url: String, urls: [String]) -> [String:Int] {
+          let rootDomain = url.getRootDomain()
+          var urlEditDic: [String:Int] = [:]
+          var editDistance = 0
+          for url in urls {
+              let rd = url.getRootDomain()
+              editDistance = rootDomain.getEditDistance(str: rd)
+              urlEditDic.updateValue(editDistance, forKey : url)
+          }
+          return urlEditDic
+      }
+    
+    /**
+     Compares a URLs second-level domain with all elements of a givin domain list.
+     false: if the URL's second-level domain has an unallowed edit distance with any other domain.
+     */
+    func compareURLWithSLDList(url: String, domains: [String]) -> Bool {
+        let secondLevelDomain = url.getSecondLevelDomain()
+        var isAllowedEditDistance = true
+        for domain in domains {
+            if !secondLevelDomain.isAllowedDistance(str: domain, allowedEditDistance: 4) {
+                // 2 domains contain less than 4 differences --> warning here needed
+                isAllowedEditDistance = false
+            }
+        }
+        return isAllowedEditDistance
+    }
+    
+    /**
+    Compares a url's second level domain with all  domains of all elements in a givin second level domain list.
+    Returns an dictionary with the domains as the keys and and a boolean if it fits the allowed edit-distance as  value
+    isAllowedDistance is false: if the URL's second level domain has an unallowed edit distance with any other domain.
+    */
+    func compareURLWithSLDListAsDic(url: String, domains: [String], allowedEditDistance: Int) -> [String:Bool] {
+           let secondLevelDomain = url.getSecondLevelDomain()
+           var isAllowedEditDistance = true
+           var typoDic: [String:Bool] = [:]
+           for domain in domains {
+               if !secondLevelDomain.isAllowedDistance(str: domain, allowedEditDistance: allowedEditDistance) {
+                   // 2 domains contain less than 4 differences --> warning here needed
+                   isAllowedEditDistance = false
+                   typoDic.updateValue(isAllowedEditDistance, forKey : domain)
+                   isAllowedEditDistance = true
+               }
+               else{
+                   typoDic.updateValue(isAllowedEditDistance, forKey : domain)
+               }
+           }
+           return typoDic
+       }
+    
+    /**
+    Compares a url's second-level domain with all elements of a givin domain list.
+    Returns an dictionary with the second level domain as keys and the editdistance as value
+     */
+     func getSLDEditdistanceAsDic(url: String, domains: [String]) -> [String:Int] {
+         let secondLevelDomain = url.getSecondLevelDomain()
+         var sldEditDic: [String:Int] = [:]
+         var editDistance = 0
+         for domain in domains {
+             editDistance = secondLevelDomain.getEditDistance(str: domain)
+             sldEditDic.updateValue(editDistance, forKey : domain)
+         }
+         return sldEditDic
+     }
+    
+    /**
+     Compares a second-level domain with all elements of a givin second-level domain list.
+     false: if the second-level domain has an unallowed edit distance with any other domain.
+    */
+    func compareDomainWithDomians(secondLvlDomain: String, domains: [String], allowedEditDistance: Int) -> Bool {
+        var isAllowedEditDistance = true
+        for domain in domains {
+            if !secondLvlDomain.isAllowedDistance(str: domain, allowedEditDistance: allowedEditDistance) {
+                // 2 domains contain less than 4 differences --> warning here needed
+                isAllowedEditDistance = false
+            }
+        }
+        return isAllowedEditDistance
+    }
+    
+    /**
+    Compares a second level domain with all elements of a givin second-level domain list.
+    Returns an dictionary with the domains as the keys and and a boolean if it fits the allowed editdistance as  value
+    isAllowedDistance is false: if the  second level domain has an unallowed edit distance with any other domain.
+    */
+    func compareDomainWithDomiansAsDic(secondLvlDomain: String, domains: [String], allowedEditDistance: Int) -> [String:Bool] {
+           var isAllowedEditDistance = true
+           var typoDic: [String:Bool] = [:]
+           for domain in domains {
+               if !secondLvlDomain.isAllowedDistance(str: domain, allowedEditDistance: allowedEditDistance) {
+                   // 2 domains contain less than 4 differences --> warning here needed
+                   isAllowedEditDistance = false
+                   typoDic.updateValue(isAllowedEditDistance, forKey : domain)
+                   isAllowedEditDistance = true
+               }
+               else{
+                   typoDic.updateValue(isAllowedEditDistance, forKey : domain)
+               }
+           }
+           return typoDic
+       }
+    
+    /**
+     Compares a domain with all elements of a givin domain list.
+     Returns an dictionary with domains as keys and the editdistance as value
+    */
+    func getDomainEditDistanceAsDic(domain: String, domains: [String]) -> [String:Int] {
+        var domainEditDic: [String:Int] = [:]
+        var editDistance = 0
+        for dom in domains {
+            editDistance = domain.getEditDistance(str: dom)
+            domainEditDic.updateValue(editDistance, forKey : dom)
+        }
+        return domainEditDic
+    }
+    
+    /**
+     Receives a mail body and takes out the URLs and filters valid URLs by verifying their Root Domain
+     Return a list of valid URLs
+     */
+    func isValidRD(mailBody: String) -> [String] {
+        let urls = mailBody.findURL()
+        var foundRDs: [String] = []
+        for url in urls {
+            let urlString: String = url!
+            if !urlString.containsUpperCaseLetter() {
+                guard let result: TLDResult = extractor.parse(urlString) else { continue }
+                if let rd = result.rootDomain {
+                    let rdPatternRegEx = "^([a-z0-9])*([a-z0-9-]+\\.)*[a-z0-9]*([a-z0-9-]+)*[a-z0-9]+\\.[a-z]{2,11}?$" // for hostname
+                    let range = NSRange(location: 0, length: rd.utf16.count)
+                    let regex = try! NSRegularExpression(pattern: rdPatternRegEx)
+                    if regex.firstMatch(in: rd, options:[], range: range) != nil {
+                        foundRDs.append(rd)
+                    } else {
+                        // domain did not pass the regex --> warning here needed
+                    }
+                }
+            } else {
+                // domain contains capital letters --> warning here needed
+            }
+        }
+        // Returns non-Critical Root Domain list
+        return (foundRDs)
+    }
+}
diff --git a/enzevalos_iphone/c/certificate-helpers.c b/enzevalos_iphone/c/certificate-helpers.c
new file mode 100644
index 0000000000000000000000000000000000000000..44057539bde02a0da88097f91320e5d84de14697
--- /dev/null
+++ b/enzevalos_iphone/c/certificate-helpers.c
@@ -0,0 +1,191 @@
+//
+//  certificate-helpers.c
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 18.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+#include "certificate-helpers.h"
+
+cert_info * get_cert_data(const char *pem)
+{
+    BIO *cert_bio = NULL;
+    // recipient certificate
+    X509 *cert = NULL;
+    cert_info *info = malloc(sizeof(cert_info));
+    array_with_length *emails = NULL;
+    int size=0;
+    
+    cert_bio = BIO_new_mem_buf(pem, (int) strlen(pem));
+    
+    if (!cert_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+    
+    cert = PEM_read_bio_X509(cert_bio, NULL, 0, NULL);
+    if (!cert) {
+        printf("Failed reading pem\n");
+        goto deinit;
+    }
+    
+    emails = get_emails(cert);
+    size = emails->size;
+        
+    //ELIMINATED MAIN MEMORY LEAK; STILL HAVE A SMALL ONE: after running a couple of minutes nonstop loading certs 70mb
+    
+    info->num_emails = size;
+    info->emails = malloc(size*sizeof(char*));
+    char ** arr = (char**) emails->arr;
+    for (int i = 0; i<size; i++) {
+        unsigned long len = strlen(arr[i]);
+        info->emails[i] = malloc(len + 1);
+        info->emails[i][len] = 0;
+        memcpy(info->emails[i], arr[i], len);
+        free(arr[i]);
+    }
+    free(arr);
+    free(emails);
+    
+    info->date_end = get_end_date(cert);
+    info->date_start = get_start_date(cert);
+    info->subject = get_subject(cert);
+    info->issuer = get_issuer(cert);
+deinit:
+    BIO_free(cert_bio);
+    X509_free(cert);
+    return info;
+}
+
+char * get_issuer(X509 *cert) {
+
+    char *res = NULL;
+    BIO *out = NULL;
+    out = BIO_new(BIO_s_mem());
+    X509_NAME *name = NULL;
+    name = X509_get_issuer_name(cert);
+    X509_NAME_print_ex(out, name, 0, XN_FLAG_MULTILINE);
+    bio_to_str(out, &res);
+deinit:
+    BIO_free(out);
+    return res;
+}
+
+char * get_subject(X509 *cert) {
+    char *res = NULL;
+    BIO *out = NULL;
+    out = BIO_new(BIO_s_mem());
+    X509_NAME *name = NULL;
+    name = X509_get_subject_name(cert);
+    X509_NAME_print_ex(out, name, 0, XN_FLAG_MULTILINE);
+    bio_to_str(out, &res);
+deinit:
+    BIO_free(out);
+    return res;
+}
+
+char * get_start_date(X509 *cert) {
+    char *res = NULL;
+    BIO *out = NULL;
+    out = BIO_new(BIO_s_mem());
+    ASN1_TIME_print(out, X509_get0_notBefore(cert));
+    bio_to_str(out, &res);
+deinit:
+    BIO_free(out);
+    return res;
+}
+
+char * get_end_date(X509 *cert) {
+    char *res = NULL;
+    BIO *out = NULL;
+    out = BIO_new(BIO_s_mem());
+    ASN1_TIME_print(out, X509_get0_notAfter(cert));
+    bio_to_str(out, &res);
+deinit:
+    BIO_free(out);
+    return res;
+}
+
+array_with_length *get_emails(X509 *cert) {
+    array_with_length *res = malloc(sizeof(array_with_length));
+    int i = 0;
+    STACK_OF(OPENSSL_STRING) *list = NULL;
+    
+    if (cert == NULL) {
+        printf("Failed to get emails cause null cert!\n");
+        goto deinit;
+    }
+    
+    list = X509_get1_email(cert);
+    
+    const int emails_num = sk_OPENSSL_STRING_num(list);
+    res->size = emails_num;
+    
+    if (emails_num == 0)
+        goto deinit;
+    
+    char ** arr = init_str_arr(emails_num);
+        
+    for (i = 0; i < emails_num; i++) {
+        char *temp = sk_OPENSSL_STRING_value(list, i);
+        unsigned long size = strlen(temp);
+        arr[i] = malloc(size+1);
+        
+        memcpy(arr[i], temp, size);
+        arr[i][size] = 0;
+        free(temp);
+    }
+    res->arr = arr;
+deinit:
+    sk_OPENSSL_STRING_free(list);
+    return res;
+}
+
+X509 *get_cert_from_pem(const char *pem) {
+    BIO *rec_cert_bio = NULL;
+    // recipient certificate
+    X509 *rec_cert = NULL;
+    
+    rec_cert_bio = BIO_new_mem_buf(pem, (int) strlen(pem));
+    
+    if (!rec_cert_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+    
+    rec_cert = PEM_read_bio_X509(rec_cert_bio, NULL, 0, NULL);
+    
+    if (!rec_cert) {
+        printf("Failed reading pem\n");
+        goto deinit;
+    }
+deinit:
+    BIO_free(rec_cert_bio);
+    return rec_cert;
+}
+
+cert_info * new_cert_info()
+{
+    cert_info *i = malloc(sizeof(cert_info));
+    i->date_end = NULL;
+    i->date_start = NULL;
+    i->emails = NULL;
+    i->issuer = NULL;
+    i->num_emails = 0;
+    i->subject = NULL;
+    return i;
+}
+
+void deallocate_cert_info( cert_info *c)
+{
+    free(c->date_end);
+    free(c->date_start);
+    if (c->num_emails > 0)
+    {
+        deallocate_str_arr(c->emails, c->num_emails);
+    }
+    free(c->issuer);
+    free(c->subject);
+    free(c);
+}
diff --git a/enzevalos_iphone/c/certificate-helpers.h b/enzevalos_iphone/c/certificate-helpers.h
new file mode 100644
index 0000000000000000000000000000000000000000..d96c2f67eec5835a14b364b2f6981e74c1b26d79
--- /dev/null
+++ b/enzevalos_iphone/c/certificate-helpers.h
@@ -0,0 +1,51 @@
+//
+//  certificate-helpers.h
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 18.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+#ifndef certificate_helpers_h
+#define certificate_helpers_h
+#undef OPENSSL_NO_SSL_INTERN
+#undef OPENSSL_NO_CRYPTO_INTERN
+
+#include "generic-helpers.h"
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/opensslv.h>
+#include <openssl/evp.h> // this header may not be needed
+#include <openssl/err.h> // this header may not be needed
+#include <openssl/bio.h>
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/cms.h>
+#include <openssl/safestack.h>
+#include <openssl/x509.h>
+#include <openssl/opensslconf.h>
+#include <openssl/crypto.h>
+// subject
+// issuer
+
+struct cert_info {
+    char *issuer;
+    char *subject;
+    char *date_start;
+    char *date_end;
+    char ** emails;
+    int num_emails;
+} typedef cert_info;
+
+
+char * get_issuer(X509 *cert);
+char * get_subject(X509 *cert);
+char * get_start_date(X509 *cert);
+char * get_end_date(X509 *cert);
+array_with_length *get_emails(X509 *cert);
+cert_info * get_cert_data(const char *pem);
+
+cert_info * new_cert_info(void);
+void deallocate_cert_info(cert_info *c);
+
+#endif /* certificate_helpers_h */
diff --git a/enzevalos_iphone/c/general-helpers.c b/enzevalos_iphone/c/general-helpers.c
new file mode 100644
index 0000000000000000000000000000000000000000..8165cf452a4bb9763fc3d588d9a18c775e40968f
--- /dev/null
+++ b/enzevalos_iphone/c/general-helpers.c
@@ -0,0 +1,105 @@
+//
+//  general-helpers.c
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 18.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+
+#include "generic-helpers.h"
+
+void bio_to_str(BIO *bio_in, char **out) {
+    char * tmp = NULL, *tmp2 = NULL;
+    long size = BIO_get_mem_data(bio_in, &tmp);
+    tmp2 = malloc(size+1);
+    tmp2[size]=0; // To Nullterminate the string
+    memcpy(tmp2, tmp, size);
+    *out = tmp2;
+}
+
+int get_array_size(array_with_length *arr) {
+    return arr->size;
+}
+
+char *get_err_string(unsigned long err) {
+    char * error_permanent = malloc(256);
+    ERR_error_string_n(err, error_permanent, 256);
+    
+    return error_permanent;
+}
+
+char *get_err_reason_string(unsigned long err) {
+    const char * reason_str = ERR_reason_error_string(err);
+    char * error_permanent = (char *) malloc(strlen(reason_str)+1);
+    error_permanent[strlen(reason_str)]=0; // To Nullterminate the string
+    memcpy(error_permanent,reason_str,strlen(reason_str));
+    
+    return error_permanent;
+}
+
+char ** init_str_arr(int num)
+{
+    char ** arr = malloc(num*sizeof(char*));
+    return arr;
+}
+
+char ** add_str_to_arr(const char *str, char **arr, int i)
+{
+    unsigned long len = strlen(str);
+    char *newstr = malloc(len+1);
+    memcpy(newstr, str, len);
+    newstr[len]=0;
+    arr[i]=newstr;
+    return arr;
+}
+
+void deallocate_str_arr(char **arr, int len)
+{
+    for (int i=0; i < len; i++){
+        free(arr[i]);
+    }
+    free(arr);
+}
+
+char *bin_to_hex(unsigned char *bin, int len)
+{
+    unsigned char buf[3];
+    char *res = malloc(2*len+1);
+    for (int i =0;i<len;i++)
+    {
+        sprintf((char*) buf, "%02x", bin[i]);
+        res[i*2]=buf[0];
+        res[i*2+1]=buf[1];
+    }
+    res[len*2]=0;
+    return res;
+}
+
+result *new_result()
+{
+    result *res = malloc(sizeof(result));
+    res->certs = NULL;
+    res->errors = NULL;
+    res->num_certs =0;
+    res->num_errors =0;
+    res->certs = NULL;
+    res->fingerprints = NULL;
+    return res;
+    
+}
+
+void deallocate_result(result *res) {
+    if (res->num_certs > 0) {
+        if (res->certs != NULL) deallocate_str_arr(res->certs, res->num_certs);
+        if (res->fingerprints != NULL) deallocate_str_arr(res->fingerprints, res->num_certs);
+    }
+    if (res->num_errors > 0) {
+        free(res->errors);
+    }
+    if (res->res != NULL) {
+        free(res->res);
+    }
+    free(res);
+}
+
diff --git a/enzevalos_iphone/c/generic-helpers.h b/enzevalos_iphone/c/generic-helpers.h
new file mode 100644
index 0000000000000000000000000000000000000000..3288c0d8f0ba36412ec3b4b841832daac1d3d159
--- /dev/null
+++ b/enzevalos_iphone/c/generic-helpers.h
@@ -0,0 +1,64 @@
+//
+//  generic-helpers.h
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 18.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+#ifndef generic_helpers_h
+#undef OPENSSL_NO_SSL_INTERN
+#undef OPENSSL_NO_CRYPTO_INTERN
+
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/opensslv.h>
+#include <openssl/evp.h> // this header may not be needed
+#include <openssl/err.h> // this header may not be needed
+#include <openssl/bio.h>
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/cms.h>
+#include <openssl/safestack.h>
+#include <openssl/x509.h>
+#include <openssl/opensslconf.h>
+
+
+struct linked_list {
+    void *content;
+    struct linked_list *next;
+} typedef linked_list;
+
+struct result {
+    char *res;
+    unsigned long *errors;
+    int num_errors;
+    char **certs;
+    int num_certs;
+    char **fingerprints;
+} typedef result;
+
+struct array_with_length {
+    int size;
+    void *arr;
+} typedef array_with_length;
+
+char * pop_error (result *res);
+char *get_err_string(unsigned long err);
+char *get_err_reason_string(unsigned long err);
+
+void bio_to_str(BIO *bio_in, char **out);
+int get_array_size(array_with_length *arr);
+
+char ** init_str_arr(int num);
+char ** add_str_to_arr(const char *str, char **arr, int i);
+void deallocate_str_arr(char **arr, int len);
+char *bin_to_hex ( unsigned char *bin, int len);
+
+result *new_result(void);
+void deallocate_result(result *res);
+
+#define generic_helpers_h
+
+
+#endif /* generic_helpers_h */
diff --git a/enzevalos_iphone/c/smime-helpers.c b/enzevalos_iphone/c/smime-helpers.c
new file mode 100644
index 0000000000000000000000000000000000000000..020d6cdeeb5f43f6ffdf64058c25a06225c5360f
--- /dev/null
+++ b/enzevalos_iphone/c/smime-helpers.c
@@ -0,0 +1,553 @@
+//
+//  openssl-helpers.c
+//  
+//
+//  Created by lazarog98 on 02.03.20.
+//
+
+#include "smime-helpers.h"
+#include <glob.h>
+
+// This is a wrapper around the OpenSSL functions, where everz function is primarily inspired by the SMIME demos in the OpenSSL github
+// https://github.com/openssl/openssl/tree/master/demos/smime
+
+pem_with_fp * cert_stack_to_array(STACK_OF(X509) *stack) {
+    pem_with_fp *arr = malloc(sizeof(pem_with_fp)*sk_X509_num(stack));
+    
+    int i = 0;
+    while (sk_X509_num(stack) > 0) {
+        BIO *out = BIO_new(BIO_s_mem());
+        char *tmp = NULL;
+        X509 *cert = sk_X509_pop(stack);
+        PEM_write_bio_X509(out, cert);
+        long size = BIO_get_mem_data(out, &tmp);
+        char *str_perm = (char *) malloc(size+1);
+        memcpy(str_perm, tmp, size);
+        str_perm[size]=0; // To Nullterminate the string
+        arr[i].pem = str_perm;
+        arr[i].fp = get_fingerprint_from_X509(cert, 0);
+        i++;
+        
+        X509_free(cert);
+        BIO_free(out);
+    }
+    
+    return arr;
+}
+
+void OpenSSL_print_ver(void) {
+    printf("%s", OPENSSL_VERSION_TEXT);
+}
+
+array_with_length *create_list_of_errors() {
+    unsigned long err = 0;
+    linked_list *head = NULL;
+    linked_list *cur = NULL;
+    int first = 1;
+    array_with_length *res = malloc(sizeof(array_with_length));
+    int length = 0;
+    unsigned long * arr = NULL;
+    
+    while ((err = ERR_get_error()) != 0) {
+        linked_list * newerr = malloc(sizeof(linked_list));
+        newerr->content = malloc(sizeof(unsigned long));
+        memcpy(newerr->content, &err, sizeof(unsigned long));
+        newerr->next = NULL;
+        if (first)
+        {
+            first=0;
+            head = newerr;
+        }
+        else
+        {
+            cur->next=newerr;
+        }
+        cur=newerr;
+        length++;
+    }
+    
+    if (length) {
+        arr = malloc(sizeof(unsigned long) * length);
+        linked_list *cur = head;
+        int i = 0;
+        while (cur != NULL) {
+            arr[i] = *((unsigned long*) cur->content);
+            linked_list *old = cur;
+            cur = cur->next;
+            free(old->content);
+            free(old);
+            i++;
+        }
+    }
+
+    res->arr = arr;
+    res->size = length;
+    
+    return res;
+}
+
+result * OpenSSL_encrypt(const char *text, char **pems, int num_certs) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_enc.c
+    BIO *in = NULL, *out = NULL, *rec_cert_bio = NULL;
+    // recipient certificate
+    X509 *rec_cert = NULL;
+    STACK_OF(X509) *cert_stack = NULL;
+    CMS_ContentInfo *cms = NULL;
+    array_with_length *temp = NULL;
+    result *res =new_result();
+    res->certs = NULL;
+    res->num_certs = 0;
+    
+    cert_stack = sk_X509_new_null();
+    if (!cert_stack) {
+        printf("Couldn't initialize cert stack!\n");
+        goto deinit;
+    }
+    
+    in = BIO_new_mem_buf(text, (int) strlen(text));
+    
+    for (int i = 0; i<num_certs; i++) {
+        rec_cert_bio = BIO_new_mem_buf(pems[i], (int) strlen(pems[i]));
+        
+        if (!rec_cert_bio) {
+            printf("Failed reading mykey.pem!\n");
+            goto deinit_loop;
+        }
+        
+        rec_cert = PEM_read_bio_X509(rec_cert_bio, NULL, 0, NULL);
+        
+        if (!rec_cert) {
+            printf("Failed reading pem\n");
+            goto deinit_loop;
+        }
+
+        // note that if the stack is initialized correctly, the recipient certificate is pushed as a test
+        if (!sk_X509_push(cert_stack, rec_cert)) {
+            printf("Failed at push_stack");
+            X509_free(rec_cert);
+            goto deinit_loop;
+        }
+    deinit_loop:
+        BIO_free(rec_cert_bio);
+    }
+    
+    // TODO: change AES CBC to AES GCM for compliance with SMIME 4.0
+    // as of OpenSSL version 1.1.1d GCM isn't supported for CMS
+    // https://github.com/openssl/openssl/pull/8024
+    cms = CMS_encrypt(cert_stack, in, EVP_aes_256_cbc(), CMS_STREAM);
+    if (!cms) {
+        printf("Failed at P7enc");
+        goto deinit;
+    }
+    
+    out = BIO_new(BIO_s_mem());
+    
+    if (!SMIME_write_CMS(out,cms,in,CMS_STREAM)) {
+        printf("Failed at SMIME_WRITE");
+        goto deinit;
+    }
+        
+    bio_to_str(out, &(res->res));
+deinit:
+    // TODO: Collect all errors in a list and return them with the result
+    temp = create_list_of_errors();
+    res->errors = temp->arr;
+    res->num_errors = temp->size;
+    free(temp);
+    CMS_ContentInfo_free(cms);
+    BIO_free(in);
+    BIO_free(out); // also frees tmp
+    sk_X509_pop_free(cert_stack, X509_free);
+    return res;
+}
+
+result * OpenSSL_decrypt(const char *str, const char *pem_cert, const char *pem_key) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_dec.c
+    
+    BIO *in = NULL, *out = NULL, *rec_cert_bio = NULL, *rec_key_bio = NULL;
+    // recipient certificate
+    X509 *rec_cert = NULL;
+    CMS_ContentInfo *cms = NULL;
+    EVP_PKEY *rkey = NULL;
+    result *res = new_result();
+    array_with_length *temp = NULL;
+    res->certs = NULL;
+    res->num_certs = 0;
+    
+    // this trick allows to hardcode a certificate as a string
+    rec_cert_bio = BIO_new_mem_buf(pem_cert, (int) strlen(pem_cert));
+    rec_key_bio = BIO_new_mem_buf(pem_key, (int) strlen(pem_key));
+    
+    in = BIO_new_mem_buf(str,(int) strlen(str)); // simpletest
+    
+    if (!rec_cert_bio) {
+        printf("Failed reading cert!\n");
+        goto deinit;
+    }
+    if (!rec_key_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+
+    rec_cert = PEM_read_bio_X509(rec_cert_bio, NULL, 0, NULL);
+    if (!rec_cert ) {
+        printf("Failed reading pem cert\n");
+        goto deinit;
+    }
+    
+    rkey = PEM_read_bio_PrivateKey(rec_key_bio, NULL, 0, NULL);
+
+    if (!rkey) {
+        printf("Failed reading pem key\n");
+        goto deinit;
+    }
+    
+    cms = SMIME_read_CMS(in, NULL);
+    if (!cms) {
+        printf("DEC Failed at SMIME_READ");
+        goto deinit;
+    }
+     
+    out = BIO_new(BIO_s_mem());
+    
+    if (!CMS_decrypt(cms, rkey, rec_cert, NULL, out, CMS_STREAM)) {
+        printf("Failed at Decrypt");
+        goto deinit;
+    }
+    
+    bio_to_str(out, &(res->res));
+deinit:
+    temp = create_list_of_errors();
+    res->errors = temp->arr;
+    res->num_errors = temp->size;
+    free(temp);
+    CMS_ContentInfo_free(cms);
+    BIO_free(in);
+    BIO_free(out); // also frees tmp
+    BIO_free(rec_cert_bio);
+    BIO_free(rec_key_bio);
+    EVP_PKEY_free(rkey);
+    X509_free(rec_cert);
+    // OpenSSL ver 1.0.2.f has a bug (seemingly) that causes a crash when freeing cms content info pointers
+    return res;
+}
+
+result * OpenSSL_sign(const char *text, const char *pem_cert, const char *pem_key, const int detached) {
+    BIO *in = NULL, *out = NULL, *sig_cert_bio = NULL, *sig_key_bio = NULL;
+    // recipient certificate
+    X509 *sig_cert = NULL;
+    STACK_OF(X509) *cert_stack = NULL;
+    CMS_ContentInfo *cms = NULL;
+    EVP_PKEY *skey = NULL;
+    int flags = CMS_STREAM | CMS_PARTIAL;
+
+    result *res = new_result();
+    res->certs = NULL;
+    res->num_certs = 0;
+    array_with_length *temp = NULL;
+    
+    if (detached) flags |= CMS_DETACHED;
+    
+    in = BIO_new_mem_buf(text,(int) strlen(text)); // simpletest
+    
+    sig_cert_bio = BIO_new_mem_buf(pem_cert, (int) strlen(pem_cert));
+    if (!sig_cert_bio) {
+        printf("Failed reading cert!\n");
+        goto deinit;
+    }
+    
+    sig_key_bio = BIO_new_mem_buf(pem_key, (int) strlen(pem_key));
+    if (!sig_key_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+    
+    sig_cert = PEM_read_bio_X509(sig_cert_bio, NULL, 0, NULL);
+    if (!sig_cert ) {
+        printf("Failed reading pem cert\n");
+        goto deinit;
+    }
+        
+    cert_stack = sk_X509_new_null();
+    
+    // note that if the stack is initialized correctly, the recipient certificate is pushed as a test
+    if (!cert_stack || !sk_X509_push(cert_stack, sig_cert)) {
+         printf("Failed at push_stack");
+        goto deinit;
+    }
+    
+    skey = PEM_read_bio_PrivateKey(sig_key_bio, NULL, 0, NULL);
+    
+    if (!skey) {
+        printf("Failed reading pem key\n");
+        goto deinit;
+    }
+    
+    cms = CMS_sign(NULL, NULL, NULL, in, flags);
+    if (!cms) {
+        goto deinit;
+    }
+    
+    if (!CMS_add1_signer(cms, sig_cert, skey, EVP_sha256(), flags)) {
+        goto deinit;
+    }
+    
+    out = BIO_new(BIO_s_mem());
+    
+    if (!SMIME_write_CMS(out,cms,in,flags)) {
+        printf("Failed at SMIME_WRITE");
+        goto deinit;
+    }
+    
+    bio_to_str(out, &(res->res));
+deinit:
+    temp = create_list_of_errors();
+    res->errors = temp->arr;
+    res->num_errors = temp->size;
+    free(temp);
+    CMS_ContentInfo_free(cms);
+    BIO_free(in);
+    BIO_free(out); // also frees tmp
+    BIO_free(sig_cert_bio);
+    BIO_free(sig_key_bio);
+    EVP_PKEY_free(skey);
+    X509_free(sig_cert);
+    sk_X509_pop_free(cert_stack, X509_free);
+    
+    return res;
+}
+
+result * OpenSSL_verify(const char *text, char **pem_cert, const int num_certs) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_dec.c
+    result *ver = new_result();
+    BIO *in = NULL, *out = NULL;
+    // recipient certificate
+    X509 **sig_certs = malloc(num_certs*sizeof(void*));
+    
+    STACK_OF(X509) *cert_stack= NULL;
+    X509_STORE *cert_store = NULL;
+    CMS_ContentInfo *cms = NULL;
+    BIO *detached = NULL;
+    
+    array_with_length *temp = NULL;
+    
+    cert_store = X509_STORE_new();
+
+    // this trick allows to hardcode a certificate as a string
+    for (int i = 0; i<num_certs; i++) {
+        BIO *sig_cert_bio = BIO_new_mem_buf(pem_cert[i], (int) strlen(pem_cert[i]));
+        sig_certs[i] = NULL;
+        
+        if (!sig_cert_bio) {
+            printf("VERT Failed reading mykey.pem!\n");
+            goto loopend;
+        }
+        
+        sig_certs[i] = PEM_read_bio_X509(sig_cert_bio, NULL, 0, NULL);
+        if (!sig_certs[i] ) {
+            printf("VERT Failed reading pem cert %d\n |", i);
+            
+            goto loopend;
+        }
+
+        if (!X509_STORE_add_cert(cert_store, sig_certs[i])) {
+            printf("VERT Failed at adding cert to store\n");
+            goto loopend;
+        }
+        
+        loopend:
+        BIO_free(sig_cert_bio);
+    }
+    
+    in = BIO_new_mem_buf(text,(int) strlen(text)); // simpletest
+    
+    
+    cms = SMIME_read_CMS(in, &detached);
+    if (!cms) {
+        printf("\nVERT VER Failed at SMIME_READ");
+        goto deinit;
+    }
+     
+    out = BIO_new(BIO_s_mem());
+    ERR_clear_error(); 
+    if (!CMS_verify(cms, NULL, cert_store, detached, out, 0)) {
+        printf("VERT Verification failed");
+        goto deinit;
+    }
+    
+    bio_to_str(out, &(ver->res));
+    
+    cert_stack = CMS_get0_signers(cms);
+    ver->num_certs = sk_X509_num(cert_stack);
+    pem_with_fp *certs_fps = cert_stack_to_array(cert_stack);
+    ver->certs = malloc(sizeof(char*) * ver->num_certs);
+    ver->fingerprints = malloc(sizeof(char*) * ver->num_certs);
+    for (int i = 0; i<ver->num_certs; i++) {
+        ver->certs[i] = certs_fps[i].pem;
+        ver->fingerprints[i] = certs_fps[i].fp;
+    }
+    free(certs_fps);
+deinit:
+    temp = create_list_of_errors();
+    ver->errors = temp->arr;
+    ver->num_errors = temp->size;
+    free(temp);
+    CMS_ContentInfo_free(cms);
+    if (detached != NULL)  BIO_free(detached);
+    BIO_free(in);
+    BIO_free(out); // also frees tmp
+    X509_STORE_free(cert_store);
+    for (int i =0;i<num_certs;i++) X509_free(sig_certs[i]); //We need to free all certs
+    free(sig_certs);
+    sk_X509_pop_free(cert_stack, X509_free);
+    // OpenSSL ver 1.0.2.f has a bug (seemingly) that causes a crash when freeing cms content info pointers
+    return ver;
+}
+
+char * get_fingerprint_from_X509(X509 *cert, int md_alg) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_enc.c
+    unsigned int len;
+    unsigned char md[EVP_MAX_MD_SIZE];
+    const EVP_MD *alg=NULL;
+    char *fp = NULL;
+    
+    switch(md_alg)
+    {
+        case 0:
+            alg = EVP_sha256();
+            break;
+        case 1:
+            alg = EVP_sha1();
+            break;
+        default:
+            alg= EVP_sha256();
+    }
+    
+    if (!X509_digest(cert, alg, md, &len)) {
+        printf("Failed at digest!\n");
+        goto deinit;
+    }
+    
+    fp = bin_to_hex(md, len);
+deinit:
+    return fp;
+}
+
+result * get_fingerprint_from_pem(const char *pem, int md_alg) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_enc.c
+    BIO *rec_cert_bio = NULL;
+    // recipient certificate
+    X509 *rec_cert = NULL;
+    array_with_length *temp = NULL;
+    result *res = new_result();
+    
+    // this trick allows to hardcode a certificate as a string
+    rec_cert_bio = BIO_new_mem_buf(pem, (int) strlen(pem));
+        
+    if (!rec_cert_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+    
+    rec_cert = PEM_read_bio_X509(rec_cert_bio, NULL, 0, NULL);
+    
+    if (!rec_cert) {
+        printf("Failed reading pem\n");
+        goto deinit;
+    }
+    
+    res->res = get_fingerprint_from_X509(rec_cert, md_alg);
+deinit:
+    temp = create_list_of_errors();
+    res->errors = temp->arr;
+    res->num_errors = temp->size;
+    free(temp);
+    BIO_free(rec_cert_bio);
+    X509_free(rec_cert);
+    return res;
+}
+
+result * get_pkey_from_enc_pem(const char *pem, const char *passwd) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_enc.c
+    BIO *rec_cert_bio = NULL, *out = NULL;
+    // recipient certificate
+    array_with_length *temp = NULL;
+    result *res = new_result();
+    EVP_PKEY *skey = NULL;
+    
+    // this trick allows to hardcode a certificate as a string
+    rec_cert_bio = BIO_new_mem_buf(pem, (int) strlen(pem));
+    
+    if (!rec_cert_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+    
+    skey = PEM_read_bio_PrivateKey(rec_cert_bio, NULL, NULL, (void*) passwd);
+    
+    if (!skey) {
+        printf("Failed reading pem key\n");
+        goto deinit;
+    }
+    
+    out = BIO_new(BIO_s_mem());
+
+    if (!PEM_write_bio_PrivateKey(out, skey, NULL, NULL, 0, NULL, NULL)) {
+        printf("Failed writing pem key\n");
+        goto deinit;
+    }
+    
+    bio_to_str(out, &(res->res));
+deinit:
+    temp = create_list_of_errors();
+    res->errors = temp->arr;
+    res->num_errors = temp->size;
+    free(temp);
+    BIO_free(out);
+    BIO_free(rec_cert_bio);
+    EVP_PKEY_free(skey);
+    return res;
+}
+
+result * get_enc_pem_from_pkey(const char *pem, const char *passwd) {
+    // https://github.com/openssl/openssl/blob/master/demos/cms/cms_enc.c
+    BIO *rec_cert_bio = NULL, *out = NULL;
+    // recipient certificate
+    array_with_length *temp = NULL;
+    result *res = new_result();
+    EVP_PKEY *skey = NULL;
+    
+    // this trick allows to hardcode a certificate as a string
+    rec_cert_bio = BIO_new_mem_buf(pem, (int) strlen(pem));
+    
+    if (!rec_cert_bio) {
+        printf("Failed reading mykey.pem!\n");
+        goto deinit;
+    }
+    
+    skey = PEM_read_bio_PrivateKey(rec_cert_bio, NULL, NULL, NULL);
+    
+    if (!skey) {
+        printf("Failed reading pem key\n");
+        goto deinit;
+    }
+    
+    out = BIO_new(BIO_s_mem());
+
+    // TODO: The current version (1.1.1) of OpenSSL doesn't support AES GCM, change the cypher to GCM from CBC as soon as there's support for it
+    if (!PEM_write_bio_PKCS8PrivateKey(out, skey, EVP_aes_256_cbc(), (char *) passwd, (int) strlen(passwd), NULL, NULL)) {
+        printf("Failed writing pem key\n");
+        goto deinit;
+    }
+    
+    bio_to_str(out, &(res->res));
+deinit:
+    temp = create_list_of_errors();
+    res->errors = temp->arr;
+    res->num_errors = temp->size;
+    free(temp);
+    BIO_free(out);
+    BIO_free(rec_cert_bio);
+    EVP_PKEY_free(skey);
+    return res;
+}
diff --git a/enzevalos_iphone/c/smime-helpers.h b/enzevalos_iphone/c/smime-helpers.h
new file mode 100644
index 0000000000000000000000000000000000000000..9e57b91f64b3626653ac84dc3ca839109918920e
--- /dev/null
+++ b/enzevalos_iphone/c/smime-helpers.h
@@ -0,0 +1,47 @@
+//
+//  openssl-helpers.h
+//  
+//
+//  Created by lazarog98 on 02.03.20.
+//
+
+#ifndef openssl_helpers_h
+#define openssl_helpers_h
+#undef OPENSSL_NO_SSL_INTERN
+#undef OPENSSL_NO_CRYPTO_INTERN
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/opensslv.h>
+#include <openssl/evp.h> // this header may not be needed
+#include <openssl/err.h> // this header may not be needed
+#include <openssl/bio.h>
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/cms.h>
+#include <openssl/safestack.h>
+#include <openssl/x509.h>
+#include <openssl/opensslconf.h>
+#include "generic-helpers.h"
+#include "certificate-helpers.h"
+
+STACK_OF(X509)* create_stack_x509(X509 *arr, int len);
+struct pem_with_fp {
+    char *pem;
+    char *fp;
+} typedef pem_with_fp;
+pem_with_fp * cert_stack_to_array(STACK_OF(X509) *stack);
+
+void OpenSSL_print_ver(void);
+
+result * OpenSSL_encrypt(const char *text, char **pems, int num_certs);
+result * OpenSSL_decrypt(const char *str, const char *pem_cert, const char *pem_key);
+result * OpenSSL_sign(const char *text, const char *pem_cert, const char *pem_key, const int detached);
+result * OpenSSL_verify(const char *text, char **pem_cert, const int num_certs);
+char * get_fingerprint_from_X509(X509 *cert, int md_alg);
+result * get_fingerprint_from_pem(const char *pem, int md_alg); // 0 for SHA-256, 1 for SHA-1
+result * get_pkey_from_enc_pem(const char *pem, const char *passwd);
+result * get_enc_pem_from_pkey(const char *pem, const char *passwd);
+
+#endif /* openssl_helpers_h */
diff --git a/enzevalos_iphone/enzevalos_iphone-Bridging-Header.h b/enzevalos_iphone/enzevalos_iphone-Bridging-Header.h
index 805779836c78c5503b2deb9ea952f240f6587b09..725eede1557938791617efb812802173c590330d 100644
--- a/enzevalos_iphone/enzevalos_iphone-Bridging-Header.h
+++ b/enzevalos_iphone/enzevalos_iphone-Bridging-Header.h
@@ -26,6 +26,10 @@
 #import <GTMAppAuth/GTMAppAuth.h>
 #import <GTMSessionFetcher/GTMSessionFetcher.h>
 #import "OAuth/EmailHelper.h"
+#import "c/smime-helpers.h"
+#import <openssl/pem.h>
+#import <openssl/cms.h>
+#import <openssl/err.h>
 
 // Making this funcion accessible 
 @interface OIDAuthState (Auth)
diff --git a/enzevalos_iphone/evilCA.p12 b/enzevalos_iphone/evilCA.p12
new file mode 100644
index 0000000000000000000000000000000000000000..946d34fd12c923b666a1d1eb0c5f5a44c74336f2
Binary files /dev/null and b/enzevalos_iphone/evilCA.p12 differ
diff --git a/enzevalos_iphone/evilCA.pem b/enzevalos_iphone/evilCA.pem
new file mode 100644
index 0000000000000000000000000000000000000000..5938f840d6ccb53e516657da9447e9ea6f0933ae
--- /dev/null
+++ b/enzevalos_iphone/evilCA.pem
@@ -0,0 +1,45 @@
+-----BEGIN CERTIFICATE-----
+MIIC4TCCAckCCDWaS3dso6D3MA0GCSqGSIb3DQEBCwUAMDMxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMQ8wDQYDVQQDDAZldmlsQ0EwHhcNMTkwNzI5
+MTUzODA1WhcNMTkwODA1MTUzODA1WjAzMQswCQYDVQQGEwJERTETMBEGA1UECgwK
+QSBNQUlMVEVTVDEPMA0GA1UEAwwGZXZpbENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAv0W8s3Dav5brYO+MZQ+DiNPSf0Mgd6g6zR1vdk+sPTuJbAZ2
+owxR376WKEayBp3jF3omitej4ltuAoepQ7xgsFLVJDijAxeLeoAzPc+J8qDcY1NF
+4up9+DpN7L0L3rgfU0/I8Az4jpR8pHJTHmu0L074Er5+Vk2cBvxSY3srp2NnEga1
+Fudun9YUYfOp432Ac7xv/6KYz99ocbI+F/egnHQm49GnyFs1zxCuh9qfTeCFO644
+dUlkMXfQF7sdZmxdxwKIF4D8AroAecFXWei4PtNIJpPvr/UdCBIyEmZroL2fMnPg
+zMtChlEG5Ryw7UuwKrQGs903n3nxvopr4mOumwIDAQABMA0GCSqGSIb3DQEBCwUA
+A4IBAQCFnuNL7hhJjhvPpeMPFahMdadA1OWRLIe0XdAJI8Pvlx3f8XR5udcGS2Mi
+r5znDhWHT5fFyYTj0JZQUf5GaYrucZDh2M2lXzuazhh5J+PSgvMez1fqfC0pp3Iy
+IIqIxZCzGaZp9A7CkAO1qyDqM3fAtkJ0f6JoIrUN9Q4PphDpi6vlRDIoHROmK/Xr
+QVzf2Y0lnKGQisw048XPLWqGagu8ZO0n6GMmyldnwVDEsQomndWDrW0EHEV2s/fq
+bgvyhVRenp1O5IH3nOyXm8vR2FWOEHwR686l8Mxy24APzzn5K7nPeyBx0+ZpyqYh
+aqQKdT1pty4gKWz3zSNTupVsyA/t
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAv0W8s3Dav5brYO+MZQ+DiNPSf0Mgd6g6zR1vdk+sPTuJbAZ2
+owxR376WKEayBp3jF3omitej4ltuAoepQ7xgsFLVJDijAxeLeoAzPc+J8qDcY1NF
+4up9+DpN7L0L3rgfU0/I8Az4jpR8pHJTHmu0L074Er5+Vk2cBvxSY3srp2NnEga1
+Fudun9YUYfOp432Ac7xv/6KYz99ocbI+F/egnHQm49GnyFs1zxCuh9qfTeCFO644
+dUlkMXfQF7sdZmxdxwKIF4D8AroAecFXWei4PtNIJpPvr/UdCBIyEmZroL2fMnPg
+zMtChlEG5Ryw7UuwKrQGs903n3nxvopr4mOumwIDAQABAoIBAAmrItdC8KPJ7Gi5
+fpjLL1IpFvCmDF4rfghJRbIu0Yr7stBn4TwQRbgUu7esepf9vrqYAePAqpxyFEdM
+CBfZO6bU7siGcKwr+3C8JYipQqcTmLKioMAZUIE7odSdoOUMJb5dSQa/ptEaP/lD
+xeBCtsYxtcgR670YpRJdnK34zkgrzUiesTro0JMMGafRIywxwyEH6JNc33GLesQn
+uty8lwH1GWsJ0p3QCq5j+Ez7vuRDpBAmwITz3rMnmk2JP+jMRgUMOVvVYJh08Kjy
+v8UXgoxhryAoYFawKiTnYt5F8Ys5VHs8//I+J8Ki3fszu91lpHrMv7tfwUqroGJp
+NRdTaukCgYEA3ryMRFwFK4l5smOenYIzk3YuGZzXYl42jlT3jk4Mugvb3WIc755V
+WLcFs2xwjpobj42Tf1r2++eJEaPfMWD3/3GCzNkMEwsFApjSSsF30tuLEszOLEmd
+7XH2VPSA5XIqVvUmPaOqW2nCi813zHmWykB+9ebjlymcQnm8p4ns+YMCgYEA29ZI
+g83L6IqJs2NxN2W3EfYKbfTRJRGVWrTK9/NsmHwFIo3kN0BPeEf28i4EjOJyghRm
+Qi+xHUSjStpcsjhuiYSGXMIVj+ARl8cR3g9PHY3VE73+iLm4tH2qQ1XnQqxyODoZ
+BoZaxuoaEOMhFj2vM0Gji9knFICMJfkv8kimIwkCgYB35omfduW1lRC0zdmhsmgv
+NkwEr6BmLI8zuVt1+F/zetTFbL5k4xfQZN2lw3cn3J9/fFftE7umyPHJVCyeuTNn
+B+TAfwp36dOtnTR+13y4PkS0PxmxT4O7QUC4ZNJKMVXHb7pBLixTfzAh795QbReW
+EngFyV+0jMq4Ii5DBgVSHwKBgEHtY1XTs+ELGvynR967LEnApaQQFWCug0HukigF
+4n1gRBH2x4giSzLhMhey4T528qw7/ea/crg6S1Y5Yi84aT3odnr+4YSCSARieONF
+aA6O6GXBRsIuIExQm20SKAaAvMhL9BFW3YZl0mdaFiQbX51Zg/h+qQ+m9WC1+EEK
+tHgxAoGAFeDbm2pwpD61Z3pWE3MdRfLPOzbDfbMbrIau6HezRBJNzD+0UidIYDI6
+GP39EtcDLnf3K0eGm9/B46vjI+3fC9o7s5vvnnxIov7WOPyT0cbzc7WOD1792Ind
+8I1WNf1OLkTkZ1FwqoIFcUtQd5s45m2xwnB8qYv5f2kBwiXAbvI=
+-----END RSA PRIVATE KEY-----
diff --git a/enzevalos_iphone/evilkey1.p12 b/enzevalos_iphone/evilkey1.p12
new file mode 100644
index 0000000000000000000000000000000000000000..bebbd3e324820947699cb4956e538bd6a1e0279a
Binary files /dev/null and b/enzevalos_iphone/evilkey1.p12 differ
diff --git a/enzevalos_iphone/evilkey1.pem b/enzevalos_iphone/evilkey1.pem
new file mode 100644
index 0000000000000000000000000000000000000000..a854b06416de5cec42209620597a1a3275ba9cf8
--- /dev/null
+++ b/enzevalos_iphone/evilkey1.pem
@@ -0,0 +1,67 @@
+-----BEGIN CERTIFICATE-----
+MIIDqTCCApGgAwIBAgII5frz+azVWtswDQYJKoZIhvcNAQELBQAwMzELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxDzANBgNVBAMMBmV2aWxDQTAeFw0x
+OTA3MzAxMjE4MjNaFw0xOTA4MDYxMjE4MjNaMDUxCzAJBgNVBAYTAkRFMRMwEQYD
+VQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhldmlsa2V5MTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAM7iVLw2PQOn+i2BFyCWJbwWESbbc25rDj5qPYGP
+JjpU2FVmM469feUbLlmXCph6uyMFq9BScIvLw3oDdylU/2w5pIzUwX4xiAiH8rMk
+lqSA3IMvplkEF7Y+1JB91fYXJfRaBU4KpJnYz1joJ4C/iLk404UEa42nrDp5ZkQj
+LthbneVxcCPGSwuFOQap4Mn49RIJi0fM5qb33L6Sx2iT7dJaEh2RCybIJtEYTqWw
+ZV5BzrkEcJpMKt6DE1PEnKP/+PpHAjkMTRQKLv+ABpk/6bDupgf5i+sbg9xrAHYC
+SRd4SvzKNjnr2Y4nJmx/XxtFKn4YSlf1fR3PqGMp4aNXogkCAwEAAaOBvjCBuzAe
+BgNVHREEFzAVgRN0ZXN0ZXJAZHJlbmdlbHMubmV0MCkGA1UdDgQiBCClAfbPDXhf
+BeT7RN0SmGbfoEUCiB6sAabQsz8mvTfajDBuBgNVHSMEZzBlgCA9dagPmOgAE8hS
+Tcy4y3/fWNLmeYJmzAs5hkmuEiLc3aE3pDUwMzELMAkGA1UEBhMCREUxEzARBgNV
+BAoMCkEgTUFJTFRFU1QxDzANBgNVBAMMBmV2aWxDQYIINZpLd2yjoPcwDQYJKoZI
+hvcNAQELBQADggEBAKxUcfIYHng1Lvrtpxw0WAgX5PcSZS3Yyu/dqQ4d+JUW5AJl
+eJLXWsfZXtT9c5xm3TAgKae1xEFJQmf/8WvbWSx9GpTKlXuePGcGg4oCtO2ntYcJ
+6++HzIRcpLzeRKu608j7yJEm038Mmj+/y/PJTU5jiQjfgumpT7QlccjVriSm9NiB
+NOIw9SQe5MMH/HTdi5PHrGvomCAQJ8EHI5OmpgaUFgP6mNyEInZzgK8IiZaMHkuM
+jfm/O6ThkxR3LDkEWSCUERhnQ0IwfZDOET9jeeJB05fpPXibMxqfhui8spFROnkN
+JuslM6AptfcWeB2Wv85lOd40tCA7CZ6Wg63kdUo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC4TCCAckCCDWaS3dso6D3MA0GCSqGSIb3DQEBCwUAMDMxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMQ8wDQYDVQQDDAZldmlsQ0EwHhcNMTkwNzI5
+MTUzODA1WhcNMTkwODA1MTUzODA1WjAzMQswCQYDVQQGEwJERTETMBEGA1UECgwK
+QSBNQUlMVEVTVDEPMA0GA1UEAwwGZXZpbENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAv0W8s3Dav5brYO+MZQ+DiNPSf0Mgd6g6zR1vdk+sPTuJbAZ2
+owxR376WKEayBp3jF3omitej4ltuAoepQ7xgsFLVJDijAxeLeoAzPc+J8qDcY1NF
+4up9+DpN7L0L3rgfU0/I8Az4jpR8pHJTHmu0L074Er5+Vk2cBvxSY3srp2NnEga1
+Fudun9YUYfOp432Ac7xv/6KYz99ocbI+F/egnHQm49GnyFs1zxCuh9qfTeCFO644
+dUlkMXfQF7sdZmxdxwKIF4D8AroAecFXWei4PtNIJpPvr/UdCBIyEmZroL2fMnPg
+zMtChlEG5Ryw7UuwKrQGs903n3nxvopr4mOumwIDAQABMA0GCSqGSIb3DQEBCwUA
+A4IBAQCFnuNL7hhJjhvPpeMPFahMdadA1OWRLIe0XdAJI8Pvlx3f8XR5udcGS2Mi
+r5znDhWHT5fFyYTj0JZQUf5GaYrucZDh2M2lXzuazhh5J+PSgvMez1fqfC0pp3Iy
+IIqIxZCzGaZp9A7CkAO1qyDqM3fAtkJ0f6JoIrUN9Q4PphDpi6vlRDIoHROmK/Xr
+QVzf2Y0lnKGQisw048XPLWqGagu8ZO0n6GMmyldnwVDEsQomndWDrW0EHEV2s/fq
+bgvyhVRenp1O5IH3nOyXm8vR2FWOEHwR686l8Mxy24APzzn5K7nPeyBx0+ZpyqYh
+aqQKdT1pty4gKWz3zSNTupVsyA/t
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAzuJUvDY9A6f6LYEXIJYlvBYRJttzbmsOPmo9gY8mOlTYVWYz
+jr195RsuWZcKmHq7IwWr0FJwi8vDegN3KVT/bDmkjNTBfjGICIfysySWpIDcgy+m
+WQQXtj7UkH3V9hcl9FoFTgqkmdjPWOgngL+IuTjThQRrjaesOnlmRCMu2Fud5XFw
+I8ZLC4U5Bqngyfj1EgmLR8zmpvfcvpLHaJPt0loSHZELJsgm0RhOpbBlXkHOuQRw
+mkwq3oMTU8Sco//4+kcCOQxNFAou/4AGmT/psO6mB/mL6xuD3GsAdgJJF3hK/Mo2
+OevZjicmbH9fG0UqfhhKV/V9Hc+oYynho1eiCQIDAQABAoIBAApwE9tdFy34iyBB
+m5Oaz7OSH3Jo7wV6pEDU5l6DhOe7gSCp498HQ3NMMEX332J7CrcFIbqEdkYvVSDy
+TNBKiAqDTACI+Wwu/pCDn2SXa3xIPhfmTwu9r56Tw/C4UJO2bkVKR2s9ETnr3OY8
+7EVMJI9HxTA4XV7Lv15B4r18UvA6c89S7UZeHZduVKm49OmE4sU2N5VmC64DzN1k
+qsA5uYP6lgw0fgHm+1yXqzfQj8gT/AmkrQg5l3yApLoJRlNw05xOzeN+xKZyNRwx
+HRQz0mm57qpO9jZ/UY+p5wOP60BjtOap60/xrJ347Euo21jfX8BnroGRHvwDijeO
+cOOWcUECgYEA98pxbSvCewXoBbvzH8akFbpqtTZReRoNcQA0OPU9gSiFFAOMzLFH
+KZbuEeu3Cnc7IugEDZ7MvCkHQUmtT/nq3rOGVZaS3ErcWGbnbKdBEfF13tGKgOVx
+f4ziXu8wNGH+I544TdNxWJAGuQ3HEtmWl7qjEpq4rfkseAe12Db/jzECgYEA1bzz
+gAX1pbTeHMvYu3qoCpNafMBo9NfJGXdoklR8f4AN5Ykxez6SqPI8hhYWCG+UgGkp
+Dxob7V224G0dgQZIHt9mMKgnIN5TndBcu3Hx8V8NmBT6Id16oRgZ+riR/SX59QP/
+qDodtRZRfioZWO+sbz5LiD16tH/DQ1GH5mz5+lkCgYAqsrK66ih4BHuHyWxKlHMf
+32CV20dMw+V/DFbzXab8g5vy5+2yM/YcP4rEgcanwgXprOtN4YhMABHk+SopNtp3
+B55lTy39UdUIUqscOPHogqAaBieEsITPQtqbG0JGNICTaKcxGfdVGHRgHPSp1d6y
+RJHnGcwrBl3YTRPTrx54cQKBgDw2yia0BxtS1AwqxXkzuemYz7I7hpYLwKTDBhvL
+X3OQANo8h0sgOrML408nI7fmr2Bpv954TYvWjfG168zwlxrTdveYN8XDvKzGCYnp
+NO76B1tj9X/a5HRD1PXUT5SQwVVsdfbPwJTGn9i6RX/PrbV9SEwufcYiBEGP04hw
+BRCpAoGAZum8xoGzenP3vyeyVHNglLnh8wR7eFYbWeYjJNOgzS7UW9AyYzHUXD4e
+ShP9HtguST/Lu/k+8QUZtrNNml56e3IqrHRsZgxSREvGGIfW0QqfNRqXHsjSjs2M
+c4PFxmXxn4/MkVxsswYS5rgv2vfjb47grVIK3JvHWpSzweC+p3A=
+-----END RSA PRIVATE KEY-----
diff --git a/enzevalos_iphone/myTestCA.p12 b/enzevalos_iphone/myTestCA.p12
new file mode 100644
index 0000000000000000000000000000000000000000..332c46bd7d0a41373ac384d3acec2fa50a0ae1c8
Binary files /dev/null and b/enzevalos_iphone/myTestCA.p12 differ
diff --git a/enzevalos_iphone/myTestCA.pem b/enzevalos_iphone/myTestCA.pem
new file mode 100644
index 0000000000000000000000000000000000000000..a4926a95839691753c1101b1f9be060f607d8c8a
--- /dev/null
+++ b/enzevalos_iphone/myTestCA.pem
@@ -0,0 +1,45 @@
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCKtx6aDujfcTMA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0xOTA3
+MjkxNTM4MDRaFw0xOTA4MDUxNTM4MDRaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKJOatbPDL3lw/7tqeugaRHxqMgx7/DOLdSnDnK66Eys
+GrFcp43N3tQL+0rm77tz/jcyVkHAZF9Sv1c/tIZay/J975cbpHPMraJVbM+/mL6f
+14wrwU4rAJLILDkZ3HqkKKnrGmfoKrB1RZ9LA+NLtQlfiuP4C8Et7bOZOkuGdq0T
+aygotW0ELeQPbVWXV/GcP6Xd0FnKQF7m9ioRn9MKxu4VDm3hSKDtN1zyXQ1HXhQV
+/UGODSaFyUgoCTnz7kFcF3hY9Dw7M55CCM3U0PnfxuxUdn8qMH1lym/G5K5xaVLV
+fCjsly8GUUfHtls3Y0F7c6NE5CPkjub2HNNdCW+JD0ECAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAAAVXNPtXVaUP9k2wNZAw4hOKp5n0EdeOkmtMdedvuQF39d+cHJkL
+HjyTp3zd22S1EbgFgNB6RPlRPXie4aivcDGSAGc88NF2xEOezbLZr30x/KAc94OG
+ssKjin+X8aMoZSppUxVHI1j6gzydvEWhVBIRUjgd4F5uiV+TBOAOj39xGkpCXIBg
+bLRdalYjzxWYb5cR5qniCVbKrRg2oQWghStEuuRTww9SQIeSerb0lqHF3gaL82pG
+F4K1I0HbAXgq/D+xIj6lbqZlchI8a4qQq2Ic75yTP/3Nt/Ls6Dt17eT6O+tA9W4e
+tag/vFWjhTwGBIjjvyrjTM3fwvUN3HIZeg==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAok5q1s8MveXD/u2p66BpEfGoyDHv8M4t1KcOcrroTKwasVyn
+jc3e1Av7Subvu3P+NzJWQcBkX1K/Vz+0hlrL8n3vlxukc8ytolVsz7+Yvp/XjCvB
+TisAksgsORnceqQoqesaZ+gqsHVFn0sD40u1CV+K4/gLwS3ts5k6S4Z2rRNrKCi1
+bQQt5A9tVZdX8Zw/pd3QWcpAXub2KhGf0wrG7hUObeFIoO03XPJdDUdeFBX9QY4N
+JoXJSCgJOfPuQVwXeFj0PDsznkIIzdTQ+d/G7FR2fyowfWXKb8bkrnFpUtV8KOyX
+LwZRR8e2WzdjQXtzo0TkI+SO5vYc010Jb4kPQQIDAQABAoH/N3mWCtW6BS4DT57r
+9R1ezENM7SAkYqoWABkZVx2LSKmKdhS1MEKtZsyxl2hXiDqdKUCLOu4HYI1n2Opt
+SX6/NqLUwVExZGMQ9es8xcU27/CyO7a4237XM1Q3yUyNj12MiIdS/zDbZnSu10NM
+kOPPfOSrFEAzxFNua3Rz+Fx9M6pj/AazmGoVk2FvmHLgF/Zq8Oeixmozl3Or2COh
+bDI5lvH/QgmhWpxIkrZ30leT7dQ/zEFMplT0U7d0XC7UQk1ybe0Jyn5iZiMG0iJt
+q19duKO7I3Jt8VHO2yvKWv1LWuFXyPnEpgIdsuM31c5RgLmE1nMl9U1lbRWUY+o9
++RchAoGBANTtuJuNizmrI4nX70rANi4BzE+ofMI8AcUhNuRfTFxBrnqjQvpqMBwB
+FVZK2F0SuQjRd6l78OBIV1IjpwvA6A7il8RSuWjFQySojffBSxAMV7xgnyIo8FvM
+8JeymEJBAI4KjrMwu1WGRQ1UDaU4aUdwWAlev+UHDMAYnaEG+7cpAoGBAMMjRpjJ
+ML+WpaMx7OQb7hTZQBbXME3X10G486ykhmVy2eOnaIG7J35LyG0PDr/YrOP5lV+O
+Z0HEzPc6eDeEdOTMQIzmfOQHvr48NgckrvEdaR4+NIx1YDf/Duxbk/XJpBOrVPUv
+OKfEbPXoX2s2SykXOPbVYRERtK65TOruKZJZAoGBAKF8yY3wA69xBDr+8hUXQgAS
+jQm9FyGYsR742dDKFffCOLn6KEoTTvluOOiBSycLlBoEA2UfAsiXFOLO91oKq/Te
+FYxn0QaM1SdwTnugtXUuZzwPa6FUuzZkb/QdFyzob6tKhn+QbgOnGafKH6824WG0
+6o/wtEjW1+y4vpPp3+5BAoGAGMdn9YrGt+1nRxvV2vl4+AjGTKAysA/Sc7QKrUeP
+EV7OMExXxvF/CFiTMNYSp2XaPnC4+RNaJU3aQSKZlWMqfMs6/yldfo9FN17p9WpB
+FLkJWh/ICHX3K+Ulffn7BeD/Bshg12mRpiwZMfi59SFF1gfu4dkipEo9SVqaW9K2
+ULECgYEAjP0atGP49g/uaI1+YcVwtGa/NYZukKK/ocPBwA88/IqyWhBG3XiIDHfd
+dYsZMyccBtupLSIQN11HLBn0MDMm7P8Y3on0/AHXRvkrfLU+k36BIvJw+QSoQ1O8
+k6si7AT83Tvcv8Z726AOYZU+7RE3x7xBbBojiHETgpgdx3Jikss=
+-----END RSA PRIVATE KEY-----
diff --git a/enzevalos_iphone/mykey.p12 b/enzevalos_iphone/mykey.p12
new file mode 100644
index 0000000000000000000000000000000000000000..9fe19637a2df4572446f6d4e299289230fcad3fb
Binary files /dev/null and b/enzevalos_iphone/mykey.p12 differ
diff --git a/enzevalos_iphone/mykey.pem b/enzevalos_iphone/mykey.pem
new file mode 100644
index 0000000000000000000000000000000000000000..bf5b014354655a825076a4e2f971745ad8c0b302
--- /dev/null
+++ b/enzevalos_iphone/mykey.pem
@@ -0,0 +1,67 @@
+-----BEGIN CERTIFICATE-----
+MIIDszCCApugAwIBAgIIrrDoToFHqvwwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X
+DTE5MDcyOTE1MzgwOFoXDTE5MDgwNTE1MzgwOFowMjELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15a2V5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAqO18P2Qs4LIdPMkGMiT8C9Ik991WV8kB9E5YMGqk
+RI8QH8ewFuX5PVR4IlBtB0HnM44WxXCSfc4Pez9BA2VUyHlGEBzJRcpZIYVoMmOg
+NzfwS25IMznR+yiXne5vs5W3wGXT4C9GpIpn1YJWFh9Vbl1n+xD8RHPJVH1VHPPb
+kZyE1WkDBWBtyAmpdQfpUj11zJBlmnNqmR/Lk11oJnM57QDHpeIFMsHcO5yehNBD
+XR5ZprWrPszwrwcYDC9pcT8dT0SwInR2vqjxjrsjXs8cqtKkGzUXfw2GAxC46+md
+rB9/Y8AxwHxC5pUh3c6KyQvkG9rOpYGt57rfSxHZmeQv1wIDAQABo4HJMIHGMCcG
+A1UdEQQgMB6BHFNreWxlciA8cmV0c2V0QGRyZW5nZWxzLm5ldD4wKQYDVR0OBCIE
+ILX9PcNFYmFQVHMCTvzTJkxVfFGrj0VMTIH+W6o2sjnhMHAGA1UdIwRpMGeAILLL
+gvddqVj9AJE8CrP9PYeShvHigM+CczpLs9EYh+bkoTmkNzA1MQswCQYDVQQGEwJE
+RTETMBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCKtx6aDu
+jfcTMA0GCSqGSIb3DQEBCwUAA4IBAQBmociZ5gTiu7NtVPL/hybNoqMb4qZjgDlN
+HW5ifOa5q19gK1zOuIyZt0ehB6UJNEj/JjeZJsk3/0iSvTnmtTAzL2HjYt3XQ9nY
+2KFaOq8VcvMCMZRilqc0UdgYAXlA0b2qW4PKWhX0mLgMTC9XA/NoDiX1YMB/N+97
+wXE9JsJYjClaY4npi7TfeOV0AxSxGlumBi8KZd5R32QT53IdCjdeWtpHEAW/ecv+
+Y1xb0AAraqWHAXYTCxzNLnSe4h/Y+g0oFLWRGsPvYCmZLTamUsUQSzvAm1YVVy9w
+gyjVbZRSXX3jIvrsISSp8SSJw7obLvVjgr4j+yhL1oCnJb4IY+/w
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCKtx6aDujfcTMA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0xOTA3
+MjkxNTM4MDRaFw0xOTA4MDUxNTM4MDRaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKJOatbPDL3lw/7tqeugaRHxqMgx7/DOLdSnDnK66Eys
+GrFcp43N3tQL+0rm77tz/jcyVkHAZF9Sv1c/tIZay/J975cbpHPMraJVbM+/mL6f
+14wrwU4rAJLILDkZ3HqkKKnrGmfoKrB1RZ9LA+NLtQlfiuP4C8Et7bOZOkuGdq0T
+aygotW0ELeQPbVWXV/GcP6Xd0FnKQF7m9ioRn9MKxu4VDm3hSKDtN1zyXQ1HXhQV
+/UGODSaFyUgoCTnz7kFcF3hY9Dw7M55CCM3U0PnfxuxUdn8qMH1lym/G5K5xaVLV
+fCjsly8GUUfHtls3Y0F7c6NE5CPkjub2HNNdCW+JD0ECAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAAAVXNPtXVaUP9k2wNZAw4hOKp5n0EdeOkmtMdedvuQF39d+cHJkL
+HjyTp3zd22S1EbgFgNB6RPlRPXie4aivcDGSAGc88NF2xEOezbLZr30x/KAc94OG
+ssKjin+X8aMoZSppUxVHI1j6gzydvEWhVBIRUjgd4F5uiV+TBOAOj39xGkpCXIBg
+bLRdalYjzxWYb5cR5qniCVbKrRg2oQWghStEuuRTww9SQIeSerb0lqHF3gaL82pG
+F4K1I0HbAXgq/D+xIj6lbqZlchI8a4qQq2Ic75yTP/3Nt/Ls6Dt17eT6O+tA9W4e
+tag/vFWjhTwGBIjjvyrjTM3fwvUN3HIZeg==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAqO18P2Qs4LIdPMkGMiT8C9Ik991WV8kB9E5YMGqkRI8QH8ew
+FuX5PVR4IlBtB0HnM44WxXCSfc4Pez9BA2VUyHlGEBzJRcpZIYVoMmOgNzfwS25I
+MznR+yiXne5vs5W3wGXT4C9GpIpn1YJWFh9Vbl1n+xD8RHPJVH1VHPPbkZyE1WkD
+BWBtyAmpdQfpUj11zJBlmnNqmR/Lk11oJnM57QDHpeIFMsHcO5yehNBDXR5ZprWr
+PszwrwcYDC9pcT8dT0SwInR2vqjxjrsjXs8cqtKkGzUXfw2GAxC46+mdrB9/Y8Ax
+wHxC5pUh3c6KyQvkG9rOpYGt57rfSxHZmeQv1wIDAQABAoIBABdIN/Yir96+HbJ5
+gE2b9FMKwQaabmKF9St/Or9di0tZrl667mWRh6Lwx+fuzsAP0LY10KSgqcgGBPM3
+GhZGOoOw1zu0Q/dG9rbchKphOb0yi/9RcUkCIJMtmovtR17odR1iy2tcCK/31WzD
+XGsLIYKnBARB6IrkrGxlI7xsTahJQWDZ+1GM4rWA2BwNvFa4WhJAEJYJOxYc65TJ
+Gsb8yAdUtNprIZGAZ4Mxzv3ds1EDHQ52DKLgKsZVaw3m0eLaj9x0rysU/bghgs5z
+g5VYZuiWBeXIFsR8q81BNhoWSrNZ5Njq7zpVyiiHs6Cwf6xCGSeLtcuWrRekw/at
+mg+rvH0CgYEA0EdWoP3JHwrTRLwDgtiS7DdS/ZM/pD6LElEg+ppUNLjMaqALwMjU
+FqApE3DLnYlYtJ04pWB1554Ee/YdB6KatwkRVb9wR0+5asnq8SMtBCH7wp5MgC/D
+zo1PLSdDyeew4xCdoAlRqNb/ZhP6hK1fuSsrRfDPLUwLDfXmfg70t+MCgYEAz6IA
+EbFs30I0zZdkx9iFkjIxzg6MTEKwOWM08Z5xU0iBR1LJRdO+qrxyVV1u04XY8ZZC
+tM/vAGErnBdhDTN8Hoo0x+SiaSJnzEPDOo4qcUYjYGjM218BYSHObnfX/A0ynnSr
+f/rYyuKfxr7mFOjY82K1s/KKYQanZaYDarKw4n0CgYEAzBsc6efKkIErSNB3IGLc
+mGAfFCCY3XvtDaYzi2Jx4ri2mkb9PY+RSBrsJgEDiP5vz4/DU02UPca83j3xdOoE
+dBqOwlk4zqlyKxR1CJpQIxyqe65liblFScVxMe6on9RNpDdEQPDg9XS8FGy/tAWz
+KOMFJSU34kwDCUtQ9XfymcECgYEAxj7ZbgtH9ksSe5IniaC0uAfxAdtmHZI3DDQq
+4t/zOB+sP9tNjbxE+mP/jn4tSQ0tPE3J1zYJ7wTYTKsN4TrdMZOoHYuxfkx5atDw
+YMJIx+q98Flf77zgZkuO/G607FX1lNG0xfdOczi6cVrn9+Ly8j+3Wd8kPMvLnQRL
+kt6WgUkCgYB+AnfU4WznrX7bV7wr34byedw3aZtNzwCfNlc1f5PBQ6vk+VLCN2uz
+P/2pLfs+mwbdVooDtfcfDSHuAP1d50EUHabXG97eRh+brncBjVo1gbGmzdI72XHL
+8gnwRYIz0mbuPxMnMFgYNtB9+yOPZvREwUma2FAKEC6woZxCqPsQhA==
+-----END RSA PRIVATE KEY-----
diff --git a/enzevalos_iphone/otherkey1.p12 b/enzevalos_iphone/otherkey1.p12
new file mode 100644
index 0000000000000000000000000000000000000000..ff511fa46dfbade8fef6bb9dac3ac066400cb7e4
Binary files /dev/null and b/enzevalos_iphone/otherkey1.p12 differ
diff --git a/enzevalos_iphone/otherkey1.pem b/enzevalos_iphone/otherkey1.pem
new file mode 100644
index 0000000000000000000000000000000000000000..8d70f06536108a4117ed1774289bc1158d22a7cb
--- /dev/null
+++ b/enzevalos_iphone/otherkey1.pem
@@ -0,0 +1,67 @@
+-----BEGIN CERTIFICATE-----
+MIIDsDCCApigAwIBAgIIAUuththJ3rkwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X
+DTE5MDczMDE0MTM0MloXDTE5MDgwNjE0MTM0MlowNjELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxEjAQBgNVBAMMCW90aGVya2V5MTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAOaXgg4cD8V2Fg/n6v/YuHsOTa7vlrSragOa
+eVwcYzAATRIQAP6suakRkr5D2a3u2N+EBOawCvZPeQZwZMtKpnEdIKdkmUi/OYMS
+y6D7xRL/MizwsNP/YvRfwByPmYRo30YCwLeJEEIlPDw5zwfIiqyl31mOrx+5eebv
+t83TCJzU7ORZv/OqFEwGt4FcWk8FydmOJxW3My3A2GUWPOmnrvOGamRoKkN/O7xO
+9qaQSkRWhuyb6R3EIDo0WfsM263aEhbVHOsCk7PAtzgW18+3qvK5ZrENk3B+F3+2
+fh1Qola266kX6/ZbB+/eOPJlWBh2NZHhBZ+Z/wr69tCSTJ80au0CAwEAAaOBwjCB
+vzAgBgNVHREEGTAXgRVvdGhlcmFjY0BkcmVuZ2Vscy5uZXQwKQYDVR0OBCIEIGAb
+47YtbmauxZ5hYka1/wYF9xh8+pJ+Zc0eRqkrgbeNMHAGA1UdIwRpMGeAILLLgvdd
+qVj9AJE8CrP9PYeShvHigM+CczpLs9EYh+bkoTmkNzA1MQswCQYDVQQGEwJERTET
+MBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCKtx6aDujfcT
+MA0GCSqGSIb3DQEBCwUAA4IBAQCaaBwEyegcUwTsHFiZGq64tvhRBNdiaXIGZk64
++Jw+FyfgcMp80VIhAdKuPtodtMWRQFl6F7xI3Gkvhosv73jWSwl05iGvxFWN0wNr
+N2nZ8JPCHNqQQkuGaHEM3B591EifrswGLhIaoSihHIBFlBx6e0fgBmSTHYbx9usI
+XyjDyGWkq0z72KGjifqow6zZKDFeX2Br3K1hP2V2ObnVkL+Arj+lBConkD+Ja9fa
+vfbCKFRMmniHBSKcaTdHu/yzFaS8zGdWaMXIVzidPrIpqiv4KC2iVWqizZX3u6ej
+nVDuRRggGA08TMPaJa3ziQo+zcjFkeHyd+7vw1w7ogSPlwx8
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCKtx6aDujfcTMA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0xOTA3
+MjkxNTM4MDRaFw0xOTA4MDUxNTM4MDRaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKJOatbPDL3lw/7tqeugaRHxqMgx7/DOLdSnDnK66Eys
+GrFcp43N3tQL+0rm77tz/jcyVkHAZF9Sv1c/tIZay/J975cbpHPMraJVbM+/mL6f
+14wrwU4rAJLILDkZ3HqkKKnrGmfoKrB1RZ9LA+NLtQlfiuP4C8Et7bOZOkuGdq0T
+aygotW0ELeQPbVWXV/GcP6Xd0FnKQF7m9ioRn9MKxu4VDm3hSKDtN1zyXQ1HXhQV
+/UGODSaFyUgoCTnz7kFcF3hY9Dw7M55CCM3U0PnfxuxUdn8qMH1lym/G5K5xaVLV
+fCjsly8GUUfHtls3Y0F7c6NE5CPkjub2HNNdCW+JD0ECAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAAAVXNPtXVaUP9k2wNZAw4hOKp5n0EdeOkmtMdedvuQF39d+cHJkL
+HjyTp3zd22S1EbgFgNB6RPlRPXie4aivcDGSAGc88NF2xEOezbLZr30x/KAc94OG
+ssKjin+X8aMoZSppUxVHI1j6gzydvEWhVBIRUjgd4F5uiV+TBOAOj39xGkpCXIBg
+bLRdalYjzxWYb5cR5qniCVbKrRg2oQWghStEuuRTww9SQIeSerb0lqHF3gaL82pG
+F4K1I0HbAXgq/D+xIj6lbqZlchI8a4qQq2Ic75yTP/3Nt/Ls6Dt17eT6O+tA9W4e
+tag/vFWjhTwGBIjjvyrjTM3fwvUN3HIZeg==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA5peCDhwPxXYWD+fq/9i4ew5Nru+WtKtqA5p5XBxjMABNEhAA
+/qy5qRGSvkPZre7Y34QE5rAK9k95BnBky0qmcR0gp2SZSL85gxLLoPvFEv8yLPCw
+0/9i9F/AHI+ZhGjfRgLAt4kQQiU8PDnPB8iKrKXfWY6vH7l55u+3zdMInNTs5Fm/
+86oUTAa3gVxaTwXJ2Y4nFbczLcDYZRY86aeu84ZqZGgqQ387vE72ppBKRFaG7Jvp
+HcQgOjRZ+wzbrdoSFtUc6wKTs8C3OBbXz7eq8rlmsQ2TcH4Xf7Z+HVCiVrbrqRfr
+9lsH79448mVYGHY1keEFn5n/Cvr20JJMnzRq7QIDAQABAoIBADUXMwFuoo7zFjdJ
+TUjkq+zhKS+ayBcG1FzKByEXBBs8JoJ/HsuEFyb+/ctCse6i7Fnh+oLmi0+UkqfR
+3tMTd+jZLPh9Z/Fg3av4+tswvHoYOYQxUnUs+qqLFR8+TLk4sBddcOOQ8iZYjlrL
+cIg5OvxvIFJtUJK8UH3EOYxxBy2cRHw44Fg54E0CpI3LDympYUnkT6YBB+MddqF5
+mvo85XO2WoN6m+JbVvS/jDBEI707ggAjKqHoomyzEQB0lrvksPtYfUuhGqfFRrdY
+nHAfH4Nxrv4FB61GldyNBphQFpMYEtOwSGLSXEaMzHPrmaAegQminJBuQaODKCeh
+IVht6d0CgYEA/6CyWfkHRRmAV/hm1fndZLcZ3oN2JIJjznZbB0R1IuaXTl7kbXvA
+mdEeLD9OJayhbSIkpBSs7g8NsHPqcew4gR1lm6WhSvNg6qCg5ahLj3siyrsL3k/P
+jHAb6qa68L2kc5HhI29nZ3Iqt4hL/IsWD9UoRS3zRu13A4V68MWRbMMCgYEA5u16
+OamANO1sXyeDTXPOX9HSVXXKZiBsQvkpT6x+tnSIHzsgBaZaDX+myk4B5IF19191
+X5YFzNeIw8PykNZ9+UfchIJvEp11l5z8cGcNYBXCTmW+j62y4llFqKGMS+aP1Q0r
+E1QXhnvRE8SYRWHoDzQ4HLRQT2exuvPum1yCDo8CgYEAsveTxnAWCee3tl8/yBE+
+UjPrFaEeRqNPMw4j3uurwrqENiczb/9TMZ15rWrI0JGTFu/vjTy4cZbyc5ZEDmxe
+hu7I43bLfMj2Em5RF1iDRjnkeuEHhyaDXYRj1x3SBZgQGaWJZSCq2X7Rr1rqMC5E
+TONkZUKtbvvz9fAuyYDYtrcCgYEAsed4Bx4/SAc1OyVcsXmrHwStjusdD4qg/QOp
+QNk6EWQ7ThwlslSTAd066JYqPRlDgV0INqiENWhC09aMc+rayAYFrAw0d9nYswHd
+NNcfZcu9ktotcdE2g8yUrrIuPHcWjeMEMXLSYOfYjesiCCnCNpxbMjnzuQjA0q+E
+PiqJg58CgYAFvkmTfr8Wp3SqmQmw5TuNaRLr1IVk/cMcFjXE3AOFcPuPnYIlJ+L6
+iwxRK85BnWBVkQIMvxrbb2Ro04buiizELRoKsDdkSdYXFSmSOvw1pvT8IpNJjNRU
+AYIHvW6qRLTsSR6BZZS3pqGXYue7fE0vj4HJ2IEpj05qQ5RXrD57Wg==
+-----END RSA PRIVATE KEY-----
diff --git a/enzevalos_iphoneTests/CoreDataTests.swift b/enzevalos_iphoneTests/CoreDataTests.swift
index 1386de55de99d70db3269cc90691135afb542dc4..9d041ae6345f5180efbaa42cd7883e68aaf7cdf2 100644
--- a/enzevalos_iphoneTests/CoreDataTests.swift
+++ b/enzevalos_iphoneTests/CoreDataTests.swift
@@ -104,52 +104,6 @@ class CoraDataTests: XCTestCase {
         }
     }
     
-    // Generate a test secret key
-    func testkey() -> (String){
-        let testsender = createUser()
-        let testkeyID = pgp.generateKey(adr: testsender.mailbox, new: true)
-        return testkeyID
-        
-    }
-    
-    // Test decryption of all undecrypted mails with new secret key
-    func testfindMailForSecretKey() {
-        let testkeyID = testkey()
-        let swiftpgp = SwiftPGP()
-        
-        // E-Mail generieren
-        guard let from = MCOAddress(mailbox: "sender@example.com") else {
-            return
-        }
-        
-        // Create test Mail
-        guard let m1 = testMail(from: from, to: [user], cc: [], bcc: []) else {
-            XCTFail("No test mail")
-            return
-        }
-            
-        // Create Ciphertext
-        let body = "encrypted text"
-        let senderPGP = SwiftPGP()
-        let encryptedObject = senderPGP.encrypt(plaintext: body, ids: [testkeyID], myId: "")
-        XCTAssert(encryptedObject.encryptionState == .ValidedEncryptedWithCurrentKey && encryptedObject.signatureState == .NoSignature)
-
-        guard let cipher = encryptedObject.chiperString else {
-            XCTFail("No chipher data")
-            return
-        }
-        
-        // Change Mail
-        m1.unableToDecrypt = true
-        m1.body = cipher
-        
-        datahandler.save(during: "")
-        
-        swiftpgp.findMailForSecretKey(keyID: testkeyID)
-        XCTAssertEqual(m1.body, "encrypted text")
-        XCTAssertFalse(m1.unableToDecrypt)
-    }
-
     func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress {
         return MCOAddress.init(displayName: name, mailbox: adr.lowercased())
     }
diff --git a/enzevalos_iphoneTests/CryptoTests.swift b/enzevalos_iphoneTests/CryptoTests.swift
index 06cbf1c028d152034c6a43823869733a5ea7082e..36805bf17cc7220add86308c03f96fe706b61ca8 100644
--- a/enzevalos_iphoneTests/CryptoTests.swift
+++ b/enzevalos_iphoneTests/CryptoTests.swift
@@ -610,7 +610,54 @@ class CryptoTests: XCTestCase {
         return mail
     }
     
-    // Not finished yet
+    /**
+     Generate a test secret key
+     */
+    func testkey() -> (String){
+        let testsender = createUser()
+        let testkeyID = pgp.generateKey(adr: testsender.mailbox, new: true)
+        return testkeyID
+    }
+    
+    func testfindMailForSecretKey() {
+        let testkeyID = testkey()
+        
+        // E-Mail generieren
+        guard let from = MCOAddress(mailbox: "sender@example.com") else {
+            return
+        }
+        
+        // Create test Mail
+        guard let m1 = testMail(from: from, to: [user], cc: [], bcc: []) else {
+            XCTFail("No test mail")
+            return
+        }
+            
+        // Create Ciphertext
+        let body = "encrypted text"
+        let senderPGP = SwiftPGP()
+        let encryptedObject = senderPGP.encrypt(plaintext: body, ids: [testkeyID], myId: "")
+        XCTAssert(encryptedObject.encryptionState == .ValidedEncryptedWithCurrentKey && encryptedObject.signatureState == .NoSignature)
+
+        guard let cipher = encryptedObject.chiperString else {
+            XCTFail("No chipher data")
+            return
+        }
+        
+        // Change Mail
+        m1.unableToDecrypt = true
+        m1.body = cipher
+        
+        datahandler.save(during: "")
+        
+        pgp.findMailForSecretKey(keyID: testkeyID)
+        XCTAssertEqual(m1.body, "encrypted text")
+        XCTAssertFalse(m1.unableToDecrypt)
+    }
+    
+    /*
+     !!!!! Not finished yet !!!!!
+     */
     func testfindNotSignedMailForPublicKey() {
         // E-Mail generieren
         guard let from = MCOAddress(mailbox: "alice@example.com") else {
@@ -630,7 +677,7 @@ class CryptoTests: XCTestCase {
             XCTFail("No signed data")
             return
         }
-        guard let publickey = pgp.loadKey(id: mail.firstKey!.keyID)?.publicKey, keys.count > 0 else {
+        guard let _ = pgp.loadKey(id: mail.firstKey!.keyID)?.publicKey, keys.count > 0 else {
             XCTFail("Can not load key")
             return
         }
diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift b/enzevalos_iphoneTests/GeneratedMocks.swift
index 9cfc4fa4db421e9f24f4f0bb26c389574a04d134..3bd98d151c146b68fd67fa6aef4f7e66adfcd6ce 100644
--- a/enzevalos_iphoneTests/GeneratedMocks.swift
+++ b/enzevalos_iphoneTests/GeneratedMocks.swift
@@ -1,4 +1,4 @@
-// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-03-24 10:15:44 +0000
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-04-03 07:21:06 +0000
 
 //
 //  AuthenticationModel.swift
@@ -653,7 +653,7 @@ import Foundation
 }
 
 
-// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-03-24 10:15:44 +0000
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-04-03 07:21:06 +0000
 
 //
 //  AuthenticationViewModel.swift
diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift.orig b/enzevalos_iphoneTests/GeneratedMocks.swift.orig
new file mode 100644
index 0000000000000000000000000000000000000000..cf5117324baf4c1b1874e58c100e08795b5a9c59
--- /dev/null
+++ b/enzevalos_iphoneTests/GeneratedMocks.swift.orig
@@ -0,0 +1,1094 @@
+<<<<<<< HEAD
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-03-31 15:54:34 +0000
+=======
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-03-18 15:11:52 +0000
+>>>>>>> dev
+
+//
+//  AuthenticationModel.swift
+//  enzevalos_iphone
+//
+//  Created by SWP Usable Security für Smartphones on 10.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+import Cuckoo
+@testable import enzevalos_iphone
+
+import Combine
+import Foundation
+
+
+ class MockAuthenticationModel: AuthenticationModel, Cuckoo.ClassMock {
+    
+     typealias MocksType = AuthenticationModel
+    
+     typealias Stubbing = __StubbingProxy_AuthenticationModel
+     typealias Verification = __VerificationProxy_AuthenticationModel
+
+     let cuckoo_manager = Cuckoo.MockManager.preconfiguredManager ?? Cuckoo.MockManager(hasParent: true)
+
+    
+    private var __defaultImplStub: AuthenticationModel?
+
+     func enableDefaultImplementation(_ stub: AuthenticationModel) {
+        __defaultImplStub = stub
+        cuckoo_manager.enableDefaultStubImplementation()
+    }
+    
+
+    
+    
+    
+     override var extendedValidation: Bool {
+        get {
+            return cuckoo_manager.getter("extendedValidation",
+                superclassCall:
+                    
+                    super.extendedValidation
+                    ,
+                defaultCall: __defaultImplStub!.extendedValidation)
+        }
+        
+        set {
+            cuckoo_manager.setter("extendedValidation",
+                value: newValue,
+                superclassCall:
+                    
+                    super.extendedValidation = newValue
+                    ,
+                defaultCall: __defaultImplStub!.extendedValidation = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var imapCallback: AuthenticationCallback? {
+        get {
+            return cuckoo_manager.getter("imapCallback",
+                superclassCall:
+                    
+                    super.imapCallback
+                    ,
+                defaultCall: __defaultImplStub!.imapCallback)
+        }
+        
+        set {
+            cuckoo_manager.setter("imapCallback",
+                value: newValue,
+                superclassCall:
+                    
+                    super.imapCallback = newValue
+                    ,
+                defaultCall: __defaultImplStub!.imapCallback = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var smtpCallback: AuthenticationCallback? {
+        get {
+            return cuckoo_manager.getter("smtpCallback",
+                superclassCall:
+                    
+                    super.smtpCallback
+                    ,
+                defaultCall: __defaultImplStub!.smtpCallback)
+        }
+        
+        set {
+            cuckoo_manager.setter("smtpCallback",
+                value: newValue,
+                superclassCall:
+                    
+                    super.smtpCallback = newValue
+                    ,
+                defaultCall: __defaultImplStub!.smtpCallback = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var imapConfigurationSuccessful: Bool {
+        get {
+            return cuckoo_manager.getter("imapConfigurationSuccessful",
+                superclassCall:
+                    
+                    super.imapConfigurationSuccessful
+                    ,
+                defaultCall: __defaultImplStub!.imapConfigurationSuccessful)
+        }
+        
+        set {
+            cuckoo_manager.setter("imapConfigurationSuccessful",
+                value: newValue,
+                superclassCall:
+                    
+                    super.imapConfigurationSuccessful = newValue
+                    ,
+                defaultCall: __defaultImplStub!.imapConfigurationSuccessful = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var smtpConfigurationSuccessful: Bool {
+        get {
+            return cuckoo_manager.getter("smtpConfigurationSuccessful",
+                superclassCall:
+                    
+                    super.smtpConfigurationSuccessful
+                    ,
+                defaultCall: __defaultImplStub!.smtpConfigurationSuccessful)
+        }
+        
+        set {
+            cuckoo_manager.setter("smtpConfigurationSuccessful",
+                value: newValue,
+                superclassCall:
+                    
+                    super.smtpConfigurationSuccessful = newValue
+                    ,
+                defaultCall: __defaultImplStub!.smtpConfigurationSuccessful = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var dispatchGroup: DispatchGroup {
+        get {
+            return cuckoo_manager.getter("dispatchGroup",
+                superclassCall:
+                    
+                    super.dispatchGroup
+                    ,
+                defaultCall: __defaultImplStub!.dispatchGroup)
+        }
+        
+        set {
+            cuckoo_manager.setter("dispatchGroup",
+                value: newValue,
+                superclassCall:
+                    
+                    super.dispatchGroup = newValue
+                    ,
+                defaultCall: __defaultImplStub!.dispatchGroup = newValue)
+        }
+        
+    }
+    
+
+    
+
+    
+    
+    
+     override func checkConfig(mailAccount: MailAccount, extendedValidation: Bool) -> Future<AuthenticationResult, Never> {
+        
+    return cuckoo_manager.call("checkConfig(mailAccount: MailAccount, extendedValidation: Bool) -> Future<AuthenticationResult, Never>",
+            parameters: (mailAccount, extendedValidation),
+            escapingParameters: (mailAccount, extendedValidation),
+            superclassCall:
+                
+                super.checkConfig(mailAccount: mailAccount, extendedValidation: extendedValidation)
+                ,
+            defaultCall: __defaultImplStub!.checkConfig(mailAccount: mailAccount, extendedValidation: extendedValidation))
+        
+    }
+    
+    
+    
+     override func checkIMAPConfig(mailAccount: MailAccount, _ callback: AuthenticationCallback)  {
+        
+    return cuckoo_manager.call("checkIMAPConfig(mailAccount: MailAccount, _: AuthenticationCallback)",
+            parameters: (mailAccount, callback),
+            escapingParameters: (mailAccount, callback),
+            superclassCall:
+                
+                super.checkIMAPConfig(mailAccount: mailAccount, callback)
+                ,
+            defaultCall: __defaultImplStub!.checkIMAPConfig(mailAccount: mailAccount, callback))
+        
+    }
+    
+    
+    
+     override func checkSMTPConfig(mailAccount: MailAccount, _ callback: AuthenticationCallback)  {
+        
+    return cuckoo_manager.call("checkSMTPConfig(mailAccount: MailAccount, _: AuthenticationCallback)",
+            parameters: (mailAccount, callback),
+            escapingParameters: (mailAccount, callback),
+            superclassCall:
+                
+                super.checkSMTPConfig(mailAccount: mailAccount, callback)
+                ,
+            defaultCall: __defaultImplStub!.checkSMTPConfig(mailAccount: mailAccount, callback))
+        
+    }
+    
+    
+    
+     override func onTimeout(timeoutResult: DispatchTimeoutResult) -> AuthenticationResult {
+        
+    return cuckoo_manager.call("onTimeout(timeoutResult: DispatchTimeoutResult) -> AuthenticationResult",
+            parameters: (timeoutResult),
+            escapingParameters: (timeoutResult),
+            superclassCall:
+                
+                super.onTimeout(timeoutResult: timeoutResult)
+                ,
+            defaultCall: __defaultImplStub!.onTimeout(timeoutResult: timeoutResult))
+        
+    }
+    
+    
+    
+     override func onImapCompleted(imapWorks: Bool, _ login: String, _ password: String)  {
+        
+    return cuckoo_manager.call("onImapCompleted(imapWorks: Bool, _: String, _: String)",
+            parameters: (imapWorks, login, password),
+            escapingParameters: (imapWorks, login, password),
+            superclassCall:
+                
+                super.onImapCompleted(imapWorks: imapWorks, login, password)
+                ,
+            defaultCall: __defaultImplStub!.onImapCompleted(imapWorks: imapWorks, login, password))
+        
+    }
+    
+    
+    
+     override func onSmtpCompleted(smtpWorks: Bool, _ login: String, _ password: String)  {
+        
+    return cuckoo_manager.call("onSmtpCompleted(smtpWorks: Bool, _: String, _: String)",
+            parameters: (smtpWorks, login, password),
+            escapingParameters: (smtpWorks, login, password),
+            superclassCall:
+                
+                super.onSmtpCompleted(smtpWorks: smtpWorks, login, password)
+                ,
+            defaultCall: __defaultImplStub!.onSmtpCompleted(smtpWorks: smtpWorks, login, password))
+        
+    }
+    
+
+	 struct __StubbingProxy_AuthenticationModel: Cuckoo.StubbingProxy {
+	    private let cuckoo_manager: Cuckoo.MockManager
+	
+	     init(manager: Cuckoo.MockManager) {
+	        self.cuckoo_manager = manager
+	    }
+	    
+	    
+	    var extendedValidation: Cuckoo.ClassToBeStubbedProperty<MockAuthenticationModel, Bool> {
+	        return .init(manager: cuckoo_manager, name: "extendedValidation")
+	    }
+	    
+	    
+	    var imapCallback: Cuckoo.ClassToBeStubbedOptionalProperty<MockAuthenticationModel, AuthenticationCallback> {
+	        return .init(manager: cuckoo_manager, name: "imapCallback")
+	    }
+	    
+	    
+	    var smtpCallback: Cuckoo.ClassToBeStubbedOptionalProperty<MockAuthenticationModel, AuthenticationCallback> {
+	        return .init(manager: cuckoo_manager, name: "smtpCallback")
+	    }
+	    
+	    
+	    var imapConfigurationSuccessful: Cuckoo.ClassToBeStubbedProperty<MockAuthenticationModel, Bool> {
+	        return .init(manager: cuckoo_manager, name: "imapConfigurationSuccessful")
+	    }
+	    
+	    
+	    var smtpConfigurationSuccessful: Cuckoo.ClassToBeStubbedProperty<MockAuthenticationModel, Bool> {
+	        return .init(manager: cuckoo_manager, name: "smtpConfigurationSuccessful")
+	    }
+	    
+	    
+	    var dispatchGroup: Cuckoo.ClassToBeStubbedProperty<MockAuthenticationModel, DispatchGroup> {
+	        return .init(manager: cuckoo_manager, name: "dispatchGroup")
+	    }
+	    
+	    
+	    func checkConfig<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(mailAccount: M1, extendedValidation: M2) -> Cuckoo.ClassStubFunction<(MailAccount, Bool), Future<AuthenticationResult, Never>> where M1.MatchedType == MailAccount, M2.MatchedType == Bool {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailAccount, Bool)>] = [wrap(matchable: mailAccount) { $0.0 }, wrap(matchable: extendedValidation) { $0.1 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationModel.self, method: "checkConfig(mailAccount: MailAccount, extendedValidation: Bool) -> Future<AuthenticationResult, Never>", parameterMatchers: matchers))
+	    }
+	    
+	    func checkIMAPConfig<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(mailAccount: M1, _ callback: M2) -> Cuckoo.ClassStubNoReturnFunction<(MailAccount, AuthenticationCallback)> where M1.MatchedType == MailAccount, M2.MatchedType == AuthenticationCallback {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailAccount, AuthenticationCallback)>] = [wrap(matchable: mailAccount) { $0.0 }, wrap(matchable: callback) { $0.1 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationModel.self, method: "checkIMAPConfig(mailAccount: MailAccount, _: AuthenticationCallback)", parameterMatchers: matchers))
+	    }
+	    
+	    func checkSMTPConfig<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(mailAccount: M1, _ callback: M2) -> Cuckoo.ClassStubNoReturnFunction<(MailAccount, AuthenticationCallback)> where M1.MatchedType == MailAccount, M2.MatchedType == AuthenticationCallback {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailAccount, AuthenticationCallback)>] = [wrap(matchable: mailAccount) { $0.0 }, wrap(matchable: callback) { $0.1 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationModel.self, method: "checkSMTPConfig(mailAccount: MailAccount, _: AuthenticationCallback)", parameterMatchers: matchers))
+	    }
+	    
+	    func onTimeout<M1: Cuckoo.Matchable>(timeoutResult: M1) -> Cuckoo.ClassStubFunction<(DispatchTimeoutResult), AuthenticationResult> where M1.MatchedType == DispatchTimeoutResult {
+	        let matchers: [Cuckoo.ParameterMatcher<(DispatchTimeoutResult)>] = [wrap(matchable: timeoutResult) { $0 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationModel.self, method: "onTimeout(timeoutResult: DispatchTimeoutResult) -> AuthenticationResult", parameterMatchers: matchers))
+	    }
+	    
+	    func onImapCompleted<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable>(imapWorks: M1, _ login: M2, _ password: M3) -> Cuckoo.ClassStubNoReturnFunction<(Bool, String, String)> where M1.MatchedType == Bool, M2.MatchedType == String, M3.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(Bool, String, String)>] = [wrap(matchable: imapWorks) { $0.0 }, wrap(matchable: login) { $0.1 }, wrap(matchable: password) { $0.2 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationModel.self, method: "onImapCompleted(imapWorks: Bool, _: String, _: String)", parameterMatchers: matchers))
+	    }
+	    
+	    func onSmtpCompleted<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable>(smtpWorks: M1, _ login: M2, _ password: M3) -> Cuckoo.ClassStubNoReturnFunction<(Bool, String, String)> where M1.MatchedType == Bool, M2.MatchedType == String, M3.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(Bool, String, String)>] = [wrap(matchable: smtpWorks) { $0.0 }, wrap(matchable: login) { $0.1 }, wrap(matchable: password) { $0.2 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationModel.self, method: "onSmtpCompleted(smtpWorks: Bool, _: String, _: String)", parameterMatchers: matchers))
+	    }
+	    
+	}
+
+	 struct __VerificationProxy_AuthenticationModel: Cuckoo.VerificationProxy {
+	    private let cuckoo_manager: Cuckoo.MockManager
+	    private let callMatcher: Cuckoo.CallMatcher
+	    private let sourceLocation: Cuckoo.SourceLocation
+	
+	     init(manager: Cuckoo.MockManager, callMatcher: Cuckoo.CallMatcher, sourceLocation: Cuckoo.SourceLocation) {
+	        self.cuckoo_manager = manager
+	        self.callMatcher = callMatcher
+	        self.sourceLocation = sourceLocation
+	    }
+	
+	    
+	    
+	    var extendedValidation: Cuckoo.VerifyProperty<Bool> {
+	        return .init(manager: cuckoo_manager, name: "extendedValidation", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var imapCallback: Cuckoo.VerifyOptionalProperty<AuthenticationCallback> {
+	        return .init(manager: cuckoo_manager, name: "imapCallback", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var smtpCallback: Cuckoo.VerifyOptionalProperty<AuthenticationCallback> {
+	        return .init(manager: cuckoo_manager, name: "smtpCallback", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var imapConfigurationSuccessful: Cuckoo.VerifyProperty<Bool> {
+	        return .init(manager: cuckoo_manager, name: "imapConfigurationSuccessful", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var smtpConfigurationSuccessful: Cuckoo.VerifyProperty<Bool> {
+	        return .init(manager: cuckoo_manager, name: "smtpConfigurationSuccessful", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var dispatchGroup: Cuckoo.VerifyProperty<DispatchGroup> {
+	        return .init(manager: cuckoo_manager, name: "dispatchGroup", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	
+	    
+	    @discardableResult
+	    func checkConfig<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(mailAccount: M1, extendedValidation: M2) -> Cuckoo.__DoNotUse<(MailAccount, Bool), Future<AuthenticationResult, Never>> where M1.MatchedType == MailAccount, M2.MatchedType == Bool {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailAccount, Bool)>] = [wrap(matchable: mailAccount) { $0.0 }, wrap(matchable: extendedValidation) { $0.1 }]
+	        return cuckoo_manager.verify("checkConfig(mailAccount: MailAccount, extendedValidation: Bool) -> Future<AuthenticationResult, Never>", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func checkIMAPConfig<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(mailAccount: M1, _ callback: M2) -> Cuckoo.__DoNotUse<(MailAccount, AuthenticationCallback), Void> where M1.MatchedType == MailAccount, M2.MatchedType == AuthenticationCallback {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailAccount, AuthenticationCallback)>] = [wrap(matchable: mailAccount) { $0.0 }, wrap(matchable: callback) { $0.1 }]
+	        return cuckoo_manager.verify("checkIMAPConfig(mailAccount: MailAccount, _: AuthenticationCallback)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func checkSMTPConfig<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(mailAccount: M1, _ callback: M2) -> Cuckoo.__DoNotUse<(MailAccount, AuthenticationCallback), Void> where M1.MatchedType == MailAccount, M2.MatchedType == AuthenticationCallback {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailAccount, AuthenticationCallback)>] = [wrap(matchable: mailAccount) { $0.0 }, wrap(matchable: callback) { $0.1 }]
+	        return cuckoo_manager.verify("checkSMTPConfig(mailAccount: MailAccount, _: AuthenticationCallback)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func onTimeout<M1: Cuckoo.Matchable>(timeoutResult: M1) -> Cuckoo.__DoNotUse<(DispatchTimeoutResult), AuthenticationResult> where M1.MatchedType == DispatchTimeoutResult {
+	        let matchers: [Cuckoo.ParameterMatcher<(DispatchTimeoutResult)>] = [wrap(matchable: timeoutResult) { $0 }]
+	        return cuckoo_manager.verify("onTimeout(timeoutResult: DispatchTimeoutResult) -> AuthenticationResult", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func onImapCompleted<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable>(imapWorks: M1, _ login: M2, _ password: M3) -> Cuckoo.__DoNotUse<(Bool, String, String), Void> where M1.MatchedType == Bool, M2.MatchedType == String, M3.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(Bool, String, String)>] = [wrap(matchable: imapWorks) { $0.0 }, wrap(matchable: login) { $0.1 }, wrap(matchable: password) { $0.2 }]
+	        return cuckoo_manager.verify("onImapCompleted(imapWorks: Bool, _: String, _: String)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func onSmtpCompleted<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable>(smtpWorks: M1, _ login: M2, _ password: M3) -> Cuckoo.__DoNotUse<(Bool, String, String), Void> where M1.MatchedType == Bool, M2.MatchedType == String, M3.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(Bool, String, String)>] = [wrap(matchable: smtpWorks) { $0.0 }, wrap(matchable: login) { $0.1 }, wrap(matchable: password) { $0.2 }]
+	        return cuckoo_manager.verify("onSmtpCompleted(smtpWorks: Bool, _: String, _: String)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	}
+}
+
+ class AuthenticationModelStub: AuthenticationModel {
+    
+    
+     override var extendedValidation: Bool {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (Bool).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var imapCallback: AuthenticationCallback? {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (AuthenticationCallback?).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var smtpCallback: AuthenticationCallback? {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (AuthenticationCallback?).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var imapConfigurationSuccessful: Bool {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (Bool).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var smtpConfigurationSuccessful: Bool {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (Bool).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var dispatchGroup: DispatchGroup {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (DispatchGroup).self)
+        }
+        
+        set { }
+        
+    }
+    
+
+    
+
+    
+     override func checkConfig(mailAccount: MailAccount, extendedValidation: Bool) -> Future<AuthenticationResult, Never>  {
+        return DefaultValueRegistry.defaultValue(for: (Future<AuthenticationResult, Never>).self)
+    }
+    
+     override func checkIMAPConfig(mailAccount: MailAccount, _ callback: AuthenticationCallback)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func checkSMTPConfig(mailAccount: MailAccount, _ callback: AuthenticationCallback)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func onTimeout(timeoutResult: DispatchTimeoutResult) -> AuthenticationResult  {
+        return DefaultValueRegistry.defaultValue(for: (AuthenticationResult).self)
+    }
+    
+     override func onImapCompleted(imapWorks: Bool, _ login: String, _ password: String)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func onSmtpCompleted(smtpWorks: Bool, _ login: String, _ password: String)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+}
+
+
+
+ class MockAuthenticationCallback: AuthenticationCallback, Cuckoo.ClassMock {
+    
+     typealias MocksType = AuthenticationCallback
+    
+     typealias Stubbing = __StubbingProxy_AuthenticationCallback
+     typealias Verification = __VerificationProxy_AuthenticationCallback
+
+     let cuckoo_manager = Cuckoo.MockManager.preconfiguredManager ?? Cuckoo.MockManager(hasParent: true)
+
+    
+    private var __defaultImplStub: AuthenticationCallback?
+
+     func enableDefaultImplementation(_ stub: AuthenticationCallback) {
+        __defaultImplStub = stub
+        cuckoo_manager.enableDefaultStubImplementation()
+    }
+    
+
+    
+    
+    
+     override var callback: ((Bool, String, String) -> Void)? {
+        get {
+            return cuckoo_manager.getter("callback",
+                superclassCall:
+                    
+                    super.callback
+                    ,
+                defaultCall: __defaultImplStub!.callback)
+        }
+        
+        set {
+            cuckoo_manager.setter("callback",
+                value: newValue,
+                superclassCall:
+                    
+                    super.callback = newValue
+                    ,
+                defaultCall: __defaultImplStub!.callback = newValue)
+        }
+        
+    }
+    
+
+    
+
+    
+    
+    
+     override func onResult(worked: Bool, login: String, password: String)  {
+        
+    return cuckoo_manager.call("onResult(worked: Bool, login: String, password: String)",
+            parameters: (worked, login, password),
+            escapingParameters: (worked, login, password),
+            superclassCall:
+                
+                super.onResult(worked: worked, login: login, password: password)
+                ,
+            defaultCall: __defaultImplStub!.onResult(worked: worked, login: login, password: password))
+        
+    }
+    
+
+	 struct __StubbingProxy_AuthenticationCallback: Cuckoo.StubbingProxy {
+	    private let cuckoo_manager: Cuckoo.MockManager
+	
+	     init(manager: Cuckoo.MockManager) {
+	        self.cuckoo_manager = manager
+	    }
+	    
+	    
+	    var callback: Cuckoo.ClassToBeStubbedOptionalProperty<MockAuthenticationCallback, ((Bool, String, String) -> Void)> {
+	        return .init(manager: cuckoo_manager, name: "callback")
+	    }
+	    
+	    
+	    func onResult<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable>(worked: M1, login: M2, password: M3) -> Cuckoo.ClassStubNoReturnFunction<(Bool, String, String)> where M1.MatchedType == Bool, M2.MatchedType == String, M3.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(Bool, String, String)>] = [wrap(matchable: worked) { $0.0 }, wrap(matchable: login) { $0.1 }, wrap(matchable: password) { $0.2 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationCallback.self, method: "onResult(worked: Bool, login: String, password: String)", parameterMatchers: matchers))
+	    }
+	    
+	}
+
+	 struct __VerificationProxy_AuthenticationCallback: Cuckoo.VerificationProxy {
+	    private let cuckoo_manager: Cuckoo.MockManager
+	    private let callMatcher: Cuckoo.CallMatcher
+	    private let sourceLocation: Cuckoo.SourceLocation
+	
+	     init(manager: Cuckoo.MockManager, callMatcher: Cuckoo.CallMatcher, sourceLocation: Cuckoo.SourceLocation) {
+	        self.cuckoo_manager = manager
+	        self.callMatcher = callMatcher
+	        self.sourceLocation = sourceLocation
+	    }
+	
+	    
+	    
+	    var callback: Cuckoo.VerifyOptionalProperty<((Bool, String, String) -> Void)> {
+	        return .init(manager: cuckoo_manager, name: "callback", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	
+	    
+	    @discardableResult
+	    func onResult<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable>(worked: M1, login: M2, password: M3) -> Cuckoo.__DoNotUse<(Bool, String, String), Void> where M1.MatchedType == Bool, M2.MatchedType == String, M3.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(Bool, String, String)>] = [wrap(matchable: worked) { $0.0 }, wrap(matchable: login) { $0.1 }, wrap(matchable: password) { $0.2 }]
+	        return cuckoo_manager.verify("onResult(worked: Bool, login: String, password: String)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	}
+}
+
+ class AuthenticationCallbackStub: AuthenticationCallback {
+    
+    
+     override var callback: ((Bool, String, String) -> Void)? {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (((Bool, String, String) -> Void)?).self)
+        }
+        
+        set { }
+        
+    }
+    
+
+    
+
+    
+     override func onResult(worked: Bool, login: String, password: String)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+}
+
+
+<<<<<<< HEAD
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-03-31 15:54:34 +0000
+=======
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-03-18 15:11:52 +0000
+>>>>>>> dev
+
+//
+//  AuthenticationViewModel.swift
+//  enzevalos_iphone
+//
+//  Created by SWP Usable Security für Smartphones on 02.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+import Cuckoo
+@testable import enzevalos_iphone
+
+import Combine
+import Foundation
+
+
+ class MockAuthenticationViewModel: AuthenticationViewModel, Cuckoo.ClassMock {
+    
+     typealias MocksType = AuthenticationViewModel
+    
+     typealias Stubbing = __StubbingProxy_AuthenticationViewModel
+     typealias Verification = __VerificationProxy_AuthenticationViewModel
+
+     let cuckoo_manager = Cuckoo.MockManager.preconfiguredManager ?? Cuckoo.MockManager(hasParent: true)
+
+    
+    private var __defaultImplStub: AuthenticationViewModel?
+
+     func enableDefaultImplementation(_ stub: AuthenticationViewModel) {
+        __defaultImplStub = stub
+        cuckoo_manager.enableDefaultStubImplementation()
+    }
+    
+
+    
+    
+    
+     override var errorMessage: String? {
+        get {
+            return cuckoo_manager.getter("errorMessage",
+                superclassCall:
+                    
+                    super.errorMessage
+                    ,
+                defaultCall: __defaultImplStub!.errorMessage)
+        }
+        
+        set {
+            cuckoo_manager.setter("errorMessage",
+                value: newValue,
+                superclassCall:
+                    
+                    super.errorMessage = newValue
+                    ,
+                defaultCall: __defaultImplStub!.errorMessage = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var isDetailedAuthentication: Bool {
+        get {
+            return cuckoo_manager.getter("isDetailedAuthentication",
+                superclassCall:
+                    
+                    super.isDetailedAuthentication
+                    ,
+                defaultCall: __defaultImplStub!.isDetailedAuthentication)
+        }
+        
+        set {
+            cuckoo_manager.setter("isDetailedAuthentication",
+                value: newValue,
+                superclassCall:
+                    
+                    super.isDetailedAuthentication = newValue
+                    ,
+                defaultCall: __defaultImplStub!.isDetailedAuthentication = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var showProgressSpinner: Bool {
+        get {
+            return cuckoo_manager.getter("showProgressSpinner",
+                superclassCall:
+                    
+                    super.showProgressSpinner
+                    ,
+                defaultCall: __defaultImplStub!.showProgressSpinner)
+        }
+        
+        set {
+            cuckoo_manager.setter("showProgressSpinner",
+                value: newValue,
+                superclassCall:
+                    
+                    super.showProgressSpinner = newValue
+                    ,
+                defaultCall: __defaultImplStub!.showProgressSpinner = newValue)
+        }
+        
+    }
+    
+    
+    
+     override var cancellable: AnyCancellable? {
+        get {
+            return cuckoo_manager.getter("cancellable",
+                superclassCall:
+                    
+                    super.cancellable
+                    ,
+                defaultCall: __defaultImplStub!.cancellable)
+        }
+        
+        set {
+            cuckoo_manager.setter("cancellable",
+                value: newValue,
+                superclassCall:
+                    
+                    super.cancellable = newValue
+                    ,
+                defaultCall: __defaultImplStub!.cancellable = newValue)
+        }
+        
+    }
+    
+
+    
+
+    
+    
+    
+     override func validate(_ login: String, _ password: String)  {
+        
+    return cuckoo_manager.call("validate(_: String, _: String)",
+            parameters: (login, password),
+            escapingParameters: (login, password),
+            superclassCall:
+                
+                super.validate(login, password)
+                ,
+            defaultCall: __defaultImplStub!.validate(login, password))
+        
+    }
+    
+    
+    
+     override func detailValidation(_ login: String, _ password: String, _ username: String, _ imapServer: String, _ imapPort: String, _ imapEncryption: Int, _ smtpServer: String, _ smtpPort: String, _ smtpEncryption: Int)  {
+        
+    return cuckoo_manager.call("detailValidation(_: String, _: String, _: String, _: String, _: String, _: Int, _: String, _: String, _: Int)",
+            parameters: (login, password, username, imapServer, imapPort, imapEncryption, smtpServer, smtpPort, smtpEncryption),
+            escapingParameters: (login, password, username, imapServer, imapPort, imapEncryption, smtpServer, smtpPort, smtpEncryption),
+            superclassCall:
+                
+                super.detailValidation(login, password, username, imapServer, imapPort, imapEncryption, smtpServer, smtpPort, smtpEncryption)
+                ,
+            defaultCall: __defaultImplStub!.detailValidation(login, password, username, imapServer, imapPort, imapEncryption, smtpServer, smtpPort, smtpEncryption))
+        
+    }
+    
+    
+    
+     override func startGoogleOauth()  {
+        
+    return cuckoo_manager.call("startGoogleOauth()",
+            parameters: (),
+            escapingParameters: (),
+            superclassCall:
+                
+                super.startGoogleOauth()
+                ,
+            defaultCall: __defaultImplStub!.startGoogleOauth())
+        
+    }
+    
+    
+    
+     override func authenticationSucceed()  {
+        
+    return cuckoo_manager.call("authenticationSucceed()",
+            parameters: (),
+            escapingParameters: (),
+            superclassCall:
+                
+                super.authenticationSucceed()
+                ,
+            defaultCall: __defaultImplStub!.authenticationSucceed())
+        
+    }
+    
+    
+    
+     override func authenticationFailed(error: MailServerConnectionError)  {
+        
+    return cuckoo_manager.call("authenticationFailed(error: MailServerConnectionError)",
+            parameters: (error),
+            escapingParameters: (error),
+            superclassCall:
+                
+                super.authenticationFailed(error: error)
+                ,
+            defaultCall: __defaultImplStub!.authenticationFailed(error: error))
+        
+    }
+    
+    
+    
+     override func timeoutNotification()  {
+        
+    return cuckoo_manager.call("timeoutNotification()",
+            parameters: (),
+            escapingParameters: (),
+            superclassCall:
+                
+                super.timeoutNotification()
+                ,
+            defaultCall: __defaultImplStub!.timeoutNotification())
+        
+    }
+    
+
+	 struct __StubbingProxy_AuthenticationViewModel: Cuckoo.StubbingProxy {
+	    private let cuckoo_manager: Cuckoo.MockManager
+	
+	     init(manager: Cuckoo.MockManager) {
+	        self.cuckoo_manager = manager
+	    }
+	    
+	    
+	    var errorMessage: Cuckoo.ClassToBeStubbedOptionalProperty<MockAuthenticationViewModel, String> {
+	        return .init(manager: cuckoo_manager, name: "errorMessage")
+	    }
+	    
+	    
+	    var isDetailedAuthentication: Cuckoo.ClassToBeStubbedProperty<MockAuthenticationViewModel, Bool> {
+	        return .init(manager: cuckoo_manager, name: "isDetailedAuthentication")
+	    }
+	    
+	    
+	    var showProgressSpinner: Cuckoo.ClassToBeStubbedProperty<MockAuthenticationViewModel, Bool> {
+	        return .init(manager: cuckoo_manager, name: "showProgressSpinner")
+	    }
+	    
+	    
+	    var cancellable: Cuckoo.ClassToBeStubbedOptionalProperty<MockAuthenticationViewModel, AnyCancellable> {
+	        return .init(manager: cuckoo_manager, name: "cancellable")
+	    }
+	    
+	    
+	    func validate<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(_ login: M1, _ password: M2) -> Cuckoo.ClassStubNoReturnFunction<(String, String)> where M1.MatchedType == String, M2.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(String, String)>] = [wrap(matchable: login) { $0.0 }, wrap(matchable: password) { $0.1 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationViewModel.self, method: "validate(_: String, _: String)", parameterMatchers: matchers))
+	    }
+	    
+	    func detailValidation<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable, M4: Cuckoo.Matchable, M5: Cuckoo.Matchable, M6: Cuckoo.Matchable, M7: Cuckoo.Matchable, M8: Cuckoo.Matchable, M9: Cuckoo.Matchable>(_ login: M1, _ password: M2, _ username: M3, _ imapServer: M4, _ imapPort: M5, _ imapEncryption: M6, _ smtpServer: M7, _ smtpPort: M8, _ smtpEncryption: M9) -> Cuckoo.ClassStubNoReturnFunction<(String, String, String, String, String, Int, String, String, Int)> where M1.MatchedType == String, M2.MatchedType == String, M3.MatchedType == String, M4.MatchedType == String, M5.MatchedType == String, M6.MatchedType == Int, M7.MatchedType == String, M8.MatchedType == String, M9.MatchedType == Int {
+	        let matchers: [Cuckoo.ParameterMatcher<(String, String, String, String, String, Int, String, String, Int)>] = [wrap(matchable: login) { $0.0 }, wrap(matchable: password) { $0.1 }, wrap(matchable: username) { $0.2 }, wrap(matchable: imapServer) { $0.3 }, wrap(matchable: imapPort) { $0.4 }, wrap(matchable: imapEncryption) { $0.5 }, wrap(matchable: smtpServer) { $0.6 }, wrap(matchable: smtpPort) { $0.7 }, wrap(matchable: smtpEncryption) { $0.8 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationViewModel.self, method: "detailValidation(_: String, _: String, _: String, _: String, _: String, _: Int, _: String, _: String, _: Int)", parameterMatchers: matchers))
+	    }
+	    
+	    func startGoogleOauth() -> Cuckoo.ClassStubNoReturnFunction<()> {
+	        let matchers: [Cuckoo.ParameterMatcher<Void>] = []
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationViewModel.self, method: "startGoogleOauth()", parameterMatchers: matchers))
+	    }
+	    
+	    func authenticationSucceed() -> Cuckoo.ClassStubNoReturnFunction<()> {
+	        let matchers: [Cuckoo.ParameterMatcher<Void>] = []
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationViewModel.self, method: "authenticationSucceed()", parameterMatchers: matchers))
+	    }
+	    
+	    func authenticationFailed<M1: Cuckoo.Matchable>(error: M1) -> Cuckoo.ClassStubNoReturnFunction<(MailServerConnectionError)> where M1.MatchedType == MailServerConnectionError {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailServerConnectionError)>] = [wrap(matchable: error) { $0 }]
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationViewModel.self, method: "authenticationFailed(error: MailServerConnectionError)", parameterMatchers: matchers))
+	    }
+	    
+	    func timeoutNotification() -> Cuckoo.ClassStubNoReturnFunction<()> {
+	        let matchers: [Cuckoo.ParameterMatcher<Void>] = []
+	        return .init(stub: cuckoo_manager.createStub(for: MockAuthenticationViewModel.self, method: "timeoutNotification()", parameterMatchers: matchers))
+	    }
+	    
+	}
+
+	 struct __VerificationProxy_AuthenticationViewModel: Cuckoo.VerificationProxy {
+	    private let cuckoo_manager: Cuckoo.MockManager
+	    private let callMatcher: Cuckoo.CallMatcher
+	    private let sourceLocation: Cuckoo.SourceLocation
+	
+	     init(manager: Cuckoo.MockManager, callMatcher: Cuckoo.CallMatcher, sourceLocation: Cuckoo.SourceLocation) {
+	        self.cuckoo_manager = manager
+	        self.callMatcher = callMatcher
+	        self.sourceLocation = sourceLocation
+	    }
+	
+	    
+	    
+	    var errorMessage: Cuckoo.VerifyOptionalProperty<String> {
+	        return .init(manager: cuckoo_manager, name: "errorMessage", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var isDetailedAuthentication: Cuckoo.VerifyProperty<Bool> {
+	        return .init(manager: cuckoo_manager, name: "isDetailedAuthentication", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var showProgressSpinner: Cuckoo.VerifyProperty<Bool> {
+	        return .init(manager: cuckoo_manager, name: "showProgressSpinner", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	    
+	    var cancellable: Cuckoo.VerifyOptionalProperty<AnyCancellable> {
+	        return .init(manager: cuckoo_manager, name: "cancellable", callMatcher: callMatcher, sourceLocation: sourceLocation)
+	    }
+	    
+	
+	    
+	    @discardableResult
+	    func validate<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable>(_ login: M1, _ password: M2) -> Cuckoo.__DoNotUse<(String, String), Void> where M1.MatchedType == String, M2.MatchedType == String {
+	        let matchers: [Cuckoo.ParameterMatcher<(String, String)>] = [wrap(matchable: login) { $0.0 }, wrap(matchable: password) { $0.1 }]
+	        return cuckoo_manager.verify("validate(_: String, _: String)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func detailValidation<M1: Cuckoo.Matchable, M2: Cuckoo.Matchable, M3: Cuckoo.Matchable, M4: Cuckoo.Matchable, M5: Cuckoo.Matchable, M6: Cuckoo.Matchable, M7: Cuckoo.Matchable, M8: Cuckoo.Matchable, M9: Cuckoo.Matchable>(_ login: M1, _ password: M2, _ username: M3, _ imapServer: M4, _ imapPort: M5, _ imapEncryption: M6, _ smtpServer: M7, _ smtpPort: M8, _ smtpEncryption: M9) -> Cuckoo.__DoNotUse<(String, String, String, String, String, Int, String, String, Int), Void> where M1.MatchedType == String, M2.MatchedType == String, M3.MatchedType == String, M4.MatchedType == String, M5.MatchedType == String, M6.MatchedType == Int, M7.MatchedType == String, M8.MatchedType == String, M9.MatchedType == Int {
+	        let matchers: [Cuckoo.ParameterMatcher<(String, String, String, String, String, Int, String, String, Int)>] = [wrap(matchable: login) { $0.0 }, wrap(matchable: password) { $0.1 }, wrap(matchable: username) { $0.2 }, wrap(matchable: imapServer) { $0.3 }, wrap(matchable: imapPort) { $0.4 }, wrap(matchable: imapEncryption) { $0.5 }, wrap(matchable: smtpServer) { $0.6 }, wrap(matchable: smtpPort) { $0.7 }, wrap(matchable: smtpEncryption) { $0.8 }]
+	        return cuckoo_manager.verify("detailValidation(_: String, _: String, _: String, _: String, _: String, _: Int, _: String, _: String, _: Int)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func startGoogleOauth() -> Cuckoo.__DoNotUse<(), Void> {
+	        let matchers: [Cuckoo.ParameterMatcher<Void>] = []
+	        return cuckoo_manager.verify("startGoogleOauth()", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func authenticationSucceed() -> Cuckoo.__DoNotUse<(), Void> {
+	        let matchers: [Cuckoo.ParameterMatcher<Void>] = []
+	        return cuckoo_manager.verify("authenticationSucceed()", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func authenticationFailed<M1: Cuckoo.Matchable>(error: M1) -> Cuckoo.__DoNotUse<(MailServerConnectionError), Void> where M1.MatchedType == MailServerConnectionError {
+	        let matchers: [Cuckoo.ParameterMatcher<(MailServerConnectionError)>] = [wrap(matchable: error) { $0 }]
+	        return cuckoo_manager.verify("authenticationFailed(error: MailServerConnectionError)", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	    @discardableResult
+	    func timeoutNotification() -> Cuckoo.__DoNotUse<(), Void> {
+	        let matchers: [Cuckoo.ParameterMatcher<Void>] = []
+	        return cuckoo_manager.verify("timeoutNotification()", callMatcher: callMatcher, parameterMatchers: matchers, sourceLocation: sourceLocation)
+	    }
+	    
+	}
+}
+
+ class AuthenticationViewModelStub: AuthenticationViewModel {
+    
+    
+     override var errorMessage: String? {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (String?).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var isDetailedAuthentication: Bool {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (Bool).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var showProgressSpinner: Bool {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (Bool).self)
+        }
+        
+        set { }
+        
+    }
+    
+    
+     override var cancellable: AnyCancellable? {
+        get {
+            return DefaultValueRegistry.defaultValue(for: (AnyCancellable?).self)
+        }
+        
+        set { }
+        
+    }
+    
+
+    
+
+    
+     override func validate(_ login: String, _ password: String)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func detailValidation(_ login: String, _ password: String, _ username: String, _ imapServer: String, _ imapPort: String, _ imapEncryption: Int, _ smtpServer: String, _ smtpPort: String, _ smtpEncryption: Int)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func startGoogleOauth()   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func authenticationSucceed()   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func authenticationFailed(error: MailServerConnectionError)   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+     override func timeoutNotification()   {
+        return DefaultValueRegistry.defaultValue(for: (Void).self)
+    }
+    
+}
+
diff --git a/enzevalos_iphoneTests/SMIMETests.swift b/enzevalos_iphoneTests/SMIMETests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..bda280b0d273139922ef084ca58ab5122bbfbea3
--- /dev/null
+++ b/enzevalos_iphoneTests/SMIMETests.swift
@@ -0,0 +1,452 @@
+//
+//  SMIMETests.swift
+//  enzevalos_iphoneTests
+//
+//  Created by lazarog98 on 31.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import XCTest
+
+@testable import enzevalos_iphone
+class SMIMETests: XCTestCase {
+    let test_key = """
+Bag Attributes
+    friendlyName: myKey
+    localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30
+Key Attributes: <No Attributes>
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCUFDosMJHlsuIb
+ot/2FE4qXg388BqaEtkuJ8Ea18nzMXTT6dYH53wAfIt33OwqxEFpcrN3GndhRJTk
+g68wmTvSFP23tVKWNk1SJOZAlEJJH8Q2wKTnt4Bh6y3XEXxZ3csgNM+BL3jItD+l
+FZviSkqQyGreXZ+XnQPHRYH0IpzQ8cq7obJnzKMFsVsVltSJDLijUWR8K54lciCo
+smz+3bKonCy1hYjuQB/3JEQlWb8Ij4ZiMtUn9Iju/8XnIuspkay83ktUyz7hYAld
+K3yvn+tsrOepr98n+aU6bGJSYrbv76R+xpBp2ryRoFbbuzy7wdL8afQJDemKcMQI
+87ra30mxAgMBAAECggEAAKj11iqggNixyS1KJcyIVBLOSZ0Cmlfoica7CwEF7SMr
+RefxjeBsUSEnpZDu6Mp42eo9O76lhEcyvxwUOsweYWjPFXDjLt4Wt8MIN3FtuZ9A
+5TH+6NU8nFBzeFVIrmAb+ASXku1krVIqg98Uo6RgqxQ9791/a594mTHBgwvTMqYf
+1024bF9ImI/GhIbzPeX2lrbzHq+HZ6jXg/Jjx0QWfYhyTPqvvCUhyiY0WBvelsQH
+orlh7IhnSyFQ6FqgPXzoYWOmHqXODUmmCS6nMct5hRq3Fagvr8aNp2wD6FoYuJGd
+FSvIwX+ZMNgzObNA4flY7TfplOaTl6PV6H+KGJ14wQKBgQDEV1hRuKGPB27BH40x
+pu0lRmgE/5pdz2Vbg6AuRelZEVCKju33tvXhNrzhPj85jRCPNMPFWQJPlJsQ7lB8
+wEANc1PnLffxfwBFs7ke1h3qs6WBkKVtVxXDed1SsMkZ3CmVotSIp3fLzbl9SMYv
+Pih3arKI0wwTV8i4Ort5QNyOwQKBgQDBEr7x684we+rISodiDZATmX7fAw490M2u
+KQHC3hmAB0Y6htx4E2ti7jNtzV95XkBoW3vShC75xDIZJwXM+yVxYZRQ3dcEMmE7
+yR+npAI6pFZGBTsAs9mXUP+JIQVwKbNpTH8x2klb6ylXGJvFFGAhwq4ni4lf1xls
+s7x93Vxm8QKBgQCVgCSh5UIvVGuC5fFu8znzfg7Kb44tDDSTYEBhu54Y0dRQDNEq
+I8hJepKLuAgQXFdVk8nVxRa7Xd5NIAltVD3xf/VNPHVlD103tcepsUQKaEwHwgoU
+nZDWzT43LqGR7VBEvj2y6EGRj85DlVxCsMPDWh0jjf/N4rPVg/MoOrk2gQKBgQCS
+HRquQLNJE+5pZ6WvOe5oNsjCAzD67RNLEzOHAsgvkNHAJyGgKaoiM3xuQ3dWhVKe
+52T8uxZF5Qm46URFjWcXuC4jSM+ZGHtnYFz5ZHBfatDzqq+tZ25rSlworfnMmXJy
+ZPb5hmXwDza4+CGiczoRMqDTwpDTHBjcn+UtJ6HvMQKBgACDZQgWdYXLrGl6qB6A
+X0Xb6hoEuz7BeP+ZW3tspyjySLe8SXDf8QXQXvyfivo1N3VxbWuTSf/e4U2SqXXH
++/kFUS+KgKMKWefR+MJ3+Do8AGf4lrqf9AsSnrTtLskuS9aab9lZ1Mm/Q4P79K2J
+eforhMXYki+DqiwhRf6Q3rxF
+-----END PRIVATE KEY-----
+Bag Attributes
+    friendlyName: myKey
+    localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30
+subject=C = DE, O = A MAILTEST, CN = myKey
+
+issuer=C = DE, O = A MAILTEST, CN = myTestCA
+
+-----BEGIN CERTIFICATE-----
+MIIDpzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X
+DTIwMDMwNTEzMzUxNVoXDTQwMDIyOTEzMzUxMVowMjELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ
+8zF00+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRC
+SR/ENsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc
+0PHKu6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/
+CI+GYjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK2
+7++kfsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsG
+A1UdEQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95za
+SSmuP0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpY
+FZxKcDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwK
+QSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3
+DQEBCwUAA4IBAQAvIknw5G8YV85/5LR90tCocane3jse5gE9AEoqSWDUemfnhmJd
+MOOMjZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU
+5sIU7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nn
+xq9K9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxh
+cNFLTtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7
+XFB7TFYvphnuQZKw5mG0FNyADnP0CgGPobTI
+-----END CERTIFICATE-----
+Bag Attributes: <Empty Attributes>
+subject=C = DE, O = A MAILTEST, CN = myTestCA
+
+issuer=C = DE, O = A MAILTEST, CN = myTestCA
+
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz
+MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF
+xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4
+Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI
+j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk
+RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x
+GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu
+/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx
+t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR
+jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK
+5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf
+n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg==
+-----END CERTIFICATE-----
+"""
+    
+    var testCA = """
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz
+MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF
+xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4
+Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI
+j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk
+RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x
+GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu
+/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx
+t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR
+jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK
+5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf
+n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg==
+-----END CERTIFICATE-----
+"""
+    
+    var testEvilCA = """
+-----BEGIN CERTIFICATE-----
+MIIC4TCCAckCCDWaS3dso6D3MA0GCSqGSIb3DQEBCwUAMDMxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMQ8wDQYDVQQDDAZldmlsQ0EwHhcNMTkwNzI5
+MTUzODA1WhcNMTkwODA1MTUzODA1WjAzMQswCQYDVQQGEwJERTETMBEGA1UECgwK
+QSBNQUlMVEVTVDEPMA0GA1UEAwwGZXZpbENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAv0W8s3Dav5brYO+MZQ+DiNPSf0Mgd6g6zR1vdk+sPTuJbAZ2
+owxR376WKEayBp3jF3omitej4ltuAoepQ7xgsFLVJDijAxeLeoAzPc+J8qDcY1NF
+4up9+DpN7L0L3rgfU0/I8Az4jpR8pHJTHmu0L074Er5+Vk2cBvxSY3srp2NnEga1
+Fudun9YUYfOp432Ac7xv/6KYz99ocbI+F/egnHQm49GnyFs1zxCuh9qfTeCFO644
+dUlkMXfQF7sdZmxdxwKIF4D8AroAecFXWei4PtNIJpPvr/UdCBIyEmZroL2fMnPg
+zMtChlEG5Ryw7UuwKrQGs903n3nxvopr4mOumwIDAQABMA0GCSqGSIb3DQEBCwUA
+A4IBAQCFnuNL7hhJjhvPpeMPFahMdadA1OWRLIe0XdAJI8Pvlx3f8XR5udcGS2Mi
+r5znDhWHT5fFyYTj0JZQUf5GaYrucZDh2M2lXzuazhh5J+PSgvMez1fqfC0pp3Iy
+IIqIxZCzGaZp9A7CkAO1qyDqM3fAtkJ0f6JoIrUN9Q4PphDpi6vlRDIoHROmK/Xr
+QVzf2Y0lnKGQisw048XPLWqGagu8ZO0n6GMmyldnwVDEsQomndWDrW0EHEV2s/fq
+bgvyhVRenp1O5IH3nOyXm8vR2FWOEHwR686l8Mxy24APzzn5K7nPeyBx0+ZpyqYh
+aqQKdT1pty4gKWz3zSNTupVsyA/t
+-----END CERTIFICATE-----
+"""
+
+    var test_key_other = """
+-----BEGIN CERTIFICATE-----
+MIIDsDCCApigAwIBAgIIAUuththJ3rkwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X
+DTE5MDczMDE0MTM0MloXDTE5MDgwNjE0MTM0MlowNjELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxEjAQBgNVBAMMCW90aGVya2V5MTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAOaXgg4cD8V2Fg/n6v/YuHsOTa7vlrSragOa
+eVwcYzAATRIQAP6suakRkr5D2a3u2N+EBOawCvZPeQZwZMtKpnEdIKdkmUi/OYMS
+y6D7xRL/MizwsNP/YvRfwByPmYRo30YCwLeJEEIlPDw5zwfIiqyl31mOrx+5eebv
+t83TCJzU7ORZv/OqFEwGt4FcWk8FydmOJxW3My3A2GUWPOmnrvOGamRoKkN/O7xO
+9qaQSkRWhuyb6R3EIDo0WfsM263aEhbVHOsCk7PAtzgW18+3qvK5ZrENk3B+F3+2
+fh1Qola266kX6/ZbB+/eOPJlWBh2NZHhBZ+Z/wr69tCSTJ80au0CAwEAAaOBwjCB
+vzAgBgNVHREEGTAXgRVvdGhlcmFjY0BkcmVuZ2Vscy5uZXQwKQYDVR0OBCIEIGAb
+47YtbmauxZ5hYka1/wYF9xh8+pJ+Zc0eRqkrgbeNMHAGA1UdIwRpMGeAILLLgvdd
+qVj9AJE8CrP9PYeShvHigM+CczpLs9EYh+bkoTmkNzA1MQswCQYDVQQGEwJERTET
+MBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCKtx6aDujfcT
+MA0GCSqGSIb3DQEBCwUAA4IBAQCaaBwEyegcUwTsHFiZGq64tvhRBNdiaXIGZk64
++Jw+FyfgcMp80VIhAdKuPtodtMWRQFl6F7xI3Gkvhosv73jWSwl05iGvxFWN0wNr
+N2nZ8JPCHNqQQkuGaHEM3B591EifrswGLhIaoSihHIBFlBx6e0fgBmSTHYbx9usI
+XyjDyGWkq0z72KGjifqow6zZKDFeX2Br3K1hP2V2ObnVkL+Arj+lBConkD+Ja9fa
+vfbCKFRMmniHBSKcaTdHu/yzFaS8zGdWaMXIVzidPrIpqiv4KC2iVWqizZX3u6ej
+nVDuRRggGA08TMPaJa3ziQo+zcjFkeHyd+7vw1w7ogSPlwx8
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCKtx6aDujfcTMA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0xOTA3
+MjkxNTM4MDRaFw0xOTA4MDUxNTM4MDRaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKJOatbPDL3lw/7tqeugaRHxqMgx7/DOLdSnDnK66Eys
+GrFcp43N3tQL+0rm77tz/jcyVkHAZF9Sv1c/tIZay/J975cbpHPMraJVbM+/mL6f
+14wrwU4rAJLILDkZ3HqkKKnrGmfoKrB1RZ9LA+NLtQlfiuP4C8Et7bOZOkuGdq0T
+aygotW0ELeQPbVWXV/GcP6Xd0FnKQF7m9ioRn9MKxu4VDm3hSKDtN1zyXQ1HXhQV
+/UGODSaFyUgoCTnz7kFcF3hY9Dw7M55CCM3U0PnfxuxUdn8qMH1lym/G5K5xaVLV
+fCjsly8GUUfHtls3Y0F7c6NE5CPkjub2HNNdCW+JD0ECAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAAAVXNPtXVaUP9k2wNZAw4hOKp5n0EdeOkmtMdedvuQF39d+cHJkL
+HjyTp3zd22S1EbgFgNB6RPlRPXie4aivcDGSAGc88NF2xEOezbLZr30x/KAc94OG
+ssKjin+X8aMoZSppUxVHI1j6gzydvEWhVBIRUjgd4F5uiV+TBOAOj39xGkpCXIBg
+bLRdalYjzxWYb5cR5qniCVbKrRg2oQWghStEuuRTww9SQIeSerb0lqHF3gaL82pG
+F4K1I0HbAXgq/D+xIj6lbqZlchI8a4qQq2Ic75yTP/3Nt/Ls6Dt17eT6O+tA9W4e
+tag/vFWjhTwGBIjjvyrjTM3fwvUN3HIZeg==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA5peCDhwPxXYWD+fq/9i4ew5Nru+WtKtqA5p5XBxjMABNEhAA
+/qy5qRGSvkPZre7Y34QE5rAK9k95BnBky0qmcR0gp2SZSL85gxLLoPvFEv8yLPCw
+0/9i9F/AHI+ZhGjfRgLAt4kQQiU8PDnPB8iKrKXfWY6vH7l55u+3zdMInNTs5Fm/
+86oUTAa3gVxaTwXJ2Y4nFbczLcDYZRY86aeu84ZqZGgqQ387vE72ppBKRFaG7Jvp
+HcQgOjRZ+wzbrdoSFtUc6wKTs8C3OBbXz7eq8rlmsQ2TcH4Xf7Z+HVCiVrbrqRfr
+9lsH79448mVYGHY1keEFn5n/Cvr20JJMnzRq7QIDAQABAoIBADUXMwFuoo7zFjdJ
+TUjkq+zhKS+ayBcG1FzKByEXBBs8JoJ/HsuEFyb+/ctCse6i7Fnh+oLmi0+UkqfR
+3tMTd+jZLPh9Z/Fg3av4+tswvHoYOYQxUnUs+qqLFR8+TLk4sBddcOOQ8iZYjlrL
+cIg5OvxvIFJtUJK8UH3EOYxxBy2cRHw44Fg54E0CpI3LDympYUnkT6YBB+MddqF5
+mvo85XO2WoN6m+JbVvS/jDBEI707ggAjKqHoomyzEQB0lrvksPtYfUuhGqfFRrdY
+nHAfH4Nxrv4FB61GldyNBphQFpMYEtOwSGLSXEaMzHPrmaAegQminJBuQaODKCeh
+IVht6d0CgYEA/6CyWfkHRRmAV/hm1fndZLcZ3oN2JIJjznZbB0R1IuaXTl7kbXvA
+mdEeLD9OJayhbSIkpBSs7g8NsHPqcew4gR1lm6WhSvNg6qCg5ahLj3siyrsL3k/P
+jHAb6qa68L2kc5HhI29nZ3Iqt4hL/IsWD9UoRS3zRu13A4V68MWRbMMCgYEA5u16
+OamANO1sXyeDTXPOX9HSVXXKZiBsQvkpT6x+tnSIHzsgBaZaDX+myk4B5IF19191
+X5YFzNeIw8PykNZ9+UfchIJvEp11l5z8cGcNYBXCTmW+j62y4llFqKGMS+aP1Q0r
+E1QXhnvRE8SYRWHoDzQ4HLRQT2exuvPum1yCDo8CgYEAsveTxnAWCee3tl8/yBE+
+UjPrFaEeRqNPMw4j3uurwrqENiczb/9TMZ15rWrI0JGTFu/vjTy4cZbyc5ZEDmxe
+hu7I43bLfMj2Em5RF1iDRjnkeuEHhyaDXYRj1x3SBZgQGaWJZSCq2X7Rr1rqMC5E
+TONkZUKtbvvz9fAuyYDYtrcCgYEAsed4Bx4/SAc1OyVcsXmrHwStjusdD4qg/QOp
+QNk6EWQ7ThwlslSTAd066JYqPRlDgV0INqiENWhC09aMc+rayAYFrAw0d9nYswHd
+NNcfZcu9ktotcdE2g8yUrrIuPHcWjeMEMXLSYOfYjesiCCnCNpxbMjnzuQjA0q+E
+PiqJg58CgYAFvkmTfr8Wp3SqmQmw5TuNaRLr1IVk/cMcFjXE3AOFcPuPnYIlJ+L6
+iwxRK85BnWBVkQIMvxrbb2Ro04buiizELRoKsDdkSdYXFSmSOvw1pvT8IpNJjNRU
+AYIHvW6qRLTsSR6BZZS3pqGXYue7fE0vj4HJ2IEpj05qQ5RXrD57Wg==
+-----END RSA PRIVATE KEY-----
+"""
+     
+    let att_sig_invalid = """
+MIME-Version: 1.0
+Content-Disposition: attachment; filename="smime.p7m"
+Content-Type: application/pkcs7-mime; smime-type=signed-data; name="smime.p7m"
+Content-Transfer-Encoding: base64
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDTALBglghkgBZQMEAgEwgAYJKoZIhvcNAQcB
+oIAkgAQdSGVsbG8gd29ybGQgd2hhdGV2ZXIgdGhlIGZ1Y2sAAAAAAACgggOrMIID
+pzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UEBhMC
+REUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4XDTIw
+MDMwNTEzMzUxNVoXDTQwMDIyABCzMzUxMVowMjELMAkGA1UEBhMCREUxEzARBgNV
+BAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ8zF0
+0+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRCSR/E
+NsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc0PHK
+u6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/CI+G
+YjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK27++k
+fsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsGA1Ud
+EQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95zaSSmu
+P0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpYFZxK
+cDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwKQSBN
+QUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3DQEB
+CwUAA4IBAQAvIknw5G8YV85/5LR90tCocainejse5gE9AEoqSWDUemfnhmJdMOOM
+jZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU5sIU
+7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nnxq9K
+9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxhcNFL
+TtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7XFB7
+TFYvphnuQZKw5mG0FNyADnP0CgGPobTIMYICUTCCAk0CAQEwQTA1MQswCQYDVQQG
+EwJERTETMBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0ECCJDK
+KbrlDPTeMAsGCWCGSAFlAwQCAaCB5DAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB
+MBwGCSqGSIb3DQEJBTEPFw0yMDAzMzExMTI2MDlaMC8GCSqGSIb3DQEJBDEiBCCE
+OK7BZ1gJUVMov9b6uJu/b4WfYqzmzgJ0a2czduMPvTB5BgkqhkiG9w0BCQ8xbDBq
+MAsGCWCGSAFlAwQBKjALBglghkgBZQMEARYwCwYJYIZIAWUDBAECMAoGCCqGSIb3
+DQMHMA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggq
+hkiG9w0DAgIBKDANBgkqhkiG9w0BAQEFAASCAQApVxIN94BLteGD40M/GgT21C29
+7+rtEInq+dkB6XPEHC1GowgMZA9VPFrj0xenkj1qpZvqHcwNSjukz6Y8U4we9EzG
+dZY6sEVhuoEct5TXznciLNarhikhqmqxmQvVy+G5w7AiQBrd7zePDI0PJ8AKoinR
+klsTYRIi2JPBgcsoCRtxQqTLmFQNKtF5vJDTrv8Y42Gue+elTYTHhJi6bj4Yp9+T
+qFj7X3hz0XayCj/CPiyGdJcaQvjIbDVI2cE0pY0jaIIJrIRVkPyLxieKBQYfUp/b
+KzZCr1wZb2W1JA+vTk7/wHp33Jll0EZ4DV0BgmeSmnXknJM3wZVAa1z7e5o0AAAA
+AAAA
+"""
+    
+    let det_sig_invalid = """
+------56F3BC21B2CE83EB9E02E24139D860BC
+Hello world whatever the fuckaaDadaDAd
+------56F3BC21B2CE83EB9E02E24139D860BC
+Content-Type: application/pkcs7-signature; name="smime.p7s"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+
+MIIGNgYJKoZIhvcNAQcCoIIGJzCCBiMCAQExDTALBglghkgBZQMEAgEwCwYJKoZI
+hvcNAQcBoIIDqzCCA6cwggKPoAMCAQICCJDKKbrlDPTeMA0GCSqGSIb3DQEBCwUA
+MDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAht
+eVRlc3RDQTAeFw0yMDAzMDUxMzM1MTVaFw00MDAyMjkxMzM1MTFaMDIxCzAJBgNV
+BAYTAkRFMRMwEQYDVQQKDApBIE1BSUxURVNUMQ4wDAYDVQQDDAVteUtleTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJQUOiwwkeWy4hui3/YUTipeDfzw
+GpoS2S4nwRrXyfMxdNPp1gfnfAB8i3fc7CrEQWlys3cad2FElOSDrzCZO9IU/be1
+UpY2TVIk5kCUQkkfxDbApOe3gGHrLdcRfFndyyA0z4EveMi0P6UVm+JKSpDIat5d
+n5edA8dFgfQinNDxyruhsmfMowWxWxWW1IkMuKNRZHwrniVyIKiybP7dsqicLLWF
+iO5AH/ckRCVZvwiPhmIy1Sf0iO7/xeci6ymRrLzeS1TLPuFgCV0rfK+f62ys56mv
+3yf5pTpsYlJitu/vpH7GkGnavJGgVtu7PLvB0vxp9AkN6YpwxAjzutrfSbECAwEA
+AaOBvTCBujAbBgNVHREEFDASgRB1bGxpbXVlbGxAd2ViLmRlMCkGA1UdDgQiBCD9
+HiCz+K9Fjfec2kkprj9Ms7P1XYd96wGmtAd7Yhhe0jBwBgNVHSMEaTBngCD2hZgK
+b/gopYVnkqzqWBWcSnA43ysF7/DpqBW75APJ6KE5pDcwNTELMAkGA1UEBhMCREUx
+EzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBggh+lqGqZXkK
+uDANBgkqhkiG9w0BAQsFAAOCAQEALyJJ8ORvGFfOf+S0fdLQqHGp3t47HuYBPQBK
+Kklg1Hpn54ZiXTDjjI2b4UDVQO5VeF+I79cG6izyjqSgGoOVB415bNzH4ExsnoYS
+rzWFqb6F3XhFlObCFO0GAFJc1YGfiiWeCJppxdsBIokFOBrIrUZVMxmHeUf2bsfs
+WWXEm5h2GU+Z58avSvQUZlnjOnniffZv2Soix9VZnOaAuYD0A149ETSU3wV4kqdB
+wdgzBFCE7wpMYXDRS07R30yz59VrEkvxL1KnNgbM11yN3X+wMX7adw3dlbTgtODW
++PABiW8WOq8ru1xQe0xWL6YZ7kGSsOZhtBTcgA5z9AoBj6G0yDGCAlEwggJNAgEB
+MEEwNTELMAkGA1UEBhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMM
+CG15VGVzdENBAgiQyim65Qz03jALBglghkgBZQMEAgGggeQwGAYJKoZIhvcNAQkD
+MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjAwMzMxMTEyNjA5WjAvBgkq
+hkiG9w0BCQQxIgQghDiuwWdYCVFTKL/W+ribv2+Fn2Ks5s4CdGtnM3bjD70weQYJ
+KoZIhvcNAQkPMWwwajALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl
+AwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAw
+BwYFKw4DAgcwDQYIKoZIhvcNAwICASgwDQYJKoZIhvcNAQEBBQAEggEAKVcSDfeA
+S7Xhg+NDPxoE9tQtve/q7RCJ6vnZAelzxBwtRqMIDGQPVTxa49MXp5I9aqWb6h3M
+DUo7pM+mPFOMHvRMxnWWOrBFYbqBHLeU1853IizWq4YpIapqsZkL1cvhucOwIkAa
+3e83jwyNDyfACqIp0ZJbE2ESItiTwYHLKAkbcUKky5hUDSrRebyQ067/GONhrnvn
+pU2Ex4SYum4+GKffk6hY+194c9F2sgo/wj4shnSXGkL4yGw1SNnBNKWNI2iCCayE
+VZD8i8YnigUGH1Kf2ys2Qq9cGW9ltSQPr05O/8B6d9yZZdBGeA1dAYJnkpp15JyT
+N8GVQGtc+3uaNA==
+
+------56F3BC21B2CE83EB9E02E24139D860BC--
+"""
+    
+    let enc_test_key_pwd = "testpwd"
+    let enc_test_key =
+"""
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIjRzqyJoIb6YCAggA
+MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA0jxeh6SHCELOVVrAOw8wYBIIE
+0NJtVjgMrMblxLPoF4N5Wn44qJb6v/DlISrXM0OiFL+E35BfUaQk7Tb/vWNuT7Ak
+sfYer3XvL4DxvoEJNqUaxpKbyAWNmcROdfvZEu2gwX9rY6/5MNm+NJPn5ICpv06O
+FrJn60RtHGG6TYtN7Yqy+8+2IHumQ8jBjt4nDoBcIriD7tyTZJarzrnlytMIfDP0
+kyiNQpJLEcBNazpn/3GLIdlJvjdup0hYoGoaMcKtTuc1JGQMwehu/P9KxaSvkyqN
+4DStqB5Ua0IOzZdk+BJhodvwp3FTU0+bxbEVIy6NSgHCSfroyZ6fXZzazKTvqbg+
+gIB0dEGpELEjaksltbKsgaBIYahs9iT1RSEKyp6DcReIJM+bkQa6RHQvFBmqLKP2
+sZgyDzrrNUyYWXsxEGmcbJ6Irsa2WQf6G2HhzOTs3rWGpST0Nk6DwFWZTy0U3uBZ
+OgVP9VEFc7yL0RQPV2Ppq54k9WBZgNYky/pteb1hq2RrZ/y/ez9zMHMlmkpRNwIQ
+2EX/dcp9Y2QNZAumZt+Zh7DKLgm464n0srWn1mZOWsGy/7oajqPakay42EvVTCvB
+iDjhm6OKFZChe6mietj30tNRbBC1LbpwGq21uhGihQjNp7CSWcf7osniN0UCJJ43
+BXy2g71EeVFLiBwl2qzoDNwrsRygUV0yomGvS6ic8jESm2D8J5fb1on0VKr/CBC8
+4vBHTHTW2JMOy8RyVZTBZiVeH7CiA54WwJBmARCxrzhvCLG14IE5gvfmbSm7+N+8
+ZNUcqEAt8vrdBkaLcU0knRv3r+B2/oM+9vHLqebijibHXt26fTJ4NLpjNutIbNxh
+uDVUjMeH/A0zVg6jevbsANlB4H2TV/swVVk+qkRQfvDsgcCS89jr7rlU7kgmn0v8
+Ofs8JLmR7PEA3i/QLyOLNnu73qszI0o/Ag1Q2HWY2/uXxxFUTRXgiGl5Oi5wY2TZ
+Rj8Ouitm0Jf9YQu4tL0zpvulgVM6jkbJKo9uYysGdS0jQVaHl3AlRnE8EYSyjJwW
+QGkwcaLetcCp0kX2td/kOAXGGS5bvVHcn1vnYih1ic/Ibu1oeCOoypHouVD0jsex
+gg5gNifL+63BElhpSTdKO6u5UZWzJDMlmeI62Bgp7vPlV936IgtGzCx9zkSarIZn
+4u0kbWHjscVA+L3wC91IRG6Klaa27f4o2gdSGwiMo+rd37mo1Cs2u7y4/K1TvpKh
+6jOlB65mIvPzzEJH1wTLkuhrfITnr2M0ddRW1am+BVOiBOjE8O+UQ1HLIeSHCmXh
+6Gm+rJVvVV4UEb/gqRneAaIvS0X851aVgkyb4X3S76Tab1nNzwD/gJUb3ODPQ9Tc
+ew4asU75zH6zg3frxHmdtw27Q+R0H0hxVOf0iF1znS2PBpHCg9jvtMMxRcHktpOC
+dGuNDcuAtwqQN48XAgP9EkLHwRkJyN+KCSwzLzbhUKsTK3aUa9ON+YJhwyDbuNZT
+tCS6rxHDe77j4fzb9jXyfM99GK9YN36/spUfl5UijDoou5rM4Tt92VBMn8iMNXx4
+OxeGuSvQoBUdP50ZspBBrf2+simuJLKMQ8kVXx8TuJqXe1FQPvFWDX5lBAf57BET
+PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO
+-----END ENCRYPTED PRIVATE KEY-----
+"""
+    var test_string = "Hello world whatever the fuck";
+
+    let smimeObj = SMIME()
+    
+    var certi: Certificate?
+    var othercerti: Certificate?
+    var ourAddr: String?
+    var otherAddr: String?
+    var ourPrivateKeyFP: String?
+            
+    override func setUp() {
+        super.setUp()
+        certi = Certificate(pem: test_key)
+        othercerti = Certificate(pem: test_key_other)
+        ourAddr = certi!.eMails![0]
+        otherAddr = othercerti!.eMails![0]
+        ourPrivateKeyFP = smimeObj.addPrivateKey(keyPlusCertPEM: test_key)
+        let _ = smimeObj.importCA(certs: [testCA])
+        let _ = smimeObj.importCertForAddress(cert: test_key, addr: ourAddr!)
+        let _ = smimeObj.importCertForAddress(cert: test_key_other, addr: otherAddr!)
+    }
+
+    override func tearDown() {
+        super.tearDown()
+        smimeObj.resetKeychain()
+    }
+
+    func testEncMail() {
+        let testData = test_string.data(using: .utf8)!
+        
+        var encCryptObj: CryptoObject? = nil
+        do {
+            encCryptObj = try smimeObj.encrypt(plainData: testData, ids: [otherAddr!], ownAddr: ourAddr!)
+        } catch let error {
+            if error is SMIMEError {
+                let smimeError = error as! SMIMEError
+                print(smimeError.message ?? "No error message")
+                print("SWIFT encrypt errors")
+                for x in smimeError.errorArray ?? [] {
+                    print("error code: ", x)
+                    print("error string: ", getErrorString(errCode: x))
+                    print("error reason: ", getErrorReasonString(errCode: x))
+                }
+            }
+        }
+        
+        assert(encCryptObj != nil)
+        assert(encCryptObj!.encryptionState == .ValidedEncryptedWithCurrentKey)
+        assert(encCryptObj!.encType == .SMIME)
+        
+        print("\n\nNew crypto object")
+        print("decrypted text: ", encCryptObj!.decryptedText ?? "")
+        print("sign key: ", encCryptObj!.signedKeys)
+        print("sign addr: ", encCryptObj!.signedAdrs)
+        print("enc type:", encCryptObj!.encType)
+        print("cipther string: ", encCryptObj!.chiperString ?? "")
+        var decObj : CryptoObject? = nil
+        do {
+            decObj = try smimeObj.decrypt(data: (encCryptObj?.chiphertext)!, fromAddr: ourAddr!, isMailNew: false)
+        }catch let error {
+            if error is SMIMEError {
+                let smimeError = error as! SMIMEError
+                print(smimeError.message ?? "No error message")
+                print("SWIFT decrypt errors")
+                for x in smimeError.errorArray ?? [] {
+                    print("error code: ", x)
+                    print("error string: ", getErrorString(errCode: x))
+                    print("error reason: ", getErrorReasonString(errCode: x))
+                }
+            }
+        }
+        if let obj = decObj {
+            print("\n\nDEC crypto object")
+            print("decrypted text: ", obj.decryptedText ?? "")
+            print("signed key: ", obj.signedKeys )
+            print("sign addr: ", obj.signedAdrs)
+            print("enc type:", obj.encType)
+            print ("sign: ", obj.signatureState)
+            print("cipther string: ", obj.chiperString ?? "")
+        }
+        
+        assert(decObj != nil)
+        assert(test_string == decObj!.decryptedText)
+        assert(decObj!.signatureState == .ValidSignature)
+        assert(decObj!.encType == .SMIME)
+    }
+    
+    func testKeyEnc() {
+        let (pKeyEnc, errArrEnc) = getEncryptedPemFromPKey(pem: test_key, passwd: "testpwd")
+        
+        print("Encrypted pkey: ", pKeyEnc ?? "")
+                
+        if errArrEnc != nil {
+            print("encrypt of key errors")
+            for x in errArrEnc ?? [] {
+                print("error code: ", x)
+                print("error string: ", getErrorString(errCode: x))
+            }
+        }
+        
+        assert(pKeyEnc != nil)
+        
+        let (pKey, errArr) = getPKeyFromEncryptedPem(pem: pKeyEnc!, passwd: "testpwd")
+        
+        print("Decrypted pkey: ", pKey ?? "")
+        print("Matches with the original: ", test_key.contains((pKey ?? "     asd    ")))
+        
+        if errArr != nil {
+            print("decrypt of key errors")
+            for x in errArr ?? [] {
+                print("error code: ", x)
+                print("error string: ", getErrorString(errCode: x))
+            }
+        }
+        assert(pKey != nil)
+        assert(test_key.contains((pKey ?? "     asd    ")))
+    }
+}
diff --git a/enzevalos_iphoneTests/phishing/EmailStringExtensionTests.swift b/enzevalos_iphoneTests/phishing/EmailStringExtensionTests.swift
index bfe4779c689e28e83678bc8d4198f6ce9cc62158..e12f53778674ec1e14bdff10267b27cca5ce5661 100644
--- a/enzevalos_iphoneTests/phishing/EmailStringExtensionTests.swift
+++ b/enzevalos_iphoneTests/phishing/EmailStringExtensionTests.swift
@@ -1,141 +1,155 @@
-    //
-    //  EmailAdressTests.swift
-    //  enzevalos_iphoneTests
-    //
-    //  Created by Katharina Müller on 17.03.20.
-    //  Copyright © 2020 fu-berlin. All rights reserved.
-    //
-    import XCTest
-    @testable import enzevalos_iphone
+//
+//  EmailAdressTests.swift
+//  enzevalos_iphoneTests
+//
+//  Created by Katharina Müller on 17.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+import XCTest
+@testable import enzevalos_iphone
     
-    class EmailStringExtensionTests: XCTestCase {
+class EmailStringExtensionTests: XCTestCase {
         
-        override func setUp() {
-            // Put setup code here. This method is called before the invocation of each test method in the class.
-        }
+    override func setUp() {
+        // Put setup code here. This method is called before the invocation of each test method in the class.
+    }
         
-        override func tearDown() {
-            // Put teardown code here. This method is called after the invocation of each test method in the class.
-        }
-        //  General TestText for all (needs to simulate a body of text from which to extract specific Strings
-        var TestText = "blabla moep jkjlkj lkjkljknmbjks llhil k. jhkhkih. huhuhj! fsdf bob.alice@zedat.fu-berlin.de dfsf. jhjknjknjkh https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240  hjkhjkhkhn www.google.de kljhl@hjkghgkhj.com nljbjkjk.de url tag html mail <a href='https://www.w3schools.com'>Visit W3Schools</a> hjhkhiuhziu kjhkl <a href=\"https://www.w2schools.com\">Visit W2Schools</a>. lknljnlk. kmm /n lmölmpöl < a href=\"https://www.w8schools.com\">Visit W8Schools</a> gfg fghfghnhg <a      href=\"https://www.w33schools.com\">Visit W33Schools</a> nkjhjkhkjn,mn jnmnklmj j <a href=\"https://www.w22schools.com\">Visit W22Schools</ a> hghjcfgh hfgchnvhj vgjcgj cjghcj <a href=\"https://www.w99schools.com\">Visit W99Schools</a    >    你好@yahoo.com eewfve  test@莎士比亚.org    你好@莎士比亚.org  Rδοκιμή@παράδειγμα.δοκιμή or 管理员@中国互联网络信息中心.中国 你好45@yahoo.com"
+    override func tearDown() {
+        // Put teardown code here. This method is called after the invocation of each test method in the class.
+    }
+    //  General TestText for all (needs to simulate a body of text from which to extract specific Strings
+    var TestText = "blabla moep jkjlkj lkjkljknmbjks llhil k. jhkhkih. huhuhj! fsdf bob.alice@zedat.fu-berlin.de dfsf. jhjknjknjkh https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240  hjkhjkhkhn www.google.de kljhl@hjkghgkhj.com nljbjkjk.de url tag html mail <a href='https://www.w3schools.com'>Visit W3Schools</a> hjhkhiuhziu kjhkl <a href=\"https://www.w2schools.com\">Visit W2Schools</a>. lknljnlk. kmm /n lmölmpöl < a href=\"https://www.w8schools.com\">Visit W8Schools</a> gfg fghfghnhg <a      href=\"https://www.w33schools.com\">Visit W33Schools</a> nkjhjkhkjn,mn jnmnklmj j <a href=\"https://www.w22schools.com\">Visit W22Schools</ a> hghjcfgh hfgchnvhj vgjcgj cjghcj <a href=\"https://www.w99schools.com\">Visit W99Schools</a    >    你好@yahoo.com eewfve  test@莎士比亚.org    你好@莎士比亚.org  Rδοκιμή@παράδειγμα.δοκιμή or 管理员@中国互联网络信息中心.中国 你好45@yahoo.com"
         
-        //    setup for find mail address in text
-        var finalMailAddresses = ["bob.alice@zedat.fu-berlin.de",
-                                  "kljhl@hjkghgkhj.com",
-                                  "你好@yahoo.com",
-                                  "test@莎士比亚.org",
-                                  "你好@莎士比亚.org",
-                                  "Rδοκιμή@παράδειγμα.δοκιμή",
-                                  "管理员@中国互联网络信息中心.中国",
-                                  "你好45@yahoo.com"]
+    //    setup for find mail address in text
+    var finalMailAddresses = ["bob.alice@zedat.fu-berlin.de",
+                                "kljhl@hjkghgkhj.com",
+                                "你好@yahoo.com",
+                                "test@莎士比亚.org",
+                                "你好@莎士比亚.org",
+                                "Rδοκιμή@παράδειγμα.δοκιμή",
+                                "管理员@中国互联网络信息中心.中国",
+                                "你好45@yahoo.com"]
         
-        func testFindEmails(){
-            let arr = TestText.findEmails()
-            XCTAssertNotNil(arr)
-            XCTAssertEqual(arr[0], finalMailAddresses[0])
-            XCTAssertEqual(arr[1], finalMailAddresses[1])
-            XCTAssertEqual(arr[2], finalMailAddresses[2])
-            XCTAssertEqual(arr[3], finalMailAddresses[3])
-            XCTAssertEqual(arr[4], finalMailAddresses[4])
-            XCTAssertEqual(arr[5], finalMailAddresses[5])
-            XCTAssertEqual(arr[6], finalMailAddresses[6])
-            XCTAssertEqual(arr[7], finalMailAddresses[7])
-        }
-        
-        //    setup email validation
-        var validEmails = ["alice.bob@moep.blubb.de",
-                           "test@google.com",
-                           "test@google.co.uk",
-                           "你好@yahoo.com",
-                           "test@莎士比亚.org",
-                           "你好@莎士比亚.org",
-                           "Rδοκιμή@παράδειγμα.δοκιμή",
-                           "管理员@中国互联网络信息中心.中国",
-                           "你好45@yahoo.com"]
+    func testFindEmails(){
+        let arr = TestText.findEmails()
+        XCTAssertNotNil(arr)
+        XCTAssertEqual(arr[0], finalMailAddresses[0])
+        XCTAssertEqual(arr[1], finalMailAddresses[1])
+        XCTAssertEqual(arr[2], finalMailAddresses[2])
+        XCTAssertEqual(arr[3], finalMailAddresses[3])
+        XCTAssertEqual(arr[4], finalMailAddresses[4])
+        XCTAssertEqual(arr[5], finalMailAddresses[5])
+        XCTAssertEqual(arr[6], finalMailAddresses[6])
+        XCTAssertEqual(arr[7], finalMailAddresses[7])
+    }
+    
+    //    setup email validation
+    var validEmails = ["alice.bob@moep.blubb.de",
+                        "test@google.com",
+                        "test@google.co.uk",
+                        "你好@yahoo.com",
+                        "test@莎士比亚.org",
+                        "你好@莎士比亚.org",
+                        "Rδοκιμή@παράδειγμα.δοκιμή",
+                        "管理员@中国互联网络信息中心.中国",
+                        "你好45@yahoo.com"]
         
-        var notValidEmails = ["test@@google.com",
-                              "test@google",
-                              "Abc.example.com",
-                              "A@b@c@example.com",
-                              "this is\"not\\allowed@example.com",
-                              "this\\ still\\\"not\\\\allowed@example.com",
-                              "1234567890123456789012345678901234567890123456789012345678901234+x@example.com"]
-        ///Finding Email adresses etc.
-        func testIsValidEmail(){
-            for v in validEmails {
-                XCTAssertTrue(v.isValidEmail())
-            }
-            for n in notValidEmails{
-                XCTAssertFalse(n.isValidEmail())
-            }
+    var notValidEmails = ["test@@google.com",
+                            "test@google",
+                            "Abc.example.com",
+                            "A@b@c@example.com",
+                            "this is\"not\\allowed@example.com",
+                            "this\\ still\\\"not\\\\allowed@example.com",
+                            "1234567890123456789012345678901234567890123456789012345678901234+x@example.com"]
+    
+    //Finding Email adresses etc.
+    func testIsValidEmail(){
+        for v in validEmails {
+            XCTAssertTrue(v.isValidEmail())
         }
-        
-        //    setup for mail address splitting
-        var correctSplit_0 = ["alice.bob", "moep", "blubb", "de"]
-        var correctSplit_1 = ["test", "google", "com"]
-        var correctSplit_2 = ["test", "google", "co", "uk"]
-        var correctSplit_3 = ["你好", "yahoo", "com"]
-        var correctSplit_4 = ["test", "莎士比亚", "org"]
-        var correctSplit_5 = ["你好", "莎士比亚", "org"]
-        var correctSplit_6 = ["Rδοκιμή", "παράδειγμα", "δοκιμή"]
-        var correctSplit_7 = ["管理员", "中国互联网络信息中心", "中国"]
-        var correctSplit_8 = ["你好45", "yahoo", "com"]
-        var spliEmails:[Any] {
-            return [correctSplit_0, correctSplit_1, correctSplit_2, correctSplit_3, correctSplit_4, correctSplit_5, correctSplit_6, correctSplit_7, correctSplit_8]
+        for n in notValidEmails{
+            XCTAssertFalse(n.isValidEmail())
         }
+    }
+        
+    //    setup for mail address splitting
+    var correctSplit_0 = ["alice.bob", "moep", "blubb", "de"]
+    var correctSplit_1 = ["test", "google", "com"]
+    var correctSplit_2 = ["test", "google", "co", "uk"]
+    var correctSplit_3 = ["你好", "yahoo", "com"]
+    var correctSplit_4 = ["test", "莎士比亚", "org"]
+    var correctSplit_5 = ["你好", "莎士比亚", "org"]
+    var correctSplit_6 = ["Rδοκιμή", "παράδειγμα", "δοκιμή"]
+    var correctSplit_7 = ["管理员", "中国互联网络信息中心", "中国"]
+    var correctSplit_8 = ["你好45", "yahoo", "com"]
+    var spliEmails:[Any] {
+        return [correctSplit_0, correctSplit_1, correctSplit_2, correctSplit_3, correctSplit_4, correctSplit_5, correctSplit_6, correctSplit_7, correctSplit_8]
+    }
         
-        func testSplitMailAddress(){
-            for (i, email) in validEmails.enumerated(){
-                let arr = (email.splitAddress())
-                XCTAssertNotNil(arr)
-                for (j, _) in arr.enumerated()
-                {
-                    let array = spliEmails[i] as? [String]
-                    XCTAssertEqual(arr[j], array?[j])
-                }
+    func testSplitMailAddress(){
+        for (i, email) in validEmails.enumerated(){
+            let arr = (email.splitAddress())
+            XCTAssertNotNil(arr)
+            for (j, _) in arr.enumerated()
+            {
+                let array = spliEmails[i] as? [String]
+                XCTAssertEqual(arr[j], array?[j])
             }
         }
+    }
         
-        var finalTestEMailIdentity = ["alice.bob", "test", "test", "你好", "test", "你好", "Rδοκιμή", "管理员", "你好45"]
-        func testGetMailIdentity(){
-            for (i, email) in validEmails.enumerated(){
-                let arr = (email.getLocalMailIdentity())
-                XCTAssertNotNil(arr)
-                XCTAssertEqual(arr, finalTestEMailIdentity[i])
-            }
+    var finalTestEMailIdentity = ["alice.bob", "test", "test", "你好", "test", "你好", "Rδοκιμή", "管理员", "你好45"]
+    func testGetMailIdentity(){
+        for (i, email) in validEmails.enumerated(){
+            let arr = (email.getLocalMailIdentity())
+            XCTAssertNotNil(arr)
+            XCTAssertEqual(arr, finalTestEMailIdentity[i])
         }
+    }
         
-        var eMailSubDomain_0 = ["moep", "blubb"]
-        var eMailSubDomain_1 = ["παράδειγμα"]
-        var eMailSubDomain_2 = ["中国互联网络信息中心"]
-        var eMailSubDomain_3 = ["google", "co"]
-        func testGetSubdomains(){
-            let arr_0 = validEmails[0].getSubdomains()
-            XCTAssertNotNil(arr_0)
-            XCTAssertEqual(arr_0[0], eMailSubDomain_0[0])
-            XCTAssertEqual(arr_0[1], eMailSubDomain_0[1])
-            
-            let arr_1 = validEmails[6].getSubdomains()
-            XCTAssertNotNil(arr_1)
-            XCTAssertEqual(arr_1[0], eMailSubDomain_1[0])
-            
-            let arr_2 = validEmails[7].getSubdomains()
-            XCTAssertNotNil(arr_2)
-            XCTAssertEqual(arr_2[0], eMailSubDomain_2[0])
+    var eMailSubDomain_0 = ["moep", "blubb"]
+    var eMailSubDomain_1 = ["παράδειγμα"]
+    var eMailSubDomain_2 = ["中国互联网络信息中心"]
+    var eMailSubDomain_3 = ["google", "co"]
+    func testGetSubdomains(){
+        let arr_0 = validEmails[0].getSubdomains()
+        XCTAssertNotNil(arr_0)
+        XCTAssertEqual(arr_0[0], eMailSubDomain_0[0])
+        XCTAssertEqual(arr_0[1], eMailSubDomain_0[1])
+        
+        let arr_1 = validEmails[6].getSubdomains()
+        XCTAssertNotNil(arr_1)
+        XCTAssertEqual(arr_1[0], eMailSubDomain_1[0])
             
-            let arr_3 = validEmails[2].getSubdomains()
-            XCTAssertNotNil(arr_3)
-            XCTAssertEqual(arr_3[0], eMailSubDomain_3[0])
-            XCTAssertEqual(arr_3[1], eMailSubDomain_3[1])
-        }
+        let arr_2 = validEmails[7].getSubdomains()
+        XCTAssertNotNil(arr_2)
+        XCTAssertEqual(arr_2[0], eMailSubDomain_2[0])
         
-        var finalTestEMailDomain = ["de", "com", "uk", "com", "org", "org", "δοκιμή", "中国", "com"]
-        func testGetDomain(){
-            for (i, email) in validEmails.enumerated(){
-                let arr = (email.getDomain())
-                XCTAssertNotNil(arr)
-                XCTAssertEqual(arr, finalTestEMailDomain[i])
-            }
+        let arr_3 = validEmails[2].getSubdomains()
+        XCTAssertNotNil(arr_3)
+        XCTAssertEqual(arr_3[0], eMailSubDomain_3[0])
+        XCTAssertEqual(arr_3[1], eMailSubDomain_3[1])
+    }
+    
+    var finalTestEMailDomain = ["de", "com", "uk", "com", "org", "org", "δοκιμή", "中国", "com"]
+    func testGetDomain(){
+        for (i, email) in validEmails.enumerated(){
+            let arr = (email.getDomain())
+            XCTAssertNotNil(arr)
+            XCTAssertEqual(arr, finalTestEMailDomain[i])
         }
     }
+        
+    func testTextFindMailAddress() {
+        let arr = TestText.findMailAddress()
+        XCTAssertNotNil(arr)
+        XCTAssertEqual(arr[0], finalMailAddresses[0])
+        XCTAssertEqual(arr[1], finalMailAddresses[1])
+    }
+    
+    func testGetMailDomain() {
+        XCTAssertEqual("test@google.com".getMailDomains(), "google")
+        XCTAssertEqual("test@google.co.uk".getMailDomains(), "google.co")
+    }
+}
+
diff --git a/enzevalos_iphoneTests/phishing/MailComparisonTests.swift b/enzevalos_iphoneTests/phishing/MailComparisonTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..910b3334651ca0f53c233047fa07846a48c47451
--- /dev/null
+++ b/enzevalos_iphoneTests/phishing/MailComparisonTests.swift
@@ -0,0 +1,114 @@
+//
+//  MailComparisonTests.swift
+//  enzevalos_iphoneTests
+//
+//  Created by Viktoria Sorgalla on 29.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+import XCTest
+import Contacts
+
+@testable import enzevalos_iphone
+class MailComparisonTests: XCTestCase {
+    let datahandler = DataHandler.handler
+    let userAdr = "alice@example.com"
+    let userName = "alice"
+    var user: MCOAddress = MCOAddress.init(displayName: "alice", mailbox: "alice@example.com")
+    let userAdr_1 = "bob@enzevalos.de"
+    let userName_1 = "bob"
+    var user_1: MCOAddress =  MCOAddress.init(displayName: "bob", mailbox: "bob@enzevalos.de")
+    let userAdr_2 = "carl@test.com"
+    let userName_2 = "carl"
+    var user_2: MCOAddress = MCOAddress.init(displayName: "Carl", mailbox: "carl@test.com")
+    let userAddr_3_1 = "david@123.com"
+    let userAddr_3_2 = "david@1234.com"
+    let userName_3 = "david"
+    var user_3_1: MCOAddress = MCOAddress.init(displayName: "david", mailbox: "david@123.com")
+    var user_3_2: MCOAddress = MCOAddress.init(displayName: "david", mailbox: "david@1234.com")
+    
+    override func setUp() {
+        super.setUp()
+        datahandler.reset()
+        XCTAssertEqual(datahandler.getContacts().count, 0)
+        XCTAssertEqual(datahandler.getAddresses().count, 0)
+    }
+
+    override func tearDown() {
+        datahandler.reset()
+        super.tearDown()
+    }
+    
+    func testMail(from: MCOAddress, to: [MCOAddress], cc: [MCOAddress], bcc: [MCOAddress], flags: MCOMessageFlag = MCOMessageFlag.init(rawValue: 0), folder: String = "INBOX", date: Date = Date(timeIntervalSince1970: TimeInterval(arc4random())), cryptoObject: CryptoObject? = nil, body: String = String.random(length: 20)) -> PersistentMail? {
+
+        let subject = String.random(length: 20)
+        let id = UInt64(arc4random())
+        var body = body
+
+        if let decryptedBody = cryptoObject?.decryptedText {
+            body = decryptedBody
+        }
+        var mail: PersistentMail?
+        mail = datahandler.createMail(id, sender: from, receivers: to, cc: cc, time: date, received: true, subject: subject, body: body, flags: flags, record: nil, autocrypt: nil, decryptedData: cryptoObject, folderPath: folder, secretKey: nil, encryptedBody: cryptoObject?.chiperString)
+
+        return mail
+    }
+    
+    private func createAddressBook(_ senders: [MCOAddress]) {
+        for sender in senders {
+            let con = CNMutableContact()
+            let value = sender.mailbox! as AnyObject
+            
+            let name = sender.displayName
+            let nameArray = name!.split(separator: " ").map(String.init)
+            con.givenName = nameArray.first!
+            con.emailAddresses.append(CNLabeledValue(label: CNLabelOther, value: value as! NSString))
+            // Saving the newly created contact
+            let store = CNContactStore()
+            let saveRequest = CNSaveRequest()
+            saveRequest.add(con, toContainerWithIdentifier:nil)
+            try! store.execute(saveRequest)
+        }
+        
+    }
+    private func resetAddressBook(_ senders: [MCOAddress]) {
+        for sender in senders {
+            do {
+                let name = sender.displayName!
+                let predicate = CNContact.predicateForContacts(matchingName: name)
+                let store = CNContactStore()
+                let contacts = try store.unifiedContacts(matching: predicate,keysToFetch: [CNContactGivenNameKey as CNKeyDescriptor, CNContactFamilyNameKey as CNKeyDescriptor, CNContactImageDataKey as CNKeyDescriptor])
+                guard contacts.count > 0, let selectedContact = contacts.first  else { throw Error.self as! Error }
+             
+                let request = CNSaveRequest()
+                let mutableContact = selectedContact.mutableCopy() as! CNMutableContact
+                request.delete(mutableContact)
+                try store.execute(request)
+            } catch { }
+        }
+    }
+    
+    func testCompareSenderToContacts () {
+        let mail_1 = testMail(from: user, to: [], cc: [], bcc: [])
+        let mail_2 = testMail(from: user_1, to: [], cc: [], bcc: [])
+        let mail_3 = testMail(from: user_2, to: [], cc: [], bcc: [])
+        let mail_4 = testMail(from: user_2, to: [], cc: [], bcc: [])
+        let mail_5 = testMail(from: user_3_1, to: [], cc: [], bcc: [])
+        let mail_6 = testMail(from: user_3_2, to: [], cc: [], bcc: [])
+        
+        let mailsInInbox: [PersistentMail] = [mail_1!, mail_2!, mail_3!, mail_4!, mail_5!, mail_6!]
+        
+        
+        createAddressBook([user])
+        
+        XCTAssertEqual(ResultCompareSenderToContacts.isContact, mailsInInbox[0].from.mailAddress.compareSenderToContacts())
+        XCTAssertEqual(ResultCompareSenderToContacts.Unknown, mailsInInbox[1].from.mailAddress.compareSenderToContacts())
+        XCTAssertEqual(ResultCompareSenderToContacts.isSender, mailsInInbox[2].from.mailAddress.compareSenderToContacts())
+        
+        XCTAssertEqual(ResultCompareSenderToContacts.OnlyIdentity, mailsInInbox[4].from.mailAddress.compareSenderToContacts()) // userAddr_3_2
+        
+        // The created user has to be deleted after the test
+        resetAddressBook([user])
+        
+    }
+}
+
diff --git a/enzevalos_iphoneTests/phishing/TyposquattingTests.swift b/enzevalos_iphoneTests/phishing/TyposquattingTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..7f280ebce9a211b1f8cb01dacde05825cda2be98
--- /dev/null
+++ b/enzevalos_iphoneTests/phishing/TyposquattingTests.swift
@@ -0,0 +1,88 @@
+//
+//  TyposquattingTests.swift
+//  enzevalos_iphoneTests
+//
+//  Created by Lauren Elden on 30.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import XCTest
+
+@testable import enzevalos_iphone
+
+class TyposquattingTests: XCTestCase {
+    
+    let typosquatting = Typosquatting()
+    
+    // Setup for testcases
+    let validRD = ["fu-berlin.de", "google.de", "nljbjkjk.de", "w3schools.com", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.eu.com", "3schools.com"]
+    
+    let validSLD = ["fu-berlin", "google", "nljbjkjk", "w3schools", "w2schools", "w8schools", "w33schools", "w22schools", "w99schools.eu", "3schools"]
+    
+    let validURLs = ["www.fu-berlin.de", "www.google.de", "nljbjkjk.com", "www.w3schools.com", "www.w2schools.com", "www.w8schools.de", "www.w33schools.com", "www.w22schools.com", "www.w99schools.eu.com", "www.3schools.com"]
+
+    let testMailText = "https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240http:// www.google.de http://nljbjkjk.de https://www.w3schools.com https://www.w2schools.com https://www.w8schools.com  https://www.w33schools.com https://www.w22schools.com https://www.w99schools.eu.com https://git.imp.fu-ber_lin.de/enzevalos/enzevalos_iphone/issues/240 http://www.google-.de http://nljbj#kjk.de https://www.3schools.com https://www.w2sc..hools.com https://www.w8sch?ools.com https://www.w33sc_hools.com  https://www.w22schooIs.com  https://www.W99schools$.com"
+    
+
+    func testIsValidRD() {
+        let pattern = typosquatting.isValidRD(mailBody: testMailText)
+        XCTAssertNotNil(pattern)
+        XCTAssertEqual(pattern[0], validRD[0])
+        XCTAssertEqual(pattern[1], validRD[1])
+        XCTAssertEqual(pattern[2], validRD[2])
+        XCTAssertEqual(pattern[3], validRD[3])
+        XCTAssertEqual(pattern[4], validRD[4])
+        XCTAssertEqual(pattern[5], validRD[5])
+        XCTAssertEqual(pattern[6], validRD[6])
+        XCTAssertEqual(pattern[7], validRD[7])
+        XCTAssertEqual(pattern[8], validRD[8])
+        XCTAssertEqual(pattern[9], validRD[9])
+    }
+    
+    func testCompareDomainWithDomians() {
+        let domain = "w2schools"
+        XCTAssertFalse(typosquatting.compareDomainWithDomians(secondLvlDomain: domain, domains: validSLD, allowedEditDistance: 4))
+    }
+    
+    func testGetDomainEditDistance() {
+        let domain = "w2schools"
+        print(typosquatting.getDomainEditDistanceAsDic(domain: domain, domains: validSLD))
+    }
+    
+    func testCompareDomainWithDomiansDic() {
+        let domain = "w2schools"
+        print(typosquatting.compareDomainWithDomiansAsDic(secondLvlDomain: domain, domains: validSLD, allowedEditDistance: 4))
+    }
+    
+    func testGetSLDEditdistance() {
+        let url = "www.w2schools.com"
+        print(typosquatting.getSLDEditdistanceAsDic(url: url, domains: validSLD))
+    }
+    
+    func testGetURLEditdistanceAsDic() {
+        let url = "www.w2schools.com"
+        print(typosquatting.getURLEditdistanceAsDic(url: url, urls: validURLs))
+    }
+    
+    func testCompareURLWithSLDListAsDic() {
+        let url = "www.w2schools.com"
+        print(typosquatting.compareURLWithSLDListAsDic(url: url, domains: validSLD, allowedEditDistance: 4))
+    }
+    
+    func testCompareURLWithSLDList() {
+        let url = "www.google.com"
+        let domains = ["googIe", "google", "gogle", "gooGle", "gle", "glllll"]
+        XCTAssertFalse(typosquatting.compareURLWithSLDList(url: url, domains: domains))
+    }
+    
+    func testCompareURLsAsDic() {
+        let url = "www.google.com"
+        print(typosquatting.compareURLsAsDic(url: url, urls: validURLs, allowedEditDistance: 4))
+    }
+    
+    func testCompareURLs() {
+        let url = "www.w2schools.com"
+        let (bool, _) = typosquatting.compareURLs(myUrl: url, urls: validURLs)
+        XCTAssertFalse(bool)
+    }
+}
diff --git a/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift b/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift
index 8bcabf7dc73b30376b1c1a47ae5734baebccb684..d1f26673af1290824c667325f1e86ebd959a53ea 100644
--- a/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift
+++ b/enzevalos_iphoneTests/phishing/UrlStringExtensionTests.swift
@@ -10,13 +10,26 @@ import XCTest
 
 class UrlStringExtensionTests: XCTestCase {
     
+    // Setup for Critical Pattern of a Root Domain
+    var testMailText = "https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240http:// www.google.de http://nljbjkjk.de https://www.w3schools.com https://www.w2schools.com https://www.w8schools.com  https://www.w33schools.com https://www.w22schools.com https://www.w99schools.eu.com https://git.imp.fu-ber_lin.de/enzevalos/enzevalos_iphone/issues/240 http://www.google-.de http://nljbj#kjk.de https://www.3schools.com https://www.w2sc..hools.com https://www.w8sch?ools.com https://www.w33sc_hools.com  https://www.w22schooIs.com  https://www.W99schools$.com"
+    var vaildRD = ["fu-berlin.de", "google.de", "nljbjkjk.de", "w3schools.com", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.eu.com", "3schools.com"]
+    // Setup for get second level doamin of URL
+    var finalSLD = ["fu-berlin", "google", "nljbjkjk", "w3schools", "w2schools", "w8schools", "w33schools", "w22schools", "w99schools"]
+    // Setup for get root domein of URL
+    var testmailURL = "https://git.imp.fu-ber_lin.de/enzevalos/enzevalos_iphone/issues/240 http://www.google-.de http://nljbj#kjk.de https://www.3schools.com https://www.w2sc..hools.com https://www.w8sch?ools.com https://www.w33sc_hools.com  https://www.w22schooIs.com  https://www.W99schools$.com https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240 http://www.google.de http://nljbjkjk.de https://www.w3schools.com https://www.w2schools.com https://www.w8schools.com  https://www.w33schools.com https://www.w22schools.com https://www.w99schools.eu.com bob.alice@zedat.fu-berlin.de https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240 www.google.de kljhl@hjkghgkhj.com nljbjkjk.de https://www.w3#schools.com/ https://www.w2schools.com/ https://www.w8schools.com/ https://www.w33schools.com/ https://www.w22schools.com/ https://www.w99schools.com/ 你好@yahoo.com test@莎士比亚.org 你好@莎士比亚.org Rδοκιμή@παράδειγμα.δοκιμή 管理员@中国互联网络信息中心.中国 你好@yahoo.com test@莎士比亚.org 你好@莎士比亚.org"
+    var finalRD = ["fu-berlin.de", "google.de", "nljbjkjk.de", "w3schools.com", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.com"]
+    
+    // Setup for critical pattern of a root domain
+    var testmail = "fu-ber_lin.de google-.de nljbj#kjk.de 3schools.com w2sc..hools.com w8sch?ools.com w33sc_hools.com w22schooIs.com W99schools$.com fu-berlin.de google.de nljbjkjk.de w3schools.com w2schools.com w8schools.com w33schools.com w22schools.com w99schools.eu.com bob.alice@zedat.fu-berlin.de git.imp.fu-berlin.de google.de kljhl@hjkghgkhj.com nljbjkjk.de w3#schools.com w2schools.com w8schools.com w33schools.com w22schools.com w99schools.com 你好@yahoo.com test@莎士比亚.org 你好@莎士比亚.org Rδοκιμή@παράδειγμα.δοκιμή 管理员@中国互联网络信息中心.中国 你好@yahoo.com test@莎士比亚.org 你好@莎士比亚.org"
+    var finalunciticalrd = ["3schools.com", "fu-berlin.de", "google.de", "nljbjkjk.de", "w3schools.com", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.eu.com", "git.imp.fu-berlin.de", "google.de", "w2schools.com", "w8schools.com", "w33schools.com", "w22schools.com", "w99schools.com"]
+    
     //  General TestText for all (needs to simulate a body of text from which to extract specific Strings
     var TestText = "blabla moep jkjlkj lkjkljknmbjks llhil k. jhkhkih. huhuhj! fsdf bob.alice@zedat.fu-berlin.de dfsf. jhjknjknjkh https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240  hjkhjkhkhn www.google.de kljhl@hjkghgkhj.com nljbjkjk.de url tag html mail <a href='https://www.w3schools.com'>Visit W3Schools</a> hjhkhiuhziu kjhkl <a href=\"https://www.w2schools.com\">Visit W2Schools</a>. lknljnlk. kmm /n lmölmpöl < a href=\"https://www.w8schools.com\">Visit W8Schools</a> gfg fghfghnhg <a      href=\"https://www.w33schools.com\">Visit W33Schools</a> nkjhjkhkjn,mn jnmnklmj j <a href=\"https://www.w22schools.com\">Visit W22Schools</ a> hghjcfgh hfgchnvhj vgjcgj cjghcj <a href=\"https://www.w99schools.com\">Visit W99Schools</a    >    你好@yahoo.com eewfve  test@莎士比亚.org    你好@莎士比亚.org  Rδοκιμή@παράδειγμα.δοκιμή or 管理员@中国互联网络信息中心.中国 你好45@yahoo.com"
     
-    //       setup for find URLs in text
+    // Setup for find URLs in text
     var finalURLs = ["https://git.imp.fu-berlin.de/enzevalos/enzevalos_iphone/issues/240", "http://www.google.de", "http://nljbjkjk.de", "https://www.w3schools.com", "https://www.w2schools.com", "https://www.w8schools.com", "https://www.w33schools.com", "https://www.w22schools.com", "https://www.w99schools.com"]
     
-    //    setup for tag tests
+    // Setup for tag tests
     var finalTestTextFindHtmlTags = ["<a href=\'https://www.w3schools.com\'>Visit W3Schools</a>", "<a href=\"https://www.w2schools.com\">Visit W2Schools</a>", "< a href=\"https://www.w8schools.com\">Visit W8Schools</a>", "<a      href=\"https://www.w33schools.com\">Visit W33Schools</a>", "<a href=\"https://www.w22schools.com\">Visit W22Schools</ a>", "<a href=\"https://www.w99schools.com\">Visit W99Schools</a    >"]
     
     var finalTestTextHtmlTagURL = ["https://www.w3schools.com", "https://www.w2schools.com", "https://www.w8schools.com", "https://www.w33schools.com", "https://www.w22schools.com", "https://www.w99schools.com"]
@@ -24,6 +37,7 @@ class UrlStringExtensionTests: XCTestCase {
     var finalTestTexthttpTagLinkName = ["Visit W3Schools", "Visit W2Schools", "Visit W8Schools", "Visit W33Schools", "Visit W22Schools", "Visit W99Schools"]
     
     var testUrl = "www.google.de"
+    var testURL2 = "https://www.mycampus.imp.fu-berlin.de/portal"
     
     override func setUp() {
         super.setUp()
@@ -79,4 +93,53 @@ class UrlStringExtensionTests: XCTestCase {
         XCTAssertNotNil(testUrl.url2ip())
         //It changes often therefore a direct comparisson is not useful
     }
+    
+    // Test get Root Domain
+    func testGetRD() {
+        let rd = testMailText.getRD()
+        print(rd)
+    }
+        
+    // Test get Second Level Domain
+    func testGetSLD(){
+        let sld = TestText.getSLD()
+        XCTAssertNotNil(sld)
+        XCTAssertEqual(sld[0], finalSLD[0])
+        XCTAssertEqual(sld[1], finalSLD[1])
+        XCTAssertEqual(sld[2], finalSLD[2])
+        XCTAssertEqual(sld[3], finalSLD[3])
+    }
+    
+    func testIsAllowedDistance() {
+        let str = "google"
+        // #distance:      0         1        2         3         4       <
+        let strArray = ["google", "googIe", "gogIe", "gooogIIe", "go", "amazon"]
+        XCTAssertTrue(str.isAllowedDistance(str: strArray[0], allowedEditDistance: 4))
+        XCTAssertFalse(str.isAllowedDistance(str: strArray[1], allowedEditDistance: 4))
+        XCTAssertFalse(str.isAllowedDistance(str: strArray[2], allowedEditDistance: 4))
+        XCTAssertFalse(str.isAllowedDistance(str: strArray[3], allowedEditDistance: 6))
+        XCTAssertTrue(str.isAllowedDistance(str: strArray[4], allowedEditDistance: 4))
+        XCTAssertTrue(str.isAllowedDistance(str: strArray[5], allowedEditDistance: 4))
+    }
+    
+    func testLevenshtein(){
+        let str1 = "hallo"
+        let str2 = "hlalo"
+        let str3 = "haloo"
+        let str4 = "halo"
+        let str5 = "halllo"
+        let str6 = "halol"
+        let edd1 = str1.levenshtein(str2)
+        let edd2 = str1.levenshtein(str3)
+        let edd3 = str1.levenshtein(str4)
+        let edd4 = str1.levenshtein(str5)
+        let edd5 = str1.levenshtein(str6)
+        XCTAssertEqual(edd1, 2, "Wrong distance \(str1) vs \(str2)")
+        XCTAssertEqual(edd2, 2, "Wrong distance \(str1) vs \(str3)")
+        XCTAssertEqual(edd3, 1, "Wrong distance \(str1) vs \(str4)")
+        XCTAssertEqual(edd4, 1, "Wrong distance \(str1) vs \(str5)")
+        XCTAssertEqual(edd5, 2, "Wrong distance \(str1) vs \(str6)")
+    }
+
 }
+
diff --git a/enzevalos_iphoneTests/testMails/SMIME Test 1 S.eml b/enzevalos_iphoneTests/testMails/SMIME Test 1 S.eml
new file mode 100644
index 0000000000000000000000000000000000000000..2c8d85d2994dde0170d8b157d22df558902469ad
--- /dev/null
+++ b/enzevalos_iphoneTests/testMails/SMIME Test 1 S.eml	
@@ -0,0 +1,65 @@
+Date: Tue, 30 Jul 2019 18:57:01 +0200 (CEST)
+From: Amari <tester@drengels.net>
+To: Skyler <retset@drengels.net>
+Message-ID: <777748410.398.1564505821347@HIKARU>
+Subject: SMIME Test 1 S
+MIME-Version: 1.0
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; 
+	boundary="----=_Part_397_1624510452.1564505821347"
+
+------=_Part_397_1624510452.1564505821347
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Dolor sed viverra
+ipsum nunc aliquet bibendum enim.
+------=_Part_397_1624510452.1564505821347
+Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+Content-Description: S/MIME Cryptographic Signature
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIID
+rzCCApegAwIBAgIIqqF0KZ7dPfEwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UEBhMCREUxEzARBgNV
+BAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4XDTE5MDcyOTE2MzAxN1oXDTE5MDgw
+NTE2MzAxN1owNzELMAkGA1UEBhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxEzARBgNVBAMMCnNl
+bmRlcmtleTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpF4M77d+ZRnYWyz2GzxVn
+Ni4TpM6MuFcbuy0iOqqVAzON0SXfQoursZhgW4tILDuiUh0kvq7p/QjCkxUpYCuhLxUKGbJh1bhF
+4t2UcTqvRszk7KBPKlhMgffyvXp9yyz2FmMT7nVUejEo7zuDJun0plMia1A7FftQKukcUvobeR+G
+VR9lvH/WZy6l/bDJt+zL3bapZlW/IC5jp3csNf5PwqYsWBqh9teWlcB6BHb7k52ztpHx8VG72mAh
+Ti7GQXYStTzY9uOfFIYC6DkdHN1o2e0D3mF5scU1a//U9NachpYV8cTpLZVHxGuh+q7bUIlZV50C
+SQeQPfslWrTAQ7OxAgMBAAGjgcAwgb0wHgYDVR0RBBcwFYETdGVzdGVyQGRyZW5nZWxzLm5ldDAp
+BgNVHQ4EIgQglM8SvneCtV3jEiwx8mBOsKNEIg0civ4D6Ovzn0OFwQswcAYDVR0jBGkwZ4AgssuC
+912pWP0AkTwKs/09h5KG8eKAz4JzOkuz0RiH5uShOaQ3MDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQYIIq3HpoO6N9xMwDQYJKoZIhvcNAQELBQAD
+ggEBADsOWapNKiylC1btmknLku+OylAOO9Sg/9xn0G6w/+pfF2Qw6acqKkltC+Miju31K8deKI1p
+Un6WPgcCbVrlN5ISzF3CCRZV4527W0mTQ9GXpoTQ+dN0mMqcasGVm7jGIfnr4FQZc1XcdG10Bf+W
+pN0SDNSlSfq54vT8dU2Q+R1Gl62TurZHW3XVmiofR8DfgmDH8B16BlgOz86PD9L6aB7Yb92f/qmt
+AdMlPgtmiFO84+JMw4jdtqEiS5zs7u0b+VHHUN3y7qVbBoGdL2YEQNT+51q577hjcz+cS5XOMJee
+kRbMu+E0bZLArgeOeqVm/QludFOsqHqazAIjMvlvYfIwggLlMIIBzQIIq3HpoO6N9xMwDQYJKoZI
+hvcNAQELBQAwNTELMAkGA1UEBhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15
+VGVzdENBMB4XDTE5MDcyOTE1MzgwNFoXDTE5MDgwNTE1MzgwNFowNTELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAok5q1s8MveXD/u2p66BpEfGoyDHv8M4t1KcOcrroTKwasVynjc3e1Av7Subv
+u3P+NzJWQcBkX1K/Vz+0hlrL8n3vlxukc8ytolVsz7+Yvp/XjCvBTisAksgsORnceqQoqesaZ+gq
+sHVFn0sD40u1CV+K4/gLwS3ts5k6S4Z2rRNrKCi1bQQt5A9tVZdX8Zw/pd3QWcpAXub2KhGf0wrG
+7hUObeFIoO03XPJdDUdeFBX9QY4NJoXJSCgJOfPuQVwXeFj0PDsznkIIzdTQ+d/G7FR2fyowfWXK
+b8bkrnFpUtV8KOyXLwZRR8e2WzdjQXtzo0TkI+SO5vYc010Jb4kPQQIDAQABMA0GCSqGSIb3DQEB
+CwUAA4IBAQAABVc0+1dVpQ/2TbA1kDDiE4qnmfQR146Sa0x152+5AXf135wcmQsePJOnfN3bZLUR
+uAWA0HpE+VE9eJ7hqK9wMZIAZzzw0XbEQ57NstmvfTH8oBz3g4aywqOKf5fxoyhlKmlTFUcjWPqD
+PJ28RaFUEhFSOB3gXm6JX5ME4A6Pf3EaSkJcgGBstF1qViPPFZhvlxHmqeIJVsqtGDahBaCFK0S6
+5FPDD1JAh5J6tvSWocXeBovzakYXgrUjQdsBeCr8P7EiPqVupmVyEjxripCrYhzvnJM//c238uzo
+O3Xt5Po760D1bh61qD+8VaOFPAYEiOO/KuNMzd/C9Q3cchl6AAAxggJNMIICSQIBATBBMDUxCzAJ
+BgNVBAYTAkRFMRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQQIIqqF0KZ7d
+PfEwDQYJYIZIAWUDBAIBBQCggd4wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
+CQUxDxcNMTkwNzMwMTY1NzAxWjAtBgkqhkiG9w0BCTQxIDAeMA0GCWCGSAFlAwQCAQUAoQ0GCSqG
+SIb3DQEBCwUAMC8GCSqGSIb3DQEJBDEiBCCMp2gMEAzej8ns+rB8sE2jqmSOS9iFX0yQ/2HJg1hS
+XDBEBgkqhkiG9w0BCQ8xNzA1MAsGCWCGSAFlAwQBAjALBglghkgBZQMEARYwCwYJYIZIAWUDBAEq
+MAwGCiqGSIb3DQEJDwEwDQYJKoZIhvcNAQELBQAEggEAM+dja90MWcbLsF/zzsLYWesWVVr5P2UE
+EXOosl+We9DTqIsT+KwpklwVpY0yFXMx2FSTjFf3x4kfjtIQTQe0pHRefd1bfV3AXIPS34BCqZtO
+ybnS1mVE7SJh5PEjimmtMCX7AB1ziYURI1B8FJrT0ECUSCKCaw04SbUUc7EurMEZ/A3LaZLD0zEt
+jBKzhxvvUvUuz6AKGKZ9x1mIbb5N74KYgMJXioAwKzwwoZIf0AThflPPZGHNT3v3y/LP/HeB3bIJ
+4kwwcSgwkMn1S888oc2TgykWDa5lcJSxXTef81exm0fhDyZI1em6PdkHscMmD4xWFgpEHZdrPYE3
+6MjJowAAAAAAAA==
+------=_Part_397_1624510452.1564505821347--
diff --git a/enzevalos_iphoneTests/testMails/johnny C1.json.eml b/enzevalos_iphoneTests/testMails/johnny C1.json.eml
new file mode 100644
index 0000000000000000000000000000000000000000..f35c7b2e692d1b9dc363c4b0f41e45b3ea2090ce
--- /dev/null
+++ b/enzevalos_iphoneTests/testMails/johnny C1.json.eml	
@@ -0,0 +1,67 @@
+Date: Tue, 30 Jul 2019 18:54:41 +0200 (CEST)
+From: Amari <tester@drengels.net>
+To: Skyler <retset@drengels.net>
+Message-ID: <1939970407.2.1564505681456@HIKARU>
+Subject: johnny C1.json
+MIME-Version: 1.0
+Content-Type: multipart/mixed; 
+	boundary="----=_Part_0_576261694.1564505681384"
+
+------=_Part_0_576261694.1564505681384
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Dolor sed viverra
+ipsum nunc aliquet bibendum enim.
+------=_Part_0_576261694.1564505681384
+Content-Type: application/pkcs7-mime; name=smime.p7m; smime-type=signed-data
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+Content-Description: S/MIME Cryptographic Signed Data
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwGggCSABG1D
+b250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkNCkNvbnRlbnQtVHJhbnNm
+ZXItRW5jb2Rpbmc6IDdiaXQNCg0KVGV4dCBlbWJlZGRlZCBpbiB0aGUgc2lnbmF0dXJlAAAAAAAA
+oIAwggOvMIICl6ADAgECAgiqoXQpnt098TANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJERTET
+MBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0EwHhcNMTkwNzI5MTYzMDE3WhcN
+MTkwODA1MTYzMDE3WjA3MQswCQYDVQQGEwJERTETMBEGA1UECgwKQSBNQUlMVEVTVDETMBEGA1UE
+AwwKc2VuZGVya2V5MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkXgzvt35lGdhbL
+PYbPFWc2LhOkzoy4Vxu7LSI6qpUDM43RJd9Ci6uxmGBbi0gsO6JSHSS+run9CMKTFSlgK6EvFQoZ
+smHVuEXi3ZRxOq9GzOTsoE8qWEyB9/K9en3LLPYWYxPudVR6MSjvO4Mm6fSmUyJrUDsV+1Aq6RxS
++ht5H4ZVH2W8f9ZnLqX9sMm37MvdtqlmVb8gLmOndyw1/k/CpixYGqH215aVwHoEdvuTnbO2kfHx
+UbvaYCFOLsZBdhK1PNj2458UhgLoOR0c3WjZ7QPeYXmxxTVr/9T01pyGlhXxxOktlUfEa6H6rttQ
+iVlXnQJJB5A9+yVatMBDs7ECAwEAAaOBwDCBvTAeBgNVHREEFzAVgRN0ZXN0ZXJAZHJlbmdlbHMu
+bmV0MCkGA1UdDgQiBCCUzxK+d4K1XeMSLDHyYE6wo0QiDRyK/gPo6/OfQ4XBCzBwBgNVHSMEaTBn
+gCCyy4L3XalY/QCRPAqz/T2Hkobx4oDPgnM6S7PRGIfm5KE5pDcwNTELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBggircemg7o33EzANBgkqhkiG9w0B
+AQsFAAOCAQEAOw5Zqk0qLKULVu2aScuS747KUA471KD/3GfQbrD/6l8XZDDppyoqSW0L4yKO7fUr
+x14ojWlSfpY+BwJtWuU3khLMXcIJFlXjnbtbSZND0ZemhND503SYypxqwZWbuMYh+evgVBlzVdx0
+bXQF/5ak3RIM1KVJ+rni9Px1TZD5HUaXrZO6tkdbddWaKh9HwN+CYMfwHXoGWA7Pzo8P0vpoHthv
+3Z/+qa0B0yU+C2aIU7zj4kzDiN22oSJLnOzu7Rv5UcdQ3fLupVsGgZ0vZgRA1P7nWrnvuGNzP5xL
+lc4wl56RFsy74TRtksCuB456pWb9CW50U6yoeprMAiMy+W9h8jCCAuUwggHNAgircemg7o33EzAN
+BgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJERTETMBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UE
+AwwIbXlUZXN0Q0EwHhcNMTkwNzI5MTUzODA0WhcNMTkwODA1MTUzODA0WjA1MQswCQYDVQQGEwJE
+RTETMBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0EwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCiTmrWzwy95cP+7anroGkR8ajIMe/wzi3Upw5yuuhMrBqxXKeNzd7U
+C/tK5u+7c/43MlZBwGRfUr9XP7SGWsvyfe+XG6RzzK2iVWzPv5i+n9eMK8FOKwCSyCw5Gdx6pCip
+6xpn6CqwdUWfSwPjS7UJX4rj+AvBLe2zmTpLhnatE2soKLVtBC3kD21Vl1fxnD+l3dBZykBe5vYq
+EZ/TCsbuFQ5t4Uig7Tdc8l0NR14UFf1Bjg0mhclIKAk58+5BXBd4WPQ8OzOeQgjN1ND538bsVHZ/
+KjB9ZcpvxuSucWlS1Xwo7JcvBlFHx7ZbN2NBe3OjROQj5I7m9hzTXQlviQ9BAgMBAAEwDQYJKoZI
+hvcNAQELBQADggEBAAAFVzT7V1WlD/ZNsDWQMOITiqeZ9BHXjpJrTHXnb7kBd/XfnByZCx48k6d8
+3dtktRG4BYDQekT5UT14nuGor3AxkgBnPPDRdsRDns2y2a99MfygHPeDhrLCo4p/l/GjKGUqaVMV
+RyNY+oM8nbxFoVQSEVI4HeBebolfkwTgDo9/cRpKQlyAYGy0XWpWI88VmG+XEeap4glWyq0YNqEF
+oIUrRLrkU8MPUkCHknq29Jahxd4Gi/NqRheCtSNB2wF4Kvw/sSI+pW6mZXISPGuKkKtiHO+ckz/9
+zbfy7Og7de3k+jvrQPVuHrWoP7xVo4U8BgSI478q40zN38L1DdxyGXoAADGCAk0wggJJAgEBMEEw
+NTELMAkGA1UEBhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBAgiq
+oXQpnt098TANBglghkgBZQMEAgEFAKCB3jAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqG
+SIb3DQEJBTEPFw0xOTA3MzAxNjU0NDFaMC0GCSqGSIb3DQEJNDEgMB4wDQYJYIZIAWUDBAIBBQCh
+DQYJKoZIhvcNAQELBQAwLwYJKoZIhvcNAQkEMSIEIOMEtF0dzihCk0ovkZlOjrTLkTvzn6li1O5H
+kGIgC6AmMEQGCSqGSIb3DQEJDzE3MDUwCwYJYIZIAWUDBAECMAsGCWCGSAFlAwQBFjALBglghkgB
+ZQMEASowDAYKKoZIhvcNAQkPATANBgkqhkiG9w0BAQsFAASCAQAsn6HQfhnSiH+hjlmk2lh62+Cl
+/81yTg2uyavLEH3vfpdcuAWTPjVNw9LctZdTjblrcW/RMEHL+HadOrI8h0l5/QmxmVyqujZ4Ih7F
+LOtqeMVQ9jYFNgED++VJcdHBmg5RJRJ3bji0iM/D+XnAFeyfTyNFPiXV3HUtFT0GtRbJX0pIEWms
+WfjgLLuaMtnpG2kexkijqW+S1dAbr2j6eWZZxzofTajK0vKADn/os1h5riWOGoLLtd9elzs19jxg
+YYMNNILI9YLjgRTUMepZCduKKfBvNOh61sHHsrZ9CE2H5tHGda83YIeUZqJfDUsqa4LDnJvE+w9j
+34xD7G4TIytqAAAAAAAA
+------=_Part_0_576261694.1564505681384--
diff --git a/myKey.pem b/myKey.pem
new file mode 100644
index 0000000000000000000000000000000000000000..68e28d6f471157958e18e57f56b6c5a3f9701b4f
--- /dev/null
+++ b/myKey.pem
@@ -0,0 +1,40 @@
+-----BEGIN CERTIFICATE-----
+MIIDpzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X
+DTIwMDMwNTEzMzUxNVoXDTQwMDIyOTEzMzUxMVowMjELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ
+8zF00+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRC
+SR/ENsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc
+0PHKu6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/
+CI+GYjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK2
+7++kfsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsG
+A1UdEQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95za
+SSmuP0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpY
+FZxKcDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwK
+QSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3
+DQEBCwUAA4IBAQAvIknw5G8YV85/5LR90tCocane3jse5gE9AEoqSWDUemfnhmJd
+MOOMjZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU
+5sIU7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nn
+xq9K9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxh
+cNFLTtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7
+XFB7TFYvphnuQZKw5mG0FNyADnP0CgGPobTI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz
+MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF
+xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4
+Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI
+j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk
+RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x
+GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu
+/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx
+t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR
+jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK
+5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf
+n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg==
+-----END CERTIFICATE-----
diff --git a/myTestCA.pem b/myTestCA.pem
new file mode 100644
index 0000000000000000000000000000000000000000..16201daedb63dbb2a9ed7d1ff20ee7549853cf5e
--- /dev/null
+++ b/myTestCA.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz
+MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF
+xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4
+Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI
+j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk
+RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x
+GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu
+/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx
+t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR
+jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK
+5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf
+n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg==
+-----END CERTIFICATE-----
diff --git a/mykey2.pem b/mykey2.pem
new file mode 100644
index 0000000000000000000000000000000000000000..9b93006ff6d0a880b200079a2c1d1a8fa903e61b
--- /dev/null
+++ b/mykey2.pem
@@ -0,0 +1,84 @@
+Bag Attributes
+    friendlyName: myKey
+    localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30 
+Key Attributes: <No Attributes>
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCUFDosMJHlsuIb
+ot/2FE4qXg388BqaEtkuJ8Ea18nzMXTT6dYH53wAfIt33OwqxEFpcrN3GndhRJTk
+g68wmTvSFP23tVKWNk1SJOZAlEJJH8Q2wKTnt4Bh6y3XEXxZ3csgNM+BL3jItD+l
+FZviSkqQyGreXZ+XnQPHRYH0IpzQ8cq7obJnzKMFsVsVltSJDLijUWR8K54lciCo
+smz+3bKonCy1hYjuQB/3JEQlWb8Ij4ZiMtUn9Iju/8XnIuspkay83ktUyz7hYAld
+K3yvn+tsrOepr98n+aU6bGJSYrbv76R+xpBp2ryRoFbbuzy7wdL8afQJDemKcMQI
+87ra30mxAgMBAAECggEAAKj11iqggNixyS1KJcyIVBLOSZ0Cmlfoica7CwEF7SMr
+RefxjeBsUSEnpZDu6Mp42eo9O76lhEcyvxwUOsweYWjPFXDjLt4Wt8MIN3FtuZ9A
+5TH+6NU8nFBzeFVIrmAb+ASXku1krVIqg98Uo6RgqxQ9791/a594mTHBgwvTMqYf
+1024bF9ImI/GhIbzPeX2lrbzHq+HZ6jXg/Jjx0QWfYhyTPqvvCUhyiY0WBvelsQH
+orlh7IhnSyFQ6FqgPXzoYWOmHqXODUmmCS6nMct5hRq3Fagvr8aNp2wD6FoYuJGd
+FSvIwX+ZMNgzObNA4flY7TfplOaTl6PV6H+KGJ14wQKBgQDEV1hRuKGPB27BH40x
+pu0lRmgE/5pdz2Vbg6AuRelZEVCKju33tvXhNrzhPj85jRCPNMPFWQJPlJsQ7lB8
+wEANc1PnLffxfwBFs7ke1h3qs6WBkKVtVxXDed1SsMkZ3CmVotSIp3fLzbl9SMYv
+Pih3arKI0wwTV8i4Ort5QNyOwQKBgQDBEr7x684we+rISodiDZATmX7fAw490M2u
+KQHC3hmAB0Y6htx4E2ti7jNtzV95XkBoW3vShC75xDIZJwXM+yVxYZRQ3dcEMmE7
+yR+npAI6pFZGBTsAs9mXUP+JIQVwKbNpTH8x2klb6ylXGJvFFGAhwq4ni4lf1xls
+s7x93Vxm8QKBgQCVgCSh5UIvVGuC5fFu8znzfg7Kb44tDDSTYEBhu54Y0dRQDNEq
+I8hJepKLuAgQXFdVk8nVxRa7Xd5NIAltVD3xf/VNPHVlD103tcepsUQKaEwHwgoU
+nZDWzT43LqGR7VBEvj2y6EGRj85DlVxCsMPDWh0jjf/N4rPVg/MoOrk2gQKBgQCS
+HRquQLNJE+5pZ6WvOe5oNsjCAzD67RNLEzOHAsgvkNHAJyGgKaoiM3xuQ3dWhVKe
+52T8uxZF5Qm46URFjWcXuC4jSM+ZGHtnYFz5ZHBfatDzqq+tZ25rSlworfnMmXJy
+ZPb5hmXwDza4+CGiczoRMqDTwpDTHBjcn+UtJ6HvMQKBgACDZQgWdYXLrGl6qB6A
+X0Xb6hoEuz7BeP+ZW3tspyjySLe8SXDf8QXQXvyfivo1N3VxbWuTSf/e4U2SqXXH
++/kFUS+KgKMKWefR+MJ3+Do8AGf4lrqf9AsSnrTtLskuS9aab9lZ1Mm/Q4P79K2J
+eforhMXYki+DqiwhRf6Q3rxF
+-----END PRIVATE KEY-----
+Bag Attributes
+    friendlyName: myKey
+    localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30 
+subject=C = DE, O = A MAILTEST, CN = myKey
+
+issuer=C = DE, O = A MAILTEST, CN = myTestCA
+
+-----BEGIN CERTIFICATE-----
+MIIDpzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
+BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X
+DTIwMDMwNTEzMzUxNVoXDTQwMDIyOTEzMzUxMVowMjELMAkGA1UEBhMCREUxEzAR
+BgNVBAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ
+8zF00+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRC
+SR/ENsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc
+0PHKu6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/
+CI+GYjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK2
+7++kfsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsG
+A1UdEQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95za
+SSmuP0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpY
+FZxKcDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwK
+QSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3
+DQEBCwUAA4IBAQAvIknw5G8YV85/5LR90tCocane3jse5gE9AEoqSWDUemfnhmJd
+MOOMjZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU
+5sIU7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nn
+xq9K9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxh
+cNFLTtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7
+XFB7TFYvphnuQZKw5mG0FNyADnP0CgGPobTI
+-----END CERTIFICATE-----
+Bag Attributes: <Empty Attributes>
+subject=C = DE, O = A MAILTEST, CN = myTestCA
+
+issuer=C = DE, O = A MAILTEST, CN = myTestCA
+
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF
+MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz
+MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK
+DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF
+xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4
+Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI
+j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk
+RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x
+GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu
+/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx
+t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR
+jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK
+5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf
+n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg==
+-----END CERTIFICATE-----