From 2875096677c45e03b1c62e69b37220ed07a39efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Scha=CC=88ffer?= Date: Thu, 4 Mar 2021 00:40:35 +0100 Subject: [PATCH 1/4] fix autocrypt header issue. Remove line feeds from decoded key string. --- enzevalos_iphone/OutgoingMail.swift | 2 +- enzevalos_iphone/PGP/SwiftPGP.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/enzevalos_iphone/OutgoingMail.swift b/enzevalos_iphone/OutgoingMail.swift index 2cbe151e..2a406dd2 100644 --- a/enzevalos_iphone/OutgoingMail.swift +++ b/enzevalos_iphone/OutgoingMail.swift @@ -335,7 +335,7 @@ class OutgoingMail { if autocrypt { Autocrypt.addAutocryptHeader(builder) if let autocrypt = builder.header.extraHeaderValue(forName: Autocrypt.AUTOCRYPTHEADER) { - //headerString += Autocrypt.AUTOCRYPTHEADER + ": " + autocrypt + "\r\n" + headerString += Autocrypt.AUTOCRYPTHEADER + ": " + autocrypt + "\r\n" } } if let msgID = header?.messageID { diff --git a/enzevalos_iphone/PGP/SwiftPGP.swift b/enzevalos_iphone/PGP/SwiftPGP.swift index cd1dba8f..755ee8b3 100644 --- a/enzevalos_iphone/PGP/SwiftPGP.swift +++ b/enzevalos_iphone/PGP/SwiftPGP.swift @@ -349,7 +349,7 @@ class SwiftPGP: Encryption { func exportKey(id: String, isSecretkey isSecretKey: Bool, autocrypt: Bool, newPasscode: Bool = false) -> String?{ if let key = exportKeyData(id: id, isSecretkey: isSecretKey){ if !isSecretKey && autocrypt{ - return key.base64EncodedString(options: .init(arrayLiteral: .lineLength76Characters, .endLineWithLineFeed)) + return key.base64EncodedString() } else{ var armoredKey : String -- GitLab From 6c7f1b334cf452ab53c41a0cc8b871d67061bf3f Mon Sep 17 00:00:00 2001 From: Oliver Wiese Date: Tue, 9 Mar 2021 17:17:14 +0100 Subject: [PATCH 2/4] fix losing secret key bug. --- .../xcschemes/enzevalos_iphone.xcscheme | 77 +++++++++++++++++++ enzevalos_iphone/New Group/Mailbot.swift | 2 +- enzevalos_iphone/OutgoingMail.swift | 2 +- enzevalos_iphone/PGP/SwiftPGP.swift | 8 ++ enzevalos_iphone/SMIME.swift | 2 +- enzevalos_iphone/SwiftUI/LetterboxModel.swift | 1 - enzevalos_iphone/mail/IncomingMail.swift | 25 +++++- .../PersistentDataProvider.swift | 24 +++--- .../persistentData/Properties.swift | 4 +- .../persistentData/PublicKeyRecord.swift | 6 +- enzevalos_iphoneTests/CryptoTests.swift | 2 +- enzevalos_iphoneTests/GeneratedMocks.swift | 4 +- 12 files changed, 134 insertions(+), 23 deletions(-) diff --git a/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme b/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme index e36c9ae5..85a049fc 100644 --- a/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme +++ b/enzevalos_iphone.xcodeproj/xcshareddata/xcschemes/enzevalos_iphone.xcscheme @@ -38,6 +38,38 @@ ReferencedContainer = "container:enzevalos_iphone.xcodeproj"> + + + + + + + + + + + + + + @@ -73,6 +105,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [String] { if let keyData = try? Armor.readArmored(key) { + /* if let plaintext = try? ObjectivePGP.symmetricDecrypt(keyData, key: passcode, verifyWith: nil, signed: nil, valid: nil, integrityProtected: nil), let ids = try? importKeys(data: plaintext, pw: nil, secret: true) { return ids } + */ } return [] } @@ -817,6 +821,7 @@ class SwiftPGP: Encryption { for text in textToEncrypt{ if let data = text.data(using: .utf8){ + /* if let chipher = try? ObjectivePGP.symmetricEncrypt(data, signWith: nil, encryptionKey: password, passphrase: pw, armored: false){ if armored{ chiphers.append(Armor.armored(chipher, as: PGPArmorType.message)) @@ -825,6 +830,7 @@ class SwiftPGP: Encryption { chiphers.append(chipher.base64EncodedString(options: .init(arrayLiteral: .lineLength76Characters, .endLineWithLineFeed))) } } + */ } } return (chiphers, pw) @@ -835,11 +841,13 @@ class SwiftPGP: Encryption { for chipher in chipherTexts{ if let data = chipher.data(using: .utf8){ + /* if let plainData = try? ObjectivePGP.symmetricDecrypt(data, key: password, verifyWith: nil, signed: nil, valid: nil, integrityProtected: nil){ if let plainText = String(data: plainData, encoding: .utf8){ plaintexts.append(plainText) } } + */ } } return plaintexts diff --git a/enzevalos_iphone/SMIME.swift b/enzevalos_iphone/SMIME.swift index 0a64db23..c085701a 100644 --- a/enzevalos_iphone/SMIME.swift +++ b/enzevalos_iphone/SMIME.swift @@ -184,7 +184,7 @@ class SMIME { var outputData: Data = data let text = String(data: data, encoding: .utf8)! var fp = getOwnKeyFP() - let cert = certsKeychain[fp!]! + let cert = certsKeychain[fp!]! // TODO ERROR!!! let key = privateKeyKeychain[fp!]! var (decStr, errArr) = decryptWithPem(message: text, certAsPem: cert, keyAsPem: key) diff --git a/enzevalos_iphone/SwiftUI/LetterboxModel.swift b/enzevalos_iphone/SwiftUI/LetterboxModel.swift index d1d59343..d9aee912 100644 --- a/enzevalos_iphone/SwiftUI/LetterboxModel.swift +++ b/enzevalos_iphone/SwiftUI/LetterboxModel.swift @@ -121,7 +121,6 @@ class LetterboxModel: ObservableObject { return } }) - } else { // TODO: ONLY FOR TESTING!!!! // OutgoingMail.LoadSMIMETEST() diff --git a/enzevalos_iphone/mail/IncomingMail.swift b/enzevalos_iphone/mail/IncomingMail.swift index 83f59bb5..58fb59d6 100644 --- a/enzevalos_iphone/mail/IncomingMail.swift +++ b/enzevalos_iphone/mail/IncomingMail.swift @@ -269,6 +269,28 @@ class IncomingMail { } let encState = self.cryptoObj?.encryptionState.rawValue ?? 0 + var lastsignedDate: Date? = nil // TODO: Remove from PublicKeyProperty -> Update this in Record file... + if let sigState = self.cryptoObj?.signatureState, sigState == .ValidSignature { + lastsignedDate = self.date + } + var usedAddr = [AddressProperties]() + if let from = from { + usedAddr.append(from) + } + + var autocryptPK = [PublicKeyProperties]() + for fpr in newAutocrypPublicKeys { + let pk = PublicKeyProperties(fingerprint: fpr, cryptoProtocol: .PGP, origin: .AutocryptHeader, preferEncryption: autocrypt?.prefer_encryption, lastSeenInAutocryptHeader: date, lastSeenSignedMail: nil, secretKeyProperty: nil, usedAddresses: usedAddr) + autocryptPK.append(pk) + } + + var attPK = [PublicKeyProperties]() + for fpr in newPublicKeys { + let pk = PublicKeyProperties(fingerprint: fpr, cryptoProtocol: .PGP, origin: .MailAttachment, preferEncryption: nil, lastSeenInAutocryptHeader: nil, lastSeenSignedMail: nil, secretKeyProperty: nil, usedAddresses: usedAddr) + attPK.append(pk) + } + + var attachments = [AttachmentProperties]() for att in readableAttachments{ // TODO add missing fields @@ -276,7 +298,8 @@ class IncomingMail { attachments.append(property) } let f = Int16(self.flags.rawValue) - var m = MailProperties(messageID: self.msgID, subject: subject, date: date, flags: f, from: from, to: to, cc: ccProperties, bcc: bccProperties, folder: folder, body: body, signatureState: sigState, encryptionState: encState, signatureKey: sigKey, decryptionKey: nil, autocryptHeaderKey: nil, attachedPublicKeys: [], attachedSecretKeys: []) + + var m = MailProperties(messageID: self.msgID, subject: subject, date: date, flags: f, from: from, to: to, cc: ccProperties, bcc: bccProperties, folder: folder, body: body, signatureState: sigState, encryptionState: encState, signatureKey: sigKey, decryptionKey: nil, autocryptHeaderKey: autocryptPK, attachedPublicKeys: attPK, attachedSecretKeys: []) // TODO: FIX KEYS m.to = to m.cc = ccProperties diff --git a/enzevalos_iphone/persistentData/PersistentDataProvider.swift b/enzevalos_iphone/persistentData/PersistentDataProvider.swift index 4998d8b2..9f0e169a 100644 --- a/enzevalos_iphone/persistentData/PersistentDataProvider.swift +++ b/enzevalos_iphone/persistentData/PersistentDataProvider.swift @@ -239,7 +239,7 @@ class PersitentDataProvider { self.importOneMail(m: m, taskContext: taskContext) } else if let key = d as? PublicKeyProperties { - self.importeOneKey(publicKey: key, taskContext: taskContext) + _ = self.importeOneKey(publicKey: key, taskContext: taskContext) } else { // Create a managed object on the private queue context. @@ -264,7 +264,7 @@ class PersitentDataProvider { } - private func importeOneKey(publicKey: PublicKeyProperties, taskContext: NSManagedObjectContext) { + private func importeOneKey(publicKey: PublicKeyProperties, taskContext: NSManagedObjectContext) -> PublicKeyRecord { let publicKeyRecord: PublicKeyRecord if let pk = taskContext.findPublicKeys(fingerprint: publicKey.fingerprint)?.first { publicKeyRecord = pk @@ -299,6 +299,7 @@ class PersitentDataProvider { importManyAddresses(addrs: addresses , taskContext: taskContext, addTo: secretKeyRecord.addToUsedAddress) } } + return publicKeyRecord } private func importOneMail(m: MailProperties, taskContext: NSManagedObjectContext) { @@ -365,24 +366,27 @@ class PersitentDataProvider { } - // Handle related cryptokeys + // Handling keys if let signedKey = m.signatureKey { - let key = NSEntityDescription.insertNewObject(forEntityName: PublicKeyRecord.entityName, into: taskContext) as! PublicKeyRecord + let key = importeOneKey(publicKey: signedKey, taskContext: taskContext) key.update(property: signedKey) mail.signatureKey = key } if let decKey = m.decryptionKey { - let key = NSEntityDescription.insertNewObject(forEntityName: SecretKeyRecord.entityName, into: taskContext) as! SecretKeyRecord - key.update(property: decKey) - mail.decryptionKey = key + let publicKeyProperties = PublicKeyProperties(fingerprint: decKey.fingerprint, cryptoProtocol: decKey.cryptoProtocol, origin: nil, preferEncryption: nil, lastSeenInAutocryptHeader: nil, lastSeenSignedMail: nil, secretKeyProperty: decKey,usedAddresses: decKey.usedAddresses) + let key = importeOneKey(publicKey: publicKeyProperties, taskContext: taskContext) + if let secKey = key.mySecretKeyRecord { + secKey.update(property: decKey) + mail.decryptionKey = secKey + } } - if let autocryptKey = m.autocryptHeaderKey { - let key = NSEntityDescription.insertNewObject(forEntityName: PublicKeyRecord.entityName, into: taskContext) as! PublicKeyRecord + if let autocryptKey = m.autocryptHeaderKey.first { // TODO: Fix multiple Autocrypt keys? + let key = importeOneKey(publicKey: autocryptKey, taskContext: taskContext) key.update(property: autocryptKey) mail.attachedAutocryptPublicKey = key } for pk in m.attachedPublicKeys { - let key = NSEntityDescription.insertNewObject(forEntityName: PublicKeyRecord.entityName, into: taskContext) as! PublicKeyRecord + let key = importeOneKey(publicKey: pk, taskContext: taskContext) key.update(property: pk) mail.addToAttachedPublicKeys(key) } diff --git a/enzevalos_iphone/persistentData/Properties.swift b/enzevalos_iphone/persistentData/Properties.swift index c605f848..7db6b0d8 100644 --- a/enzevalos_iphone/persistentData/Properties.swift +++ b/enzevalos_iphone/persistentData/Properties.swift @@ -43,7 +43,7 @@ struct MailProperties: DataPropertyProtocol { var signatureKey: PublicKeyProperties? var decryptionKey: SecretKeyProperties? - var autocryptHeaderKey: PublicKeyProperties? + var autocryptHeaderKey: [PublicKeyProperties] = [] var attachedPublicKeys: [PublicKeyProperties] = [] var attachedSecretKeys: [SecretKeyProperties] = [] @@ -103,7 +103,7 @@ struct PublicKeyProperties: DataPropertyProtocol { let fingerprint: String let cryptoProtocol: CryptoScheme - var origin: Origin + var origin: Origin? var preferEncryption: AutocryptState? var lastSeenInAutocryptHeader: Date? diff --git a/enzevalos_iphone/persistentData/PublicKeyRecord.swift b/enzevalos_iphone/persistentData/PublicKeyRecord.swift index 6f2f711b..f972a326 100644 --- a/enzevalos_iphone/persistentData/PublicKeyRecord.swift +++ b/enzevalos_iphone/persistentData/PublicKeyRecord.swift @@ -39,9 +39,9 @@ extension PublicKeyRecord { if discovery == nil { discovery = Date() } - - self.origin = property.origin.rawValue - + if let origin = property.origin?.rawValue { + self.origin = origin + } if let lastSeen = property.lastSeenInAutocryptHeader { if let last = self.lastSeenInAutocryptHeader { if last < lastSeen { diff --git a/enzevalos_iphoneTests/CryptoTests.swift b/enzevalos_iphoneTests/CryptoTests.swift index e8ff19b4..953b9554 100644 --- a/enzevalos_iphoneTests/CryptoTests.swift +++ b/enzevalos_iphoneTests/CryptoTests.swift @@ -611,7 +611,7 @@ class CryptoTests: XCTestCase { let subject = "Test mail" let folder = FolderProperties(delimiter: nil, uidValidity: nil, lastUpdate: nil, maxUID: nil, minUID: nil, path: "Testfolder", parent: nil, children: nil) - let mail = MailProperties(messageID: "dasdads", subject: subject, date: Date(), flags: 0, from: from, to: to, cc: [], bcc: [], folder: folder, body: body, attachments: [], signatureState: sigState.rawValue, encryptionState: encState.rawValue, signatureKey: nil, decryptionKey: nil, autocryptHeaderKey: nil, attachedPublicKeys: [], attachedSecretKeys: []) + let mail = MailProperties(messageID: "dasdads", subject: subject, date: Date(), flags: 0, from: from, to: to, cc: [], bcc: [], folder: folder, body: body, attachments: [], signatureState: sigState.rawValue, encryptionState: encState.rawValue, signatureKey: nil, decryptionKey: nil, autocryptHeaderKey: [], attachedPublicKeys: [], attachedSecretKeys: []) let importExpectation = expectation(description: "Import email") PersitentDataProvider.dataProvider.importNewData(from: [mail], completionHandler: {error in diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift b/enzevalos_iphoneTests/GeneratedMocks.swift index a8706487..59315255 100644 --- a/enzevalos_iphoneTests/GeneratedMocks.swift +++ b/enzevalos_iphoneTests/GeneratedMocks.swift @@ -1,4 +1,4 @@ -// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2021-03-01 09:59:44 +0000 +// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2021-03-09 16:14:51 +0000 // // AuthenticationModel.swift @@ -654,7 +654,7 @@ import Foundation } -// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2021-03-01 09:59:44 +0000 +// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2021-03-09 16:14:51 +0000 // // AuthenticationViewModel.swift -- GitLab From 7cb9417c04c7b53f5cf4cbe6a06d24bc6a55536f Mon Sep 17 00:00:00 2001 From: Oliver Wiese Date: Tue, 9 Mar 2021 17:54:25 +0100 Subject: [PATCH 3/4] refactor for testcase --- enzevalos_iphone/OutgoingMail.swift | 7 ++--- enzevalos_iphone/PGP/Autocrypt.swift | 10 ++++++- enzevalos_iphoneTests/AutocryptTest.swift | 34 ++++++++++++++++++++++ enzevalos_iphoneTests/GeneratedMocks.swift | 4 +-- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/enzevalos_iphone/OutgoingMail.swift b/enzevalos_iphone/OutgoingMail.swift index e476314a..4a480819 100644 --- a/enzevalos_iphone/OutgoingMail.swift +++ b/enzevalos_iphone/OutgoingMail.swift @@ -332,11 +332,8 @@ class OutgoingMail { headerString += "BCC: " + bccs + "\r\n" } headerString += "X-Mailer: Letterbox \r\n" - if autocrypt { - Autocrypt.addAutocryptHeader(builder) - if let autocrypt = builder.header.extraHeaderValue(forName: Autocrypt.AUTOCRYPTHEADER) { - headerString += Autocrypt.AUTOCRYPTHEADER + ": " + autocrypt + "\r\n" - } + if let header = Autocrypt.customAutocryptHeader { + headerString += header } if let msgID = header?.messageID { headerString += "Message-ID: " + msgID + "\r\n" diff --git a/enzevalos_iphone/PGP/Autocrypt.swift b/enzevalos_iphone/PGP/Autocrypt.swift index 485d6f64..79ec26c9 100644 --- a/enzevalos_iphone/PGP/Autocrypt.swift +++ b/enzevalos_iphone/PGP/Autocrypt.swift @@ -32,7 +32,6 @@ class Autocrypt { setPrefer_encryption(prefer_encryption) } - convenience init(header: MCOMessageHeader) { var autocrypt = header.extraHeaderValue(forName: Autocrypt.AUTOCRYPTHEADER) var field: [String] @@ -121,6 +120,15 @@ class Autocrypt { } } + /// Use this function to create an autocrypt header for manuel header creation. + /// - returns: Autcrypt: Addr = ...; key=... + static var customAutocryptHeader: String? { + guard let autocrypt = autocryptHeader else { + return nil + } + return Autocrypt.AUTOCRYPTHEADER + ": " + autocrypt + "\r\n" + } + static func addAutocryptHeader(_ builder: MCOMessageBuilder) { if let autocrypt = Autocrypt.autocryptHeader { builder.header.setExtraHeaderValue(autocrypt, forName: AUTOCRYPTHEADER) diff --git a/enzevalos_iphoneTests/AutocryptTest.swift b/enzevalos_iphoneTests/AutocryptTest.swift index abf8e50e..d5072f6c 100644 --- a/enzevalos_iphoneTests/AutocryptTest.swift +++ b/enzevalos_iphoneTests/AutocryptTest.swift @@ -103,6 +103,40 @@ class AutocryptTest: XCTestCase { } } + func testSelfCreatedHeader() { + print("My keyID: \(userKeyID)") + guard let customHeader = Autocrypt.customAutocryptHeader else { + XCTFail("No autocrypt...") + return + } + // Create custom header + var headerString = "" + headerString += "From: " + userAdr + "\r\n" + headerString += "To: " + "alice@example.com" + "\r\n" + headerString += customHeader + headerString += "Message-ID: " + "202029293239sisdj292323" + "\r\n" + headerString += "Subject: " + "subject" + "\r\n" + + let mail = headerString + "Hello World" + guard let data = mail.data(using: .utf8) else { + XCTFail("No mail data...") + return + } + + let inc = IncomingMail(rawData: data, uID: 0, folderPath: "Test", flags: .seen) + let prop = inc.export() + XCTAssertEqual(prop.autocryptHeaderKey.count, 1) + guard let key = prop.autocryptHeaderKey.first else { + XCTFail("No key...") + return + } + XCTAssertEqual(key.fingerprint, userKeyID) + XCTAssertEqual(key.cryptoProtocol, .PGP) + XCTAssertEqual(key.origin, .AutocryptHeader) + XCTAssertEqual(key.preferEncryption, .MUTUAL) + XCTAssertEqual(key.usedAddresses?.first?.email, userAdr) + } + func testAutocryptHeader(){ let outmail = OutgoingMail(toEntrys: ["alice@example.com"], ccEntrys: [], bccEntrys: [], subject: "subject", textContent: "Body", htmlContent: nil) if let parser = MCOMessageParser(data: outmail.plainData), let _ = pgp.exportKey(id: userKeyID, isSecretkey: false, autocrypt: false) { diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift b/enzevalos_iphoneTests/GeneratedMocks.swift index 59315255..470e5ef2 100644 --- a/enzevalos_iphoneTests/GeneratedMocks.swift +++ b/enzevalos_iphoneTests/GeneratedMocks.swift @@ -1,4 +1,4 @@ -// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2021-03-09 16:14:51 +0000 +// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2021-03-09 16:51:40 +0000 // // AuthenticationModel.swift @@ -654,7 +654,7 @@ import Foundation } -// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2021-03-09 16:14:51 +0000 +// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2021-03-09 16:51:40 +0000 // // AuthenticationViewModel.swift -- GitLab From 42fafc32f3743f67b03a87d0ebe903fdf51b9e18 Mon Sep 17 00:00:00 2001 From: Oliver Wiese Date: Wed, 10 Mar 2021 17:08:30 +0100 Subject: [PATCH 4/4] update signed smime test mail --- enzevalos_iphoneTests/GeneratedMocks.swift | 4 +- .../testMails/signedSMIMEfromMac.eml | 101 +++++++++--------- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift b/enzevalos_iphoneTests/GeneratedMocks.swift index a8706487..40eecd85 100644 --- a/enzevalos_iphoneTests/GeneratedMocks.swift +++ b/enzevalos_iphoneTests/GeneratedMocks.swift @@ -1,4 +1,4 @@ -// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2021-03-01 09:59:44 +0000 +// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2021-03-10 16:07:04 +0000 // // AuthenticationModel.swift @@ -654,7 +654,7 @@ import Foundation } -// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2021-03-01 09:59:44 +0000 +// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2021-03-10 16:07:04 +0000 // // AuthenticationViewModel.swift diff --git a/enzevalos_iphoneTests/testMails/signedSMIMEfromMac.eml b/enzevalos_iphoneTests/testMails/signedSMIMEfromMac.eml index 91f00a08..cedd9975 100644 --- a/enzevalos_iphoneTests/testMails/signedSMIMEfromMac.eml +++ b/enzevalos_iphoneTests/testMails/signedSMIMEfromMac.eml @@ -1,30 +1,30 @@ From: Oliver Wiese Content-Type: multipart/signed; - boundary="Apple-Mail=_58C9D0E1-2B0A-4882-8F02-411E8FCB5BF0"; + boundary="Apple-Mail=_9BE88FFD-313B-4C05-B770-19F608BDA482"; protocol="application/pkcs7-signature"; micalg=sha-256 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) -Subject: A signed smime mail from mac -X-Universally-Unique-Identifier: 4DCBCCEE-E252-4369-B8DA-8390C62F2AF3 -Message-Id: -Date: Tue, 16 Feb 2021 17:16:58 +0100 +Subject: Signed SMIME Mail from Mac +X-Universally-Unique-Identifier: 446C1C0E-D181-4FE7-A3D7-EFE6936F1D9F +Message-Id: <2A97340F-AB0E-4981-9736-8EA9AD278B41@fu-berlin.de> +Date: Wed, 10 Mar 2021 17:04:27 +0100 To: bob@enzevalos.de ---Apple-Mail=_58C9D0E1-2B0A-4882-8F02-411E8FCB5BF0 +--Apple-Mail=_9BE88FFD-313B-4C05-B770-19F608BDA482 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii -A signed smime mail from mac ---Apple-Mail=_58C9D0E1-2B0A-4882-8F02-411E8FCB5BF0 +Signed SMIME Mail from Mac +--Apple-Mail=_9BE88FFD-313B-4C05-B770-19F608BDA482 Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 -MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCEQcw +MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCESYw ggUSMIID+qADAgECAgkA4wvV+K8l2YEwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAkRFMSsw KQYDVQQKDCJULVN5c3RlbXMgRW50ZXJwcmlzZSBTZXJ2aWNlcyBHbWJIMR8wHQYDVQQLDBZULVN5 c3RlbXMgVHJ1c3QgQ2VudGVyMSUwIwYDVQQDDBxULVRlbGVTZWMgR2xvYmFsUm9vdCBDbGFzcyAy @@ -73,49 +73,50 @@ DlXwCbFqPnjMaDWpHPOVnj/z+N9rOHeJLI21rT7H8pTNoAauusyosa0zCLYkhmI2THhuUPDVbmCN T1IxQ5dGdfBi5G5mUcFCMWdQ5UnnOR7Ln8qGSN4IFP8VSytmm6A4nwDO/afr0X9XLchMX9wQEZc+ lgQCXISoKTlslPwQkgZ7nu7YRrQbtQMMONncsKk/cQYLsgMHM8KNSGMlJTx6e1du94oFOO+4oK4v 9NsH1VuEGMGpuEvObJAaguS5Pfp38dIfMwK/U+d2+dwmJUFvL6Yb+qQTkPp8ftkLYF3sv8pBoGH7 -EUkp2KgtdRXYShjqFu9VNCIaE40GMIIGPTCCBSWgAwIBAgIMHquxIGDgCGtc8ZZZMA0GCSqGSIb3 +EUkp2KgtdRXYShjqFu9VNCIaE40GMIIGXDCCBUSgAwIBAgIMJFhrl196HHUl2Ey0MA0GCSqGSIb3 DQEBCwUAMIGNMQswCQYDVQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVp bmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJMSUw -IwYDVQQDDBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBMB4XDTE4MDIyMDE0NDEyMloXDTIx -MDIxOTE0NDEyMlowgZoxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcMBkJl +IwYDVQQDDBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBMB4XDTIxMDIyNjEyNDgwOVoXDTI0 +MDIyNjEyNDgwOVowgbsxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcMBkJl cmxpbjEiMCAGA1UECgwZRnJlaWUgVW5pdmVyc2l0YWV0IEJlcmxpbjEuMCwGA1UECwwlRmFjaGJl -cmVpY2ggTWF0aGVtYXRpayB1bmQgSW5mb3JtYXRpazEVMBMGA1UEAwwMT2xpdmVyIFdpZXNlMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx25g+X495DeptnwCaQ6cykfU3s2nICuN+XOA -Jlvu2alLN2qaySL2vmumySejVk2jZxC3Is5I/3GrYL6uCpLjp0w7LeEkmrfRGFYV1cMOMtKz+exv -M+xplyYf4ibVYPhPGR3oHy3VDdd1QQolqmADdS4MDeOHBknEqaWDvVSkSWt2Jm5QmnVuvEDmppsA -c4C3w8IR1MOU3TnVphlIrDF6ZrMxKvxzCrFEby8jE6paipgS+ZfZxRtCaqZUWW3Vu5CWWyz1CLOu -Ff0FZOX6uG8RdBeBm7NUagg8UXkDCKX08bMIYfShz+IoCy0aHV7Ks5I3+N6/2pHEmoWm/qpdkPta -fQIDAQABo4ICjDCCAogwQAYDVR0gBDkwNzAPBg0rBgEEAYGtIYIsAQEEMBEGDysGAQQBga0hgiwB -AQQDBzARBg8rBgEEAYGtIYIsAgEEAwcwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBeAwHQYDVR0l -BBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMB0GA1UdDgQWBBTZ8ytnI7fxN4uilTbn+lUG1l6R0jAf -BgNVHSMEGDAWgBRrOpiL+fJTidrgrbIyHgkf6Ko7dDBcBgNVHREEVTBTgRlvbGl2ZXIud2llc2VA -ZnUtYmVybGluLmRlgRt3aWVzZW9saUB6ZWRhdC5mdS1iZXJsaW4uZGWBGU9saXZlci5XaWVzZUBm -dS1iZXJsaW4uZGUwgY0GA1UdHwSBhTCBgjA/oD2gO4Y5aHR0cDovL2NkcDEucGNhLmRmbi5kZS9k -Zm4tY2EtZ2xvYmFsLWcyL3B1Yi9jcmwvY2FjcmwuY3JsMD+gPaA7hjlodHRwOi8vY2RwMi5wY2Eu -ZGZuLmRlL2Rmbi1jYS1nbG9iYWwtZzIvcHViL2NybC9jYWNybC5jcmwwgdsGCCsGAQUFBwEBBIHO -MIHLMDMGCCsGAQUFBzABhidodHRwOi8vb2NzcC5wY2EuZGZuLmRlL09DU1AtU2VydmVyL09DU1Aw -SQYIKwYBBQUHMAKGPWh0dHA6Ly9jZHAxLnBjYS5kZm4uZGUvZGZuLWNhLWdsb2JhbC1nMi9wdWIv -Y2FjZXJ0L2NhY2VydC5jcnQwSQYIKwYBBQUHMAKGPWh0dHA6Ly9jZHAyLnBjYS5kZm4uZGUvZGZu -LWNhLWdsb2JhbC1nMi9wdWIvY2FjZXJ0L2NhY2VydC5jcnQwDQYJKoZIhvcNAQELBQADggEBAIZ4 -78RroIuTMr5QvBVINS9oX6HFIOHCPtSuuKRMpb6OHCmyye0NySJAVtK9ozDzomkShvMzMm5SmAoG -xubcqgb5ovg8eixwDvEj+QlKQ8hQHUNoYf4ExNeU+KDE0pSE6AM1GgnRB34Xtjpk/d+6nA6JKqxz -VSH00K3dSzVtrDdgnAdr4su8pTtgYNL2hlTzqkSj0MdzcyBq7PvmVlSE60umivECuQt+Sig6HEt2 -e2bgQ52ZVvKTpQ8oTj0+Mfw2ul2eYyRcLEz9Y2/GpwLXai5QQbClPmPRo1z0mFoYYe2R8QiwHHgS -11RI6lHw4wUHox0PrfDb8vZlz2jafZQendUxggOdMIIDmQIBATCBnjCBjTELMAkGA1UEBhMCREUx +cmVpY2ggTWF0aGVtYXRpayB1bmQgSW5mb3JtYXRpazEOMAwGA1UEBAwFV2llc2UxDzANBgNVBCoM +Bk9saXZlcjEVMBMGA1UEAwwMT2xpdmVyIFdpZXNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA1tXu5MsVxQ8Cn9RLiJPo74E/DwQaGk7jMODB4GyHMgdocL99RiWJkzv6edL1gHEGvVL/ +NWXP2CPgjD3ckpQJCbGIqtRRpOPkenxQzDzYmDn14YIbBDvWmCUNGEYr/YVkz8OcRYM12R7KnJ56 +YYQUZY/0KPd+C9wY79EsTRA+Gl9PYXp2yfBsA3d2IJxbmdP5mLU9GoJ/q8jqnIGk9IpPZ5sLfLbd +sMO7EbXblMMUpkDCLvau7/nTuVsf66VrxLwR5i9lMGoetK3uPQUIA4SDMvEnJUm1o+VSr+IxtIZy +bG5gO99uJ+6xxXcw8rQB1ejvTOrjf9LK8yD6V80lN9qI9wIDAQABo4ICijCCAoYwPgYDVR0gBDcw +NTAPBg0rBgEEAYGtIYIsAQEEMBAGDisGAQQBga0hgiwBAQQIMBAGDisGAQQBga0hgiwCAQQIMAkG +A1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAd +BgNVHQ4EFgQUpC8bD5xOFMZIDBQF1RAv1QHZ+iswHwYDVR0jBBgwFoAUazqYi/nyU4na4K2yMh4J +H+iqO3QwXAYDVR0RBFUwU4EZb2xpdmVyLndpZXNlQGZ1LWJlcmxpbi5kZYEZT2xpdmVyLldpZXNl +QGZ1LWJlcmxpbi5kZYEbd2llc2VvbGlAemVkYXQuZnUtYmVybGluLmRlMIGNBgNVHR8EgYUwgYIw +P6A9oDuGOWh0dHA6Ly9jZHAxLnBjYS5kZm4uZGUvZGZuLWNhLWdsb2JhbC1nMi9wdWIvY3JsL2Nh +Y3JsLmNybDA/oD2gO4Y5aHR0cDovL2NkcDIucGNhLmRmbi5kZS9kZm4tY2EtZ2xvYmFsLWcyL3B1 +Yi9jcmwvY2FjcmwuY3JsMIHbBggrBgEFBQcBAQSBzjCByzAzBggrBgEFBQcwAYYnaHR0cDovL29j +c3AucGNhLmRmbi5kZS9PQ1NQLVNlcnZlci9PQ1NQMEkGCCsGAQUFBzAChj1odHRwOi8vY2RwMS5w +Y2EuZGZuLmRlL2Rmbi1jYS1nbG9iYWwtZzIvcHViL2NhY2VydC9jYWNlcnQuY3J0MEkGCCsGAQUF +BzAChj1odHRwOi8vY2RwMi5wY2EuZGZuLmRlL2Rmbi1jYS1nbG9iYWwtZzIvcHViL2NhY2VydC9j +YWNlcnQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQBXTTIaa3C3miMEok7yGMkUyB16o0ctMzVhRexg +rARlBi4uYprn1URJGLRVmVzXb1H7DbSYEjJtCr6lJITQP0pcwQC1y47ObWqAVKNx+hDM5VsWwSB+ +xXlGjIuKb8ZLxCcTVIsvlSZw/i8XU4xfUB7GmgNtFK2lzAtPT8LlG0i3ph4Zshj7wzMJpxxbCgdG +IMGLtKIimmegpzIB4N0jecm4C5DcaYf1V874Fw5C5FxG8yvQLlGhbHGsVXqBeYyRzv0UY/kLLnHr +FO57Tq24uPZuDOg06nIQb/SUZ8qXwz0sqBt0j4NP6qqj/Ur7y81a8YRQaKFantJFh2jQu6uz5kOW +MYIDnTCCA5kCAQEwgZ4wgY0xCzAJBgNVBAYTAkRFMUUwQwYDVQQKDDxWZXJlaW4genVyIEZvZXJk +ZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMgZS4gVi4xEDAOBgNVBAsMB0RG +Ti1QS0kxJTAjBgNVBAMMHERGTi1WZXJlaW4gR2xvYmFsIElzc3VpbmcgQ0ECDCRYa5dfehx1JdhM +tDANBglghkgBZQMEAgEFAKCCAc8wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B +CQUxDxcNMjEwMzEwMTYwNDI3WjAvBgkqhkiG9w0BCQQxIgQgQK/YjIICeu1uq9WnnrVErVKTkvSR +vHPv/Kuk53C9A1Ewga8GCSsGAQQBgjcQBDGBoTCBnjCBjTELMAkGA1UEBhMCREUxRTBDBgNVBAoM +PFZlcmVpbiB6dXIgRm9lcmRlcnVuZyBlaW5lcyBEZXV0c2NoZW4gRm9yc2NodW5nc25ldHplcyBl +LiBWLjEQMA4GA1UECwwHREZOLVBLSTElMCMGA1UEAwwcREZOLVZlcmVpbiBHbG9iYWwgSXNzdWlu +ZyBDQQIMJFhrl196HHUl2Ey0MIGxBgsqhkiG9w0BCRACCzGBoaCBnjCBjTELMAkGA1UEBhMCREUx RTBDBgNVBAoMPFZlcmVpbiB6dXIgRm9lcmRlcnVuZyBlaW5lcyBEZXV0c2NoZW4gRm9yc2NodW5n c25ldHplcyBlLiBWLjEQMA4GA1UECwwHREZOLVBLSTElMCMGA1UEAwwcREZOLVZlcmVpbiBHbG9i -YWwgSXNzdWluZyBDQQIMHquxIGDgCGtc8ZZZMA0GCWCGSAFlAwQCAQUAoIIBzzAYBgkqhkiG9w0B -CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMTAyMTYxNjE2NThaMC8GCSqGSIb3DQEJ -BDEiBCC8Fytiv1ZpmEb8bvmg27rVyebYhhu4n7CvuB65krlt7DCBrwYJKwYBBAGCNxAEMYGhMIGe -MIGNMQswCQYDVQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVpbmVzIERl -dXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJMSUwIwYDVQQD -DBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBAgweq7EgYOAIa1zxllkwgbEGCyqGSIb3DQEJ -EAILMYGhoIGeMIGNMQswCQYDVQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5n -IGVpbmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJ -MSUwIwYDVQQDDBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBAgweq7EgYOAIa1zxllkwDQYJ -KoZIhvcNAQEBBQAEggEAMT5sbk0eX0B6kJjLa22vWULGUjKIo/klAOLzeTbejIdGy+kRxZP3Ztxy -cROX8JxHGMPslJ9lmnbmIYwCqb7JgIZjyelJNDESzPzo12krkhH0t8J3tUFC/TyKCQg1JBRNdT+L -08/7/xYJL7DOG1CXTiIQi7P29QpCGCisfuEKJ8ac3cZrT81EIfGnEoIAKam+RFlE4TDAZEBF8qgm -s6pxT8aSUjMnMP8ZtTHQpNbUsMqLkilXYsnSREleAbqptItWbJ+qsGJMcC4wc28tNGOLEsdYjGsH -eM+AIln6HACsMCpqXSkxgkc7T7F7DTlb+FwGe+UyaZOj1O3LzoS+b8jijAAAAAAAAA== ---Apple-Mail=_58C9D0E1-2B0A-4882-8F02-411E8FCB5BF0-- +YWwgSXNzdWluZyBDQQIMJFhrl196HHUl2Ey0MA0GCSqGSIb3DQEBAQUABIIBABR/msBlq4aqrh2W +2hbofRVT4XMRl7Brw9XZa2+9ZqNOwUemCpvqk61frnJE5adoyuCuX3v9633kmJZyenxVQr5Vfvlb +QL1lR+0yFqPWFoHqo34oVF/9CgMNxLm1iP6DjBx96ugWKGRcrQ+cXSdwKsiWbjE4SXbpdmNhisLi +FI7DVK0BSGkWk+3YuXdqGPfe77o/s1uLMjhldJuEgPC4hWqyvPsOKtUspNG4Imj/80Wnj+DJI+gW +uZaaBgHTsXJ31NYyNoVKCTuvzDTRdxm5+MY/ehoP1FNexjOhhUFYvvYvpAh4mlI6kI/vcaXWYtTn +i8rsvKhpg6/l/2dKGDOmQpgAAAAAAAA= +--Apple-Mail=_9BE88FFD-313B-4C05-B770-19F608BDA482-- -- GitLab