in s3_file/libraries/s3_file.rb [17:50]
def self.sign(request, params, region, aws_access_key_id, aws_secret_access_key, token = nil)
url = URI.parse(params[:url])
content = request.body || ""
algorithm = "AWS4-HMAC-SHA256"
service = "s3"
now = Time.now.utc
time = now.strftime("%Y%m%dT%H%M%SZ")
date = now.strftime("%Y%m%d")
body_digest = Digest::SHA256.hexdigest(content)
request["date"] = now
request["host"] = url.host
request["x-amz-date"] = time
request["x-amz-security-token"] = token if token
request["x-amz-content-sha256"] = body_digest
canonical_query_string = url.query || ""
canonical_headers = request.each_header.sort.map { |k, v| "#{k.downcase}:#{v.gsub(/\s+/, ' ').strip}" }.join("\n") + "\n"
signed_headers = request.each_name.map(&:downcase).sort.join(";")
canonical_request = [request.method, url.path, canonical_query_string, canonical_headers, signed_headers, body_digest].join("\n")
scope = format("%s/%s/%s/%s", date, region, service, "aws4_request")
credential = [aws_access_key_id, scope].join("/")
string_to_sign = "#{algorithm}\n#{time}\n#{scope}\n#{Digest::SHA256.hexdigest(canonical_request)}"
signed_hex = sigv4(string_to_sign, aws_secret_access_key, region, date, service)
auth_string = "#{algorithm} Credential=#{credential}, SignedHeaders=#{signed_headers}, Signature=#{signed_hex}"
request["Authorization"] = auth_string
request
end