class Gem::S3URISigner

def generate_canonical_query_params(s3_config, date_time, credential_info, expiration)

def generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
  canonical_params = {}
  canonical_params["X-Amz-Algorithm"] = "AWS4-HMAC-SHA256"
  canonical_params["X-Amz-Credential"] = "#{s3_config.access_key_id}/#{credential_info}"
  canonical_params["X-Amz-Date"] = date_time
  canonical_params["X-Amz-Expires"] = expiration.to_s
  canonical_params["X-Amz-SignedHeaders"] = "host"
  canonical_params["X-Amz-Security-Token"] = s3_config.security_token if s3_config.security_token
  # Sorting is required to generate proper signature
  canonical_params.sort.to_h.map do |key, value|
    "#{base64_uri_escape(key)}=#{base64_uri_escape(value)}"
  end.join("&")
end