module AWS::Core::Signature::Version3

Public Class Methods

included(base) click to toggle source
# File lib/aws/core/signature/version_3.rb, line 22
def self.included base
  base.send(:include, Signer)
end

Public Instance Methods

add_authorization!(credentials) click to toggle source
# File lib/aws/core/signature/version_3.rb, line 26
def add_authorization! credentials

  headers["x-amz-date"] ||= (headers["date"] ||= Time.now.httpdate)
  headers["host"] ||= host

  headers["x-amz-security-token"] = credentials.session_token if
    credentials.session_token

  # compute the authorization
  headers["x-amzn-authorization"] =
    "AWS3 "+
    "AWSAccessKeyId=#{credentials.access_key_id},"+
    "Algorithm=HmacSHA256,"+
    "SignedHeaders=#{headers_to_sign.join(';')},"+
    "Signature=#{signature(credentials)}"
end

Protected Instance Methods

canonical_headers() click to toggle source
# File lib/aws/core/signature/version_3.rb, line 59
def canonical_headers
  headers_to_sign.map do |name|
    value = headers[name]
    "#{name.downcase.strip}:#{value.strip}\n"
  end.sort.join
end
headers_to_sign() click to toggle source
# File lib/aws/core/signature/version_3.rb, line 66
def headers_to_sign
  headers.keys.select do |header|
      header == "host" ||
      header == "content-encoding" ||
      header =~ /^x-amz/
  end
end
signature(credentials) click to toggle source
# File lib/aws/core/signature/version_3.rb, line 45
def signature credentials
  Signer.sign(credentials.secret_access_key, string_to_sign)
end
string_to_sign() click to toggle source
# File lib/aws/core/signature/version_3.rb, line 49
def string_to_sign
  OpenSSL::Digest::SHA256.digest([
    http_method,
    "/",
    "",
    canonical_headers,
    body
  ].join("\n"))
end