docs: @Override
    public String digestParams(RestInvocation restInvocation) {
      // Get Parameters
      Map<String, String> params = restInvocation.getParamsMap().get(FormParam.class).asHttpHeaders();
  
      // TODO: Find More Elegant Solution To Remove Sign
      // Order By Key Alphabetically, Concancecate Values
      byte[] unsigned =
          params.entrySet().stream()
              .sorted(Map.Entry.<String, String>comparingByKey())
              .filter(e -> !e.getKey().equalsIgnoreCase("sign"))
              .map(e -> e.getValue())
              .collect(Collectors.joining())
              .getBytes();
  
      // TODO: Determine Charceter Encoding
      return String.valueOf(md5.digest(unsigned));
    }