'Send a I{KEXINIT} message to initiate key exchange or to respond to a
key exchange initiated by the peer.
@raise RuntimeError: If a key exchange has already been started and it
is not appropriate to send a I{KEXINIT} message at this time.
@return: L{None}'

def sendKexInit(self):

    if (self._keyExchangeState != self._KEY_EXCHANGE_NONE):
        raise RuntimeError(('Cannot    send    KEXINIT    while    key    exchange    state    is    %r' % (self._keyExchangeState,)))
    self.ourKexInitPayload = ''.join([chr(MSG_KEXINIT), randbytes.secureRandom(16), NS(','.join(self.supportedKeyExchanges)), NS(','.join(self.supportedPublicKeys)), NS(','.join(self.supportedCiphers)), NS(','.join(self.supportedCiphers)), NS(','.join(self.supportedMACs)), NS(','.join(self.supportedMACs)), NS(','.join(self.supportedCompressions)), NS(','.join(self.supportedCompressions)), NS(','.join(self.supportedLanguages)), NS(','.join(self.supportedLanguages)), '\x00\x00\x00\x00\x00'])
    self.sendPacket(MSG_KEXINIT, self.ourKexInitPayload[1:])
    self._keyExchangeState = self._KEY_EXCHANGE_REQUESTED
    self._blockedByKeyExchange = []
