This commit is contained in:
Max Goedjen 2025-08-31 17:04:56 -07:00
parent 3e128d2a81
commit 11f1f83113
No known key found for this signature in database
2 changed files with 7 additions and 7 deletions

View File

@ -99,15 +99,15 @@ extension Agent {
let reader = OpenSSHReader(data: data) let reader = OpenSSHReader(data: data)
guard try reader.readNextChunkAsString() == "session-bind@openssh.com" else { throw UnsupportedExtensionError() } guard try reader.readNextChunkAsString() == "session-bind@openssh.com" else { throw UnsupportedExtensionError() }
let hostKey = try reader.readNextChunk() let hostKey = try reader.readNextChunk()
let khReader = OpenSSHReader(data: hostKey) let keyReader = OpenSSHReader(data: hostKey)
print(try khReader.readNextChunkAsString()) _ = try keyReader.readNextChunkAsString() // Key Type
let keyData = try khReader.readNextChunk() let keyData = try keyReader.readNextChunk()
let sessionID = try reader.readNextChunk() let sessionID = try reader.readNextChunk()
let signatureData = try reader.readNextChunk() let signatureData = try reader.readNextChunk()
let forwarding = try reader.readNextBytes(count: 1, as: Bool.self) let forwarding = try reader.readNextBytes(as: Bool.self)
print(forwarding)
let signatureReader = OpenSSHSignatureReader() let signatureReader = OpenSSHSignatureReader()
guard try signatureReader.verify(signatureData, for: sessionID, with: keyData) else { throw SignatureVerificationFailedError() } guard try signatureReader.verify(signatureData, for: sessionID, with: keyData) else { throw SignatureVerificationFailedError() }
print("Fowarding: \(forwarding)")
} }
struct UnsupportedExtensionError: Error {} struct UnsupportedExtensionError: Error {}

View File

@ -26,8 +26,8 @@ public final class OpenSSHReader {
return ret return ret
} }
public func readNextBytes<T>(count: Int = 0, as: T.Type) throws -> T { public func readNextBytes<T>(as: T.Type) throws -> T {
let lengthRange = 0..<count let lengthRange = 0..<MemoryLayout<T>.size
let lengthChunk = remaining[lengthRange] let lengthChunk = remaining[lengthRange]
remaining.removeSubrange(lengthRange) remaining.removeSubrange(lengthRange)
return lengthChunk.bytes.unsafeLoad(as: T.self) return lengthChunk.bytes.unsafeLoad(as: T.self)