mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-08-20 08:09:01 +02:00
77 lines
1.9 KiB
Swift
77 lines
1.9 KiB
Swift
import Foundation
|
|
|
|
// Extensions, as defined in https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.agent
|
|
|
|
extension SSHAgent {
|
|
|
|
public enum ProtocolExtension: CustomDebugStringConvertible, Codable, Sendable {
|
|
case openSSH(OpenSSHExtension)
|
|
case unknown(String)
|
|
|
|
public var debugDescription: String {
|
|
switch self {
|
|
case let .openSSH(protocolExtension):
|
|
protocolExtension.debugDescription
|
|
case .unknown(let string):
|
|
"Unknown (\(string))"
|
|
}
|
|
}
|
|
|
|
public static var empty: ProtocolExtension {
|
|
.unknown("empty")
|
|
}
|
|
|
|
private struct ProtocolExtensionParsingError: Error {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
extension SSHAgent.ProtocolExtension {
|
|
|
|
public enum OpenSSHExtension: CustomDebugStringConvertible, Codable, Sendable {
|
|
case sessionBind(SessionBindContext)
|
|
case unknown(String)
|
|
|
|
public static var domain: String {
|
|
"openssh.com"
|
|
}
|
|
|
|
public var name: String {
|
|
switch self {
|
|
case .sessionBind:
|
|
"session-bind"
|
|
case .unknown(let name):
|
|
name
|
|
}
|
|
}
|
|
|
|
public var debugDescription: String {
|
|
"\(name)@\(OpenSSHExtension.domain)"
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension SSHAgent.ProtocolExtension.OpenSSHExtension {
|
|
|
|
public struct SessionBindContext: Codable, Sendable {
|
|
|
|
public let hostKey: Data
|
|
public let sessionID: Data
|
|
public let signature: Data
|
|
public let forwarding: Bool
|
|
|
|
public init(hostKey: Data, sessionID: Data, signature: Data, forwarding: Bool) {
|
|
self.hostKey = hostKey
|
|
self.sessionID = sessionID
|
|
self.signature = signature
|
|
self.forwarding = forwarding
|
|
}
|
|
|
|
public static let empty = SessionBindContext(hostKey: Data(), sessionID: Data(), signature: Data(), forwarding: false)
|
|
|
|
}
|
|
|
|
}
|