Skip to content
Snippets Groups Projects
Commit cc5bbf8e authored by blauren95's avatar blauren95
Browse files

Issue #137:

SwiftPGP.swif:
findNotSignedMailForPublicKey(): new function that tries to verify not signed mails with a *given* public key
„re-added“ the changes from oliver’s last commit to function findMailForSecretKey()
Deleted some spaces between code lines „beauty reparation“
parent d035d38f
Branches
Tags
2 merge requests!58Onboarding screens swift ui merge dev,!55WIP: Resolve "UI for gamifcation & stats"
......@@ -592,37 +592,35 @@ class SwiftPGP: Encryption {
return CryptoObject(chiphertext: data, plaintext: plaintext, decryptedData: plaindata, sigState: sigState, encState: encState, signKey: sigKeyID, encType: CryptoScheme.PGP, signedAdrs: signedAdr)
}
//jus a help function for findMailForKey
// A help function for findMailForSecrectKey and findNotSignedMailForPublicKey
func keyAsKeyList(keyID: String) -> [Key] {
var keyList = [Key]()
let key: Key = loadKey(id: keyID)!
if let key: Key = loadKey(id: keyID) {
keyList.append(key)
}
return keyList
}
// finds undecrypted mails in persistent mails and and tries to decrypt with the incoming secret key
// Finds undecrypted mails in persistent mails and and tries to decrypt with the incoming secret key
func findMailForSecretKey(keyID: String) {
//var data: Data? = nil
var encState = EncryptionState.UnableToDecrypt
var plaindata: Data? = nil
let key: [Key] = keyAsKeyList(keyID: keyID)
let datahandler = DataHandler.handler
let mailList = datahandler.getAllNotDecryptedPersistentMail()
for mail in mailList {
// change data
// Change data
guard let data = mail.body?.data(using: .utf8) else {
return
}
// try to decrypt mail
// Try to decrypt mail
(plaindata, encState) = decryptMessage(data: data, keys: key, encForCurrentSK: true)
if encState == EncryptionState.ValidedEncryptedWithCurrentKey {
// update database
if let plaindata = plaindata, encState == EncryptionState.ValidedEncryptedWithCurrentKey || encState == EncryptionState.ValidEncryptedWithOldKey {
// Update database
mail.isEncrypted = true
mail.unableToDecrypt = false
let plaintext = String(data: plaindata!, encoding: .utf8)
mail.body = plaintext
datahandler.save(during: "")
mail.body = String.init(data: plaindata, encoding: .utf8)
datahandler.save(during: "decryption of older mails")
}
}
}
......@@ -653,6 +651,28 @@ class SwiftPGP: Encryption {
return (nil, EncryptionState.NoEncryption)
}
// Finds unsigned mails in persistent mails and and tries to verify them with the incoming public key
func findNotSignedMailForPublicKey(keyID: String) {
var sigState = SignatureState.NoPublicKey
let key: [Key] = keyAsKeyList(keyID: keyID)
let datahandler = DataHandler.handler
let mailList = datahandler.getAllNotSignedPersistentMail()
for mail in mailList {
// Change data
guard let data = mail.body?.data(using: .utf8) else {
return
}
// Try to verify mail signature
sigState = verifySignature(data: data, attachedSignature: nil, keys: key)
if sigState == SignatureState.ValidSignature {
// Update database
mail.isSigned = true
mail.isCorrectlySigned = true
datahandler.save(during: "verifying of older mails")
}
}
}
private func verifySignature(sigString: String, attachedSignature: Data?, keys: [Key]) -> SignatureState {
if let unarmored = try? Armor.readArmored(sigString){
return verifySignature(data: unarmored, attachedSignature: attachedSignature, keys: keys)
......
......@@ -68,7 +68,7 @@ class CoraDataTests: XCTestCase {
super.tearDown()
}
//test for generating list of mails with missing secret key (unable to decrypt)
// Test for generating list of mails with missing secret key (unable to decrypt)
func testGetAllFilteredMails() {
guard let from = MCOAddress(mailbox: "sender@example.com")
else {
......@@ -104,8 +104,7 @@ class CoraDataTests: XCTestCase {
}
}
// generate a test secret key
// Generate a test secret key
func testkey() -> (String){
let testsender = createUser()
let testkeyID = pgp.generateKey(adr: testsender.mailbox, new: true)
......@@ -113,25 +112,23 @@ class CoraDataTests: XCTestCase {
}
// test decryption of all undecrypted mails with new secret key
// Test decryption of all undecrypted mails with new secret key
func testfindMailForSecretKey() {
let testkeyID = testkey()
let swiftpgp = SwiftPGP()
// E-Mail generieren
guard let from = MCOAddress(mailbox: "sender@example.com")
else {
guard let from = MCOAddress(mailbox: "sender@example.com") else {
return
}
// create test mail
// Create test Mail
guard let m1 = testMail(from: from, to: [user], cc: [], bcc: []) else {
XCTFail("No test mail")
return
}
// create ciphertext
// Create Ciphertext
let body = "encrypted text"
let senderPGP = SwiftPGP()
let encryptedObject = senderPGP.encrypt(plaintext: body, ids: [testkeyID], myId: "")
......@@ -142,7 +139,7 @@ class CoraDataTests: XCTestCase {
return
}
// change mail
// Change Mail
m1.unableToDecrypt = true
m1.body = cipher
......@@ -151,11 +148,8 @@ class CoraDataTests: XCTestCase {
swiftpgp.findMailForSecretKey(keyID: testkeyID)
XCTAssertEqual(m1.body, "encrypted text")
XCTAssertFalse(m1.unableToDecrypt)
}
func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress {
return MCOAddress.init(displayName: name, mailbox: adr.lowercased())
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment