mutating func readKeyExchangeMessage()

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)
        }
    }