Class: S3::Signature

Inherits:
Object
  • Object
show all
Defined in:
lib/s3/signature.rb

Class Method Summary collapse

Class Method Details

.generate(options) ⇒ Object

Required options: host, request, access_key_id, secret_access_key



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/s3/signature.rb', line 5

def self.generate(options)
  request = options[:request]
  host = options[:host]
  access_key_id = options[:access_key_id]
  secret_access_key = options[:secret_access_key]

  http_verb = request.method
  content_md5 = request["content-md5"] || ""
  content_type = request["content-type"] || ""
  date = request["x-amz-date"].nil? ? request["date"] : ""
  canonicalized_resource = canonicalized_resource(host, request)
  canonicalized_amz_headers = canonicalized_amz_headers(request)

  string_to_sign = ""
  string_to_sign << http_verb
  string_to_sign << "\n"
  string_to_sign << content_md5
  string_to_sign << "\n"
  string_to_sign << content_type
  string_to_sign << "\n"
  string_to_sign << date
  string_to_sign << "\n"
  string_to_sign << canonicalized_amz_headers
  string_to_sign << canonicalized_resource

  digest = OpenSSL::Digest::Digest.new('sha1')
  hmac = OpenSSL::HMAC.digest(digest, secret_access_key, string_to_sign)
  base64 = Base64.encode64(hmac)
  signature = base64.chomp

  "AWS #{access_key_id}:#{signature}"
end