docs: def mk_token(opts, tdata):
      '''
      Mint a new token using the config option hash_type and store tdata with 'token' attribute set
      to the token.
      This module uses the hash of random 512 bytes as a token.
  
      :param opts: Salt master config options
      :param tdata: Token data to be stored with 'token' attirbute of this dict set to the token.
      :returns: tdata with token if successful. Empty dict if failed.
      '''
      redis_client = _redis_client(opts)
      if not redis_client:
          return {}
      hash_type = getattr(hashlib, opts.get('hash_type', 'md5'))
      tok = six.text_type(hash_type(os.urandom(512)).hexdigest())
      try:
          while redis_client.get(tok) is not None:
              tok = six.text_type(hash_type(os.urandom(512)).hexdigest())
      except Exception as err:
          log.warning(
              'Authentication failure: cannot get token %s from redis: %s',
              tok, err
          )
          return {}
      tdata['token'] = tok
      serial = salt.payload.Serial(opts)
      try:
          redis_client.set(tok, serial.dumps(tdata))
      except Exception as err:
          log.warning(
              'Authentication failure: cannot save token %s to redis: %s',
              tok, err
          )
          return {}
      return tdata