Skip to content
Snippets Groups Projects
Commit 2134cbe1 authored by jakobsbode's avatar jakobsbode
Browse files

integrate usage of keyGroups in perspective of Traveler

parent acbe46c6
Branches
No related tags found
No related merge requests found
...@@ -209,7 +209,7 @@ public class TravelHandler { ...@@ -209,7 +209,7 @@ public class TravelHandler {
if let adr = DataHandler.handler.findMailAddress(adr: c), adr.hasKey, let primaryKey = adr.primaryKey { if let adr = DataHandler.handler.findMailAddress(adr: c), adr.hasKey, let primaryKey = adr.primaryKey {
contactsWithKey.append(c) contactsWithKey.append(c)
keyIDs[c] = primaryKey.keyID keyIDs[c] = primaryKey.keyID
keys[c] = pgp.exportKey(id: primaryKey.keyID, isSecretkey: false, autocrypt: false) keys[c] = encodeKeys(relatedTo: primaryKey)
} }
} }
let traveler = Traveler(contacts: contactsWithKey, keys: keys, backupAddress: backupAddress, backupKey: backupKey, canSecurelyBackup: canSecurelyBackup) let traveler = Traveler(contacts: contactsWithKey, keys: keys, backupAddress: backupAddress, backupKey: backupKey, canSecurelyBackup: canSecurelyBackup)
...@@ -229,6 +229,40 @@ public class TravelHandler { ...@@ -229,6 +229,40 @@ public class TravelHandler {
return password return password
} }
private func encodeKeys(relatedTo key: PersistentKey) -> String {
var keys: [String] = []
let pgp = SwiftPGP()
for relatedKey in key.relatedKeys {
if let exportedKey = pgp.exportKey(id: relatedKey.keyID, isSecretkey: false, autocrypt: false) {
keys.append(exportedKey)
}
}
if let data = try? JSONEncoder().encode(keys) {
return String(data: data, encoding: .utf8) ?? ""
}
return ""
}
private func compareKeys(keysFromTraveler: String, storedPrimaryKey: PersistentKey) -> Bool {
if let data = keysFromTraveler.data(using: .utf8), let checkedKeys = try? JSONDecoder().decode([String].self, from: data) {
var storedKeys: [String] = []
let pgp = SwiftPGP()
for relatedKey in storedPrimaryKey.relatedKeys {
if let exportedKey = pgp.exportKey(id: relatedKey.keyID, isSecretkey: false, autocrypt: false) {
storedKeys.append(exportedKey)
}
}
for storedKey in storedKeys {
if !checkedKeys.contains(storedKey) {
return false
}
return true
}
}
return false
}
/*throw different Errors: /*throw different Errors:
* all mails could not be sent * all mails could not be sent
* some mails could not be sent * some mails could not be sent
...@@ -249,7 +283,7 @@ public class TravelHandler { ...@@ -249,7 +283,7 @@ public class TravelHandler {
var keyIDs: [String: String] = [:] var keyIDs: [String: String] = [:]
let pgp = SwiftPGP() let pgp = SwiftPGP()
for c in traveler.contacts { for c in traveler.contacts {
if let adr = DataHandler.handler.findMailAddress(adr: c), adr.hasKey, let primaryKey = adr.primaryKey, pgp.exportKey(id: primaryKey.keyID, isSecretkey: false, autocrypt: false) == travelerKeys[c] { if let adr = DataHandler.handler.findMailAddress(adr: c), adr.hasKey, let primaryKey = adr.primaryKey, let travelerKey = travelerKeys[c], compareKeys(keysFromTraveler: travelerKey, storedPrimaryKey: primaryKey){
keyIDs[c] = primaryKey.keyID keyIDs[c] = primaryKey.keyID
} else { } else {
throw TravelError.corruptData throw TravelError.corruptData
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment