code: def _compute_key(self, id, nbytes):
          
          m = Message()
          m.add_mpint(self.K)
          m.add_bytes(self.H)
          m.add_byte(b(id))
          m.add_bytes(self.session_id)
          # Fallback to SHA1 for kex engines that fail to specify a hex
          # algorithm, or for e.g. transport tests that don't run kexinit.
          hash_algo = getattr(self.kex_engine, "hash_algo", None)
          hash_select_msg = "kex engine {} specified hash_algo {!r}".format(
              self.kex_engine.__class__.__name__, hash_algo
          )
          if hash_algo is None:
              hash_algo = sha1
              hash_select_msg += ", falling back to sha1"
          if not hasattr(self, "_logged_hash_selection"):
              self._log(DEBUG, hash_select_msg)
              setattr(self, "_logged_hash_selection", True)
          out = sofar = hash_algo(m.asbytes()).digest()
          while len(out) < nbytes:
              m = Message()
              m.add_mpint(self.K)
              m.add_bytes(self.H)
              m.add_bytes(sofar)
              digest = hash_algo(m.asbytes()).digest()
              out += digest
              sofar += digest
          return out[:nbytes]
docs: id is 'A' - 'F' for the various keys used by ssh