diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj
index 02d892ea2a9d0e336902fc660fd479489556ff9f..5aca85367fa66a7d217b10303c058861829deae8 100644
--- a/enzevalos_iphone.xcodeproj/project.pbxproj
+++ b/enzevalos_iphone.xcodeproj/project.pbxproj
@@ -33,7 +33,6 @@
 		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 */; };
-		47128FC9240BD3F70019F5CA /* Inbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47128FC8240BD3F70019F5CA /* Inbox.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 */; };
@@ -65,17 +64,23 @@
 		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 */; };
-		4760F438240D59CA0019A184 /* KeyRecordRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F437240D59CA0019A184 /* KeyRecordRow.swift */; };
-		4760F43B240D5C050019A184 /* CiricleImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F43A240D5C050019A184 /* CiricleImage.swift */; };
-		4760F43D240D6E2B0019A184 /* MailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F43C240D6E2B0019A184 /* MailView.swift */; };
-		4760F440240E520C0019A184 /* Stroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F43F240E520C0019A184 /* Stroke.swift */; };
-		4760F444240E9D150019A184 /* VCSwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F443240E9D150019A184 /* VCSwiftUIView.swift */; };
-		4760F45A241027370019A184 /* InboxCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F459241027370019A184 /* InboxCoordinator.swift */; };
-		4760F46224114DE50019A184 /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F46124114DE50019A184 /* SearchBar.swift */; };
-		4760F466241195AB0019A184 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4760F465241195AB0019A184 /* SearchView.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 */; };
@@ -134,6 +139,12 @@
 		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 */; };
@@ -141,10 +152,7 @@
 		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 */; };
-		7185E9612420F6300048AD91 /* EmailAdressTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7185E9602420F6300048AD91 /* EmailAdressTests.swift */; };
 		71DFE5BA240679E80042019C /* HeaderExtractionValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */; };
-		74ABD44C240D4E0B00671734 /* NewOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ABD44B240D4E0B00671734 /* NewOnboardingView.swift */; };
-		74ABD44F240E635E00671734 /* OnboardingIntro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ABD44E240E635E00671734 /* OnboardingIntro.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 */; };
@@ -163,8 +171,6 @@
 		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 */; };
-		976EEBED240D47C3006FE574 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976EEBEC240D47C3006FE574 /* AuthenticationViewModel.swift */; };
-		97B2F4D6240D321B000DB34E /* AuthenticationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97B2F4D5240D321B000DB34E /* AuthenticationScreen.swift */; };
 		988C9C5D240D507A006213F0 /* PhishingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988C9C5C240D507A006213F0 /* PhishingTests.swift */; };
 		A102AA8A1EDDB4F40024B457 /* videoOnboarding2.m4v in Resources */ = {isa = PBXBuildFile; fileRef = A102AA891EDDB4E80024B457 /* videoOnboarding2.m4v */; };
 		A1083A541E8BFEA6003666B7 /* Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1083A531E8BFEA6003666B7 /* Onboarding.swift */; };
@@ -310,7 +316,6 @@
 		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>"; };
-		47128FC8240BD3F70019F5CA /* Inbox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Inbox.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>"; };
@@ -344,17 +349,133 @@
 		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>"; };
-		4760F437240D59CA0019A184 /* KeyRecordRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyRecordRow.swift; sourceTree = "<group>"; };
-		4760F43A240D5C050019A184 /* CiricleImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CiricleImage.swift; sourceTree = "<group>"; };
-		4760F43C240D6E2B0019A184 /* MailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailView.swift; sourceTree = "<group>"; };
-		4760F43F240E520C0019A184 /* Stroke.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stroke.swift; sourceTree = "<group>"; };
-		4760F443240E9D150019A184 /* VCSwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VCSwiftUIView.swift; sourceTree = "<group>"; };
-		4760F459241027370019A184 /* InboxCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InboxCoordinator.swift; sourceTree = "<group>"; };
-		4760F46124114DE50019A184 /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = "<group>"; };
-		4760F465241195AB0019A184 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.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>"; };
@@ -415,6 +536,10 @@
 		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>"; };
@@ -424,10 +549,7 @@
 		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>"; };
 		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>"; };
-		7185E9602420F6300048AD91 /* EmailAdressTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailAdressTests.swift; sourceTree = "<group>"; };
 		71DFE5B9240679E80042019C /* HeaderExtractionValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderExtractionValues.swift; sourceTree = "<group>"; };
-		74ABD44B240D4E0B00671734 /* NewOnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewOnboardingView.swift; sourceTree = "<group>"; };
-		74ABD44E240E635E00671734 /* OnboardingIntro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingIntro.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>"; };
@@ -450,8 +572,10 @@
 		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; };
-		976EEBEC240D47C3006FE574 /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = "<group>"; };
-		97B2F4D5240D321B000DB34E /* AuthenticationScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationScreen.swift; sourceTree = "<group>"; };
+		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; };
 		988C9C5C240D507A006213F0 /* PhishingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingTests.swift; sourceTree = "<group>"; };
 		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>"; };
@@ -575,8 +699,10 @@
 			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 */,
