code: public String getStringToSign(String requestDate, String credentialScope, String canonicalRequest) throws SignatureException {
          try {
              return AWS4_SIGNING_ALGORITHM + LINE_SEPARATOR + requestDate + LINE_SEPARATOR + credentialScope + LINE_SEPARATOR +
                      new String(Hex.encode(calculateHash(canonicalRequest)), ENCODING);
          } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
              throw new SignatureException(CANONICAL_REQUEST_DIGEST_ERROR + e.getMessage());
          }
      }
docs: Combines the inputs into a string with a fixed structure and calculates the canonical request digest.
  This string can be used with the derived signing key to create an AWS signature.
  
  @param requestDate      Request date in YYYYMMDD'T'HHMMSS'Z' format.
  @param credentialScope  Request credential scope.
  @param canonicalRequest Canonical request.
  @return A string that includes meta information about the request.