mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-05-08 08:28:58 +02:00
100 lines
3.6 KiB
Swift
100 lines
3.6 KiB
Swift
import Foundation
|
|
|
|
/// A namespace for the SSH Agent Protocol, as described in https://datatracker.ietf.org/doc/html/draft-miller-ssh-agent#section-5.1
|
|
public enum SSHAgent {}
|
|
|
|
extension SSHAgent {
|
|
|
|
/// The type of the SSH Agent Request, as described in https://datatracker.ietf.org/doc/html/draft-miller-ssh-agent#section-5.1
|
|
public enum Request: CustomDebugStringConvertible, Codable, Sendable {
|
|
|
|
case requestIdentities
|
|
case signRequest(SignatureRequestContext)
|
|
case addIdentity
|
|
case removeIdentity
|
|
case removeAllIdentities
|
|
case addIDConstrained
|
|
case addSmartcardKey
|
|
case removeSmartcardKey
|
|
case lock
|
|
case unlock
|
|
case addSmartcardKeyConstrained
|
|
case protocolExtension
|
|
case unknown(UInt8)
|
|
|
|
public var protocolID: UInt8 {
|
|
switch self {
|
|
case .requestIdentities: 11
|
|
case .signRequest: 13
|
|
case .addIdentity: 17
|
|
case .removeIdentity: 18
|
|
case .removeAllIdentities: 19
|
|
case .addIDConstrained: 25
|
|
case .addSmartcardKey: 20
|
|
case .removeSmartcardKey: 21
|
|
case .lock: 22
|
|
case .unlock: 23
|
|
case .addSmartcardKeyConstrained: 26
|
|
case .protocolExtension: 27
|
|
case .unknown(let value): value
|
|
}
|
|
}
|
|
|
|
public var debugDescription: String {
|
|
switch self {
|
|
case .requestIdentities: "SSH_AGENTC_REQUEST_IDENTITIES"
|
|
case .signRequest: "SSH_AGENTC_SIGN_REQUEST"
|
|
case .addIdentity: "SSH_AGENTC_ADD_IDENTITY"
|
|
case .removeIdentity: "SSH_AGENTC_REMOVE_IDENTITY"
|
|
case .removeAllIdentities: "SSH_AGENTC_REMOVE_ALL_IDENTITIES"
|
|
case .addIDConstrained: "SSH_AGENTC_ADD_ID_CONSTRAINED"
|
|
case .addSmartcardKey: "SSH_AGENTC_ADD_SMARTCARD_KEY"
|
|
case .removeSmartcardKey: "SSH_AGENTC_REMOVE_SMARTCARD_KEY"
|
|
case .lock: "SSH_AGENTC_LOCK"
|
|
case .unlock: "SSH_AGENTC_UNLOCK"
|
|
case .addSmartcardKeyConstrained: "SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED"
|
|
case .protocolExtension: "SSH_AGENTC_EXTENSION"
|
|
case .unknown: "UNKNOWN_MESSAGE"
|
|
}
|
|
}
|
|
|
|
public struct SignatureRequestContext: Sendable, Codable {
|
|
public let keyBlob: Data
|
|
public let dataToSign: Data
|
|
|
|
public init(keyBlob: Data, dataToSign: Data) {
|
|
self.keyBlob = keyBlob
|
|
self.dataToSign = dataToSign
|
|
}
|
|
|
|
public static var empty: SignatureRequestContext {
|
|
SignatureRequestContext(keyBlob: Data(), dataToSign: Data())
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/// The type of the SSH Agent Response, as described in https://datatracker.ietf.org/doc/html/draft-miller-ssh-agent#section-5.1
|
|
public enum Response: UInt8, CustomDebugStringConvertible {
|
|
|
|
case agentFailure = 5
|
|
case agentSuccess = 6
|
|
case agentIdentitiesAnswer = 12
|
|
case agentSignResponse = 14
|
|
case agentExtensionFailure = 28
|
|
case agentExtensionResponse = 29
|
|
|
|
public var debugDescription: String {
|
|
switch self {
|
|
case .agentFailure: "SSH_AGENT_FAILURE"
|
|
case .agentSuccess: "SSH_AGENT_SUCCESS"
|
|
case .agentIdentitiesAnswer: "SSH_AGENT_IDENTITIES_ANSWER"
|
|
case .agentSignResponse: "SSH_AGENT_SIGN_RESPONSE"
|
|
case .agentExtensionFailure: "SSH_AGENT_EXTENSION_FAILURE"
|
|
case .agentExtensionResponse: "SSH_AGENT_EXTENSION_RESPONSE"
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|