@@ -695,65 +821,208 @@
 			path = testKeys;
 			sourceTree = "<group>";
 		};
-		47128FC6240BD3CC0019F5CA /* SwiftUI */ = {
+		472F39921E279792009260FB /* protocols */ = {
 			isa = PBXGroup;
 			children = (
-				4760F439240D5BEF0019A184 /* SupportingViews */,
-				47128FC7240BD3D90019F5CA /* Inbox */,
+				472F398D1E251B8D009260FB /* MailAddress.swift */,
+				472F39851E1FA34E009260FB /* Record.swift */,
+				472F39891E251787009260FB /* Contact.swift */,
+				47691A891ECB56D1004BCFC5 /* Mail.swift */,
 			);
-			path = SwiftUI;
+			name = protocols;
 			sourceTree = "<group>";
 		};
-		47128FC7240BD3D90019F5CA /* Inbox */ = {
+		476403FA2413F95300C7D426 /* OpenSSL */ = {
 			isa = PBXGroup;
 			children = (
-				47128FC8240BD3F70019F5CA /* Inbox.swift */,
-				4760F437240D59CA0019A184 /* KeyRecordRow.swift */,
-				4760F459241027370019A184 /* InboxCoordinator.swift */,
+				4764060D2416AA6F00C7D426 /* include */,
+				476406082416AA6F00C7D426 /* lib */,
 			);
-			path = Inbox;
+			path = OpenSSL;
 			sourceTree = "<group>";
 		};
-		472F39921E279792009260FB /* protocols */ = {
+		476406082416AA6F00C7D426 /* lib */ = {
 			isa = PBXGroup;
 			children = (
-				472F398D1E251B8D009260FB /* MailAddress.swift */,
-				472F39851E1FA34E009260FB /* Record.swift */,
-				472F39891E251787009260FB /* Contact.swift */,
-				47691A891ECB56D1004BCFC5 /* Mail.swift */,
+				476406092416AA6F00C7D426 /* libcrypto.a */,
+				4764060B2416AA6F00C7D426 /* libssl.a */,
 			);
-			name = protocols;
+			path = lib;
 			sourceTree = "<group>";
 		};
-		4760F439240D5BEF0019A184 /* SupportingViews */ = {
+		4764060D2416AA6F00C7D426 /* include */ = {
 			isa = PBXGroup;
 			children = (
-				4760F44C240F9C010019A184 /* SwiftUI to UIKit */,
-				4760F43E240E52010019A184 /* Geometry */,
-				4760F43A240D5C050019A184 /* CiricleImage.swift */,
-				4760F43C240D6E2B0019A184 /* MailView.swift */,
-				4760F465241195AB0019A184 /* SearchView.swift */,
+				4764060E2416AA6F00C7D426 /* opensslconf-template.h */,
+				4764060F2416AA6F00C7D426 /* LICENSE */,
+				476406102416AA6F00C7D426 /* openssl */,
 			);
-			path = SupportingViews;
+			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>";
 		};
-		4760F43E240E52010019A184 /* Geometry */ = {
+		476406872416B54D00C7D426 /* SwiftUI */ = {
 			isa = PBXGroup;
 			children = (
-				4760F43F240E520C0019A184 /* Stroke.swift */,
+				476406882416B54D00C7D426 /* Inbox */,
+				4764068C2416B54D00C7D426 /* SupportingViews */,
 			);
-			path = Geometry;
+			path = SwiftUI;
+			sourceTree = "<group>";
+		};
+		476406882416B54D00C7D426 /* Inbox */ = {
+			isa = PBXGroup;
+			children = (
+				476406892416B54D00C7D426 /* KeyRecordRow.swift */,
+				4764068A2416B54D00C7D426 /* Inbox.swift */,
+				4764068B2416B54D00C7D426 /* InboxCoordinator.swift */,
+			);
+			path = Inbox;
 			sourceTree = "<group>";
 		};
-		4760F44C240F9C010019A184 /* SwiftUI to UIKit */ = {
+		4764068C2416B54D00C7D426 /* SupportingViews */ = {
 			isa = PBXGroup;
 			children = (
-				4760F443240E9D150019A184 /* VCSwiftUIView.swift */,
-				4760F46124114DE50019A184 /* SearchBar.swift */,
+				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 = (
@@ -856,29 +1125,32 @@
 			name = data;
 			sourceTree = "<group>";
 		};
-		47F0376C22A7278A0005C9DE /* private */ = {
+		47EABF04241A9C6400774A93 /* Recovered References */ = {
 			isa = PBXGroup;
 			children = (
-				47F0376D22A7278A0005C9DE /* accounts.json */,
+				97AACD2324178C230078A68E /* AuthenticationModel.swift */,
+				9771AA8B241161190023A096 /* MailAccount.swift */,
 			);
-			path = private;
+			name = "Recovered References";
 			sourceTree = "<group>";
 		};
-		7185E95F2420F5EF0048AD91 /* phishing */ = {
+		47EABF05241A9C7000774A93 /* Authentication */ = {
 			isa = PBXGroup;
 			children = (
-				988C9C5C240D507A006213F0 /* PhishingTests.swift */,
-				7185E9602420F6300048AD91 /* EmailAdressTests.swift */,
+				47EABF0C241A9CA800774A93 /* MailAccount.swift */,
+				47EABF06241A9C8700774A93 /* AuthenticationModel.swift */,
+				47EABF08241A9C8700774A93 /* AuthenticationScreen.swift */,
+				47EABF07241A9C8700774A93 /* AuthenticationViewModel.swift */,
 			);
-			path = phishing;
+			name = Authentication;
 			sourceTree = "<group>";
 		};
-		74ABD44D240E633700671734 /* SwiftUI */ = {
+		47F0376C22A7278A0005C9DE /* private */ = {
 			isa = PBXGroup;
 			children = (
-				74ABD44E240E635E00671734 /* OnboardingIntro.swift */,
+				47F0376D22A7278A0005C9DE /* accounts.json */,
 			);
-			name = SwiftUI;
+			path = private;
 			sourceTree = "<group>";
 		};
 		78280F99990BFF65543B7F0B /* Frameworks */ = {
@@ -948,13 +1220,13 @@
 			name = Data;
 			sourceTree = "<group>";
 		};
-		97B2F4D4240D31E6000DB34E /* authentication */ = {
+		97C5279D241A9F690030BBC9 /* authentication */ = {
 			isa = PBXGroup;
 			children = (
-				97B2F4D5240D321B000DB34E /* AuthenticationScreen.swift */,
-				976EEBEC240D47C3006FE574 /* AuthenticationViewModel.swift */,
+				97C527A0241AA4090030BBC9 /* GeneratedMocks.swift */,
+				97C5279E241A9F7B0030BBC9 /* AuthenticationTests.swift */,
 			);
-			name = authentication;
+			path = authentication;
 			sourceTree = "<group>";
 		};
 		A10DE41E1EFAA140005E8189 /* folders */ = {
@@ -985,6 +1257,7 @@
 				47A5D6E12294BF3A0084F81D /* TempKey.swift */,
 				475B00311F7B9565006CDD41 /* Cryptography.swift */,
 				475B00321F7B9565006CDD41 /* CryptoObject.swift */,
+				476406832416AA9100C7D426 /* TestOpenSSL.swift */,
 			);
 			name = Encryption;
 			sourceTree = "<group>";
@@ -1007,6 +1280,7 @@
 				A13526761D955BDF00D3BFE1 /* Products */,
 				24472862977D71D3F0AD0D58 /* Pods */,
 				78280F99990BFF65543B7F0B /* Frameworks */,
+				47EABF04241A9C6400774A93 /* Recovered References */,
 			);
 			sourceTree = "<group>";
 		};
@@ -1023,8 +1297,9 @@
 		A13526771D955BDF00D3BFE1 /* enzevalos_iphone */ = {
 			isa = PBXGroup;
 			children = (
-				47128FC6240BD3CC0019F5CA /* SwiftUI */,
-				97B2F4D4240D31E6000DB34E /* authentication */,
+				47EABF05241A9C7000774A93 /* Authentication */,
+				476406872416B54D00C7D426 /* SwiftUI */,
+				476403FA2413F95300C7D426 /* OpenSSL */,
 				A1B9999D21DE7CD2002563F6 /* Travel */,
 				477548DC21F5DA46000B22A8 /* mail */,
 				F1866C84201F703200B72453 /* OAuth */,
@@ -1065,7 +1340,8 @@
 		A135268F1D955BE000D3BFE1 /* enzevalos_iphoneTests */ = {
 			isa = PBXGroup;
 			children = (
-				7185E95F2420F5EF0048AD91 /* phishing */,
+				97C5279D241A9F690030BBC9 /* authentication */,
+				988C9C5C240D507A006213F0 /* PhishingTests.swift */,
 				47F0376C22A7278A0005C9DE /* private */,
 				470709202189C24800DF71A3 /* testKeys */,
 				470709112189BB4A00DF71A3 /* testMails */,
@@ -1145,14 +1421,14 @@
 		A18C76851E8185ED00B21414 /* onboarding */ = {
 			isa = PBXGroup;
 			children = (
-				74ABD44D240E633700671734 /* SwiftUI */,
+				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 */,
-				74ABD44B240D4E0B00671734 /* NewOnboardingView.swift */,
 			);
 			name = onboarding;
 			sourceTree = "<group>";
@@ -1333,8 +1609,6 @@
 			dependencies = (
 			);
 			name = enzevalos_iphone;
-			packageProductDependencies = (
-			);
 			productName = enzevalos_iphone;
 			productReference = A13526751D955BDF00D3BFE1 /* enzevalos_iphone.app */;
 			productType = "com.apple.product-type.application";
@@ -1344,6 +1618,7 @@
 			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 */,
@@ -1416,8 +1691,6 @@
 				de,
 			);
 			mainGroup = A135266C1D955BDF00D3BFE1;
-			packageReferences = (
-			);
 			productRefGroup = A13526761D955BDF00D3BFE1 /* Products */;
 			projectDirPath = "";
 			projectRoot = "";
@@ -1451,6 +1724,7 @@
 				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 */,
@@ -1528,6 +1802,7 @@
 				"${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",
@@ -1541,6 +1816,7 @@
 			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",
@@ -1555,6 +1831,24 @@
 			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;
@@ -1650,10 +1944,11 @@
 				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 */,
-				4760F43B240D5C050019A184 /* CiricleImage.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 */,
@@ -1662,9 +1957,9 @@
 				8428A8651F436A11007649A5 /* BadgeCaseCollectionViewCell.swift in Sources */,
 				472F39811E1E5347009260FB /* Mail_Address+CoreDataClass.swift in Sources */,
 				A1EB05821D95685B008659C1 /* CollectionDataDelegate.swift in Sources */,
-				4760F43D240D6E2B0019A184 /* MailView.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 */,
@@ -1677,31 +1972,31 @@
 				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 */,
 				F113C3851F30D06800E7F1D6 /* QRScannerView.swift in Sources */,
 				477670C6228454F700043604 /* ButtonCell.swift in Sources */,
 				F18B44601E704C550080C041 /* ReplaceSegue.swift in Sources */,
-				4760F46224114DE50019A184 /* SearchBar.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 */,
-				4760F444240E9D150019A184 /* VCSwiftUIView.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 */,
-				97B2F4D6240D321B000DB34E /* AuthenticationScreen.swift in Sources */,
 				F1AF938F1E2D04BA00755128 /* CustomCells.swift in Sources */,
 				8428A8711F436A1E007649A5 /* GamificationStatusViewController.swift in Sources */,
 				F1866C86201F707200B72453 /* EmailHelper.m in Sources */,
 				47F79241203492E3005E7DB6 /* KeyRecord+CoreDataProperties.swift in Sources */,
-				976EEBED240D47C3006FE574 /* AuthenticationViewModel.swift in Sources */,
 				A10DE4201EFAA2CE005E8189 /* FolderViewController.swift in Sources */,
 				3EB4FA9F2012007C001D0625 /* DialogViewController.swift in Sources */,
 				476142081E07E52B00FD5E4F /* Theme.swift in Sources */,
@@ -1710,10 +2005,7 @@
 				476801DB218436B600F7F259 /* Autocrypt.swift in Sources */,
 				A1EB057A1D956829008659C1 /* ContactCell.swift in Sources */,
 				A12FC23120221A1400196008 /* ExportInfoViewController.swift in Sources */,
-				74ABD44F240E635E00671734 /* OnboardingIntro.swift in Sources */,
 				4751C6EE233CA583006B2A4D /* DateExtension.swift in Sources */,
-				74ABD44C240D4E0B00671734 /* NewOnboardingView.swift in Sources */,
-				4760F440240E520C0019A184 /* Stroke.swift in Sources */,
 				477548DE21F5DABE000B22A8 /* MailServerConnectionError.swift in Sources */,
 				475DF47A1F0D54C9009D807F /* Folder+CoreDataProperties.swift in Sources */,
 				475B00431F7BB6D6006CDD41 /* PersistentKey+CoreDataProperties.swift in Sources */,
@@ -1732,6 +2024,7 @@
 				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 */,
@@ -1741,7 +2034,6 @@
 				A1EB05841D956867008659C1 /* TableViewDataDelegate.swift in Sources */,
 				8428A85E1F436A05007649A5 /* CircleView.swift in Sources */,
 				A182182C21E5072200918A29 /* IntroDescriptionViewController.swift in Sources */,
-				47128FC9240BD3F70019F5CA /* Inbox.swift in Sources */,
 				F1C7AC821FED6473007629DB /* AboutViewController.swift in Sources */,
 				A182183421E51DD200918A29 /* IntroContactCell.swift in Sources */,
 				472F397C1E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift in Sources */,
@@ -1750,6 +2042,7 @@
 				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 */,
@@ -1757,19 +2050,20 @@
 				8428A85F1F436A05007649A5 /* GamificationData.swift in Sources */,
 				475DF4791F0D54C9009D807F /* Folder+CoreDataClass.swift in Sources */,
 				A15D215B223BE5F4003E0CE0 /* TempAttachment.swift in Sources */,
-				4760F438240D59CA0019A184 /* KeyRecordRow.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 */,
+				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 */,
-				4760F466241195AB0019A184 /* SearchView.swift in Sources */,
 				0E6551A72406A42300DE30FC /* SearchHelper.swift in Sources */,
 				472F398E1E251B8D009260FB /* MailAddress.swift in Sources */,
 				A198D2292056B384004CC838 /* SendViewDelegate.swift in Sources */,
@@ -1778,13 +2072,15 @@
 				474994022261E4E6000F8DA5 /* SimpleSendIcon.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 */,
+				47EABF0B241A9C8700774A93 /* AuthenticationScreen.swift in Sources */,
 				8428A8681F436A11007649A5 /* SubBadgeTableViewCell.swift in Sources */,
-				4760F45A241027370019A184 /* InboxCoordinator.swift in Sources */,
 				A1EB05861D956872008659C1 /* FrequentCell.swift in Sources */,
 				F12041FB1DA3FBF7002E4940 /* ListViewController.swift in Sources */,
 				F18B445E1E7044B70080C041 /* FlipTransition.swift in Sources */,
@@ -1800,16 +2096,17 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				7185E9612420F6300048AD91 /* EmailAdressTests.swift in Sources */,
 				8428A8831F436AC9007649A5 /* GamificationDataUnitTest.swift in Sources */,
 				3EC35F302003838E008BDF95 /* InvitationTests.swift in Sources */,
 				474054982244D7A9007CF83B /* MailServerConfigurationTest.swift in Sources */,
 				479B5977206914BE00B3944D /* CryptoTests.swift in Sources */,
 				A15D215F223BE6E4003E0CE0 /* MailTest.swift in Sources */,
+				47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */,
 				988C9C5D240D507A006213F0 /* PhishingTests.swift in Sources */,
 				4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */,
 				47C22281218AFD6300BD2C2B /* AutocryptTest.swift in Sources */,
 				478154AE2200641900A931EC /* StudyTest.swift in Sources */,
+				47EABF0E2420C63600774A93 /* GeneratedMocks.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2006,6 +2303,7 @@
 				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 = "";
@@ -2059,6 +2357,7 @@
 				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 = "";
@@ -2085,13 +2384,30 @@
 					"$(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)",
-					"\"${PODS_ROOT}/OpenSSL-Universal/lib-ios\"",
 					"$(inherited)",
+					"$(PROJECT_DIR)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
 				);
 				OTHER_LDFLAGS = (
 					"$(inherited)",
@@ -2117,6 +2433,8 @@
 				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";
@@ -2143,13 +2461,30 @@
 					"$(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)",
-					"\"${PODS_ROOT}/OpenSSL-Universal/lib-ios\"",
 					"$(inherited)",
+					"$(PROJECT_DIR)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
 				);
 				OTHER_LDFLAGS = (
 					"$(inherited)",
@@ -2175,10 +2510,10 @@
 				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;
-				"USER_HEADER_SEARCH_PATHS[arch=*]" = "";
 			};
 			name = Release;
 		};
@@ -2193,12 +2528,28 @@
 					"$(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)",
-					"\"${PODS_ROOT}/OpenSSL-Universal/lib-ios\"",
 					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
 				);
 				PRODUCT_BUNDLE_IDENTIFIER = "fu-berlin.enzevalos-iphoneTests";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2218,12 +2569,28 @@
 					"$(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)",
-					"\"${PODS_ROOT}/OpenSSL-Universal/lib-ios\"",
 					"$(inherited)",
+					"$(PROJECT_DIR)/enzevalos_iphone/OpenSSL/lib",
 				);
 				PRODUCT_BUNDLE_IDENTIFIER = "fu-berlin.enzevalos-iphoneTests";
 				PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/enzevalos_iphone/Settings.bundle/Acknowledgements.plist b/enzevalos_iphone/Settings.bundle/Acknowledgements.plist
index 140340f470708021a4119e1c7b168d14bc4a6ae9..f980e2ea72ba02630976c55d44c7a2fd0c029938 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
diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift b/enzevalos_iphoneTests/GeneratedMocks.swift
new file mode 100644
index 0000000000000000000000000000000000000000..552c2d20e7b914e47050b83687bff4fe6e5f7707
--- /dev/null
+++ b/enzevalos_iphoneTests/GeneratedMocks.swift
@@ -0,0 +1,1086 @@
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-03-17 08:58:58 +0000
+
+//
+//  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)
+    }
+    
+}
+
+
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-03-17 08:58:58 +0000
+
+//
+//  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/authentication/AuthenticationTests.swift b/enzevalos_iphoneTests/authentication/AuthenticationTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..46ec9c172820eb352888e6d9e3d4c017ad595b6a
--- /dev/null
+++ b/enzevalos_iphoneTests/authentication/AuthenticationTests.swift
@@ -0,0 +1,109 @@
+//
+//  AuthenticationTests.swift
+//  enzevalos_iphoneTests
+//
+//  Created by Cezary Pilaszewicz on 12.03.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Cuckoo
+import XCTest
+import Combine
+
+@testable import enzevalos_iphone
+class AuthenticationTests: XCTestCase {
+    let login = "test_login"
+    let password = "test_password"
+    let username = "test_uesrname"
+    let imapServer = "test.imap.server.de"
+    let imapPort = 997
+    let imapEncryption = MCOConnectionType.startTLS.rawValue
+    let smtpServer = "test.smtp.server.com"
+    let smtpPort = 1234
+    let smtpEncryption = MCOConnectionType.startTLS.rawValue
+
+    
+    //Test whether correct arguments are passed to the model
+    func testValidate() {
+        let model = MockAuthenticationModel().withEnabledSuperclassSpy()
+        let viewModel = MockAuthenticationViewModel(authenticationModel: model).withEnabledSuperclassSpy()
+        let future: Future<AuthenticationModel.AuthenticationResult, Never> = Future {
+            promise  in promise(.success(AuthenticationModel.AuthenticationResult.Success))
+        }
+        stub(model) { stub in
+            when(stub.checkConfig(mailAccount: any(), extendedValidation: false)).thenReturn(future)
+        }
+        viewModel.validate(self.login, self.password)
+        let argumentCaptor = ArgumentCaptor<MailAccount>()
+        verify(model).checkConfig(mailAccount: argumentCaptor.capture(), extendedValidation: false)
+        let passedMailAccount =  argumentCaptor.value
+        XCTAssertEqual(passedMailAccount?.emailAddress, self.login)
+        XCTAssertEqual(passedMailAccount?.password, self.password)
+    }
+    
+    func testDetailValidate() {
+        let model = MockAuthenticationModel().withEnabledSuperclassSpy()
+        let viewModel = MockAuthenticationViewModel(authenticationModel: model).withEnabledSuperclassSpy()
+        let future: Future<AuthenticationModel.AuthenticationResult, Never> = Future {
+            promise  in promise(.success(AuthenticationModel.AuthenticationResult.Success))
+        }
+        stub(model) { stub in
+            when(stub.checkConfig(mailAccount: any(), extendedValidation: true)).thenReturn(future)
+        }
+        viewModel.detailValidation(login, password, username, imapServer, String(imapPort), imapEncryption, smtpServer, String(smtpPort), smtpEncryption)
+        let argumentCaptor = ArgumentCaptor<MailAccount>()
+        verify(model).checkConfig(mailAccount: argumentCaptor.capture(), extendedValidation: true)
+        let passedMailAccount =  argumentCaptor.value
+        XCTAssertEqual(passedMailAccount?.emailAddress, self.login)
+        XCTAssertEqual(passedMailAccount?.password, self.password)
+        XCTAssertEqual(passedMailAccount?.username, self.username)
+        XCTAssertEqual(passedMailAccount?.imapServer, self.imapServer)
+        XCTAssertEqual(passedMailAccount?.imapPort, self.imapPort)
+        XCTAssertEqual(passedMailAccount?.imapEncryption, self.imapEncryption)
+        XCTAssertEqual(passedMailAccount?.smtpServer, self.smtpServer)
+        XCTAssertEqual(passedMailAccount?.smtpPort, self.smtpPort)
+        XCTAssertEqual(passedMailAccount?.smtpEncryption, self.smtpEncryption)
+    }
+    
+    //Test authentification results
+    func testAuthenticationSuccessful() {
+        let model = MockAuthenticationModel().withEnabledSuperclassSpy()
+        let viewModel = MockAuthenticationViewModel(authenticationModel: model).withEnabledSuperclassSpy()
+        let future: Future<AuthenticationModel.AuthenticationResult, Never> = Future {
+            promise  in promise(.success(AuthenticationModel.AuthenticationResult.Success))
+        }
+        stub(model) { stub in
+            when(stub.checkConfig(mailAccount: any(), extendedValidation: false)).thenReturn(future)
+        }
+        viewModel.validate(self.login, self.password)
+        verify(viewModel).authenticationSucceed()
+    }
+    
+    func testAuthenticationFailed() {
+        let model = MockAuthenticationModel().withEnabledSuperclassSpy()
+        let viewModel = MockAuthenticationViewModel(authenticationModel: model).withEnabledSuperclassSpy()
+        let future: Future<AuthenticationModel.AuthenticationResult, Never> = Future {
+            promise  in promise(.success(AuthenticationModel.AuthenticationResult.Error(value: MailServerConnectionError.AuthenticationError)))
+        }
+        stub(model) { stub in
+            when(stub.checkConfig(mailAccount: any(), extendedValidation: false)).thenReturn(future)
+        }
+        viewModel.validate(self.login, self.password)
+        let argumentCaptor = ArgumentCaptor<MailServerConnectionError>()
+        verify(viewModel).authenticationFailed(error: argumentCaptor.capture())
+        XCTAssertEqual(argumentCaptor.value, MailServerConnectionError.AuthenticationError)
+    }
+    
+    func testAuthenticationTimeout() {
+        let model = MockAuthenticationModel().withEnabledSuperclassSpy()
+        let viewModel = MockAuthenticationViewModel(authenticationModel: model).withEnabledSuperclassSpy()
+        let future: Future<AuthenticationModel.AuthenticationResult, Never> = Future {
+            promise  in promise(.success(AuthenticationModel.AuthenticationResult.Timeout))
+        }
+        stub(model) { stub in
+            when(stub.checkConfig(mailAccount: any(), extendedValidation: false)).thenReturn(future)
+        }
+        viewModel.validate(self.login, self.password)
+        verify(viewModel).timeoutNotification()
+    }
+}