From c0370669a9d09d19e4065b157982e71165fdb518 Mon Sep 17 00:00:00 2001 From: Max Goedjen Date: Sat, 6 Sep 2025 22:50:17 -0700 Subject: [PATCH] Fix ECDSA test. --- .../SecretAgentKit/OpenSSHReader.swift | 8 ++++++-- .../SecretAgentKitTests/AgentTests.swift | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Sources/Packages/Sources/SecretAgentKit/OpenSSHReader.swift b/Sources/Packages/Sources/SecretAgentKit/OpenSSHReader.swift index 0ca5042..b6a367d 100644 --- a/Sources/Packages/Sources/SecretAgentKit/OpenSSHReader.swift +++ b/Sources/Packages/Sources/SecretAgentKit/OpenSSHReader.swift @@ -33,8 +33,12 @@ final class OpenSSHReader { } - func readNextChunkAsString() throws -> String { - try String(decoding: readNextChunk(), as: UTF8.self) + func readNextChunkAsString(convertEndianness: Bool = true) throws(OpenSSHReaderError) -> String { + try String(decoding: readNextChunk(convertEndianness: convertEndianness), as: UTF8.self) + } + + func readNextChunkAsSubReader(convertEndianness: Bool = true) throws(OpenSSHReaderError) -> OpenSSHReader { + OpenSSHReader(data: try readNextChunk(convertEndianness: convertEndianness)) } } diff --git a/Sources/Packages/Tests/SecretAgentKitTests/AgentTests.swift b/Sources/Packages/Tests/SecretAgentKitTests/AgentTests.swift index 3ccc2f1..bbef669 100644 --- a/Sources/Packages/Tests/SecretAgentKitTests/AgentTests.swift +++ b/Sources/Packages/Tests/SecretAgentKitTests/AgentTests.swift @@ -21,11 +21,6 @@ import CryptoKit let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestIdentities) let response = await agent.handle(request: request, provenance: .test) - let actualHex = response.compactMap { ("0" + String($0, radix: 16, uppercase: false)).suffix(2) }.joined() - let expectedHex = Constants.Responses.requestIdentitiesMultiple.compactMap { ("0" + String($0, radix: 16, uppercase: false)).suffix(2) }.joined() - print(actualHex) - print(expectedHex) - let actual = OpenSSHReader(data: response) let expected = OpenSSHReader(data: Constants.Responses.requestIdentitiesMultiple) print(actual, expected) @@ -42,13 +37,21 @@ import CryptoKit #expect(response == Constants.Responses.requestFailure) } - @Test(.disabled()) func ecdsaSignature() async throws { + @Test func ecdsaSignature() async throws { let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature) guard case SSHAgent.Request.signRequest(let context) = request else { return } let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret]) let agent = Agent(storeList: list) - let signedData = await agent.handle(request: request, provenance: .test) - let rsData = OpenSSHReader(data: signedData) + let response = await agent.handle(request: request, provenance: .test) + let responseReader = OpenSSHReader(data: response) + let length = try responseReader.readNextBytes(as: UInt32.self).bigEndian + let type = try responseReader.readNextBytes(as: UInt8.self).bigEndian + #expect(length == response.count - MemoryLayout.size) + #expect(type == SSHAgent.Response.agentSignResponse.rawValue) + let outer = OpenSSHReader(data: responseReader.remaining) + let inner = try outer.readNextChunkAsSubReader() + _ = try inner.readNextChunk() + let rsData = try inner.readNextChunkAsSubReader() var r = try rsData.readNextChunk() var s = try rsData.readNextChunk() // This is fine IRL, but it freaks out CryptoKit