diff --git a/enzevalos_iphone/CryptoManagementViewController.swift b/enzevalos_iphone/CryptoManagementViewController.swift index fb3990fcb071f1c0a65b626d4915174a31541787..12d7eb77dc6151863abd05e94a8ec6a0f04225c6 100644 --- a/enzevalos_iphone/CryptoManagementViewController.swift +++ b/enzevalos_iphone/CryptoManagementViewController.swift @@ -56,21 +56,14 @@ class CryptoManagementViewController: UITableViewController { return .KeyLists } } - } + } override func viewDidLoad() { super.viewDidLoad() self.title = NSLocalizedString("Management.Crypto.Title", comment: "") let infoButton = UIButton(type: .infoLight) - //infoButton.addTarget(self, action: #selector(infoButtonTapped), forControlEvents: .TouchUpInside) let barButton = UIBarButtonItem(customView: infoButton) self.navigationItem.rightBarButtonItem = barButton - - // Uncomment the following line to preserve selection between presentations - //self.clearsSelectionOnViewWillAppear = false - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem } // MARK: - Table view data source @@ -139,6 +132,4 @@ class CryptoManagementViewController: UITableViewController { cell.selectionStyle = .none } } - - } diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift index 332d38e0da394bf1227c4f1bf7a1ee2435c21c46..c44f375558240d1158f9488f13af6c2d1a72d610 100644 --- a/enzevalos_iphone/DataHandler.swift +++ b/enzevalos_iphone/DataHandler.swift @@ -310,7 +310,7 @@ class DataHandler { let name = adr // TODO Change here displayname _ = getContact(name: name, address: adr, key: keyID, prefer_enc: true) if addPk { - _ = newPublicKey(keyID: keyID, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false) + _ = newPublicKey(keyID: keyID, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, transferType: nil) } } if saveKey { @@ -335,12 +335,12 @@ class DataHandler { let pgp = SwiftPGP() let key = pgp.generateKey(adr: adr) let sk = DataHandler.handler.newSecretKey(keyID: key, addPk: false) - let pk = DataHandler.handler.newPublicKey(keyID: key, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, newGenerated: true) + let pk = DataHandler.handler.newPublicKey(keyID: key, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, newGenerated: true, transferType: nil) pk.sentOwnPublicKey = true return sk } - func newPublicKey(keyID: String, cryptoType: CryptoScheme, adr: String, autocrypt: Bool, firstMail: PersistentMail? = nil, newGenerated: Bool = false, saveKey: Bool = true) -> PersistentKey { + func newPublicKey(keyID: String, cryptoType: CryptoScheme, adr: String, autocrypt: Bool, firstMail: PersistentMail? = nil, newGenerated: Bool = false, saveKey: Bool = true, transferType: LogData.TransferType?) -> PersistentKey { var date = Date.init() if let mail = firstMail { if date.compare(mail.date).rawValue > 0 { @@ -380,6 +380,8 @@ class DataHandler { var importChannel = LogData.TransferType.autocrypt if newGenerated { importChannel = LogData.TransferType.generated + } else if let transferType = transferType { + importChannel = transferType } else if !autocrypt { importChannel = .mail } @@ -960,7 +962,7 @@ class DataHandler { } } else { - mail.signedKey = newPublicKey(keyID: decData.signKey!, cryptoType: decData.encType, adr: decData.signedAdrs.first!, autocrypt: false, firstMail: mail, newGenerated: false, saveKey: false) + mail.signedKey = newPublicKey(keyID: decData.signKey!, cryptoType: decData.encType, adr: decData.signedAdrs.first!, autocrypt: false, firstMail: mail, newGenerated: false, saveKey: false, transferType: nil) } } @@ -1052,6 +1054,25 @@ class DataHandler { return result } + func findRecordsOfFolder(folder: Folder) -> [KeyRecord] { + let fReq: NSFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "KeyRecord") + + //fReq.predicate = NSPredicate(format: "keys.@count > 0") + + //fReq.predicate = NSPredicate(format: "keys.@count == 0") + + do { + let result = try self.managedObjectContext.fetch(fReq) + if let res = result as? [KeyRecord] { + return res + } + } catch _ as NSError { + print("error") + } + return [KeyRecord]() + + } + func getAllPersistentMails() -> [PersistentMail] { if let mails = findAll("PersistentMail") as? [PersistentMail] { return mails diff --git a/enzevalos_iphone/DebugSettings.swift b/enzevalos_iphone/DebugSettings.swift index 63b504c68263acbd1bcf2eb85f701879c09b22c4..1aa2ea20ae945cde5c8501d32b71b43081e0b644 100644 --- a/enzevalos_iphone/DebugSettings.swift +++ b/enzevalos_iphone/DebugSettings.swift @@ -71,7 +71,7 @@ private func importPublicKey(file: String, type: String, adr: String) { do { let ids = try pgp.importKeysFromFile(file: path, pw: nil) for id in ids { - _ = datahandler.newPublicKey(keyID: id, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false) + _ = datahandler.newPublicKey(keyID: id, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, transferType: nil) } } catch _ { diff --git a/enzevalos_iphone/KeyTableViewController.swift b/enzevalos_iphone/KeyTableViewController.swift index e2962110c3ea68b1d65d7e2371e5e481922348fe..36228a77e3b171e420e9a8a0052f06cea277a849 100644 --- a/enzevalos_iphone/KeyTableViewController.swift +++ b/enzevalos_iphone/KeyTableViewController.swift @@ -11,7 +11,7 @@ import UIKit class KeyTableViewController: UITableViewController { enum KeyType { - case PublicKey, SecretKey, ImportSecretKeyItunes, ImportPublicKeyItunes, ImportFromList + case PublicKey, SecretKey, ImportSecretKeyItunes, ImportPublicKeyItunes, ImportFromListPublicKey, ImportFromListSecretKey } static func pushKeyTableView(navigationController: UINavigationController?, type:KeyType) -> KeyTableViewController? { @@ -56,7 +56,7 @@ class KeyTableViewController: UITableViewController { if importableKeys.count == 0 { onlyOneRow = true } - case .ImportFromList: + case .ImportFromListPublicKey, .ImportFromListSecretKey: title = NSLocalizedString("KeyTable.Title.ExtractedKeys", comment: "Extracted Keys") if importableKeys.count == 0 { onlyOneRow = true @@ -104,7 +104,7 @@ class KeyTableViewController: UITableViewController { return publicKeys.count case .SecretKey: return secretKeys.count - case .ImportSecretKeyItunes, .ImportFromList, .ImportPublicKeyItunes: + case .ImportSecretKeyItunes,.ImportFromListSecretKey, .ImportFromListPublicKey, .ImportPublicKeyItunes: if importableKeys.count == 0 { // Add warning to copy key in iTunes folder return 1 @@ -127,13 +127,13 @@ class KeyTableViewController: UITableViewController { cell.setLabels(key: publicKeys[indexPath.row]) case .SecretKey: cell.setLabels(key: secretKeys[indexPath.row]) - case .ImportSecretKeyItunes, .ImportFromList, .ImportPublicKeyItunes: + case .ImportSecretKeyItunes,.ImportFromListSecretKey, .ImportFromListPublicKey, .ImportPublicKeyItunes: if importableKeys.count == 0 { let cell = UITableViewCell(style: .default, reuseIdentifier: "InfoCell") cell.accessoryType = .none cell.textLabel?.numberOfLines = 0 var text = NSLocalizedString("KeyTable.Info.NoKeys.Itunes", comment: "No keys to import. Please, add a key file (.asc or .gpg) via iTunes in the Letterbox folder.") - if type == .ImportFromList { + if type == .ImportFromListPublicKey || type == .ImportFromListSecretKey { text = NSLocalizedString("KeyTable.Info.NoKeys.List", comment: "No keys to import. Please, enter a valid text.") } cell.textLabel?.text = text @@ -183,7 +183,7 @@ class KeyTableViewController: UITableViewController { } } addr = mail ?? keyID - case .ImportSecretKeyItunes, .ImportFromList, .ImportPublicKeyItunes: + case .ImportSecretKeyItunes,.ImportFromListSecretKey, .ImportFromListPublicKey, .ImportPublicKeyItunes: // Try to import key importKey(key: importableKeys[indexPath.row], indexPath: indexPath) pushView = false @@ -244,12 +244,28 @@ class KeyTableViewController: UITableViewController { private func stopImportKey(indexPath: IndexPath) { self.tableView.reloadRows(at: [indexPath], with: .automatic) + logImport(success: false) } private func storeKey(indexPath: IndexPath) -> Bool { let key = importableKeys[indexPath.row] + let type: LogData.TransferType? + switch self.type { + case .ImportFromListSecretKey: + type = .paste + case .ImportFromListPublicKey: + type = .paste + case .ImportPublicKeyItunes: + type = .iTunes + case .ImportSecretKeyItunes: + type = .iTunes + case .PublicKey: + type = nil + case .SecretKey: + type = nil + } if !key.isSecret { - if key.savePK() != nil { + if let type = type, key.savePK(type: type) != nil { tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark self.tableView.reloadRows(at: [indexPath], with: .automatic) return true @@ -258,6 +274,7 @@ class KeyTableViewController: UITableViewController { if key.save() != nil { tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark self.tableView.reloadRows(at: [indexPath], with: .automatic) + logImport(success: true) return true } return false @@ -269,4 +286,31 @@ class KeyTableViewController: UITableViewController { secretKeyPasswordField = tField } } + + private func logImport(success: Bool) { + var state: LogData.TransferType? = nil + var keyType: LogData.KeyType? = nil + switch self.type { + case .ImportFromListSecretKey: + state = .paste + keyType = .secretKey + case .ImportFromListPublicKey: + state = .paste + keyType = .publicKey + case .ImportPublicKeyItunes: + state = .iTunes + keyType = .publicKey + case .ImportSecretKeyItunes: + state = .iTunes + keyType = .secretKey + case .PublicKey: + keyType = .publicKey + case .SecretKey: + keyType = .secretKey + + } + if let state = state, let keyType = keyType { + Logger.log(importKey: state, keyType: keyType, known: false, success: success) + } + } } diff --git a/enzevalos_iphone/KeyViewController.swift b/enzevalos_iphone/KeyViewController.swift index 5536004e65acec425712584291e3cfb397915e9d..b88f9675f1d98a3613551f7e38dc1e978bc52a1b 100644 --- a/enzevalos_iphone/KeyViewController.swift +++ b/enzevalos_iphone/KeyViewController.swift @@ -43,7 +43,9 @@ class KeyViewController: UIViewController { override func viewDidDisappear(_ animated: Bool) { // Logger.queue.async(flags: .barrier) { if let record = self.record, let keyID = record.keyID { - Logger.log(keyViewClose: keyID, secondsOpened: Int(Date().timeIntervalSince(self.openDate))) + let duration = Date().timeIntervalSince(self.openDate) + Logger.log(keyViewClose: keyID, secondsOpened: Int(duration)) + } // } if let row = tableView.indexPathForSelectedRow { diff --git a/enzevalos_iphone/Logger.swift b/enzevalos_iphone/Logger.swift index 06612c2cef55baee1f58528582f81c66a3e63680..36b8eb6bc8913281766525d38a0ef3f0d32980e6 100644 --- a/enzevalos_iphone/Logger.swift +++ b/enzevalos_iphone/Logger.swift @@ -8,7 +8,7 @@ import Foundation -class Logger{ +class Logger { static var logging = StudySettings.studyMode static let loggingInterval = 86400 // 21600 = 60*60*6 seconds = 6 hours @@ -40,7 +40,6 @@ class Logger{ if !logging { return } - LogData.newSimpleEvent(event: .newSession) sendCheck() } @@ -152,11 +151,39 @@ class Logger{ if !logging { return } - LogData.importKey(keyType: .secretKey, transferType: .mail, known: false) + LogData.importKey(keyType: .secretKey, transferType: .mail, known: false, successful: success) sendCheck() } + static func log(importPrivateKey type: LogData.TransferType, known: Bool, success: Bool) { + if !logging { + return + } + if success { + LogData.importKey(keyType: .secretKey, transferType: type, known: known, successful: success) + } + sendCheck() + } + + static func log(importKey transferType: LogData.TransferType, keyType: LogData.KeyType, known: Bool, success: Bool) { + if !logging { + return + } + if success { + LogData.importKey(keyType: keyType, transferType: transferType, known: known, successful: success) + } + sendCheck() + } + + static func log(openPasteKeyView startState: PasteKeyViewController.PasteTextState ) { + if !logging { + return + } + LogData.newSimpleEvent(event: .pasteKeyView) + sendCheck() + } + static func log(sendViewOpen mail: EphemeralMail?) { if !logging { return @@ -258,11 +285,11 @@ class Logger{ } - static func log(discover publicKeyID: String, mailAddress: Mail_Address, importChannel: LogData.TransferType, knownPrivateKey: Bool, knownBefore: Bool) { + static func log(discover publicKeyID: String, mailAddress: Mail_Address?, importChannel: LogData.TransferType, knownPrivateKey: Bool, knownBefore: Bool) { if !logging { return } - LogData.importKey(keyType: .publicKey, transferType: importChannel, known: knownBefore) + LogData.importKey(keyType: .publicKey, transferType: importChannel, known: knownBefore, successful: true) sendCheck() } @@ -440,12 +467,12 @@ public class LogData { LogInUserDefaults.handler.incrementEventCounter(eventName: event) } - static func importKey(keyType: KeyType, transferType: TransferType, known: Bool) { + static func importKey(keyType: KeyType, transferType: TransferType, known: Bool, successful: Bool) { var new = "strange" if known { new = "known" } - LogInUserDefaults.handler.incrementEventCounter(eventName: "importKey|\(keyType.name)&\(transferType.name)&\(new)") + LogInUserDefaults.handler.incrementEventCounter(eventName: "importKey|\(keyType.name)&\(transferType.name)&\(new)&\(successful)") } static func exportKey(keyType: KeyType, transferType: TransferType) { @@ -475,7 +502,7 @@ public class LogData { } enum SimpleEvents { - case newSession, keyDetailsView, invationMail, loginAttempt + case newSession, keyDetailsView, invationMail, loginAttempt, pasteKeyView var name: String { get { @@ -488,6 +515,8 @@ public class LogData { return "inviation" case .loginAttempt: return "loginAttempt" + case .pasteKeyView: + return "pasteKey" } } } @@ -507,7 +536,7 @@ public class LogData { } enum TransferType { - case autocrypt, mail, iTunes, qr, generated + case autocrypt, mail, iTunes, qr, generated, paste var name: String { switch self { @@ -521,6 +550,8 @@ public class LogData { return "QR-Code" case .generated: return "generated" + case .paste: + return "paste" } } } diff --git a/enzevalos_iphone/MailHandler.swift b/enzevalos_iphone/MailHandler.swift index ae83d829bb2ce457251eaeff6d6229537b76cad6..3c03e32dfeffee3a0f652b99ac6152f9e712f235 100644 --- a/enzevalos_iphone/MailHandler.swift +++ b/enzevalos_iphone/MailHandler.swift @@ -670,7 +670,7 @@ class MailHandler { } } for keyId in newKeyIds { - _ = DataHandler.handler.newPublicKey(keyID: keyId, cryptoType: CryptoScheme.PGP, adr: mail.from.mailAddress, autocrypt: false, firstMail: mail) + _ = DataHandler.handler.newPublicKey(keyID: keyId, cryptoType: CryptoScheme.PGP, adr: mail.from.mailAddress, autocrypt: false, firstMail: mail, transferType: nil) } newKeyIds = [] for keyID in newSecretKeyIds { @@ -739,7 +739,7 @@ class MailHandler { } } else { - mail.signedKey = DataHandler.handler.newPublicKey(keyID: dec.signKey!, cryptoType: dec.encType, adr: dec.signedAdrs.first!, autocrypt: false, firstMail: mail, newGenerated: false) + mail.signedKey = DataHandler.handler.newPublicKey(keyID: dec.signKey!, cryptoType: dec.encType, adr: dec.signedAdrs.first!, autocrypt: false, firstMail: mail, newGenerated: false, transferType: nil) } } //TODO: we should delete this mail, if it is a callForRepeal and its date is in the future @@ -757,7 +757,7 @@ class MailHandler { } } for keyId in newKeyIds { - let newKey = DataHandler.handler.newPublicKey(keyID: keyId, cryptoType: CryptoScheme.PGP, adr: mail.from.mailAddress, autocrypt: false, firstMail: mail) + let newKey = DataHandler.handler.newPublicKey(keyID: keyId, cryptoType: CryptoScheme.PGP, adr: mail.from.mailAddress, autocrypt: false, firstMail: mail, transferType: nil) if misstrustNewKey { newKey.misstrust = true } diff --git a/enzevalos_iphone/PasteKeyViewController.swift b/enzevalos_iphone/PasteKeyViewController.swift index ada1b78151780bcaaee6c7e7091b2d60abf532c8..a7059b0f42781b3d90bdce8410ccf7ecacf0760d 100644 --- a/enzevalos_iphone/PasteKeyViewController.swift +++ b/enzevalos_iphone/PasteKeyViewController.swift @@ -9,14 +9,7 @@ import UIKit class PasteKeyViewController: UIViewController, UITextViewDelegate { - -/* TODO: - Buttons import public keys - Button import secret keys ??? - What about Export pks via mail? - Export sk via mail -> Use known path - */ - + enum PasteTextState { case EMPTY, KEY, WRONGFORMAT, NOKEY } @@ -60,23 +53,26 @@ class PasteKeyViewController: UIViewController, UITextViewDelegate { name: UIResponder.keyboardWillHideNotification, object: nil ) + nextBtn = UIBarButtonItem(title: NSLocalizedString("Button.Next", comment: "next"), style: .done, target: self, action: #selector(self.nextButtonClick(button:))) + self.navigationItem.rightBarButtonItem = nextBtn + // Handle first clipboard read and default texts. if let clipboard = clipboard, PGPPart.PUBLICKEY.findPGPPartInString(content: clipboard).count > 0 || PGPPart.SECRETKEY.findPGPPartInString(content: clipboard).count > 0 { pasteArea.text = clipboard } + + let state = evalPasteString() if state != .KEY { pasteArea.text = NSLocalizedString("Import.PasteKey.Area.Default", comment: "Please, enter a key here.") infoText.text = NSLocalizedString("Import.PasteKey.Info.Start", comment: "You copy a key from a mail, file or website and and paste it below.") + nextBtn?.isEnabled = false } else { updateUI(state: state) } self.title = NSLocalizedString("Import.PasteKey.Title", comment: "Just paste a key") - nextBtn = UIBarButtonItem(title: NSLocalizedString("Button.Next", comment: "next"), style: .done, target: nil, action: #selector(nextButton(btn:))) - nextBtn?.isEnabled = false - self.navigationItem.rightBarButtonItem = nextBtn - pasteArea.delegate = self + Logger.log(openPasteKeyView: state) } deinit { @@ -175,19 +171,24 @@ class PasteKeyViewController: UIViewController, UITextViewDelegate { var importableKeys = publicKeys if importableKeys.count == 0 { importableKeys = secretKeys + destination.type = .ImportFromListSecretKey + } else { + destination.type = .ImportFromListPublicKey } destination.importableKeys = importableKeys - destination.type = .ImportFromList } } - @objc private func nextButton(btn: UIBarButtonItem) { + @objc private func nextButtonClick(button: UIBarButtonItem) { var importableKeys = publicKeys + var type = KeyTableViewController.KeyType.ImportFromListPublicKey if importableKeys.count == 0 { importableKeys = secretKeys + type = KeyTableViewController.KeyType.ImportFromListSecretKey } - if let viewController = KeyTableViewController.pushKeyTableView(navigationController: self.navigationController, type: .ImportFromList) { + if let viewController = KeyTableViewController.pushKeyTableView(navigationController: self.navigationController, type: type) { viewController.importableKeys = importableKeys + } } } diff --git a/enzevalos_iphone/TempKey.swift b/enzevalos_iphone/TempKey.swift index cd7958b6c05fee2ba64c77e22ef63331d92707e5..f829a039be232ec6adf86ae37ec027b17a3a7b60 100644 --- a/enzevalos_iphone/TempKey.swift +++ b/enzevalos_iphone/TempKey.swift @@ -105,11 +105,11 @@ class TempKey: DisplayKey { return sk.first } - func savePK() -> PersistentKey? { + func savePK(type: LogData.TransferType) -> PersistentKey? { let keyIDs = SwiftPGP.init().store(tempKeys: [self]) var pk: PersistentKey? = nil for key in keyIDs { - pk = DataHandler.handler.newPublicKey(keyID: key, cryptoType: .PGP, adr: mailAddresses.first ?? "", autocrypt: false) + pk = DataHandler.handler.newPublicKey(keyID: key, cryptoType: .PGP , adr: mailAddresses.first ?? "", autocrypt: false, firstMail: nil, newGenerated: false, saveKey: true, transferType: type) } return pk } diff --git a/enzevalos_iphone/TravelHandler.swift b/enzevalos_iphone/TravelHandler.swift index 52490232f4503d4cd7d5fead5a7418c225195057..51a9bfb9737761031eadd8daf835067018431263 100644 --- a/enzevalos_iphone/TravelHandler.swift +++ b/enzevalos_iphone/TravelHandler.swift @@ -304,7 +304,7 @@ public class TravelHandler { } mode = .traveling canSecurelyBackup = traveler.canSecurelyBackup && canSecurelyBackup - _ = DataHandler.handler.newPublicKey(keyID: keyID, cryptoType: .PGP, adr: UserManager.loadUserValue(Attribute.userAddr) as! String, autocrypt: false) + _ = DataHandler.handler.newPublicKey(keyID: keyID, cryptoType: .PGP, adr: UserManager.loadUserValue(Attribute.userAddr) as! String, autocrypt: false, transferType: nil) if canSecurelyBackup { if let secretKey = pgp.exportKey(id: keyID, isSecretkey: true, autocrypt: false), let backupAddress = backupAddress, let backupKeyID = backupKeyID { let keyPair = secretKey + pubKey @@ -345,7 +345,7 @@ public class TravelHandler { mailHandler.sendTravelCallForUse(to: c, sharedSecret: "00000000000000000000000000000000000000000000000000000000000000", pubKey: pubKey, keyID: keyID, repealedKeyFingerprint: oldFingerprint, callback: {_ in }) //TODO: errorhandling! } mode = .traveling - _ = DataHandler.handler.newPublicKey(keyID: keyID, cryptoType: .PGP, adr: UserManager.loadUserValue(Attribute.userAddr) as! String, autocrypt: false) + _ = DataHandler.handler.newPublicKey(keyID: keyID, cryptoType: .PGP, adr: UserManager.loadUserValue(Attribute.userAddr) as! String, autocrypt: false, transferType: nil) } public func loadBackup(with passcode: String) -> Bool { diff --git a/enzevalos_iphone/mail/IncomingMail.swift b/enzevalos_iphone/mail/IncomingMail.swift index c3e8ec9a20c258097b467de54e38efe4a7ac54d3..682caac0f79358bb0a3aa66d32f7db71a7038a9b 100644 --- a/enzevalos_iphone/mail/IncomingMail.swift +++ b/enzevalos_iphone/mail/IncomingMail.swift @@ -257,13 +257,13 @@ class IncomingMail { if let autoc = autocrypt, let adr = from?.mailbox { if let publickeys = try? pgp.importKeys(key: autoc.key, pw: nil, isSecretKey: false, autocrypt: true) { for pk in publickeys { - _ = DataHandler.handler.newPublicKey(keyID: pk, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: true, firstMail: mail) + _ = DataHandler.handler.newPublicKey(keyID: pk, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: true, firstMail: mail, transferType: nil) } } } if let adr = from?.mailbox { for keyId in newPublicKeys { - let newKey = DataHandler.handler.newPublicKey(keyID: keyId, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, firstMail: mail) + let newKey = DataHandler.handler.newPublicKey(keyID: keyId, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, firstMail: mail, transferType: nil) if misstrustNewKey { newKey.misstrust = true }