'Called to handle a reply to a non-group key exchange message
(KEXDH_INIT).
Like the handler for I{KEXDH_INIT}, this message type has an
overlapping value.  This method is called from C{ssh_KEX_DH_GEX_GROUP}
if that method detects a non-group key exchange is in progress.
Payload::
string serverHostKey
integer f (server Diffie-Hellman public key)
string signature
We verify the host key by calling verifyHostKey, then continue in
_continueKEXDH_REPLY.
@type packet: L{bytes}
@param packet: The message data.
@return: A deferred firing when key exchange is complete.'

def _ssh_KEXDH_REPLY(self, packet):

    (pubKey, packet) = getNS(packet)
    (f, packet) = getMP(packet)
    (signature, packet) = getNS(packet)
    fingerprint = ':'.join([binascii.hexlify(ch) for ch in iterbytes(md5(pubKey).digest())])
    d = self.verifyHostKey(pubKey, fingerprint)
    d.addCallback(self._continueKEXDH_REPLY, pubKey, f, signature)
    d.addErrback((lambda unused: self.sendDisconnect(DISCONNECT_HOST_KEY_NOT_VERIFIABLE, 'bad    host    key')))
    return d
