in Sources/NIOSSH/SSHMessages.swift [582:619]
mutating func readKeyExchangeMessage() -> SSHMessage.KeyExchangeMessage? {
self.rewindReaderOnNil { `self` in
guard
let cookie = self.readSlice(length: 16),
let keyExchangeAlgorithms = self.readAlgorithms(),
let serverHostKeyAlgorithms = self.readAlgorithms(),
let encryptionAlgorithmsClientToServer = self.readAlgorithms(),
let encryptionAlgorithmsServerToClient = self.readAlgorithms(),
let macAlgorithmsClientToServer = self.readAlgorithms(),
let macAlgorithmsServerToClient = self.readAlgorithms(),
let compressionAlgorithmsClientToServer = self.readAlgorithms(),
let compressionAlgorithmsServerToClient = self.readAlgorithms(),
let languagesClientToServer = self.readAlgorithms(),
let languagesServerToClient = self.readAlgorithms(),
let firstKexPacketFollows = self.readSSHBoolean()
else {
return nil
}
// reserved
guard self.readInteger(as: UInt32.self) == 0 else {
return nil
}
return .init(cookie: cookie,
keyExchangeAlgorithms: keyExchangeAlgorithms,
serverHostKeyAlgorithms: serverHostKeyAlgorithms,
encryptionAlgorithmsClientToServer: encryptionAlgorithmsClientToServer,
encryptionAlgorithmsServerToClient: encryptionAlgorithmsServerToClient,
macAlgorithmsClientToServer: macAlgorithmsClientToServer,
macAlgorithmsServerToClient: macAlgorithmsServerToClient,
compressionAlgorithmsClientToServer: compressionAlgorithmsClientToServer,
compressionAlgorithmsServerToClient: compressionAlgorithmsServerToClient,
languagesClientToServer: languagesClientToServer,
languagesServerToClient: languagesServerToClient,
firstKexPacketFollows: firstKexPacketFollows)
}
}