class Amazon::Coral::V2SignatureHelper

Performs AWS V2 signatures on QueryStringMap objects.

Public Class Methods

new(aws_access_key_id, aws_secret_key) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 13
def initialize(aws_access_key_id, aws_secret_key)
  @aws_access_key_id = aws_access_key_id.to_s
  @aws_secret_key = aws_secret_key.to_s
end

Public Instance Methods

add_fields(query_string_map, time) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 62
def add_fields(query_string_map, time)
  query_string_map['AWSAccessKeyId'] = @aws_access_key_id
  query_string_map['SignatureVersion'] = '2'
  query_string_map['SignatureMethod'] = 'HmacSHA256'
  query_string_map['Timestamp'] = time.to_s
end
canonicalize(args) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 28
def canonicalize(args)
  query_string_map = args[:query_string_map]
  uri = args[:uri]
  verb = args[:verb]
  host = args[:host].downcase

  # exclude any existing Signature parameter from the canonical string
  sorted = sort(query_string_map.reject { |k, v| k == 'Signature' })
  
  canonical = "#{verb}\n#{host}\n#{uri}\n"
  isFirst = true

  sorted.each { |v|
    if(isFirst) then
      isFirst = false
    else
      canonical << '&'
    end

    canonical << UrlEncoding.encode(v[0])
    unless(v[1].nil?) then
      canonical << '='
      canonical << UrlEncoding.encode(v[1])
    end
  }

  return canonical
end
compute_signature(canonical) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 57
def compute_signature(canonical)
  digest = OpenSSL::Digest::Digest.new('sha256')
  return Base64.encode64(OpenSSL::HMAC.digest(digest, @aws_secret_key, canonical)).strip
end
sign(args) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 18
def sign(args)
  signT(Time.now.iso8601, args)
end
signT(time, args) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 22
def signT(time, args)
  query_string_map = args[:query_string_map]
  add_fields(query_string_map, time)
  query_string_map['Signature'] = compute_signature(canonicalize(args))
end
sort(hash) click to toggle source
# File lib/amazon/coral/v2signaturehelper.rb, line 69
def sort(hash)
  hash.sort
end