diff --git a/Sources/AgentRequestParser/main.swift b/Sources/AgentRequestParser/main.swift index 6b41cc1..3ba02e4 100644 --- a/Sources/AgentRequestParser/main.swift +++ b/Sources/AgentRequestParser/main.swift @@ -1,9 +1,21 @@ import XPC import SecretAgentKit +import OSLog + +private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent.AgentRequestParser", category: "Parser") func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision { - request.accept { message in - return try? SSHAgentInputParser().parse(data: message) + logger.log("Parser received inbound request") + return request.accept { message in + logger.log("Parser accepted inbound request") + do { + let result = try SSHAgentInputParser().parse(data: message) + logger.log("Parser parsed message as type \(result.debugDescription)") + return result + } catch { + logger.error("Parser failed with error \(error)") + return nil + } } } @@ -17,7 +29,8 @@ do { } else { _ = try XPCListener(service: "com.maxgoedjen.Secretive.AgentRequestParser", incomingSessionHandler: handleRequest(_:)) } + logger.log("Parser initialized") dispatchMain() } catch { - print("Failed to create listener, error: \(error)") + logger.error("Failed to create parser, error: \(error)") } diff --git a/Sources/Packages/Sources/SecretAgentKit/Agent.swift b/Sources/Packages/Sources/SecretAgentKit/Agent.swift index e1fbf00..2adebb0 100644 --- a/Sources/Packages/Sources/SecretAgentKit/Agent.swift +++ b/Sources/Packages/Sources/SecretAgentKit/Agent.swift @@ -93,7 +93,8 @@ extension Agent { /// - Returns: An OpenSSH formatted Data payload containing the signed data response. func sign(data: Data, keyBlob: Data, provenance: SigningRequestProvenance) async throws -> Data { guard let (secret, store) = await secret(matching: keyBlob) else { - logger.debug("Agent did not have a key matching \(keyBlob as NSData)") + let keyBlobHex = keyBlob.compactMap { ("0" + String($0, radix: 16, uppercase: false)).suffix(2) }.joined() + logger.debug("Agent did not have a key matching \(keyBlobHex)") throw NoMatchingKeyError() } diff --git a/Sources/SecretAgent/AppDelegate.swift b/Sources/SecretAgent/AppDelegate.swift index 237f595..be1c44e 100644 --- a/Sources/SecretAgent/AppDelegate.swift +++ b/Sources/SecretAgent/AppDelegate.swift @@ -35,6 +35,13 @@ class AppDelegate: NSObject, NSApplicationDelegate { logger.debug("SecretAgent finished launching") Task { let inputParser = try XPCAgentInputParser() + Task { + try? await Task.sleep(for: .seconds(1)) + var len = (5 as UInt32).littleEndian + var raw = SSHAgent.Request.requestIdentities.protocolID + let data = Data(bytes: &len, count: MemoryLayout.size) + Data(bytes: &raw, count: MemoryLayout.size) + print(try? await inputParser.parse(data: data)) + } for await session in socketController.sessions { Task { do { diff --git a/Sources/SecretAgent/XPCInputParser.swift b/Sources/SecretAgent/XPCInputParser.swift index 7dc5b60..d5d8c9b 100644 --- a/Sources/SecretAgent/XPCInputParser.swift +++ b/Sources/SecretAgent/XPCInputParser.swift @@ -4,13 +4,15 @@ import SecretAgentKit public final class XPCAgentInputParser: SSHAgentInputParserProtocol { private let session: XPCSession + private let queue = DispatchQueue(label: "com.maxgoedjen.Secretive.AgentRequestParser", qos: .userInteractive) public init() throws { if #available(macOS 26.0, *) { - session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", requirement: .isFromSameTeam()) + session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", targetQueue: queue, options: .inactive, requirement: .isFromSameTeam()) } else { - session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser") + session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", targetQueue: queue, options: .inactive) } + try session.activate() } public func parse(data: Data) async throws -> SSHAgent.Request {