module AWS::Core::Signature::Version2

def add_authorization! credentials

def add_authorization! credentials
  add_param('AWSAccessKeyId', credentials.access_key_id)
  if token = credentials.session_token
    add_param("SecurityToken", token)
  end
  add_param('SignatureVersion', '2')
  add_param('SignatureMethod', 'HmacSHA256')
  add_param('Signature', signature(credentials))
  self.body = url_encoded_params
end

def signature credentials

def signature credentials
  Signer.sign(credentials.secret_access_key, string_to_sign)
end

def string_to_sign

def string_to_sign
  host =
    case port
    when 80, 443 then self.host
    else "#{self.host}:#{port}"
    end
  [
    http_method,
    host.to_s.downcase,
    path,
    params.sort.collect { |p| p.encoded }.join('&'),
  ].join("\n")
end