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
+
+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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"
+
+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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))
     }
-
 }