action_name()
click to toggle source
def action_name
http_method.to_s.upcase
end
authorization(signer, datetime)
click to toggle source
def authorization signer, datetime
parts = []
parts << "AWS4-HMAC-SHA256 Credential=#{access_key_id}/#{credential_string(datetime)}"
parts << "SignedHeaders=#{signed_headers}"
parts << "Signature=#{hex16(signature(signer, datetime))}"
parts.join(', ')
end
canonical_querystring()
click to toggle source
def canonical_querystring
http_method.to_s.upcase == 'GET' ? url_encoded_params : ''
end
canonical_request()
click to toggle source
def canonical_request
parts = []
parts << action_name
parts << canonical_uri
parts << canonical_querystring
parts << canonical_headers + "\n"
parts << signed_headers
parts << hex16(hash(payload))
parts.join("\n")
end
canonical_uri()
click to toggle source
def canonical_uri
path
end
credential_string(datetime)
click to toggle source
def credential_string datetime
parts = []
parts << datetime[0,8]
parts << region
parts << service
parts << 'aws4_request'
parts.join("/")
end
hash(string)
click to toggle source
def hash string
Digest::SHA256.digest(string)
end
hex16(string)
click to toggle source
def hex16 string
string.unpack('H*').first
end
hmac(key, string)
click to toggle source
def hmac key, string
OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, string)
end
payload()
click to toggle source
def payload
body || ''
end
service()
click to toggle source
def service
raise NotImplementedError
end
signature(signer, datetime)
click to toggle source
def signature signer, datetime
k_secret = signer.secret_access_key
k_date = hmac("AWS4" + k_secret, datetime[0,8])
k_region = hmac(k_date, region)
k_service = hmac(k_region, service)
k_credentials = hmac(k_service, 'aws4_request')
hmac(k_credentials, string_to_sign(datetime))
end
string_to_sign(datetime)
click to toggle source
def string_to_sign datetime
parts = []
parts << 'AWS4-HMAC-SHA256'
parts << datetime
parts << credential_string(datetime)
parts << hex16(hash(canonical_request))
parts.join("\n")
end