def _parse_kexgss_gex_init(self, m):
client_token = m.get_string()<EOL>self.e = m.get_mpint()<EOL>if (self.e < <NUM_LIT:1>) or (self.e > self.p - <NUM_LIT:1>):<EOL><INDENT>raise SSHException('<STR_LIT>')<EOL><DEDENT>self._generate_x()<EOL>self.f = pow(self.g, self.x, self.p)<EOL>K = pow(self.e, self.x, self.p)<EOL>self.transport.host_key = NullHostKey()<EOL>key = self.transport.host_key.__str__()<EOL>hm = Message()<EOL>hm.add(<EOL>self.transport.remote_version,<EOL>self.transport.local_version,<EOL>self.transport.remote_kex_init,<EOL>self.transport.local_kex_init,<EOL>key,<EOL>)<EOL>hm.add_int(self.min_bits)<EOL>hm.add_int(self.preferred_bits)<EOL>hm.add_int(self.max_bits)<EOL>hm.add_mpint(self.p)<EOL>hm.add_mpint(self.g)<EOL>hm.add_mpint(self.e)<EOL>hm.add_mpint(self.f)<EOL>hm.add_mpint(K)<EOL>H = sha1(hm.asbytes()).digest()<EOL>self.transport._set_K_H(K, H)<EOL>srv_token = self.kexgss.ssh_accept_sec_context(<EOL>self.gss_host, client_token<EOL>)<EOL>m = Message()<EOL>if self.kexgss._gss_srv_ctxt_status:<EOL><INDENT>mic_token = self.kexgss.ssh_get_mic(<EOL>self.transport.session_id, gss_kex=True<EOL>)<EOL>m.add_byte(c_MSG_KEXGSS_COMPLETE)<EOL>m.add_mpint(self.f)<EOL>m.add_string(mic_token)<EOL>if srv_token is not None:<EOL><INDENT>m.add_boolean(True)<EOL>m.add_string(srv_token)<EOL><DEDENT>else:<EOL><INDENT>m.add_boolean(False)<EOL><DEDENT>self.transport._send_message(m)<EOL>self.transport.gss_kex_used = True<EOL>self.transport._activate_outbound()<EOL><DEDENT>else:<EOL><INDENT>m.add_byte(c_MSG_KEXGSS_CONTINUE)<EOL>m.add_string(srv_token)<EOL>self.transport._send_message(m)<EOL>self.transport._expect_packet(<EOL>MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE, MSG_KEXGSS_ERROR<EOL>)<EOL><DEDENT>
Parse the SSH2_MSG_KEXGSS_INIT message (server mode).

:param `Message` m: The content of the SSH2_MSG_KEXGSS_INIT message