diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj index dc98cc1030fdfbabfe5e36cb0aba5c9cef32761f..a3d1c04c475d86fc4018bca08208f067377bc056 100644 --- a/enzevalos_iphone.xcodeproj/project.pbxproj +++ b/enzevalos_iphone.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 0ECEA0FE240E7DB1007DC71E /* mykey.p12 in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F4240E7DB0007DC71E /* mykey.p12 */; }; 0ECEA0FF240E7DB1007DC71E /* evilCA.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F5240E7DB0007DC71E /* evilCA.pem */; }; 0ECEA100240E7DB1007DC71E /* evilkey1.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */; }; + 0ED9073024338E3C008CF9D0 /* SMIMETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */; }; 0EF148052422543E00B3C198 /* Certificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF148042422543E00B3C198 /* Certificate.swift */; }; 0EF148082422572500B3C198 /* general-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EF148072422572500B3C198 /* general-helpers.c */; }; 0EF1480B2422584F00B3C198 /* certificate-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EF1480A2422584F00B3C198 /* certificate-helpers.c */; }; @@ -325,6 +326,7 @@ 0ECEA0F4240E7DB0007DC71E /* mykey.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = mykey.p12; sourceTree = "<group>"; }; 0ECEA0F5240E7DB0007DC71E /* evilCA.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = evilCA.pem; sourceTree = "<group>"; }; 0ECEA0F6240E7DB1007DC71E /* evilkey1.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = evilkey1.pem; sourceTree = "<group>"; }; + 0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMIMETests.swift; sourceTree = "<group>"; }; 0EF148042422543E00B3C198 /* Certificate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Certificate.swift; sourceTree = "<group>"; }; 0EF148062422570F00B3C198 /* generic-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "generic-helpers.h"; sourceTree = "<group>"; }; 0EF148072422572500B3C198 /* general-helpers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "general-helpers.c"; sourceTree = "<group>"; }; @@ -1404,6 +1406,7 @@ A135268F1D955BE000D3BFE1 /* enzevalos_iphoneTests */ = { isa = PBXGroup; children = ( + 0ED9072F24338E3C008CF9D0 /* SMIMETests.swift */, 97C5279D241A9F690030BBC9 /* authentication */, 988C9C5C240D507A006213F0 /* PhishingTests.swift */, 47F0376C22A7278A0005C9DE /* private */, @@ -2207,6 +2210,7 @@ 474054982244D7A9007CF83B /* MailServerConfigurationTest.swift in Sources */, 479B5977206914BE00B3944D /* CryptoTests.swift in Sources */, A15D215F223BE6E4003E0CE0 /* MailTest.swift in Sources */, + 0ED9073024338E3C008CF9D0 /* SMIMETests.swift in Sources */, 47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */, 988C9C5D240D507A006213F0 /* PhishingTests.swift in Sources */, 4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */, diff --git a/enzevalos_iphone/CryptoObject.swift b/enzevalos_iphone/CryptoObject.swift index 0798397932a86af7b376e6ea4f1c676fe0f8441b..3deca6a04495ff95f59f66a4850a8b09e6779b24 100644 --- a/enzevalos_iphone/CryptoObject.swift +++ b/enzevalos_iphone/CryptoObject.swift @@ -96,6 +96,7 @@ public class CryptoObject { let signatureState: SignatureState var encryptionState: EncryptionState let signKey: String? + let signedKeys: [String] let encType: CryptoScheme let passcode: String? let signedAdrs: [String] @@ -114,7 +115,6 @@ public class CryptoObject { return nil } - init(chiphertext: Data?, plaintext: String?, decryptedData: Data?, sigState: SignatureState, encState: EncryptionState, signKey: String?, encType: CryptoScheme, signedAdrs: [String]) { self.chiphertext = chiphertext self.plaintext = plaintext @@ -125,5 +125,25 @@ public class CryptoObject { self.encType = encType self.passcode = nil self.signedAdrs = signedAdrs + if signKey != nil + { + self.signedKeys = [signKey!] + } + else{ + self.signedKeys = [] + } + } + + init(chiphertext: Data?, plaintext: String?, decryptedData: Data?, sigState: SignatureState, encState: EncryptionState, signKey: String?, encType: CryptoScheme, signedAdrs: [String], signedKeys: [String]) { + self.chiphertext = chiphertext + self.plaintext = plaintext + self.decryptedData = decryptedData + self.signatureState = sigState + self.encryptionState = encState + self.signKey = signKey + self.encType = encType + self.passcode = nil + self.signedAdrs = signedAdrs + self.signedKeys = signedKeys } } diff --git a/enzevalos_iphone/SMIME.swift b/enzevalos_iphone/SMIME.swift index e097d066db16b6bd6bb73a0953843ede3035ee2f..842f8dfcb23ba4ccf88871b05fed54e1c6370d39 100644 --- a/enzevalos_iphone/SMIME.swift +++ b/enzevalos_iphone/SMIME.swift @@ -14,334 +14,9 @@ import KeychainAccess The class is a swift wrapper around the C implementation for SMIME so that all C pointers are deallocated correctly */ class SMIME { -let test_key = """ -Bag Attributes - friendlyName: myKey - localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30 -Key Attributes: <No Attributes> ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCUFDosMJHlsuIb -ot/2FE4qXg388BqaEtkuJ8Ea18nzMXTT6dYH53wAfIt33OwqxEFpcrN3GndhRJTk -g68wmTvSFP23tVKWNk1SJOZAlEJJH8Q2wKTnt4Bh6y3XEXxZ3csgNM+BL3jItD+l -FZviSkqQyGreXZ+XnQPHRYH0IpzQ8cq7obJnzKMFsVsVltSJDLijUWR8K54lciCo -smz+3bKonCy1hYjuQB/3JEQlWb8Ij4ZiMtUn9Iju/8XnIuspkay83ktUyz7hYAld -K3yvn+tsrOepr98n+aU6bGJSYrbv76R+xpBp2ryRoFbbuzy7wdL8afQJDemKcMQI -87ra30mxAgMBAAECggEAAKj11iqggNixyS1KJcyIVBLOSZ0Cmlfoica7CwEF7SMr -RefxjeBsUSEnpZDu6Mp42eo9O76lhEcyvxwUOsweYWjPFXDjLt4Wt8MIN3FtuZ9A -5TH+6NU8nFBzeFVIrmAb+ASXku1krVIqg98Uo6RgqxQ9791/a594mTHBgwvTMqYf -1024bF9ImI/GhIbzPeX2lrbzHq+HZ6jXg/Jjx0QWfYhyTPqvvCUhyiY0WBvelsQH -orlh7IhnSyFQ6FqgPXzoYWOmHqXODUmmCS6nMct5hRq3Fagvr8aNp2wD6FoYuJGd -FSvIwX+ZMNgzObNA4flY7TfplOaTl6PV6H+KGJ14wQKBgQDEV1hRuKGPB27BH40x -pu0lRmgE/5pdz2Vbg6AuRelZEVCKju33tvXhNrzhPj85jRCPNMPFWQJPlJsQ7lB8 -wEANc1PnLffxfwBFs7ke1h3qs6WBkKVtVxXDed1SsMkZ3CmVotSIp3fLzbl9SMYv -Pih3arKI0wwTV8i4Ort5QNyOwQKBgQDBEr7x684we+rISodiDZATmX7fAw490M2u -KQHC3hmAB0Y6htx4E2ti7jNtzV95XkBoW3vShC75xDIZJwXM+yVxYZRQ3dcEMmE7 -yR+npAI6pFZGBTsAs9mXUP+JIQVwKbNpTH8x2klb6ylXGJvFFGAhwq4ni4lf1xls -s7x93Vxm8QKBgQCVgCSh5UIvVGuC5fFu8znzfg7Kb44tDDSTYEBhu54Y0dRQDNEq -I8hJepKLuAgQXFdVk8nVxRa7Xd5NIAltVD3xf/VNPHVlD103tcepsUQKaEwHwgoU -nZDWzT43LqGR7VBEvj2y6EGRj85DlVxCsMPDWh0jjf/N4rPVg/MoOrk2gQKBgQCS -HRquQLNJE+5pZ6WvOe5oNsjCAzD67RNLEzOHAsgvkNHAJyGgKaoiM3xuQ3dWhVKe -52T8uxZF5Qm46URFjWcXuC4jSM+ZGHtnYFz5ZHBfatDzqq+tZ25rSlworfnMmXJy -ZPb5hmXwDza4+CGiczoRMqDTwpDTHBjcn+UtJ6HvMQKBgACDZQgWdYXLrGl6qB6A -X0Xb6hoEuz7BeP+ZW3tspyjySLe8SXDf8QXQXvyfivo1N3VxbWuTSf/e4U2SqXXH -+/kFUS+KgKMKWefR+MJ3+Do8AGf4lrqf9AsSnrTtLskuS9aab9lZ1Mm/Q4P79K2J -eforhMXYki+DqiwhRf6Q3rxF ------END PRIVATE KEY----- -Bag Attributes - friendlyName: myKey - localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30 -subject=C = DE, O = A MAILTEST, CN = myKey - -issuer=C = DE, O = A MAILTEST, CN = myTestCA - ------BEGIN CERTIFICATE----- -MIIDpzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE -BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X -DTIwMDMwNTEzMzUxNVoXDTQwMDIyOTEzMzUxMVowMjELMAkGA1UEBhMCREUxEzAR -BgNVBAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ -8zF00+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRC -SR/ENsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc -0PHKu6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/ -CI+GYjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK2 -7++kfsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsG -A1UdEQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95za -SSmuP0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpY -FZxKcDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwK -QSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3 -DQEBCwUAA4IBAQAvIknw5G8YV85/5LR90tCocane3jse5gE9AEoqSWDUemfnhmJd -MOOMjZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU -5sIU7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nn -xq9K9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxh -cNFLTtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7 -XFB7TFYvphnuQZKw5mG0FNyADnP0CgGPobTI ------END CERTIFICATE----- -Bag Attributes: <Empty Attributes> -subject=C = DE, O = A MAILTEST, CN = myTestCA - -issuer=C = DE, O = A MAILTEST, CN = myTestCA - ------BEGIN CERTIFICATE----- -MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF -MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz -MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK -DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF -xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4 -Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI -j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk -RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x -GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B -AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu -/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx -t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR -jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK -5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf -n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg== ------END CERTIFICATE----- -""" - - var testCA = """ ------BEGIN CERTIFICATE----- -MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF -MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz -MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK -DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF -xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4 -Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI -j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk -RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x -GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B -AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu -/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx -t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR -jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK -5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf -n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg== ------END CERTIFICATE----- -""" - - var testEvilCA = """ ------BEGIN CERTIFICATE----- -MIIC4TCCAckCCDWaS3dso6D3MA0GCSqGSIb3DQEBCwUAMDMxCzAJBgNVBAYTAkRF -MRMwEQYDVQQKDApBIE1BSUxURVNUMQ8wDQYDVQQDDAZldmlsQ0EwHhcNMTkwNzI5 -MTUzODA1WhcNMTkwODA1MTUzODA1WjAzMQswCQYDVQQGEwJERTETMBEGA1UECgwK -QSBNQUlMVEVTVDEPMA0GA1UEAwwGZXZpbENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAv0W8s3Dav5brYO+MZQ+DiNPSf0Mgd6g6zR1vdk+sPTuJbAZ2 -owxR376WKEayBp3jF3omitej4ltuAoepQ7xgsFLVJDijAxeLeoAzPc+J8qDcY1NF -4up9+DpN7L0L3rgfU0/I8Az4jpR8pHJTHmu0L074Er5+Vk2cBvxSY3srp2NnEga1 -Fudun9YUYfOp432Ac7xv/6KYz99ocbI+F/egnHQm49GnyFs1zxCuh9qfTeCFO644 -dUlkMXfQF7sdZmxdxwKIF4D8AroAecFXWei4PtNIJpPvr/UdCBIyEmZroL2fMnPg -zMtChlEG5Ryw7UuwKrQGs903n3nxvopr4mOumwIDAQABMA0GCSqGSIb3DQEBCwUA -A4IBAQCFnuNL7hhJjhvPpeMPFahMdadA1OWRLIe0XdAJI8Pvlx3f8XR5udcGS2Mi -r5znDhWHT5fFyYTj0JZQUf5GaYrucZDh2M2lXzuazhh5J+PSgvMez1fqfC0pp3Iy -IIqIxZCzGaZp9A7CkAO1qyDqM3fAtkJ0f6JoIrUN9Q4PphDpi6vlRDIoHROmK/Xr -QVzf2Y0lnKGQisw048XPLWqGagu8ZO0n6GMmyldnwVDEsQomndWDrW0EHEV2s/fq -bgvyhVRenp1O5IH3nOyXm8vR2FWOEHwR686l8Mxy24APzzn5K7nPeyBx0+ZpyqYh -aqQKdT1pty4gKWz3zSNTupVsyA/t ------END CERTIFICATE----- -""" - - var test_key_other = """ ------BEGIN CERTIFICATE----- -MIIDsDCCApigAwIBAgIIAUuththJ3rkwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE -BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X -DTE5MDczMDE0MTM0MloXDTE5MDgwNjE0MTM0MlowNjELMAkGA1UEBhMCREUxEzAR -BgNVBAoMCkEgTUFJTFRFU1QxEjAQBgNVBAMMCW90aGVya2V5MTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAOaXgg4cD8V2Fg/n6v/YuHsOTa7vlrSragOa -eVwcYzAATRIQAP6suakRkr5D2a3u2N+EBOawCvZPeQZwZMtKpnEdIKdkmUi/OYMS -y6D7xRL/MizwsNP/YvRfwByPmYRo30YCwLeJEEIlPDw5zwfIiqyl31mOrx+5eebv -t83TCJzU7ORZv/OqFEwGt4FcWk8FydmOJxW3My3A2GUWPOmnrvOGamRoKkN/O7xO -9qaQSkRWhuyb6R3EIDo0WfsM263aEhbVHOsCk7PAtzgW18+3qvK5ZrENk3B+F3+2 -fh1Qola266kX6/ZbB+/eOPJlWBh2NZHhBZ+Z/wr69tCSTJ80au0CAwEAAaOBwjCB -vzAgBgNVHREEGTAXgRVvdGhlcmFjY0BkcmVuZ2Vscy5uZXQwKQYDVR0OBCIEIGAb -47YtbmauxZ5hYka1/wYF9xh8+pJ+Zc0eRqkrgbeNMHAGA1UdIwRpMGeAILLLgvdd -qVj9AJE8CrP9PYeShvHigM+CczpLs9EYh+bkoTmkNzA1MQswCQYDVQQGEwJERTET -MBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCKtx6aDujfcT -MA0GCSqGSIb3DQEBCwUAA4IBAQCaaBwEyegcUwTsHFiZGq64tvhRBNdiaXIGZk64 -+Jw+FyfgcMp80VIhAdKuPtodtMWRQFl6F7xI3Gkvhosv73jWSwl05iGvxFWN0wNr -N2nZ8JPCHNqQQkuGaHEM3B591EifrswGLhIaoSihHIBFlBx6e0fgBmSTHYbx9usI -XyjDyGWkq0z72KGjifqow6zZKDFeX2Br3K1hP2V2ObnVkL+Arj+lBConkD+Ja9fa -vfbCKFRMmniHBSKcaTdHu/yzFaS8zGdWaMXIVzidPrIpqiv4KC2iVWqizZX3u6ej -nVDuRRggGA08TMPaJa3ziQo+zcjFkeHyd+7vw1w7ogSPlwx8 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5TCCAc0CCKtx6aDujfcTMA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF -MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0xOTA3 -MjkxNTM4MDRaFw0xOTA4MDUxNTM4MDRaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK -DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKJOatbPDL3lw/7tqeugaRHxqMgx7/DOLdSnDnK66Eys -GrFcp43N3tQL+0rm77tz/jcyVkHAZF9Sv1c/tIZay/J975cbpHPMraJVbM+/mL6f -14wrwU4rAJLILDkZ3HqkKKnrGmfoKrB1RZ9LA+NLtQlfiuP4C8Et7bOZOkuGdq0T -aygotW0ELeQPbVWXV/GcP6Xd0FnKQF7m9ioRn9MKxu4VDm3hSKDtN1zyXQ1HXhQV -/UGODSaFyUgoCTnz7kFcF3hY9Dw7M55CCM3U0PnfxuxUdn8qMH1lym/G5K5xaVLV -fCjsly8GUUfHtls3Y0F7c6NE5CPkjub2HNNdCW+JD0ECAwEAATANBgkqhkiG9w0B -AQsFAAOCAQEAAAVXNPtXVaUP9k2wNZAw4hOKp5n0EdeOkmtMdedvuQF39d+cHJkL -HjyTp3zd22S1EbgFgNB6RPlRPXie4aivcDGSAGc88NF2xEOezbLZr30x/KAc94OG -ssKjin+X8aMoZSppUxVHI1j6gzydvEWhVBIRUjgd4F5uiV+TBOAOj39xGkpCXIBg -bLRdalYjzxWYb5cR5qniCVbKrRg2oQWghStEuuRTww9SQIeSerb0lqHF3gaL82pG -F4K1I0HbAXgq/D+xIj6lbqZlchI8a4qQq2Ic75yTP/3Nt/Ls6Dt17eT6O+tA9W4e -tag/vFWjhTwGBIjjvyrjTM3fwvUN3HIZeg== ------END CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA5peCDhwPxXYWD+fq/9i4ew5Nru+WtKtqA5p5XBxjMABNEhAA -/qy5qRGSvkPZre7Y34QE5rAK9k95BnBky0qmcR0gp2SZSL85gxLLoPvFEv8yLPCw -0/9i9F/AHI+ZhGjfRgLAt4kQQiU8PDnPB8iKrKXfWY6vH7l55u+3zdMInNTs5Fm/ -86oUTAa3gVxaTwXJ2Y4nFbczLcDYZRY86aeu84ZqZGgqQ387vE72ppBKRFaG7Jvp -HcQgOjRZ+wzbrdoSFtUc6wKTs8C3OBbXz7eq8rlmsQ2TcH4Xf7Z+HVCiVrbrqRfr -9lsH79448mVYGHY1keEFn5n/Cvr20JJMnzRq7QIDAQABAoIBADUXMwFuoo7zFjdJ -TUjkq+zhKS+ayBcG1FzKByEXBBs8JoJ/HsuEFyb+/ctCse6i7Fnh+oLmi0+UkqfR -3tMTd+jZLPh9Z/Fg3av4+tswvHoYOYQxUnUs+qqLFR8+TLk4sBddcOOQ8iZYjlrL -cIg5OvxvIFJtUJK8UH3EOYxxBy2cRHw44Fg54E0CpI3LDympYUnkT6YBB+MddqF5 -mvo85XO2WoN6m+JbVvS/jDBEI707ggAjKqHoomyzEQB0lrvksPtYfUuhGqfFRrdY -nHAfH4Nxrv4FB61GldyNBphQFpMYEtOwSGLSXEaMzHPrmaAegQminJBuQaODKCeh -IVht6d0CgYEA/6CyWfkHRRmAV/hm1fndZLcZ3oN2JIJjznZbB0R1IuaXTl7kbXvA -mdEeLD9OJayhbSIkpBSs7g8NsHPqcew4gR1lm6WhSvNg6qCg5ahLj3siyrsL3k/P -jHAb6qa68L2kc5HhI29nZ3Iqt4hL/IsWD9UoRS3zRu13A4V68MWRbMMCgYEA5u16 -OamANO1sXyeDTXPOX9HSVXXKZiBsQvkpT6x+tnSIHzsgBaZaDX+myk4B5IF19191 -X5YFzNeIw8PykNZ9+UfchIJvEp11l5z8cGcNYBXCTmW+j62y4llFqKGMS+aP1Q0r -E1QXhnvRE8SYRWHoDzQ4HLRQT2exuvPum1yCDo8CgYEAsveTxnAWCee3tl8/yBE+ -UjPrFaEeRqNPMw4j3uurwrqENiczb/9TMZ15rWrI0JGTFu/vjTy4cZbyc5ZEDmxe -hu7I43bLfMj2Em5RF1iDRjnkeuEHhyaDXYRj1x3SBZgQGaWJZSCq2X7Rr1rqMC5E -TONkZUKtbvvz9fAuyYDYtrcCgYEAsed4Bx4/SAc1OyVcsXmrHwStjusdD4qg/QOp -QNk6EWQ7ThwlslSTAd066JYqPRlDgV0INqiENWhC09aMc+rayAYFrAw0d9nYswHd -NNcfZcu9ktotcdE2g8yUrrIuPHcWjeMEMXLSYOfYjesiCCnCNpxbMjnzuQjA0q+E -PiqJg58CgYAFvkmTfr8Wp3SqmQmw5TuNaRLr1IVk/cMcFjXE3AOFcPuPnYIlJ+L6 -iwxRK85BnWBVkQIMvxrbb2Ro04buiizELRoKsDdkSdYXFSmSOvw1pvT8IpNJjNRU -AYIHvW6qRLTsSR6BZZS3pqGXYue7fE0vj4HJ2IEpj05qQ5RXrD57Wg== ------END RSA PRIVATE KEY----- -""" - - let att_sig_invalid = """ -MIME-Version: 1.0 -Content-Disposition: attachment; filename="smime.p7m" -Content-Type: application/pkcs7-mime; smime-type=signed-data; name="smime.p7m" -Content-Transfer-Encoding: base64 - -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 -AAAA -""" - - let det_sig_invalid = """ -------56F3BC21B2CE83EB9E02E24139D860BC -Hello world whatever the fuckaaDadaDAd -------56F3BC21B2CE83EB9E02E24139D860BC -Content-Type: application/pkcs7-signature; name="smime.p7s" -Content-Transfer-Encoding: base64 -Content-Disposition: attachment; filename="smime.p7s" - -MIIGNgYJKoZIhvcNAQcCoIIGJzCCBiMCAQExDTALBglghkgBZQMEAgEwCwYJKoZI -hvcNAQcBoIIDqzCCA6cwggKPoAMCAQICCJDKKbrlDPTeMA0GCSqGSIb3DQEBCwUA -MDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAht -eVRlc3RDQTAeFw0yMDAzMDUxMzM1MTVaFw00MDAyMjkxMzM1MTFaMDIxCzAJBgNV -BAYTAkRFMRMwEQYDVQQKDApBIE1BSUxURVNUMQ4wDAYDVQQDDAVteUtleTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJQUOiwwkeWy4hui3/YUTipeDfzw -GpoS2S4nwRrXyfMxdNPp1gfnfAB8i3fc7CrEQWlys3cad2FElOSDrzCZO9IU/be1 -UpY2TVIk5kCUQkkfxDbApOe3gGHrLdcRfFndyyA0z4EveMi0P6UVm+JKSpDIat5d -n5edA8dFgfQinNDxyruhsmfMowWxWxWW1IkMuKNRZHwrniVyIKiybP7dsqicLLWF -iO5AH/ckRCVZvwiPhmIy1Sf0iO7/xeci6ymRrLzeS1TLPuFgCV0rfK+f62ys56mv -3yf5pTpsYlJitu/vpH7GkGnavJGgVtu7PLvB0vxp9AkN6YpwxAjzutrfSbECAwEA -AaOBvTCBujAbBgNVHREEFDASgRB1bGxpbXVlbGxAd2ViLmRlMCkGA1UdDgQiBCD9 -HiCz+K9Fjfec2kkprj9Ms7P1XYd96wGmtAd7Yhhe0jBwBgNVHSMEaTBngCD2hZgK -b/gopYVnkqzqWBWcSnA43ysF7/DpqBW75APJ6KE5pDcwNTELMAkGA1UEBhMCREUx -EzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBggh+lqGqZXkK -uDANBgkqhkiG9w0BAQsFAAOCAQEALyJJ8ORvGFfOf+S0fdLQqHGp3t47HuYBPQBK -Kklg1Hpn54ZiXTDjjI2b4UDVQO5VeF+I79cG6izyjqSgGoOVB415bNzH4ExsnoYS -rzWFqb6F3XhFlObCFO0GAFJc1YGfiiWeCJppxdsBIokFOBrIrUZVMxmHeUf2bsfs -WWXEm5h2GU+Z58avSvQUZlnjOnniffZv2Soix9VZnOaAuYD0A149ETSU3wV4kqdB -wdgzBFCE7wpMYXDRS07R30yz59VrEkvxL1KnNgbM11yN3X+wMX7adw3dlbTgtODW -+PABiW8WOq8ru1xQe0xWL6YZ7kGSsOZhtBTcgA5z9AoBj6G0yDGCAlEwggJNAgEB -MEEwNTELMAkGA1UEBhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMM -CG15VGVzdENBAgiQyim65Qz03jALBglghkgBZQMEAgGggeQwGAYJKoZIhvcNAQkD -MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjAwMzMxMTEyNjA5WjAvBgkq -hkiG9w0BCQQxIgQghDiuwWdYCVFTKL/W+ribv2+Fn2Ks5s4CdGtnM3bjD70weQYJ -KoZIhvcNAQkPMWwwajALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl -AwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAw -BwYFKw4DAgcwDQYIKoZIhvcNAwICASgwDQYJKoZIhvcNAQEBBQAEggEAKVcSDfeA -S7Xhg+NDPxoE9tQtve/q7RCJ6vnZAelzxBwtRqMIDGQPVTxa49MXp5I9aqWb6h3M -DUo7pM+mPFOMHvRMxnWWOrBFYbqBHLeU1853IizWq4YpIapqsZkL1cvhucOwIkAa -3e83jwyNDyfACqIp0ZJbE2ESItiTwYHLKAkbcUKky5hUDSrRebyQ067/GONhrnvn -pU2Ex4SYum4+GKffk6hY+194c9F2sgo/wj4shnSXGkL4yGw1SNnBNKWNI2iCCayE -VZD8i8YnigUGH1Kf2ys2Qq9cGW9ltSQPr05O/8B6d9yZZdBGeA1dAYJnkpp15JyT -N8GVQGtc+3uaNA== - -------56F3BC21B2CE83EB9E02E24139D860BC-- -""" - - let enc_test_key = -""" ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIjRzqyJoIb6YCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA0jxeh6SHCELOVVrAOw8wYBIIE -0NJtVjgMrMblxLPoF4N5Wn44qJb6v/DlISrXM0OiFL+E35BfUaQk7Tb/vWNuT7Ak -sfYer3XvL4DxvoEJNqUaxpKbyAWNmcROdfvZEu2gwX9rY6/5MNm+NJPn5ICpv06O -FrJn60RtHGG6TYtN7Yqy+8+2IHumQ8jBjt4nDoBcIriD7tyTZJarzrnlytMIfDP0 -kyiNQpJLEcBNazpn/3GLIdlJvjdup0hYoGoaMcKtTuc1JGQMwehu/P9KxaSvkyqN -4DStqB5Ua0IOzZdk+BJhodvwp3FTU0+bxbEVIy6NSgHCSfroyZ6fXZzazKTvqbg+ -gIB0dEGpELEjaksltbKsgaBIYahs9iT1RSEKyp6DcReIJM+bkQa6RHQvFBmqLKP2 -sZgyDzrrNUyYWXsxEGmcbJ6Irsa2WQf6G2HhzOTs3rWGpST0Nk6DwFWZTy0U3uBZ -OgVP9VEFc7yL0RQPV2Ppq54k9WBZgNYky/pteb1hq2RrZ/y/ez9zMHMlmkpRNwIQ -2EX/dcp9Y2QNZAumZt+Zh7DKLgm464n0srWn1mZOWsGy/7oajqPakay42EvVTCvB -iDjhm6OKFZChe6mietj30tNRbBC1LbpwGq21uhGihQjNp7CSWcf7osniN0UCJJ43 -BXy2g71EeVFLiBwl2qzoDNwrsRygUV0yomGvS6ic8jESm2D8J5fb1on0VKr/CBC8 -4vBHTHTW2JMOy8RyVZTBZiVeH7CiA54WwJBmARCxrzhvCLG14IE5gvfmbSm7+N+8 -ZNUcqEAt8vrdBkaLcU0knRv3r+B2/oM+9vHLqebijibHXt26fTJ4NLpjNutIbNxh -uDVUjMeH/A0zVg6jevbsANlB4H2TV/swVVk+qkRQfvDsgcCS89jr7rlU7kgmn0v8 -Ofs8JLmR7PEA3i/QLyOLNnu73qszI0o/Ag1Q2HWY2/uXxxFUTRXgiGl5Oi5wY2TZ -Rj8Ouitm0Jf9YQu4tL0zpvulgVM6jkbJKo9uYysGdS0jQVaHl3AlRnE8EYSyjJwW -QGkwcaLetcCp0kX2td/kOAXGGS5bvVHcn1vnYih1ic/Ibu1oeCOoypHouVD0jsex -gg5gNifL+63BElhpSTdKO6u5UZWzJDMlmeI62Bgp7vPlV936IgtGzCx9zkSarIZn -4u0kbWHjscVA+L3wC91IRG6Klaa27f4o2gdSGwiMo+rd37mo1Cs2u7y4/K1TvpKh -6jOlB65mIvPzzEJH1wTLkuhrfITnr2M0ddRW1am+BVOiBOjE8O+UQ1HLIeSHCmXh -6Gm+rJVvVV4UEb/gqRneAaIvS0X851aVgkyb4X3S76Tab1nNzwD/gJUb3ODPQ9Tc -ew4asU75zH6zg3frxHmdtw27Q+R0H0hxVOf0iF1znS2PBpHCg9jvtMMxRcHktpOC -dGuNDcuAtwqQN48XAgP9EkLHwRkJyN+KCSwzLzbhUKsTK3aUa9ON+YJhwyDbuNZT -tCS6rxHDe77j4fzb9jXyfM99GK9YN36/spUfl5UijDoou5rM4Tt92VBMn8iMNXx4 -OxeGuSvQoBUdP50ZspBBrf2+simuJLKMQ8kVXx8TuJqXe1FQPvFWDX5lBAf57BET -PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO ------END ENCRYPTED PRIVATE KEY----- -""" //Passwort testpwd - var test_string = "Hello world whatever the fuck"; - - private let privateKeyPattern = "[-]*BEGIN[a-zA-Z ]*PRIVATE KEY[-]*[a-zA-Z+/\n\r=0-9]*[-]*END[a-zA-Z ]*PRIVATE KEY[-]*" private let certificatePattern = "[-]*BEGIN[a-zA-Z ]* CERTIFICATE[-]*[a-zA-Z+/\n\r=0-9]*[-]*END[a-zA-Z ]* CERTIFICATE[-]*" - private var privateKeyKeychain: Keychain { get { return Keychain(service: "Enzevalos/SMIME/privateKeys") @@ -359,6 +34,30 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO return Keychain(service: "Enzevalos/SMIME/CAs") } } + + func getOwnCert() -> String? { + if let fp = getOwnKeyFP() { + return certsKeychain[fp] + } + return nil + } + + func getOwnKey() -> String? { + if let fp = getOwnKeyFP() { + return privateKeyKeychain[fp] + } + return nil + } + + func getCAs() -> [String] { + var CAs : [String] = [] + for k in CAKeychain.allKeys() + { + CAs.append(CAKeychain[k]!) + } + + return CAs + } private func importInKeychain(certs: [String], keychain: Keychain) -> [String] { var fingerprints: [String] = [] @@ -418,7 +117,7 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO print("Can not reset keychains.") } } - + func importKeys(certsAndKeys: [String]) -> [String] { var certsAndKeysSplit: [(String, String)] = [] @@ -458,7 +157,7 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO let cryptoScheme = CryptoScheme.SMIME - func testKeychain () { + /*func testKeychain () { resetKeychain() let cas = importCA(certs: [testCA]) @@ -478,265 +177,12 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO { print("\nPRIV FP ",k, " \nPEM \n", privateKeyKeychain[k]!) } - } + }*/ func getOwnKeyFP() -> String? { return privateKeyKeychain["ownkey"] } - - func testSMIMEencrypt(){ - // OpenSSL_print_ver() - - let fp = addPrivateKey(keyPlusCertPEM: test_key) - let cert = certsKeychain[privateKeyKeychain["ownkey"]!]! - let key = privateKeyKeychain[privateKeyKeychain["ownkey"]!]! - /* - let (enc, enc_errs) = encryptWithPem(message: test_string, certPems: [test_key_other, cert]) - if enc != nil { - // the pointers point to memory allocatedi in c that needs to be manually dealocated - print("SWIFT ENC DONE: ", enc ?? "") - - let (dec, dec_errs) = decryptWithPem(message: enc ?? "", certAsPem: cert, keyAsPem: key) - if dec != nil { - print("SWIFT DEC DONE: ", dec ?? "") - } - else - { - print("Dec failed!") - } - } - if enc_errs != nil - { - print("Enc failed!") - for x in enc_errs ?? [] { - print("errorstring: ",getErrorString(errCode: x)) - } - } - - let certObj = Certificate(pem: cert) - - print("\n\nCERTIFICATE OBJECT", certObj) - print("issuer", certObj.issuer ?? "") - print("emails", certObj.eMails ?? "") - print("subject", certObj.subject ?? "") - print("startDate", certObj.startDate ?? "") - print("endDate", certObj.endDate ?? "") - */ - let (sig, sigErr) = signWithPem(message: test_string, certAsPem: cert, keyAsPem: key, detached: false) - if sig != nil{ - // the pointers point to memory allocatedi in c that needs to be manually dealocated - print("\nSWIFT SIGN (attached): \n", sig ?? "") - } - else{ - print("\n SWIFT SIGN1 failed") - } - - if sigErr != nil - { - print("sig errors!") - for x in sigErr ?? [] { - print("errorstring: ",getErrorString(errCode: x)) - } - } - - let (sig2, sig2Err) = signWithPem(message: test_string, certAsPem: cert, keyAsPem: key, detached: true) - if sig2 != nil{ - // the pointers point to memory allocatedi in c that needs to be manually dealocated - print("SWIFT SIGN (dettached): \n", sig2 ?? "") - } - else{ - print("\n SWIFT SIGN2 failed") - } - - if sig2Err != nil - { - print("sig errors!") - for x in sig2Err ?? [] { - print("errorstring: ",getErrorString(errCode: x)) - } - } - - var CAs : [String] = [] - for k in CAKeychain.allKeys() - { - CAs.append(CAKeychain[k]!) - } - - let (vertest, certs,verErrs) = verifyWithCApem(message: sig!, pemCAArr: [testEvilCA]) - if vertest != nil - { - print("In Verification", vertest!) - } - else{ - print("Vertest was nil") - } - - print(certs ?? "No certs") - - if verErrs != nil - { - print("ver errors!") - for x in verErrs ?? [] { - print("error code: ", x) - print("error string: ",getErrorString(errCode: x)) - } - } - /* - let (fpTestKey, _, _) = getFingerprintFromPem(pem: test_key) - if (fpTestKey != nil) { - print("TEST KEY FINGERPRINT", fpTestKey ?? "") - } - - let (fpTestCA, _, _) = getFingerprintFromPem(pem: testCA) - if (fpTestCA != nil) { - print("TEST CA FINGERPRINT", fpTestCA ?? "") - } - */ - } - - func testVerification() { - var CAs : [String] = [] - for k in CAKeychain.allKeys() - { - CAs.append(CAKeychain[k]!) - } - - let (vertest, certs,verErrs) = verifyWithCApem(message: att_sig_invalid, pemCAArr: CAs) - if vertest != nil - { - print("Verification attacthed sig", vertest!) - } - else{ - print("Verification attacthed sig") - } - - print(certs ?? "No certs") - - if verErrs != nil - { - print("SWIFT errors!") - for x in verErrs ?? [] { - print("error code: ", x) - print("error string: ", getErrorString(errCode: x)) - print("error reason: ", getErrorReasonString(errCode: x)) - } - } - - let (vertestDet, certsDet, verErrsDet) = verifyWithCApem(message: det_sig_invalid, pemCAArr: CAs) - if vertestDet != nil - { - print("Verification dettached sig", vertestDet!) - } - else{ - print("Verification dettached sig") - } - - print(certsDet ?? "No certs") - - if verErrsDet != nil - { - print("SWIFT errors") - for x in verErrsDet ?? [] { - print("error code: ", x) - print("error string: ", getErrorString(errCode: x)) - print("error reason: ", getErrorReasonString(errCode: x)) - } - } - } - - func testCryptoObjectMethods() { - let certi = Certificate(pem: test_key) - let othercerti = Certificate(pem: test_key_other) - let ourAddr = certi.eMails![0] - let otherAddr = othercerti.eMails![0] - - let fp = addPrivateKey(keyPlusCertPEM: test_key) - let _ = importCertForAddress(cert: test_key, addr: ourAddr) - - let _ = importCertForAddress(cert: test_key_other, addr: otherAddr) - let cert = certsKeychain[privateKeyKeychain["ownkey"]!]! - let key = privateKeyKeychain[privateKeyKeychain["ownkey"]!]! - - let testData = test_string.data(using: .utf8)! - - var encCryptObj: CryptoObject? = nil - do { - encCryptObj = try encrypt(plainData: testData, ids: [otherAddr], ownAddr: ourAddr) - } catch let error { - if error is SMIMEError { - let smimeError = error as! SMIMEError - print(smimeError.message ?? "No error message") - print("SWIFT encrypt errors") - for x in smimeError.errorArray ?? [] { - print("error code: ", x) - print("error string: ", getErrorString(errCode: x)) - print("error reason: ", getErrorReasonString(errCode: x)) - } - } - } - - if let obj = encCryptObj { - print("\n\nNew crypto object") - print("decrypted text: ", obj.decryptedText ?? "") - print("sign key: ", obj.signedKeys ?? "") - print("sign addr: ", obj.signedAdrs) - print("enc type:", obj.encType) - print("cipther string: ", obj.chiperString ?? "") - var decObj : CryptoObject? = nil - do { - decObj = try decrypt(data: (encCryptObj?.chiphertext)!, fromAddr: ourAddr, ownId: ourAddr, isMailNew: false) - }catch let error { - if error is SMIMEError { - let smimeError = error as! SMIMEError - print(smimeError.message ?? "No error message") - print("SWIFT decrypt errors") - for x in smimeError.errorArray ?? [] { - print("error code: ", x) - print("error string: ", getErrorString(errCode: x)) - print("error reason: ", getErrorReasonString(errCode: x)) - } - } - } - if let obj = decObj { - print("\n\nDEC crypto object") - print("decrypted text: ", obj.decryptedText ?? "") - print("signed key: ", obj.signedKeys ) - print("sign addr: ", obj.signedAdrs) - print("enc type:", obj.encType) - print ("sign: ", obj.signatureState) - print("cipther string: ", obj.chiperString ?? "") - } - } -} - - func testKeyEnc() { - let (pKeyEnc, errArrEnc) = getEncryptedPemFromPKey(pem: test_key, passwd: "testpwd") - - print("Encrypted pkey: ", pKeyEnc ?? "") - - if errArrEnc != nil { - print("encrypt of key errors") - for x in errArrEnc ?? [] { - print("error code: ", x) - print("error string: ", getErrorString(errCode: x)) - } - } - - let (pKey, errArr) = getPKeyFromEncryptedPem(pem: pKeyEnc!, passwd: "testpwd") - - print("Decrypted pkey: ", pKey ?? "") - print("Matches with the original: ", test_key.contains((pKey ?? " asd "))) - - if errArr != nil { - print("decrypt of key errors") - for x in errArr ?? [] { - print("error code: ", x) - print("error string: ", getErrorString(errCode: x)) - } - } - } - // Note: we ignore the Encryption interface because some things are built with PGP in mind and make no sense in the context of SMIME (signatureIDs for example) func decrypt(data: Data, fromAddr: String, ownId:String, isMailNew: Bool) throws -> CryptoObject { var outputData: Data = data diff --git a/enzevalos_iphone/SearchHelper.swift b/enzevalos_iphone/SearchHelper.swift index 95b93c98a0bad23c627c618ca5fa3d5c0fe7c47c..b6bffdc347dc16b1eb19dce08035fb3bdf18c4f4 100644 --- a/enzevalos_iphone/SearchHelper.swift +++ b/enzevalos_iphone/SearchHelper.swift @@ -28,16 +28,7 @@ func containsSearchTerms ( content : String?, searchText: String) -> Bool //Case Mail has no body/subject return false } - - // OpenSSL_print_ver(); - var smime: SMIME = SMIME() - // for i in 0...20 { - smime.testSMIMEencrypt() - // } - // smime.testKeychain() - // smime.testKeyEnc() - // smime.testVerification() - + var longterms : [String] = [] var terms : [String] = [] //Break String into substrings separated by quoatation marks diff --git a/enzevalos_iphoneTests/SMIMETests.swift b/enzevalos_iphoneTests/SMIMETests.swift index 5553ee2e6ce460197e58439e66949ca7e5ad7221..ba40475ce37a931bc65c8f4ed8f72a1552bffcc3 100644 --- a/enzevalos_iphoneTests/SMIMETests.swift +++ b/enzevalos_iphoneTests/SMIMETests.swift @@ -8,26 +8,442 @@ import XCTest +@testable import enzevalos_iphone class SMIMETests: XCTestCase { + let test_key = """ +Bag Attributes + friendlyName: myKey + localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30 +Key Attributes: <No Attributes> +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCUFDosMJHlsuIb +ot/2FE4qXg388BqaEtkuJ8Ea18nzMXTT6dYH53wAfIt33OwqxEFpcrN3GndhRJTk +g68wmTvSFP23tVKWNk1SJOZAlEJJH8Q2wKTnt4Bh6y3XEXxZ3csgNM+BL3jItD+l +FZviSkqQyGreXZ+XnQPHRYH0IpzQ8cq7obJnzKMFsVsVltSJDLijUWR8K54lciCo +smz+3bKonCy1hYjuQB/3JEQlWb8Ij4ZiMtUn9Iju/8XnIuspkay83ktUyz7hYAld +K3yvn+tsrOepr98n+aU6bGJSYrbv76R+xpBp2ryRoFbbuzy7wdL8afQJDemKcMQI +87ra30mxAgMBAAECggEAAKj11iqggNixyS1KJcyIVBLOSZ0Cmlfoica7CwEF7SMr +RefxjeBsUSEnpZDu6Mp42eo9O76lhEcyvxwUOsweYWjPFXDjLt4Wt8MIN3FtuZ9A +5TH+6NU8nFBzeFVIrmAb+ASXku1krVIqg98Uo6RgqxQ9791/a594mTHBgwvTMqYf +1024bF9ImI/GhIbzPeX2lrbzHq+HZ6jXg/Jjx0QWfYhyTPqvvCUhyiY0WBvelsQH +orlh7IhnSyFQ6FqgPXzoYWOmHqXODUmmCS6nMct5hRq3Fagvr8aNp2wD6FoYuJGd +FSvIwX+ZMNgzObNA4flY7TfplOaTl6PV6H+KGJ14wQKBgQDEV1hRuKGPB27BH40x +pu0lRmgE/5pdz2Vbg6AuRelZEVCKju33tvXhNrzhPj85jRCPNMPFWQJPlJsQ7lB8 +wEANc1PnLffxfwBFs7ke1h3qs6WBkKVtVxXDed1SsMkZ3CmVotSIp3fLzbl9SMYv +Pih3arKI0wwTV8i4Ort5QNyOwQKBgQDBEr7x684we+rISodiDZATmX7fAw490M2u +KQHC3hmAB0Y6htx4E2ti7jNtzV95XkBoW3vShC75xDIZJwXM+yVxYZRQ3dcEMmE7 +yR+npAI6pFZGBTsAs9mXUP+JIQVwKbNpTH8x2klb6ylXGJvFFGAhwq4ni4lf1xls +s7x93Vxm8QKBgQCVgCSh5UIvVGuC5fFu8znzfg7Kb44tDDSTYEBhu54Y0dRQDNEq +I8hJepKLuAgQXFdVk8nVxRa7Xd5NIAltVD3xf/VNPHVlD103tcepsUQKaEwHwgoU +nZDWzT43LqGR7VBEvj2y6EGRj85DlVxCsMPDWh0jjf/N4rPVg/MoOrk2gQKBgQCS +HRquQLNJE+5pZ6WvOe5oNsjCAzD67RNLEzOHAsgvkNHAJyGgKaoiM3xuQ3dWhVKe +52T8uxZF5Qm46URFjWcXuC4jSM+ZGHtnYFz5ZHBfatDzqq+tZ25rSlworfnMmXJy +ZPb5hmXwDza4+CGiczoRMqDTwpDTHBjcn+UtJ6HvMQKBgACDZQgWdYXLrGl6qB6A +X0Xb6hoEuz7BeP+ZW3tspyjySLe8SXDf8QXQXvyfivo1N3VxbWuTSf/e4U2SqXXH ++/kFUS+KgKMKWefR+MJ3+Do8AGf4lrqf9AsSnrTtLskuS9aab9lZ1Mm/Q4P79K2J +eforhMXYki+DqiwhRf6Q3rxF +-----END PRIVATE KEY----- +Bag Attributes + friendlyName: myKey + localKeyID: B9 C7 A6 B7 A0 03 91 C3 89 79 AA D7 A3 72 C9 E9 BE 00 45 30 +subject=C = DE, O = A MAILTEST, CN = myKey +issuer=C = DE, O = A MAILTEST, CN = myTestCA + +-----BEGIN CERTIFICATE----- +MIIDpzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE +BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X +DTIwMDMwNTEzMzUxNVoXDTQwMDIyOTEzMzUxMVowMjELMAkGA1UEBhMCREUxEzAR +BgNVBAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ +8zF00+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRC +SR/ENsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc +0PHKu6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/ +CI+GYjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK2 +7++kfsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsG +A1UdEQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95za +SSmuP0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpY +FZxKcDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwK +QSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3 +DQEBCwUAA4IBAQAvIknw5G8YV85/5LR90tCocane3jse5gE9AEoqSWDUemfnhmJd +MOOMjZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU +5sIU7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nn +xq9K9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxh +cNFLTtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7 +XFB7TFYvphnuQZKw5mG0FNyADnP0CgGPobTI +-----END CERTIFICATE----- +Bag Attributes: <Empty Attributes> +subject=C = DE, O = A MAILTEST, CN = myTestCA + +issuer=C = DE, O = A MAILTEST, CN = myTestCA + +-----BEGIN CERTIFICATE----- +MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF +MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz +MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK +DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF +xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4 +Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI +j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk +RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x +GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B +AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu +/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx +t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR +jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK +5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf +n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg== +-----END CERTIFICATE----- +""" + + var testCA = """ +-----BEGIN CERTIFICATE----- +MIIC5TCCAc0CCH6WoapleQq4MA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF +MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0yMDAz +MDUxMzM1MTFaFw00MDAyMjkxMzM0NTlaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK +DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKI5WXFBwGEnvAaFCFf9LhTO+w9uD09bt40rG1x2vTdF +xIO6aHsLuHbXEAfFgXzcF5ifdKlFwkIs8YV3R1Eqe7Ehoi393js9idqx5zefgHw4 +Q/e6XbvAFWc0BwHNCL9EzwJzKZoQi2HxxWg/wMpu7urWQRxtYpxsp/Hr/oJaADBI +j/H/brx5Hybwy38T0IhD2FFRHFjmlJmnvawrzKk76/bMLg2TNBUIj/dNPdnfTMEk +RiMJJQ4tP4FPH0WoOoPrQNA2ijKN+nf/QyRzx8dEcOaTtsjhXDxsZmRooyuCL08x +GO/mXF9b6Mz5sCUjYetAfyhdytO2VzrMe5/oQYrjSJUCAwEAATANBgkqhkiG9w0B +AQsFAAOCAQEAmtn5vDCC3PCx9xBCA4R2YaQ34wjoCkVAwLzAmHDoXIo9kbEaARhu +/ikNDCtNd394HRjWZlVunWmyzKba7cZ53OY2q6lLwAyFFRC3+RF7MaA4OIiGF5Cx +t+NcrmzKm4cHJvi+DUxOqskl16fwycspIqokru3+dv3tqfZ8kxIOe3/hILLWYCbR +jRqChUmvLzwDtP8bFJ5COad91Cfx9DmHSnoPkhdg0f+2x+0eajjEx8fRCppHOSPK +5O2AvjjS4akSRqVwlqFUqgDvO1PRhLw31i14EbkO3q1OC/4t00HJnszqzbwGWTrf +n1O3czuVl7rPXrJn0A/MVI2ReKOQeIAYMg== +-----END CERTIFICATE----- +""" + + var testEvilCA = """ +-----BEGIN CERTIFICATE----- +MIIC4TCCAckCCDWaS3dso6D3MA0GCSqGSIb3DQEBCwUAMDMxCzAJBgNVBAYTAkRF +MRMwEQYDVQQKDApBIE1BSUxURVNUMQ8wDQYDVQQDDAZldmlsQ0EwHhcNMTkwNzI5 +MTUzODA1WhcNMTkwODA1MTUzODA1WjAzMQswCQYDVQQGEwJERTETMBEGA1UECgwK +QSBNQUlMVEVTVDEPMA0GA1UEAwwGZXZpbENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAv0W8s3Dav5brYO+MZQ+DiNPSf0Mgd6g6zR1vdk+sPTuJbAZ2 +owxR376WKEayBp3jF3omitej4ltuAoepQ7xgsFLVJDijAxeLeoAzPc+J8qDcY1NF +4up9+DpN7L0L3rgfU0/I8Az4jpR8pHJTHmu0L074Er5+Vk2cBvxSY3srp2NnEga1 +Fudun9YUYfOp432Ac7xv/6KYz99ocbI+F/egnHQm49GnyFs1zxCuh9qfTeCFO644 +dUlkMXfQF7sdZmxdxwKIF4D8AroAecFXWei4PtNIJpPvr/UdCBIyEmZroL2fMnPg +zMtChlEG5Ryw7UuwKrQGs903n3nxvopr4mOumwIDAQABMA0GCSqGSIb3DQEBCwUA +A4IBAQCFnuNL7hhJjhvPpeMPFahMdadA1OWRLIe0XdAJI8Pvlx3f8XR5udcGS2Mi +r5znDhWHT5fFyYTj0JZQUf5GaYrucZDh2M2lXzuazhh5J+PSgvMez1fqfC0pp3Iy +IIqIxZCzGaZp9A7CkAO1qyDqM3fAtkJ0f6JoIrUN9Q4PphDpi6vlRDIoHROmK/Xr +QVzf2Y0lnKGQisw048XPLWqGagu8ZO0n6GMmyldnwVDEsQomndWDrW0EHEV2s/fq +bgvyhVRenp1O5IH3nOyXm8vR2FWOEHwR686l8Mxy24APzzn5K7nPeyBx0+ZpyqYh +aqQKdT1pty4gKWz3zSNTupVsyA/t +-----END CERTIFICATE----- +""" + + var test_key_other = """ +-----BEGIN CERTIFICATE----- +MIIDsDCCApigAwIBAgIIAUuththJ3rkwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE +BhMCREUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4X +DTE5MDczMDE0MTM0MloXDTE5MDgwNjE0MTM0MlowNjELMAkGA1UEBhMCREUxEzAR +BgNVBAoMCkEgTUFJTFRFU1QxEjAQBgNVBAMMCW90aGVya2V5MTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAOaXgg4cD8V2Fg/n6v/YuHsOTa7vlrSragOa +eVwcYzAATRIQAP6suakRkr5D2a3u2N+EBOawCvZPeQZwZMtKpnEdIKdkmUi/OYMS +y6D7xRL/MizwsNP/YvRfwByPmYRo30YCwLeJEEIlPDw5zwfIiqyl31mOrx+5eebv +t83TCJzU7ORZv/OqFEwGt4FcWk8FydmOJxW3My3A2GUWPOmnrvOGamRoKkN/O7xO +9qaQSkRWhuyb6R3EIDo0WfsM263aEhbVHOsCk7PAtzgW18+3qvK5ZrENk3B+F3+2 +fh1Qola266kX6/ZbB+/eOPJlWBh2NZHhBZ+Z/wr69tCSTJ80au0CAwEAAaOBwjCB +vzAgBgNVHREEGTAXgRVvdGhlcmFjY0BkcmVuZ2Vscy5uZXQwKQYDVR0OBCIEIGAb +47YtbmauxZ5hYka1/wYF9xh8+pJ+Zc0eRqkrgbeNMHAGA1UdIwRpMGeAILLLgvdd +qVj9AJE8CrP9PYeShvHigM+CczpLs9EYh+bkoTmkNzA1MQswCQYDVQQGEwJERTET +MBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCKtx6aDujfcT +MA0GCSqGSIb3DQEBCwUAA4IBAQCaaBwEyegcUwTsHFiZGq64tvhRBNdiaXIGZk64 ++Jw+FyfgcMp80VIhAdKuPtodtMWRQFl6F7xI3Gkvhosv73jWSwl05iGvxFWN0wNr +N2nZ8JPCHNqQQkuGaHEM3B591EifrswGLhIaoSihHIBFlBx6e0fgBmSTHYbx9usI +XyjDyGWkq0z72KGjifqow6zZKDFeX2Br3K1hP2V2ObnVkL+Arj+lBConkD+Ja9fa +vfbCKFRMmniHBSKcaTdHu/yzFaS8zGdWaMXIVzidPrIpqiv4KC2iVWqizZX3u6ej +nVDuRRggGA08TMPaJa3ziQo+zcjFkeHyd+7vw1w7ogSPlwx8 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC5TCCAc0CCKtx6aDujfcTMA0GCSqGSIb3DQEBCwUAMDUxCzAJBgNVBAYTAkRF +MRMwEQYDVQQKDApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTAeFw0xOTA3 +MjkxNTM4MDRaFw0xOTA4MDUxNTM4MDRaMDUxCzAJBgNVBAYTAkRFMRMwEQYDVQQK +DApBIE1BSUxURVNUMREwDwYDVQQDDAhteVRlc3RDQTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKJOatbPDL3lw/7tqeugaRHxqMgx7/DOLdSnDnK66Eys +GrFcp43N3tQL+0rm77tz/jcyVkHAZF9Sv1c/tIZay/J975cbpHPMraJVbM+/mL6f +14wrwU4rAJLILDkZ3HqkKKnrGmfoKrB1RZ9LA+NLtQlfiuP4C8Et7bOZOkuGdq0T +aygotW0ELeQPbVWXV/GcP6Xd0FnKQF7m9ioRn9MKxu4VDm3hSKDtN1zyXQ1HXhQV +/UGODSaFyUgoCTnz7kFcF3hY9Dw7M55CCM3U0PnfxuxUdn8qMH1lym/G5K5xaVLV +fCjsly8GUUfHtls3Y0F7c6NE5CPkjub2HNNdCW+JD0ECAwEAATANBgkqhkiG9w0B +AQsFAAOCAQEAAAVXNPtXVaUP9k2wNZAw4hOKp5n0EdeOkmtMdedvuQF39d+cHJkL +HjyTp3zd22S1EbgFgNB6RPlRPXie4aivcDGSAGc88NF2xEOezbLZr30x/KAc94OG +ssKjin+X8aMoZSppUxVHI1j6gzydvEWhVBIRUjgd4F5uiV+TBOAOj39xGkpCXIBg +bLRdalYjzxWYb5cR5qniCVbKrRg2oQWghStEuuRTww9SQIeSerb0lqHF3gaL82pG +F4K1I0HbAXgq/D+xIj6lbqZlchI8a4qQq2Ic75yTP/3Nt/Ls6Dt17eT6O+tA9W4e +tag/vFWjhTwGBIjjvyrjTM3fwvUN3HIZeg== +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA5peCDhwPxXYWD+fq/9i4ew5Nru+WtKtqA5p5XBxjMABNEhAA +/qy5qRGSvkPZre7Y34QE5rAK9k95BnBky0qmcR0gp2SZSL85gxLLoPvFEv8yLPCw +0/9i9F/AHI+ZhGjfRgLAt4kQQiU8PDnPB8iKrKXfWY6vH7l55u+3zdMInNTs5Fm/ +86oUTAa3gVxaTwXJ2Y4nFbczLcDYZRY86aeu84ZqZGgqQ387vE72ppBKRFaG7Jvp +HcQgOjRZ+wzbrdoSFtUc6wKTs8C3OBbXz7eq8rlmsQ2TcH4Xf7Z+HVCiVrbrqRfr +9lsH79448mVYGHY1keEFn5n/Cvr20JJMnzRq7QIDAQABAoIBADUXMwFuoo7zFjdJ +TUjkq+zhKS+ayBcG1FzKByEXBBs8JoJ/HsuEFyb+/ctCse6i7Fnh+oLmi0+UkqfR +3tMTd+jZLPh9Z/Fg3av4+tswvHoYOYQxUnUs+qqLFR8+TLk4sBddcOOQ8iZYjlrL +cIg5OvxvIFJtUJK8UH3EOYxxBy2cRHw44Fg54E0CpI3LDympYUnkT6YBB+MddqF5 +mvo85XO2WoN6m+JbVvS/jDBEI707ggAjKqHoomyzEQB0lrvksPtYfUuhGqfFRrdY +nHAfH4Nxrv4FB61GldyNBphQFpMYEtOwSGLSXEaMzHPrmaAegQminJBuQaODKCeh +IVht6d0CgYEA/6CyWfkHRRmAV/hm1fndZLcZ3oN2JIJjznZbB0R1IuaXTl7kbXvA +mdEeLD9OJayhbSIkpBSs7g8NsHPqcew4gR1lm6WhSvNg6qCg5ahLj3siyrsL3k/P +jHAb6qa68L2kc5HhI29nZ3Iqt4hL/IsWD9UoRS3zRu13A4V68MWRbMMCgYEA5u16 +OamANO1sXyeDTXPOX9HSVXXKZiBsQvkpT6x+tnSIHzsgBaZaDX+myk4B5IF19191 +X5YFzNeIw8PykNZ9+UfchIJvEp11l5z8cGcNYBXCTmW+j62y4llFqKGMS+aP1Q0r +E1QXhnvRE8SYRWHoDzQ4HLRQT2exuvPum1yCDo8CgYEAsveTxnAWCee3tl8/yBE+ +UjPrFaEeRqNPMw4j3uurwrqENiczb/9TMZ15rWrI0JGTFu/vjTy4cZbyc5ZEDmxe +hu7I43bLfMj2Em5RF1iDRjnkeuEHhyaDXYRj1x3SBZgQGaWJZSCq2X7Rr1rqMC5E +TONkZUKtbvvz9fAuyYDYtrcCgYEAsed4Bx4/SAc1OyVcsXmrHwStjusdD4qg/QOp +QNk6EWQ7ThwlslSTAd066JYqPRlDgV0INqiENWhC09aMc+rayAYFrAw0d9nYswHd +NNcfZcu9ktotcdE2g8yUrrIuPHcWjeMEMXLSYOfYjesiCCnCNpxbMjnzuQjA0q+E +PiqJg58CgYAFvkmTfr8Wp3SqmQmw5TuNaRLr1IVk/cMcFjXE3AOFcPuPnYIlJ+L6 +iwxRK85BnWBVkQIMvxrbb2Ro04buiizELRoKsDdkSdYXFSmSOvw1pvT8IpNJjNRU +AYIHvW6qRLTsSR6BZZS3pqGXYue7fE0vj4HJ2IEpj05qQ5RXrD57Wg== +-----END RSA PRIVATE KEY----- +""" + + let att_sig_invalid = """ +MIME-Version: 1.0 +Content-Disposition: attachment; filename="smime.p7m" +Content-Type: application/pkcs7-mime; smime-type=signed-data; name="smime.p7m" +Content-Transfer-Encoding: base64 + +MIAGCSqGSIb3DQEHAqCAMIACAQExDTALBglghkgBZQMEAgEwgAYJKoZIhvcNAQcB +oIAkgAQdSGVsbG8gd29ybGQgd2hhdGV2ZXIgdGhlIGZ1Y2sAAAAAAACgggOrMIID +pzCCAo+gAwIBAgIIkMopuuUM9N4wDQYJKoZIhvcNAQELBQAwNTELMAkGA1UEBhMC +REUxEzARBgNVBAoMCkEgTUFJTFRFU1QxETAPBgNVBAMMCG15VGVzdENBMB4XDTIw +MDMwNTEzMzUxNVoXDTQwMDIyABCzMzUxMVowMjELMAkGA1UEBhMCREUxEzARBgNV +BAoMCkEgTUFJTFRFU1QxDjAMBgNVBAMMBW15S2V5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAlBQ6LDCR5bLiG6Lf9hROKl4N/PAamhLZLifBGtfJ8zF0 +0+nWB+d8AHyLd9zsKsRBaXKzdxp3YUSU5IOvMJk70hT9t7VSljZNUiTmQJRCSR/E +NsCk57eAYest1xF8Wd3LIDTPgS94yLQ/pRWb4kpKkMhq3l2fl50Dx0WB9CKc0PHK +u6GyZ8yjBbFbFZbUiQy4o1FkfCueJXIgqLJs/t2yqJwstYWI7kAf9yREJVm/CI+G +YjLVJ/SI7v/F5yLrKZGsvN5LVMs+4WAJXSt8r5/rbKznqa/fJ/mlOmxiUmK27++k +fsaQadq8kaBW27s8u8HS/Gn0CQ3pinDECPO62t9JsQIDAQABo4G9MIG6MBsGA1Ud +EQQUMBKBEHVsbGltdWVsbEB3ZWIuZGUwKQYDVR0OBCIEIP0eILP4r0WN95zaSSmu +P0yzs/Vdh33rAaa0B3tiGF7SMHAGA1UdIwRpMGeAIPaFmApv+CilhWeSrOpYFZxK +cDjfKwXv8OmoFbvkA8nooTmkNzA1MQswCQYDVQQGEwJERTETMBEGA1UECgwKQSBN +QUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0GCCH6WoapleQq4MA0GCSqGSIb3DQEB +CwUAA4IBAQAvIknw5G8YV85/5LR90tCocainejse5gE9AEoqSWDUemfnhmJdMOOM +jZvhQNVA7lV4X4jv1wbqLPKOpKAag5UHjXls3MfgTGyehhKvNYWpvoXdeEWU5sIU +7QYAUlzVgZ+KJZ4ImmnF2wEiiQU4GsitRlUzGYd5R/Zux+xZZcSbmHYZT5nnxq9K +9BRmWeM6eeJ99m/ZKiLH1Vmc5oC5gPQDXj0RNJTfBXiSp0HB2DMEUITvCkxhcNFL +TtHfTLPn1WsSS/EvUqc2BszXXI3df7Axftp3Dd2VtOC04Nb48AGJbxY6ryu7XFB7 +TFYvphnuQZKw5mG0FNyADnP0CgGPobTIMYICUTCCAk0CAQEwQTA1MQswCQYDVQQG +EwJERTETMBEGA1UECgwKQSBNQUlMVEVTVDERMA8GA1UEAwwIbXlUZXN0Q0ECCJDK +KbrlDPTeMAsGCWCGSAFlAwQCAaCB5DAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB +MBwGCSqGSIb3DQEJBTEPFw0yMDAzMzExMTI2MDlaMC8GCSqGSIb3DQEJBDEiBCCE +OK7BZ1gJUVMov9b6uJu/b4WfYqzmzgJ0a2czduMPvTB5BgkqhkiG9w0BCQ8xbDBq +MAsGCWCGSAFlAwQBKjALBglghkgBZQMEARYwCwYJYIZIAWUDBAECMAoGCCqGSIb3 +DQMHMA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggq +hkiG9w0DAgIBKDANBgkqhkiG9w0BAQEFAASCAQApVxIN94BLteGD40M/GgT21C29 +7+rtEInq+dkB6XPEHC1GowgMZA9VPFrj0xenkj1qpZvqHcwNSjukz6Y8U4we9EzG +dZY6sEVhuoEct5TXznciLNarhikhqmqxmQvVy+G5w7AiQBrd7zePDI0PJ8AKoinR +klsTYRIi2JPBgcsoCRtxQqTLmFQNKtF5vJDTrv8Y42Gue+elTYTHhJi6bj4Yp9+T +qFj7X3hz0XayCj/CPiyGdJcaQvjIbDVI2cE0pY0jaIIJrIRVkPyLxieKBQYfUp/b +KzZCr1wZb2W1JA+vTk7/wHp33Jll0EZ4DV0BgmeSmnXknJM3wZVAa1z7e5o0AAAA +AAAA +""" + + let det_sig_invalid = """ +------56F3BC21B2CE83EB9E02E24139D860BC +Hello world whatever the fuckaaDadaDAd +------56F3BC21B2CE83EB9E02E24139D860BC +Content-Type: application/pkcs7-signature; name="smime.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="smime.p7s" + +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 +N8GVQGtc+3uaNA== + +------56F3BC21B2CE83EB9E02E24139D860BC-- +""" + + let enc_test_key_pwd = "testpwd" + let enc_test_key = +""" +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIjRzqyJoIb6YCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA0jxeh6SHCELOVVrAOw8wYBIIE +0NJtVjgMrMblxLPoF4N5Wn44qJb6v/DlISrXM0OiFL+E35BfUaQk7Tb/vWNuT7Ak +sfYer3XvL4DxvoEJNqUaxpKbyAWNmcROdfvZEu2gwX9rY6/5MNm+NJPn5ICpv06O +FrJn60RtHGG6TYtN7Yqy+8+2IHumQ8jBjt4nDoBcIriD7tyTZJarzrnlytMIfDP0 +kyiNQpJLEcBNazpn/3GLIdlJvjdup0hYoGoaMcKtTuc1JGQMwehu/P9KxaSvkyqN +4DStqB5Ua0IOzZdk+BJhodvwp3FTU0+bxbEVIy6NSgHCSfroyZ6fXZzazKTvqbg+ +gIB0dEGpELEjaksltbKsgaBIYahs9iT1RSEKyp6DcReIJM+bkQa6RHQvFBmqLKP2 +sZgyDzrrNUyYWXsxEGmcbJ6Irsa2WQf6G2HhzOTs3rWGpST0Nk6DwFWZTy0U3uBZ +OgVP9VEFc7yL0RQPV2Ppq54k9WBZgNYky/pteb1hq2RrZ/y/ez9zMHMlmkpRNwIQ +2EX/dcp9Y2QNZAumZt+Zh7DKLgm464n0srWn1mZOWsGy/7oajqPakay42EvVTCvB +iDjhm6OKFZChe6mietj30tNRbBC1LbpwGq21uhGihQjNp7CSWcf7osniN0UCJJ43 +BXy2g71EeVFLiBwl2qzoDNwrsRygUV0yomGvS6ic8jESm2D8J5fb1on0VKr/CBC8 +4vBHTHTW2JMOy8RyVZTBZiVeH7CiA54WwJBmARCxrzhvCLG14IE5gvfmbSm7+N+8 +ZNUcqEAt8vrdBkaLcU0knRv3r+B2/oM+9vHLqebijibHXt26fTJ4NLpjNutIbNxh +uDVUjMeH/A0zVg6jevbsANlB4H2TV/swVVk+qkRQfvDsgcCS89jr7rlU7kgmn0v8 +Ofs8JLmR7PEA3i/QLyOLNnu73qszI0o/Ag1Q2HWY2/uXxxFUTRXgiGl5Oi5wY2TZ +Rj8Ouitm0Jf9YQu4tL0zpvulgVM6jkbJKo9uYysGdS0jQVaHl3AlRnE8EYSyjJwW +QGkwcaLetcCp0kX2td/kOAXGGS5bvVHcn1vnYih1ic/Ibu1oeCOoypHouVD0jsex +gg5gNifL+63BElhpSTdKO6u5UZWzJDMlmeI62Bgp7vPlV936IgtGzCx9zkSarIZn +4u0kbWHjscVA+L3wC91IRG6Klaa27f4o2gdSGwiMo+rd37mo1Cs2u7y4/K1TvpKh +6jOlB65mIvPzzEJH1wTLkuhrfITnr2M0ddRW1am+BVOiBOjE8O+UQ1HLIeSHCmXh +6Gm+rJVvVV4UEb/gqRneAaIvS0X851aVgkyb4X3S76Tab1nNzwD/gJUb3ODPQ9Tc +ew4asU75zH6zg3frxHmdtw27Q+R0H0hxVOf0iF1znS2PBpHCg9jvtMMxRcHktpOC +dGuNDcuAtwqQN48XAgP9EkLHwRkJyN+KCSwzLzbhUKsTK3aUa9ON+YJhwyDbuNZT +tCS6rxHDe77j4fzb9jXyfM99GK9YN36/spUfl5UijDoou5rM4Tt92VBMn8iMNXx4 +OxeGuSvQoBUdP50ZspBBrf2+simuJLKMQ8kVXx8TuJqXe1FQPvFWDX5lBAf57BET +PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO +-----END ENCRYPTED PRIVATE KEY----- +""" + var test_string = "Hello world whatever the fuck"; + + let smimeObj = SMIME() + + var certi: Certificate? + var othercerti: Certificate? + var ourAddr: String? + var otherAddr: String? + var ourPrivateKeyFP: String? + override func setUp() { - // Put setup code here. This method is called before the invocation of each test method in the class. + certi = Certificate(pem: test_key) + othercerti = Certificate(pem: test_key_other) + ourAddr = certi!.eMails![0] + otherAddr = othercerti!.eMails![0] + ourPrivateKeyFP = smimeObj.addPrivateKey(keyPlusCertPEM: test_key) + let _ = smimeObj.importCertForAddress(cert: test_key, addr: ourAddr!) + let _ = smimeObj.importCertForAddress(cert: test_key_other, addr: otherAddr!) } override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. + smimeObj.resetKeychain() } - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. + func testEncMail() { + let testData = test_string.data(using: .utf8)! + + var encCryptObj: CryptoObject? = nil + do { + encCryptObj = try smimeObj.encrypt(plainData: testData, ids: [otherAddr!], ownAddr: ourAddr!) + } catch let error { + if error is SMIMEError { + let smimeError = error as! SMIMEError + print(smimeError.message ?? "No error message") + print("SWIFT encrypt errors") + for x in smimeError.errorArray ?? [] { + print("error code: ", x) + print("error string: ", getErrorString(errCode: x)) + print("error reason: ", getErrorReasonString(errCode: x)) + } + } + } + + assert(encCryptObj != nil) + assert(encCryptObj!.encryptionState == .ValidedEncryptedWithCurrentKey) + assert(encCryptObj!.encType == .SMIME) + + print("\n\nNew crypto object") + print("decrypted text: ", encCryptObj!.decryptedText ?? "") + print("sign key: ", encCryptObj!.signedKeys) + print("sign addr: ", encCryptObj!.signedAdrs) + print("enc type:", encCryptObj!.encType) + print("cipther string: ", encCryptObj!.chiperString ?? "") + var decObj : CryptoObject? = nil + do { + decObj = try smimeObj.decrypt(data: (encCryptObj?.chiphertext)!, fromAddr: ourAddr!, ownId: ourAddr!, isMailNew: false) + }catch let error { + if error is SMIMEError { + let smimeError = error as! SMIMEError + print(smimeError.message ?? "No error message") + print("SWIFT decrypt errors") + for x in smimeError.errorArray ?? [] { + print("error code: ", x) + print("error string: ", getErrorString(errCode: x)) + print("error reason: ", getErrorReasonString(errCode: x)) + } + } + } + if let obj = decObj { + print("\n\nDEC crypto object") + print("decrypted text: ", obj.decryptedText ?? "") + print("signed key: ", obj.signedKeys ) + print("sign addr: ", obj.signedAdrs) + print("enc type:", obj.encType) + print ("sign: ", obj.signatureState) + print("cipther string: ", obj.chiperString ?? "") + } + + assert(decObj != nil) + assert(test_string == decObj!.decryptedText) + assert(decObj!.signatureState == .ValidSignature) + assert(decObj!.encType == .SMIME) } - - func testPerformanceExample() { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. + + func testKeyEnc() { + let (pKeyEnc, errArrEnc) = getEncryptedPemFromPKey(pem: test_key, passwd: "testpwd") + + print("Encrypted pkey: ", pKeyEnc ?? "") + + if errArrEnc != nil { + print("encrypt of key errors") + for x in errArrEnc ?? [] { + print("error code: ", x) + print("error string: ", getErrorString(errCode: x)) + } + } + + assert(pKeyEnc != nil) + + let (pKey, errArr) = getPKeyFromEncryptedPem(pem: pKeyEnc!, passwd: "testpwd") + + print("Decrypted pkey: ", pKey ?? "") + print("Matches with the original: ", test_key.contains((pKey ?? " asd "))) + + if errArr != nil { + print("decrypt of key errors") + for x in errArr ?? [] { + print("error code: ", x) + print("error string: ", getErrorString(errCode: x)) + } } + assert(pKey != nil) + assert(getFingerprintFromPem(pem: pKey!) == getFingerprintFromPem(pem: test_key)) } - }