         let M: Data
         do {
             M = try client.processChallenge(salt: s, publicKey: B)
-        } catch {
-            return XCTFail("Client couldn't process challenge: \(error) -- \(debugInfo())")
+            additionalDebug += "\nclientM: \(M.hex)"
+        } catch {
+            return XCTFail("Client couldn't process challenge: \(error) -- \(debugInfo())", file: file, line: line)
         }
 
         // Using M, the server verifies the proof and calculates a proof for the client

        let M: Data
        do {
            M = try client.processChallenge(salt: s, publicKey: B)
        } catch {
            return XCTFail("Client couldn't process challenge: \(error) -- \(debugInfo())", file: file, line: line)
        }

        // Using M, the server verifies the proof and calculates a proof for the client

                "salt: \(server.salt?.hex ?? "N/A")",
                "verificationKey: \(server.verificationKey?.hex ?? "N/A")",
                "serverPrivateKey: \(server.privateKey?.hex ?? "N/A")",
                "serverPublicKey: \(server.publicKey?.hex ?? "N/A")",
                "clientPrivateKey: \(client.privateKey.hex)",
                "clientPublicKey: \(client.publicKey.hex)",
                "expected client M: \(server.expectedM?.hex ?? "N/A")",
                "expected server HAMK: \(client.HAMK?.hex ?? "N/A")",
                "clientK: \(client.K?.hex ?? "N/A")",
            ]
            return infos.joined(separator: "\n")
        }

        var additionalDebug: String = ""

        // The server generates the challenge: pre-defined salt, public key B
        // Server->Client: salt, B
