From e089640f57d230fb0d3144d711eb492b0639d3b9 Mon Sep 17 00:00:00 2001
From: lazarog98 <lazarog98@ninlil.local>
Date: Tue, 31 Mar 2020 15:25:11 +0200
Subject: [PATCH] #232 add exceptions to sign and finalize decrypt

---
 enzevalos_iphone/SMIME.swift | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/enzevalos_iphone/SMIME.swift b/enzevalos_iphone/SMIME.swift
index 84faaa52..5efd9e2d 100644
--- a/enzevalos_iphone/SMIME.swift
+++ b/enzevalos_iphone/SMIME.swift
@@ -709,14 +709,14 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO
             throw SMIMEError(message: "Decryption failed!", errorArray: errArr, type: SMIMEError.ErrorType.decryption)
         }
         
-        let (sigState, certsWithFps, sigStr) = verify(data: outputData, email: fromAddr, isMailNew: isMailNew)
+        let verifyCryptoObj = verify(data: outputData, email: fromAddr, isMailNew: isMailNew)
         
-        let addresses = getAllEmailsFromPEMs(certs: certsWithFps.map( { (arg) -> String in
-            let (_, pem) = arg
-            return pem
-        }))
+        let sigState = verifyCryptoObj.signatureState
+        let addresses = verifyCryptoObj.signedAdrs
+        let plainText = verifyCryptoObj.plaintext
+        let decryptedData = plainText!.data(using: .utf8)!
         
-        return CryptoObject(chiphertext: data, plaintext: String(data: outputData, encoding: .utf8), decryptedData: outputData, sigState: sigState, encState: encState, signKey: fp, encType: CryptoScheme.SMIME, signedAdrs: sigState == SignatureState.ValidSignature ? addresses : [])
+        return CryptoObject(chiphertext: data, plaintext: plainText, decryptedData: decryptedData, sigState: sigState, encState: encState, signKey: fp, encType: CryptoScheme.SMIME, signedAdrs: sigState == SignatureState.ValidSignature ? addresses : [])
     }
     
     func sign(plainData: Data, myEmail: String, detached: Bool = true) throws -> CryptoObject {
@@ -728,7 +728,9 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO
         
         let (sigText, errArr) = signWithPem(message: text!, certAsPem: cert, keyAsPem: key, detached: detached)
         
-        // TODO: Exception
+        if (errArr != nil && errArr!.count > 0) {
+            throw SMIMEError(message: "Signing failed!", errorArray: errArr, type: SMIMEError.ErrorType.signing)
+        }
                 
         return CryptoObject(chiphertext: sigText!.data(using: .utf8), plaintext: text, decryptedData: plainData, sigState: SignatureState.ValidSignature, encState: EncryptionState.NoEncryption, signKey: fp, encType: CryptoScheme.SMIME, signedAdrs: [myEmail])
     }
-- 
GitLab