diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj index e6905e90923eec20143baf91e040ce12ec76ab3f..4ff38c7928fa7ad94d1b51e310e8c8415135589f 100644 --- a/enzevalos_iphone.xcodeproj/project.pbxproj +++ b/enzevalos_iphone.xcodeproj/project.pbxproj @@ -7,6 +7,12 @@ objects = { /* Begin PBXBuildFile section */ + 0E1C457A24055F87006D104A /* signinlineK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457624055F87006D104A /* signinlineK9.eml */; }; + 0E1C457B24055F87006D104A /* signK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457724055F87006D104A /* signK9.eml */; }; + 0E1C457C24055F87006D104A /* signencK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457824055F87006D104A /* signencK9.eml */; }; + 0E1C457D24055F87006D104A /* signencinlineK9.eml in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457924055F87006D104A /* signencinlineK9.eml */; }; + 0E1C458024055FB7006D104A /* Alice.v3.pubsec.asc in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */; }; + 0E1C458124055FB7006D104A /* Alice.v3.pub.asc in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */; }; 3E6B07DE2011246500E49609 /* invitationText.html in Resources */ = {isa = PBXBuildFile; fileRef = 3E6B07DD2011246500E49609 /* invitationText.html */; }; 3EB4FA9F2012007C001D0625 /* DialogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB4FA9D2012007C001D0625 /* DialogViewController.swift */; }; 3EB4FAA12012007C001D0625 /* Dialog.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3EB4FA9E2012007C001D0625 /* Dialog.storyboard */; }; @@ -257,6 +263,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0E1C457624055F87006D104A /* signinlineK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signinlineK9.eml; sourceTree = "<group>"; }; + 0E1C457724055F87006D104A /* signK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signK9.eml; sourceTree = "<group>"; }; + 0E1C457824055F87006D104A /* signencK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signencK9.eml; sourceTree = "<group>"; }; + 0E1C457924055F87006D104A /* signencinlineK9.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = signencinlineK9.eml; sourceTree = "<group>"; }; + 0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Alice.v3.pubsec.asc; sourceTree = "<group>"; }; + 0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Alice.v3.pub.asc; sourceTree = "<group>"; }; 1D4A9E60565DECF52C011BC0 /* Pods-enzevalos_iphone-AdHoc.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone-AdHoc.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone-AdHoc/Pods-enzevalos_iphone-AdHoc.release.xcconfig"; sourceTree = "<group>"; }; 3E6B07DD2011246500E49609 /* invitationText.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = invitationText.html; path = Invitation/invitationText.html; sourceTree = "<group>"; }; 3E9708AD1FAC925D005825C9 /* enzevalos_iphone.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = enzevalos_iphone.entitlements; sourceTree = "<group>"; }; @@ -613,6 +625,10 @@ A15D215C223BE614003E0CE0 /* attachment.eml */, 47E7BE622232BD0A00C8EF94 /* SignedEncMailFromMac.eml */, 47E7BE5A22319B6900C8EF94 /* EncMailFromMac.eml */, + 0E1C457924055F87006D104A /* signencinlineK9.eml */, + 0E1C457824055F87006D104A /* signencK9.eml */, + 0E1C457624055F87006D104A /* signinlineK9.eml */, + 0E1C457724055F87006D104A /* signK9.eml */, 47E7BE6022319B8F00C8EF94 /* PlainMailFromMac.eml */, 47E7BE5E22319B7D00C8EF94 /* SecureMailFromMac.eml */, 47E7BE5C22319B7000C8EF94 /* SignedMailFromMac.eml */, @@ -634,6 +650,8 @@ 4774DD7222CFFD0E00BD8CF6 /* AliceMultiIDs (439EE43C) – Public.asc */, 4707092C2189C74200DF71A3 /* alicePublic.asc */, 4774DD7D22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc */, + 0E1C457F24055FB7006D104A /* Alice.v3.pub.asc */, + 0E1C457E24055FB7006D104A /* Alice.v3.pubsec.asc */, 4774DD7C22D4062200BD8CF6 /* Bob Letterbox (0B6CD0A0) – Secret.asc */, 471876F5223FACA900912135 /* BobPWTEST1234.asc */, 479AFDA122571AB90063A332 /* EccAlice(777879D4)–Public.asc */, @@ -1351,6 +1369,7 @@ 470709292189C73900DF71A3 /* signedInlineThunderbird.eml in Resources */, 8428A8841F436ACC007649A5 /* GamificationElements.xcassets in Resources */, 4707092D2189C74200DF71A3 /* bobSecret.asc in Resources */, + 0E1C457D24055F87006D104A /* signencinlineK9.eml in Resources */, 47F0376E22A7278A0005C9DE /* accounts.json in Resources */, 47E7BE5B22319B6900C8EF94 /* EncMailFromMac.eml in Resources */, 4774DD7522D0015F00BD8CF6 /* multiIDs.eml in Resources */, @@ -1365,11 +1384,16 @@ 4774DD7F22D4062200BD8CF6 /* Alice Letterbox (439EE43C) – Public.asc in Resources */, 470709302189E1C100DF71A3 /* enc+signedThunderbird.eml in Resources */, 47E7BE6122319B8F00C8EF94 /* PlainMailFromMac.eml in Resources */, + 0E1C457C24055F87006D104A /* signencK9.eml in Resources */, 4774DD8122D4067E00BD8CF6 /* signedEncMailFromApple.eml in Resources */, 4774DD7B22D3F5D100BD8CF6 /* multiIDs2.eml in Resources */, 470709272189C73900DF71A3 /* encThunderbird.eml in Resources */, + 0E1C457A24055F87006D104A /* signinlineK9.eml in Resources */, 47E7BE5D22319B7100C8EF94 /* SignedMailFromMac.eml in Resources */, 47E7BE5F22319B7D00C8EF94 /* SecureMailFromMac.eml in Resources */, + 0E1C457B24055F87006D104A /* signK9.eml in Resources */, + 0E1C458024055FB7006D104A /* Alice.v3.pubsec.asc in Resources */, + 0E1C458124055FB7006D104A /* Alice.v3.pub.asc in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1843,7 +1867,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -1897,7 +1921,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -1926,7 +1950,7 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; INFOPLIST_FILE = "enzevalos_iphone/PLists/enzevalos-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -1984,7 +2008,7 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; INFOPLIST_FILE = "enzevalos_iphone/PLists/enzevalos-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", diff --git a/enzevalos_iphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/enzevalos_iphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100755 index 0000000000000000000000000000000000000000..18d981003d68d0546c4804ac2ff47dd97c6e7921 --- /dev/null +++ b/enzevalos_iphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/enzevalos_iphone/AppDelegate.swift b/enzevalos_iphone/AppDelegate.swift index f7f5e42f1b2b446aac2c888e4e7511fe6c082d76..fa2e3ec793f82c7f9a1ea87fb2b03366e67fcc2d 100644 --- a/enzevalos_iphone/AppDelegate.swift +++ b/enzevalos_iphone/AppDelegate.swift @@ -39,7 +39,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - //UINavigationBar.appearance().backgroundColor = UIColor.blueColor() if UIScreen.main.bounds.height < 700 { kDefaultImageViewSize = 20 kDefaultTitleFontSize = 33 @@ -97,7 +96,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if url.absoluteURL.absoluteString.hasPrefix("com.googleusercontent.apps.459157836079-csn0a9p3r8p7q6216fn5u7a6vcum80gn") { if let currentAuthorizationFlow = EmailHelper.singleton().currentAuthorizationFlow { - if currentAuthorizationFlow.resumeAuthorizationFlow(with: url) { + if currentAuthorizationFlow.resumeExternalUserAgentFlow(with: url) { EmailHelper.singleton().currentAuthorizationFlow = nil return true } diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift index 29a3c72257e0484ee3d8a8520150c2c1d67681bc..35203ce89ed7cb63b143a7aed801c20c7f148772 100644 --- a/enzevalos_iphone/DataHandler.swift +++ b/enzevalos_iphone/DataHandler.swift @@ -1079,6 +1079,16 @@ class DataHandler { return [] } + func getAllNotDecryptedPersistentMail() -> [PersistentMail] { + let result = getAllPersistentMails().filter({ $0.encState == EncryptionState.UnableToDecrypt }) + return result + } + + func getAllNotSignedPersistentMail() -> [PersistentMail] { + let result = getAllPersistentMails().filter({ $0.sigState == SignatureState.NoPublicKey }) + return result + } + func deleteDecryptedMailCopies() { let secureMails = getAllPersistentMails().filter({ $0.isSecure }) for mail in secureMails { diff --git a/enzevalos_iphone/ExportInfoViewController.swift b/enzevalos_iphone/ExportInfoViewController.swift index 3d9cc4bd01a083b97d4dadc3e03ce69ac60f1736..6afc513158b4e3671b2d00cfe1eedd0a58b97d89 100644 --- a/enzevalos_iphone/ExportInfoViewController.swift +++ b/enzevalos_iphone/ExportInfoViewController.swift @@ -25,7 +25,7 @@ class ExportInfoViewController: UITableViewController { var calledFromTravel = false @IBAction func websiteButtonTouch(_ sender: Any) { - UIApplication.shared.openURL(URL(string: "https://" + url)!) + UIApplication.shared.open(URL(string: "https://" + url)!, options: [:], completionHandler: nil) } @IBAction func nextButtonTouch(_ sender: Any) { diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift index 42b4d199d56ea57ec8a83b9b88383d5c5b671539..1637bc58ffc54ef9584ee4a35dfc884fdd3eb5ed 100644 --- a/enzevalos_iphone/InboxViewController.swift +++ b/enzevalos_iphone/InboxViewController.swift @@ -30,7 +30,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator { var loading = false { didSet { if loading { - let activityIndicator = UIActivityIndicatorView(style: .gray) + let activityIndicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.medium) activityIndicator.frame = CGRect(x: 0, y: 0, width: 200, height: 44) activityIndicator.startAnimating() tableView.tableFooterView = activityIndicator @@ -70,7 +70,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator { lastUpdateButton.customView = lastUpdateLabel searchController.searchResultsUpdater = self - searchController.dimsBackgroundDuringPresentation = false + searchController.obscuresBackgroundDuringPresentation = false searchController.searchBar.scopeButtonTitles = [NSLocalizedString("Sender", comment: ""), NSLocalizedString("Subject", comment: ""), NSLocalizedString("Body", comment: ""), NSLocalizedString("All", comment: "")] searchController.searchBar.delegate = self if #available(iOS 11.0, *) { diff --git a/enzevalos_iphone/IntroInfoButton.swift b/enzevalos_iphone/IntroInfoButton.swift index 462d1e10deece22c56cb4920e6cf61047e448e5d..25c6fa9a4adf896bb2218d55c76158305ba5d2d3 100644 --- a/enzevalos_iphone/IntroInfoButton.swift +++ b/enzevalos_iphone/IntroInfoButton.swift @@ -54,8 +54,7 @@ extension IntroInfoButton where Self: UIViewController { let alert = UIAlertController(title: titleText, message: titleDescription, preferredStyle: .alert) if let url = url { alert.addAction(UIAlertAction(title: NSLocalizedString("MoreInformation", comment: "More Information label"), style: .default, handler: { (action: UIAlertAction!) -> Void in - UIApplication.shared.openURL(URL(string: url)!) - //MoreInformationViewController.pushInfoView(navigationController: self.navigationController, state: .Secure) + UIApplication.shared.open(URL(string: url)!, options: [:], completionHandler: nil) })) } alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: { (action: UIAlertAction!) -> Void in diff --git a/enzevalos_iphone/ListViewController.swift b/enzevalos_iphone/ListViewController.swift index e733f1e26e2e91bf805f4b66ce5aa7a359d57f68..ccbb957b0063c4184b8347640ad7941e57f0a16e 100644 --- a/enzevalos_iphone/ListViewController.swift +++ b/enzevalos_iphone/ListViewController.swift @@ -76,7 +76,7 @@ class ListViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() searchController.searchResultsUpdater = self - searchController.dimsBackgroundDuringPresentation = false + searchController.obscuresBackgroundDuringPresentation = false definesPresentationContext = true if #available(iOS 11.0, *) { navigationItem.searchController = searchController diff --git a/enzevalos_iphone/OAuth/EmailHelper.h b/enzevalos_iphone/OAuth/EmailHelper.h index 9c1ec496c87e9122ac2c8020daf1c38cf013a715..da180b030e85e3acc50503f04fab19a773b2438d 100644 --- a/enzevalos_iphone/OAuth/EmailHelper.h +++ b/enzevalos_iphone/OAuth/EmailHelper.h @@ -27,7 +27,7 @@ + (EmailHelper *_Nonnull)singleton; -@property(nonatomic, strong, nullable) id<OIDAuthorizationFlowSession> currentAuthorizationFlow; +@property(nonatomic, strong, nullable) id<OIDExternalUserAgentSession> currentAuthorizationFlow; @property(nonatomic, nullable) GTMAppAuthFetcherAuthorization *authorization; - (void)doEmailLoginIfRequiredOnVC:(UIViewController*_Nullable)vc completionBlock:(dispatch_block_t _Nullable )completionBlock; diff --git a/enzevalos_iphone/PersistentMail +CoreDataProperties.swift b/enzevalos_iphone/PersistentMail +CoreDataProperties.swift index 56d99c588d31fbd4617d7a75ff01f3b878683fcd..18fd66fe0173df707c4f0163d1c1b26b28570aa0 100644 --- a/enzevalos_iphone/PersistentMail +CoreDataProperties.swift +++ b/enzevalos_iphone/PersistentMail +CoreDataProperties.swift @@ -33,7 +33,7 @@ extension PersistentMail { @NSManaged public var decryptedBody: String? @NSManaged public var encryptedBody: String? @NSManaged public var date: Date - @NSManaged public var secretKey: String? + @NSManaged public var secretKey: String? // secret key which is in the mail (to import) @NSManaged public var record: KeyRecord? public var hasAttachment: Bool { @@ -74,7 +74,7 @@ extension PersistentMail { @NSManaged public var unableToDecrypt: Bool @NSManaged public var subject: String? @NSManaged public var folder: Folder - @NSManaged public var firstKey: PersistentKey? + @NSManaged public var firstKey: PersistentKey? // NOT USED @NSManaged public var signedKey: PersistentKey? @NSManaged public var received: Bool @NSManaged public var deleteWhileTravel: Bool @@ -85,7 +85,7 @@ extension PersistentMail { @NSManaged public var gmailThreadID: NSNumber? @NSManaged public var messageID: String? @NSManaged public var notLoadedMessages: String? - @NSManaged public var decryptedKey: PersistentKey? + @NSManaged public var decryptedKey: PersistentKey? // Only for traveler scenario @NSManaged public var xMailer: String? diff --git a/enzevalos_iphone/QRScannerView.swift b/enzevalos_iphone/QRScannerView.swift index b80c34553cddfca8c31643a32ec667b108cdb762..a25d312c9e9b410c7410c893e20893348d1fe7ad 100644 --- a/enzevalos_iphone/QRScannerView.swift +++ b/enzevalos_iphone/QRScannerView.swift @@ -178,7 +178,7 @@ class QRScannerView: ViewControllerPannable, AVCaptureMetadataOutputObjectsDeleg let alert = UIAlertController(title: NSLocalizedString("fingerprintMissmatchShort", comment: "Found fingerprint does not match"), message: NSLocalizedString("fingerprintMissmatchText", comment: "Found fingerprint does not match"), preferredStyle: .alert) alert.addAction(UIAlertAction(title: NSLocalizedString("MoreInformation", comment: "More Information"), style: .default, handler: { (action: UIAlertAction!) -> Void in - UIApplication.shared.openURL(URL(string: "https://userpage.fu-berlin.de/letterbox/faq.html#headingWrongFingerprint")!) + UIApplication.shared.open(URL(string: "https://letterbox-app.org")!, options: [:], completionHandler: nil) self.dismiss(animated: false, completion: nil) })) alert.addAction(UIAlertAction(title: NSLocalizedString("scanDifferentCode", comment: ""), style: .default, handler: { diff --git a/enzevalos_iphone/SendViewController+Invitation.swift b/enzevalos_iphone/SendViewController+Invitation.swift index 1ee39ebdfbe71d07cae19a17521fbbb0870cddc7..1955b6de249abee2828c13f020e3583a966a28d5 100644 --- a/enzevalos_iphone/SendViewController+Invitation.swift +++ b/enzevalos_iphone/SendViewController+Invitation.swift @@ -229,7 +229,7 @@ extension SendViewController { controller?.additionalAction = { controller?.hideDialog(completion: nil) - UIApplication.shared.openURL(URL(string: TravelHandler.website)!) + UIApplication.shared.open(URL(string: TravelHandler.website)!, options: [:], completionHandler: nil) } controller?.dismissAction = { diff --git a/enzevalos_iphone/SendViewController.swift b/enzevalos_iphone/SendViewController.swift index ebab5f5d1ca5121a546f9c7bda97652c65d85723..a867fd807ef4dd3ec5af49870043cf61032fbfca 100644 --- a/enzevalos_iphone/SendViewController.swift +++ b/enzevalos_iphone/SendViewController.swift @@ -390,18 +390,10 @@ class SendViewController: UIViewController { scrollview.isScrollEnabled = false scrollview.contentOffset = CGPoint(x: 0, y: tokenField.frame.origin.y - self.topLayoutGuide.length) tableviewBegin.constant = tokenField.frame.maxY - tokenField.frame.origin.y - if #available(iOS 11.0, *) { - if keyboardY > 0 { - tableviewHeight.constant = keyboardY - tableviewBegin.constant - } else { - tableviewHeight.constant = view.safeAreaLayoutGuide.layoutFrame.size.height - tableviewBegin.constant - } + if keyboardY > 0 { + tableviewHeight.constant = keyboardY - tableviewBegin.constant } else { - if keyboardY > 0 { - tableviewHeight.constant = keyboardY - tableviewBegin.constant - (self.navigationController?.navigationBar.frame.maxY)! - } else { - tableviewHeight.constant = view.bounds.size.height - tableviewBegin.constant - (self.navigationController?.navigationBar.frame.maxY)! - } + tableviewHeight.constant = view.safeAreaLayoutGuide.layoutFrame.size.height - tableviewBegin.constant } } else if !scrollview.isScrollEnabled { scrollview.isScrollEnabled = true @@ -528,7 +520,7 @@ class SendViewController: UIViewController { self.view.layoutIfNeeded() }, completion: nil) } else { - var info = notification.userInfo! + let info = notification.userInfo! let keyboardFrame: CGRect = (info[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue keyboardY = keyboardFrame.origin.y if keyboardHeight == 0 { diff --git a/enzevalos_iphone/SwiftPGP.swift b/enzevalos_iphone/SwiftPGP.swift index 5b797fd04ca7aca9a284fe6cc94805031e37fd9c..06791d2cdb64b3f9de43781e1e8ee89e00669f86 100644 --- a/enzevalos_iphone/SwiftPGP.swift +++ b/enzevalos_iphone/SwiftPGP.swift @@ -592,6 +592,35 @@ class SwiftPGP: Encryption { return CryptoObject(chiphertext: data, plaintext: plaintext, decryptedData: plaindata, sigState: sigState, encState: encState, signKey: sigKeyID, encType: CryptoScheme.PGP, signedAdrs: signedAdr) } + func keyAsKeyList(keyID: String) -> [Key] { + var keyList = [Key]() + let key: Key = loadKey(id: keyID)! + keyList.append(key) + return keyList + } + + func findMailForKey(keyID: String) { + var plaindata: Data? = nil + var encState = EncryptionState.UnableToDecrypt + let key: [Key] = keyAsKeyList(keyID: keyID) + let datahandler = DataHandler.handler + let mailList = datahandler.getAllNotDecryptedPersistentMail() + for mail in mailList { + guard let data = mail.body?.data(using: String.Encoding.utf8, allowLossyConversion: true) + else { + return + } + // try to decrypt mail + (plaindata, encState) = decryptMessage(data: data, keys: key, encForCurrentSK: true) + if let plaindata = plaindata, encState == EncryptionState.ValidedEncryptedWithCurrentKey || encState == EncryptionState.ValidEncryptedWithOldKey { + // update database + mail.body = String.init(data: plaindata, encoding: .utf8) + mail.isEncrypted = true + datahandler.save(during: "decryption of older mails") + } + } + } + private func decryptMessage(data: Data, keys: [Key], encForCurrentSK: Bool) -> (Data?, EncryptionState){ if let dataString = String(data: data, encoding: .utf8) { do { diff --git a/enzevalos_iphone/TempAttachment.swift b/enzevalos_iphone/TempAttachment.swift index 710201b45a108e3e9fc0a9f1c13bef2e4e6489d0..2877cc85f90bab9cf8fde6a8692fc4dbf4ad58fe 100644 --- a/enzevalos_iphone/TempAttachment.swift +++ b/enzevalos_iphone/TempAttachment.swift @@ -39,8 +39,6 @@ enum MIMETYPE: String { class TempAttachment: Hashable { - var hashValue: Int - var name: String var data: Data var mimeType: MIMETYPE @@ -54,7 +52,6 @@ class TempAttachment: Hashable { self.mimeType = mimeType self.encState = encState self.sigState = sigState - self.hashValue = (name+mimeType.rawValue).hashValue } func store(mail: PersistentMail) { @@ -71,4 +68,8 @@ class TempAttachment: Hashable { } return false } + + func hash(into hasher: inout Hasher) { + hasher.combine((name+mimeType.rawValue).hashValue) + } } diff --git a/enzevalos_iphone/TravelHandler.swift b/enzevalos_iphone/TravelHandler.swift index 58c78f0335806fd2e81b9b1d046961a1e1ca0d07..667218d883bc9bb79583cd67a4944d4a195270ba 100644 --- a/enzevalos_iphone/TravelHandler.swift +++ b/enzevalos_iphone/TravelHandler.swift @@ -423,7 +423,7 @@ public class TravelHandler { } } controllers.append(description1) - let descriptionViewController2 = IntroButtonViewController.storyboardInstance(description: NSLocalizedString("TravelIntroOverview", comment: ""), buttonAction: {_ in UIApplication.shared.openURL(URL(string: TravelHandler.website)!)})! + let descriptionViewController2 = IntroButtonViewController.storyboardInstance(description: NSLocalizedString("TravelIntroOverview", comment: ""), buttonAction: {_ in UIApplication.shared.open(URL(string: TravelHandler.website)!, options: [:], completionHandler: nil)})! descriptionViewController2.buttonText = NSLocalizedString("MoreInformation", comment: "get more info at our website") controllers.append(descriptionViewController2) let overviewController1 = IntroDescriptionViewController.storyboardInstance(description: NSLocalizedString("TravelIntroOverviewAtHome", comment: ""), descriptionImage: TravelHandler.homeIcon)! @@ -456,7 +456,7 @@ public class TravelHandler { } let describeSecretController = IntroButtonViewController.storyboardInstance(description: NSLocalizedString("Travel.Prepare.ShouldShowPassword.Description", comment: ""), buttonText: NSLocalizedString("Continue", comment: ""), titleText: "Passwort merken", titleDescription: NSLocalizedString("Travel.Prepare.ShouldShowPassword.TitleDescription", comment: ""))! let secretController = IntroSecretViewController.storyboardInstance(description: NSLocalizedString("Travel.Prepare.PresentSecret.Description", comment: ""), secret: "s", titleText: "Passwort merken", titleDescription: "Merke dir das Passwort gut, du benötigst es nach deinem Grenzübertritt, um wieder sicher kommunizieren zu können.", alternateText: NSLocalizedString("Travel.Prepare.PresentSecret.wrongSecret.Description", comment: ""))! - let recommendationsController = IntroButtonViewController.storyboardInstance(description: "Wenn du an der Grenze kontrolliert wirst, liegt es in deinem Ermessen, wie stark du mit den Kontrolleuren kooperierst. Kooperierst du nicht, kann es u.a. sein, dass du Strafen zahlen musst. Wenn du Zugang zu Daten von dir lässt, betone vorher ausdrücklich, dass es nicht in deinem Einverständnis passiert. Bleibe dabei jedoch ruhig.\nBehalte deine Geräte die ganze Zeit über im Auge und lüge die Kontrolleure nicht an.\nKurz vor der Kontrolle solltest du deine Geräte ausschalten.", buttonAction: {_ in UIApplication.shared.openURL(URL(string: TravelHandler.website)!)}, titleText: "Während der Kontrolle", titleDescription: "Beachte die dargestellten Hinweise, falls du und deine Geräte kontrolliert werden. Für weitere Hinweise und Informationen besuche unsere Webseite.")! + let recommendationsController = IntroButtonViewController.storyboardInstance(description: "Wenn du an der Grenze kontrolliert wirst, liegt es in deinem Ermessen, wie stark du mit den Kontrolleuren kooperierst. Kooperierst du nicht, kann es u.a. sein, dass du Strafen zahlen musst. Wenn du Zugang zu Daten von dir lässt, betone vorher ausdrücklich, dass es nicht in deinem Einverständnis passiert. Bleibe dabei jedoch ruhig.\nBehalte deine Geräte die ganze Zeit über im Auge und lüge die Kontrolleure nicht an.\nKurz vor der Kontrolle solltest du deine Geräte ausschalten.", buttonAction: {_ in UIApplication.shared.open(URL(string: TravelHandler.website)!, options: [:], completionHandler: nil)}, titleText: "Während der Kontrolle", titleDescription: "Beachte die dargestellten Hinweise, falls du und deine Geräte kontrolliert werden. Für weitere Hinweise und Informationen besuche unsere Webseite.")! recommendationsController.buttonText = NSLocalizedString("MoreInformation", comment: "get more info at our website") let pageViewController = IntroPageViewController.storyboardInstance(orderedViewControllers: controllers, titleText: "Vorbereitung", titleDescription: "In diesem Schritt wird dir das Verfahren kurz erläutert. Eine Sicherung wird automatisch erstellt.") @@ -511,13 +511,13 @@ public class TravelHandler { let askCompromiseController = IntroYesNoViewController.storyboardInstance(description: "Hier solltest du nur fortfahren, wenn du die Grenzkontrollen hinter dir gelassen hast und dir keine weitere bevor steht, bis du an deinem Ziel ankommst!\n\nWurden während der Kontrolle weitere Geräte z.B. per Kabel mit deinem Smartphone verbunden oder wurde es dir mal abgenommen und aus deinem Sichtfeld entfernt?", titleText: "Grenze übertreten", titleDescription: "Wenn du die Grenze übertreten hast, kannst du hier im weiteren Verlauf dein Passwort eingeben und im Anschluss wieder Briefe austauschen.")! let compromisedController = IntroDescriptionViewController.storyboardInstance(description: "Du solltest dein Smartphone am Besten nicht mehr verwenden! Du kannst ihm nicht mehr trauen, da es nicht mehr auszuschließen ist, dass Schadprogramme darauf installiert sind, die dich und deine Kommunikation überwachen. Diese kann man nicht mit Sicherheit entfernen und man sieht im Zweifelsfall auch nicht. \n\nDu kannst jetzt wieder Briefe austauschen. Es ist allerdings nun auch bei Briefen möglich, dass sie von Dritten mitgelesen und gefälscht werden! Traue keiner Kommunikation, die mit diesem Gerät passiert!", titleText: "Unsicheres Smartphone", titleDescription: "Traue keiner Kommunikation mehr, die über dieses Smartphone passiert! Für weitere Informationen besuche unsere Webseite.")! compromisedController.doneText = NSLocalizedString("Next", comment: "present next viewcontroller") - let compromisedController2 = IntroButtonViewController.storyboardInstance(description: "Bitte setze dich mit uns in Verbindung und berichte von deiner Grenzkontrolle! Das dient uns, um einen generellen Überblick über das Eindringen in Privatsphäre bei Grenzkontrollen zu erhalten und damit die App zu verbessern. Im Einzelfall können wir auch vorgehensweisen und Lösungen für künftige Reisen besprechen, wenn du das wünscht.", buttonAction: {_ in UIApplication.shared.openURL(URL(string: TravelHandler.website)!)}, buttonText: "Erfahrungen berichten", titleText: "Erfahrungsbericht", titleDescription: "Eine so ausführliche Kontrolle, wie sie bei dir durchgeführt wurde, passiert nicht häufig. Bitte teile uns genaueres über die Umstände mit!")! + let compromisedController2 = IntroButtonViewController.storyboardInstance(description: "Bitte setze dich mit uns in Verbindung und berichte von deiner Grenzkontrolle! Das dient uns, um einen generellen Überblick über das Eindringen in Privatsphäre bei Grenzkontrollen zu erhalten und damit die App zu verbessern. Im Einzelfall können wir auch vorgehensweisen und Lösungen für künftige Reisen besprechen, wenn du das wünscht.", buttonAction: {_ in UIApplication.shared.open(URL(string: TravelHandler.website)!, options: [:], completionHandler: nil)}, buttonText: "Erfahrungen berichten", titleText: "Erfahrungsbericht", titleDescription: "Eine so ausführliche Kontrolle, wie sie bei dir durchgeführt wurde, passiert nicht häufig. Bitte teile uns genaueres über die Umstände mit!")! let insertPasswordController = IntroInputViewController.storyboardInstance(description: "Gib nun das Passwort ein, das du dir vor dem Grenzübertritt merken solltest:", titleText: "Passwort eingeben", titleDescription: "Vor dem Grenzübertritt musstest du dir ein Passwort merken. Gib dieses hier bitte ein.")! insertPasswordController.doneText = NSLocalizedString("Next", comment: "present next viewcontroller") let corruptDataController = IntroDescriptionViewController.storyboardInstance(description: "Du kannst nun wieder Briefe schicken. Jedoch wurden besondere Daten auf deinem Telefon verändert. Dadurch ist es möglich, dass du oder deine Kontakte Briefe mit jemandem austauschen, der sich als du oder einer deiner Kontakte ausgeben kann, ohne dass euch das aufällt.\n\nDeine Kontakte wissen nun evtl. auch, dass ihr nicht von der Identität des jeweils anderen überzeugt sein könnt. Sei nicht irritiert, wenn sie dich auf anderem Wege kontaktieren und sich nach dir erkundigen.", titleText: "Veränderte Daten", titleDescription: "Es wurden Daten auf deinem Smartphone verändert. Das kann dazu führen, dass auch Briefe nicht mehr sicher sind. Sei vorsichtig, was du schreibst.")! //We could mention a wrong password here too corruptDataController.doneText = NSLocalizedString("Next", comment: "present next viewcontroller") - let corruptDataController2 = IntroButtonViewController.storyboardInstance(description: "Die Veränderung der Daten auf deinem Telefon passierte vermutlich während der Grenzkontrolle durch Kontrolleure. Um uns einen generellen Überblick über das Eindringen in Privatsphäre bei Grenzkontrollen zu geben und damit die App zu verbessern, würde es uns sehr freuen, wenn du uns einen kurzen Bericht über deine Erfahrungen mit Grenzkontrollen hinterlassen würdest!", buttonAction: {_ in UIApplication.shared.openURL(URL(string: TravelHandler.website)!)}, buttonText: "Erfahrungsbericht hinterlassen", titleText: "Erfahrungsbericht", titleDescription: "Dass bei einer Kontrolle Daten verändert werden, passiert nicht häufig. Bitte teile uns genaueres über die Umstände mit!")! - let doneController = IntroButtonViewController.storyboardInstance(description: "Super, du kannst nun wieder Briefe schreiben!\n\nUm dieses Feature zu verbessern und einen generellen Überblick über das Eindringen in Privatsphäre bei Grenzkontrollen zu haben, würde es uns sehr freuen, wenn du uns einen kurzen Bericht über deine Erfahrungen mit Grenzkontrollen hinterlassen würdest!", buttonAction: {_ in UIApplication.shared.openURL(URL(string: TravelHandler.website)!)}, buttonText: "Erfahrungsbericht hinterlassen", titleText: "Fertig!", titleDescription: "Du kannst nun wieder Briefe schreiben.")! + let corruptDataController2 = IntroButtonViewController.storyboardInstance(description: "Die Veränderung der Daten auf deinem Telefon passierte vermutlich während der Grenzkontrolle durch Kontrolleure. Um uns einen generellen Überblick über das Eindringen in Privatsphäre bei Grenzkontrollen zu geben und damit die App zu verbessern, würde es uns sehr freuen, wenn du uns einen kurzen Bericht über deine Erfahrungen mit Grenzkontrollen hinterlassen würdest!", buttonAction: {_ in UIApplication.shared.open(URL(string: TravelHandler.website)!, options: [:], completionHandler: nil)}, buttonText: "Erfahrungsbericht hinterlassen", titleText: "Erfahrungsbericht", titleDescription: "Dass bei einer Kontrolle Daten verändert werden, passiert nicht häufig. Bitte teile uns genaueres über die Umstände mit!")! + let doneController = IntroButtonViewController.storyboardInstance(description: "Super, du kannst nun wieder Briefe schreiben!\n\nUm dieses Feature zu verbessern und einen generellen Überblick über das Eindringen in Privatsphäre bei Grenzkontrollen zu haben, würde es uns sehr freuen, wenn du uns einen kurzen Bericht über deine Erfahrungen mit Grenzkontrollen hinterlassen würdest!", buttonAction: {_ in UIApplication.shared.open(URL(string: TravelHandler.website)!, options: [:], completionHandler: nil)}, buttonText: "Erfahrungsbericht hinterlassen", titleText: "Fertig!", titleDescription: "Du kannst nun wieder Briefe schreiben.")! askCompromiseController.yesAction = {_ in self.handleCorruption() diff --git a/enzevalos_iphoneTests/CoreDataTests.swift b/enzevalos_iphoneTests/CoreDataTests.swift index d91b254735902f029e1d3d83fd15517ee1754513..7277cf669cb353f9948a1e1356c321fa4346ea5e 100644 --- a/enzevalos_iphoneTests/CoreDataTests.swift +++ b/enzevalos_iphoneTests/CoreDataTests.swift @@ -67,6 +67,59 @@ class CoraDataTests: XCTestCase { pgp.resetKeychains() super.tearDown() } + + //test for generating list of mails with missing secret key (unable to decrypt) + func testGetAllFilteredMails() { + guard let from = MCOAddress(mailbox: "sender@example.com") + else { + return + } + guard let m1 = testMail(from: from, to: [user], cc: [], bcc: []) else { + XCTFail("Could not create test mails") + return + } + m1.unableToDecrypt = true + m1.secretKey = datahandler.createNewSecretKey(adr: "sender@example.com").keyID + + guard let m2 = testMail(from: from, to: [user], cc: [], bcc: []) else { + XCTFail("Could not create test mails") + return + } + m2.unableToDecrypt = false + m2.secretKey = datahandler.createNewSecretKey(adr: "sender@example.com").keyID + + guard let m3 = testMail(from: from, to: [user], cc: [], bcc: []) else { + XCTFail("Could not create test mails") + return + } + m3.unableToDecrypt = true + m3.secretKey = datahandler.createNewSecretKey(adr: "sender@example.com").keyID + + datahandler.save(during: "manipulate test mails") + + let mailList = datahandler.getAllNotDecryptedPersistentMail() + XCTAssertEqual(mailList.count, 2, "Wrong length: \(mailList.count)") + for mail in mailList { + XCTAssertEqual(mail.unableToDecrypt, true, "Mail is unable to decrypt. The encryption state is: \(mail.encState)") + } + } + + + // generate a test secret key + func testkey()->(String){ + let testsender = createUser() + let testkeyID = pgp.generateKey(adr: testsender.mailbox, new: true) + return testkeyID + + } + + // test decryption of all undecrypted mails with new secret key + func testfindMailForKey(){ + let testkeyID = testkey() + let swiftpgp = SwiftPGP.init() + // E-Mail generieren + swiftpgp.findMailForKey(keyID: testkeyID) + } func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress { return MCOAddress.init(displayName: name, mailbox: adr.lowercased()) diff --git a/enzevalos_iphoneTests/MailTest.swift b/enzevalos_iphoneTests/MailTest.swift index a2f3877464692366b2616a5c5641f2a68eba033c..fc38229dd0e870c69ac49ca58f6beb275994815a 100644 --- a/enzevalos_iphoneTests/MailTest.swift +++ b/enzevalos_iphoneTests/MailTest.swift @@ -292,7 +292,7 @@ class MailTest: XCTestCase { testMailAliceToBob(name: "PlainMailFromMac", isSecure: false, encState: EncryptionState.NoEncryption, sigState: SignatureState.NoSignature) } func testMacSecureMail(){ - testSecureMail(name: "signedEncMailFromApple", letterboxAccounts: true) + testSecureMail(name: "signedEncMailFromApple", accountVersion: 1) } func testMacEncMail(){ testMailAliceToBob(name: "EncMailFromMac", isSecure: false, encState: EncryptionState.ValidedEncryptedWithCurrentKey, sigState: SignatureState.NoSignature) @@ -301,27 +301,42 @@ class MailTest: XCTestCase { testMailAliceToBob(name: "SignedMailFromMac", isSecure: false, encState: EncryptionState.NoEncryption, sigState: SignatureState.ValidSignature) } + func testK9SigedInlineMail() { + testMailAliceToBob(name: "signinlineK9", isSecure: false, encState: EncryptionState.NoEncryption, sigState: SignatureState.ValidSignature, accountVersion : 3) + } + func testK9SigedMail() { + testMailAliceToBob(name: "signK9", isSecure: false, encState: EncryptionState.NoEncryption, sigState: SignatureState.ValidSignature, accountVersion : 3) + } + func testK9SecureMail(){ + testSecureMail(name: "signencK9", accountVersion: 3) + } + func testK9SecureInlineMail() { + testSecureMail(name: "signencinlineK9", accountVersion: 3) + } - - func testSecureMail(name: String, letterboxAccounts: Bool = false) { - testMailAliceToBob(name: name, isSecure: true, encState: nil, sigState: nil, letterboxAccounts: letterboxAccounts) + func testSecureMail(name: String, accountVersion: Int = 0) { + testMailAliceToBob(name: name, isSecure: true, encState: nil, sigState: nil, accountVersion: accountVersion) } - func testMailAliceToBob(name: String, isSecure: Bool, encState: EncryptionState? = nil, sigState: SignatureState? = nil, letterboxAccounts: Bool = false) { - testMailAliceToBob(pkExists: true, name: name, isSecure: isSecure, encState: encState, sigState: sigState, letterboxAccounts: letterboxAccounts) - if !letterboxAccounts { + func testMailAliceToBob(name: String, isSecure: Bool, encState: EncryptionState? = nil, sigState: SignatureState? = nil, accountVersion : Int = 0) { + testMailAliceToBob(pkExists: true, name: name, isSecure: isSecure, encState: encState, sigState: sigState, accountVersion : accountVersion) + if accountVersion == 0 { //tearDown() //setUp() - //testMailAliceToBob(pkExists: false, name: name, isSecure: isSecure, encState: encState, sigState: sigState, letterboxAccounts: letterboxAccounts) + //testMailAliceToBob(pkExists: false, name: name, isSecure: isSecure, encState: encState, sigState: sigState, accountVersion : accountVersion) } } - func testMailAliceToBob(pkExists: Bool, name: String, isSecure: Bool, encState: EncryptionState? = nil, sigState: SignatureState? = nil, letterboxAccounts: Bool = false) { + func testMailAliceToBob(pkExists: Bool, name: String, isSecure: Bool, encState: EncryptionState? = nil, sigState: SignatureState? = nil, accountVersion : Int = 0) { let mailData = MailTest.loadMail(name: name ) var (alice, _) = addAliceAndBob(addAlice: pkExists) - if letterboxAccounts { + if accountVersion == 1 { (alice, _) = addAliceAndBobLetterbox(addAlice: pkExists) } + if accountVersion == 3 + { + (alice, _) = addAliceAndBobV3(addAlice:pkExists) + } let incMail = IncomingMail(rawData: mailData, uID: 4, folderPath: "INBOX", flags: MCOMessageFlag.init(rawValue: 0)) if let mail = incMail.store(keyRecord: nil) { XCTAssertEqual(mail.isSecure, isSecure) @@ -370,7 +385,16 @@ class MailTest: XCTestCase { _ = datahandler.newSecretKey(keyID: bobKeyId, addPk: true) return (aliceKeyId, bobKeyId) } - + + func addAliceAndBobV3(addAlice: Bool) -> (alice: String, bob: String){ + let aliceKeyId = importKey(file: "Alice.v3.pub", isSecretKey: false) + if addAlice { + _ = datahandler.newPublicKey(keyID: aliceKeyId, cryptoType: .PGP, adr: "alice@letterbox-app.org", autocrypt: false, transferType: nil) + } + let bobKeyId = importKey(file: "Bob Letterbox (0B6CD0A0) – Secret", isSecretKey: true) + _ = datahandler.newSecretKey(keyID: bobKeyId, addPk: true) + return (aliceKeyId, bobKeyId) + } static func compareAdrs(adrs1: [String], adrs2: [Mail_Address]) -> Bool{ for adr in adrs1 { diff --git a/enzevalos_iphoneTests/private/accounts.json b/enzevalos_iphoneTests/private/accounts.json new file mode 100644 index 0000000000000000000000000000000000000000..4ab21c4d0c90a588563ef70c5f483469454f114b --- /dev/null +++ b/enzevalos_iphoneTests/private/accounts.json @@ -0,0 +1,15 @@ +{ + "accounts":[ + { + "id": "1", + "username": "FIX ME", + "password": "FIX ME", + "hostIMAP": "imap.web.de", + "portIMAP": "993", + "conTypeIMAP": "TLS/SSL", + "hostSMTP": "smtp.web.de", + "portSMTP": "587", + "conTypeSMTP": "StartTLS" + } + ] +} diff --git a/enzevalos_iphoneTests/testKeys/Alice.v3.pub.asc b/enzevalos_iphoneTests/testKeys/Alice.v3.pub.asc new file mode 100644 index 0000000000000000000000000000000000000000..b0718814460e72b547dc8fc1721dbe4696eb7b29 --- /dev/null +++ b/enzevalos_iphoneTests/testKeys/Alice.v3.pub.asc @@ -0,0 +1,39 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=Y+dh +-----END PGP PUBLIC KEY BLOCK----- diff --git a/enzevalos_iphoneTests/testKeys/Alice.v3.pubsec.asc b/enzevalos_iphoneTests/testKeys/Alice.v3.pubsec.asc new file mode 100644 index 0000000000000000000000000000000000000000..adbcc9a77bb43f724896afb4bd8bd4728b0d130a --- /dev/null +++ b/enzevalos_iphoneTests/testKeys/Alice.v3.pubsec.asc @@ -0,0 +1,121 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=Y+dh +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +p76IJ6RDkb+dYgvUA44D+w== +=y7wq +-----END PGP PRIVATE KEY BLOCK----- diff --git a/enzevalos_iphoneTests/testMails/signK9.eml b/enzevalos_iphoneTests/testMails/signK9.eml new file mode 100644 index 0000000000000000000000000000000000000000..d2b06a9471a3e1b7d3fdd735ef68cf6984c6f403 --- /dev/null +++ b/enzevalos_iphoneTests/testMails/signK9.eml @@ -0,0 +1,106 @@ +Return-path: <alice@letterbox-app.org> +Delivery-date: Tue, 25 Feb 2020 13:19:56 +0100 +Date: Tue, 25 Feb 2020 13:19:40 +0100 +Autocrypt: addr=alice@letterbox-app.org; keydata= + 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 + GS+fjY8NLPbVp76IJ6RDkb+dYgvUA44D+w== +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: multipart/signed; boundary="----VY2KQPSBKVAJ1F5EI8RLZ7S9CUAJAE"; + protocol="application/pgp-signature"; micalg="pgp-sha512" +Subject: sign mail from K9 +To: Bob <bob@letterbox-app.org> +From: Alice <alice@letterbox-app.org> +Message-ID: <19795A46-8304-4E33-AA55-123F654E74BA@letterbox-app.org> + +------VY2KQPSBKVAJ1F5EI8RLZ7S9CUAJAE +Content-Transfer-Encoding: 7bit +Content-Type: multipart/alternative; boundary="----L1D2QU1FD7VJGV2Y7EI1YJBAC8N760" + +------L1D2QU1FD7VJGV2Y7EI1YJBAC8N760 +Content-Type: text/plain; + charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +Lorem ipsum dolor sit amet, consectetur adipiscing elit=2E Quisque dapibus +id diam ac volutpat=2E Sed quis cursus ante=2E Vestibulum eget gravida +felis=2E Nullam accumsan diam quis sem ornare lacinia=2E Aenean risus risu= +s, +maximus quis faucibus et, maximus at nunc=2E Duis pharetra augue libero, +et congue diam varius eget=2E Nullam efficitur ex purus, non accumsan +tellus laoreet hendrerit=2E Suspendisse gravida interdum eros, eu +venenatis ante suscipit nec=2E Class aptent taciti sociosqu ad litora +torquent per conubia nostra, per inceptos himenaeos=2E Praesent +pellentesque cursus sem, non ornare nunc commodo vel=2E Praesent sed magna +at ligula ultricies sagittis malesuada non est=2E Nam maximus varius +mauris=2E Etiam dignissim congue ligula eu porta=2E Nunc rutrum nisl id +mauris efficitur ultrices=2E Maecenas sit amet velit ac mauris consequat +sagittis at et lorem=2E +------L1D2QU1FD7VJGV2Y7EI1YJBAC8N760 +Content-Type: text/html; + charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +Lorem ipsum dolor sit amet, consectetur adipiscing elit=2E Quisque dapibus<= +br>id diam ac volutpat=2E Sed quis cursus ante=2E Vestibulum eget gravida<b= +r>felis=2E Nullam accumsan diam quis sem ornare lacinia=2E Aenean risus ris= +us,<br>maximus quis faucibus et, maximus at nunc=2E Duis pharetra augue lib= +ero,<br>et congue diam varius eget=2E Nullam efficitur ex purus, non accums= +an<br>tellus laoreet hendrerit=2E Suspendisse gravida interdum eros, eu<br>= +venenatis ante suscipit nec=2E Class aptent taciti sociosqu ad litora<br>to= +rquent per conubia nostra, per inceptos himenaeos=2E Praesent<br>pellentesq= +ue cursus sem, non ornare nunc commodo vel=2E Praesent sed magna<br>at ligu= +la ultricies sagittis malesuada non est=2E Nam maximus varius<br>mauris=2E = +Etiam dignissim congue ligula eu porta=2E Nunc rutrum nisl id<br>mauris eff= +icitur ultrices=2E Maecenas sit amet velit ac mauris consequat<br>sagittis = +at et lorem=2E +------L1D2QU1FD7VJGV2Y7EI1YJBAC8N760-- + +------VY2KQPSBKVAJ1F5EI8RLZ7S9CUAJAE +Content-Type: application/pgp-signature; name="signature.asc" +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP SIGNATURE----- + +iQG1BAABCgAfGBxhbGljZUBsZXR0ZXJib3gtYXBwLm9yZwUCXlUQ3AAKCRC6KVTv +pFuU3QDxC/sGGkaWy4Al+F4lUcFeTGRWk6HkOnwFIPs4KZkNCNEQt7bdkc7dj2Fe +q/bY75ewiU6y1feEHHnZjt8ndHlV6JuyW6R6PZkBpV1NCKDqzqxzlpxhT/GO1T0Z +gUDczYVxF3iMJQ0sSzKv9zjyj97iNKjfS3tTSzi/Jqx9Q6xEps/3gCu/HcSGsMel +DsbYEexfJjq34w3Df5EPzc+4cDzlz2A/eSEkfcZ4ydjJYeSTWijFEBVfNdnWpkaQ +05ooyOGB3PJtae986OCWFZhZT4c7A/s5HtpDZGFgyDiiThCIglNz3gRnUVVJN8yi ++uVOZeTfvCfHFbOZVjYHF59EpPVLNflm7DH9D+zSvw6NcQGD29uLkDSjQGui3qTX +mzG23iqZvQmuVaNTrRlsNOpu3IbSJFB7RgeWegww+TFzu6EEOFQwxRI4HstzvR1h +6ceb5nJLix1K6eUuD6FvftYzLWDCE4Vk4WpCFDfdzo9uOlDaGoAdULyPX7PYZwMz +hMzaPLu9G8s= +=eo9I +-----END PGP SIGNATURE----- + +------VY2KQPSBKVAJ1F5EI8RLZ7S9CUAJAE-- diff --git a/enzevalos_iphoneTests/testMails/signencK9.eml b/enzevalos_iphoneTests/testMails/signencK9.eml new file mode 100644 index 0000000000000000000000000000000000000000..02725a2a08a1b5ec5fbcd2c73e486de70f1dcfdd --- /dev/null +++ b/enzevalos_iphoneTests/testMails/signencK9.eml @@ -0,0 +1,107 @@ +Return-path: <alice@letterbox-app.org> +Delivery-date: Tue, 25 Feb 2020 13:17:07 +0100 +Date: Tue, 25 Feb 2020 13:16:51 +0100 +Autocrypt: addr=alice@letterbox-app.org; keydata= + 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 + GS+fjY8NLPbVp76IJ6RDkb+dYgvUA44D+w== +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: multipart/encrypted; boundary="----PT793JEAYSU648Q7HIK1T2QUS8170I"; + protocol="application/pgp-encrypted" +Subject: signed an encrypted K9 +To: Bob <bob@letterbox-app.org> +From: Alice <alice@letterbox-app.org> +Message-ID: <79D8AD94-6A25-41EC-B60C-C25A4C611EEC@letterbox-app.org> + +------PT793JEAYSU648Q7HIK1T2QUS8170I +Content-Type: application/pgp-encrypted +Content-Transfer-Encoding: quoted-printable + +Version: 1 +------PT793JEAYSU648Q7HIK1T2QUS8170I +Content-Type: application/octet-stream; name="encrypted.asc" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline; filename="encrypted.asc" + +-----BEGIN PGP MESSAGE----- + +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 +=J2/+ +-----END PGP MESSAGE----- + +------PT793JEAYSU648Q7HIK1T2QUS8170I-- diff --git a/enzevalos_iphoneTests/testMails/signencinlineK9.eml b/enzevalos_iphoneTests/testMails/signencinlineK9.eml new file mode 100644 index 0000000000000000000000000000000000000000..6328642d2c5f9d45d7c390b5d53150db0f192e3c --- /dev/null +++ b/enzevalos_iphoneTests/testMails/signencinlineK9.eml @@ -0,0 +1,89 @@ +Return-path: <alice@letterbox-app.org> +Delivery-date: Tue, 25 Feb 2020 13:18:35 +0100 +Date: Tue, 25 Feb 2020 13:18:22 +0100 +Content-Type: text/plain; + charset=utf-8 +Autocrypt: addr=alice@letterbox-app.org; keydata= + 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 + GS+fjY8NLPbVp76IJ6RDkb+dYgvUA44D+w== +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: signed and enc K9 inline +To: Bob <bob@letterbox-app.org> +From: Alice <alice@letterbox-app.org> +Message-ID: <95CD2D59-5429-4840-BAD4-232B0D44D44D@letterbox-app.org> + +-----BEGIN PGP MESSAGE----- + +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 +=GoQL +-----END PGP MESSAGE----- diff --git a/enzevalos_iphoneTests/testMails/signinlineK9.eml b/enzevalos_iphoneTests/testMails/signinlineK9.eml new file mode 100644 index 0000000000000000000000000000000000000000..ffb3e1c3a6ef42b4aa582d62da8417961e68a2d5 --- /dev/null +++ b/enzevalos_iphoneTests/testMails/signinlineK9.eml @@ -0,0 +1,74 @@ +Return-path: <alice@letterbox-app.org> +Delivery-date: Tue, 25 Feb 2020 13:20:35 +0100 +Date: Tue, 25 Feb 2020 13:20:16 +0100 +Content-Type: text/plain; + charset=utf-8 +Autocrypt: addr=alice@letterbox-app.org; keydata= + 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 + GS+fjY8NLPbVp76IJ6RDkb+dYgvUA44D+w== +MIME-Version: 1.0 +Content-Transfer-Encoding: quoted-printable +Subject: Sign mail from K9 inline +To: Bob <bob@letterbox-app.org> +From: Alice <alice@letterbox-app.org> +Message-ID: <DA5F5BB9-F420-4293-BACA-B61D7580469E@letterbox-app.org> + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit=2E Quisque dapibus +id diam ac volutpat=2E Sed quis cursus ante=2E Vestibulum eget gravida +felis=2E Nullam accumsan diam quis sem ornare lacinia=2E Aenean risus risu= +s, +maximus quis faucibus et, maximus at nunc=2E Duis pharetra augue libero, +et congue diam varius eget=2E Nullam efficitur ex purus, non accumsan +tellus laoreet hendrerit=2E Suspendisse gravida interdum eros, eu +venenatis ante suscipit nec=2E Class aptent taciti sociosqu ad litora +torquent per conubia nostra, per inceptos himenaeos=2E Praesent +pellentesque cursus sem, non ornare nunc commodo vel=2E Praesent sed magna +at ligula ultricies sagittis malesuada non est=2E Nam maximus varius +mauris=2E Etiam dignissim congue ligula eu porta=2E Nunc rutrum nisl id +mauris efficitur ultrices=2E Maecenas sit amet velit ac mauris consequat +sagittis at et lorem=2E +-----BEGIN PGP SIGNATURE----- + +iQG1BAEBCgAfGBxhbGljZUBsZXR0ZXJib3gtYXBwLm9yZwUCXlURAAAKCRC6KVTv +pFuU3S+7C/0alGe39m0Bxq1Yka5496td4AaPejllTv30aCJmAEgspQyjC1g+Kb5D +tGHnV2Jv0qhMMy74MRnOuTkLAmxR35xONqnYW4oafbATF68UIx7xuTgmeusM9V3w +P9l0/S5BU6quANmaV4IrmfibBvYZk5J0NJKG9X32r/NV3oniF4jDvpwaM4K2xBjR +ZLO1k+iACJQZZLqKmD48AyVt4+7Jc9Z5ovAvFrNzQh+Jt+N9mHY30PaOWvnmMWcM +v9enx8QuYi+aL+irJs2TfS7uGynfePLT0GIv8DLTQICNPvdMj5Af3xhdIP2c95RO +WeJq1VopMDrObFGufpEXW03LN4tnmnkE8/lrgIYeLvKA9XsJ2Bu5tupSLG/8Iumv +xJJDHC2Fl/9nMI1o18d1mDegDtd4Vuui1zytmCxZgbmW9veB0w+W3iqLvONy+Fj+ +UKlgUIkBzccQUGlXBdkswltJEqhHMDj7AL3Ytf4bsrF4H5/dgw8ByFv5v5Hudapt +pauY1nMYj9A=3D +=3DxvtN +-----END PGP SIGNATURE-----