code: def _verify_multi(self, token, verifying_keys, num_required=None):
          headers, payload, raw_signatures, signing_inputs = _unpack_token_json(token)
          if num_required is None:
              num_required = len(raw_signatures)
          if num_required > len(verifying_keys):
              return False
          if len(headers) != len(raw_signatures):
              raise DecodeError('Header/signature mismatch')
          verifying_keys = [load_verifying_key(vk, self.crypto_backend) for vk in verifying_keys]
          for vk in verifying_keys:
              if vk.curve.name != verifying_keys[0].curve.name:
                  raise DecodeError("TODO: only support using keys from one curve per JWT")
          der_signatures = [raw_to_der_signature(rs, verifying_keys[0].curve) for rs in raw_signatures]
          num_verified = 0
          for (signing_input, der_sig) in zip(signing_inputs, der_signatures):
              for vk in verifying_keys:
                  verifier = self._get_verifier(vk, der_sig)
                  verifier.update(signing_input)
                  try:
                      verifier.verify()
                      num_verified += 1
                      verifying_keys.remove(vk)
                      break
                  except InvalidSignature:
                      pass
              if num_verified >= num_required:
                  break
          return (num_verified >= num_required)