Module: AWS::SigV4
- Defined in:
- lib/aws/sig_v4.rb
Class Method Summary collapse
- .canonical_request(host, payload, time_stamp) ⇒ Object
- .hmac(key, value) ⇒ Object
- .signature(secret, time_stamp, region, host, payload) ⇒ Object
- .string2sign(host, payload, time_stamp) ⇒ Object
Class Method Details
.canonical_request(host, payload, time_stamp) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/aws/sig_v4.rb', line 8 def self.canonical_request(host, payload, time_stamp) headers = { 'Content-Encoding' => 'amz-1.0', 'Host' => host, 'X-Amz-Content-Sha256' => OpenSSL::Digest::SHA256.hexdigest(payload), 'X-Amz-Date' => time_stamp, 'X-Amz-Target' => "com.amazon.paapi5.v1.ProductAdvertisingAPIv1.GetItems", } [ "POST", "/paapi5/getitems", '', headers.keys.sort.map{|k|"#{k.downcase}:#{headers[k]}"}.join("\n") + "\n", headers.keys.sort.map{|k|k.downcase}.join(';'), OpenSSL::Digest::SHA256.hexdigest(payload) ].join("\n") end |
.hmac(key, value) ⇒ Object
41 42 43 |
# File 'lib/aws/sig_v4.rb', line 41 def self.hmac(key, value) OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, value) end |
.signature(secret, time_stamp, region, host, payload) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/aws/sig_v4.rb', line 33 def self.signature(secret, time_stamp, region, host, payload) k_secret = secret k_date = hmac("AWS4" + k_secret, time_stamp[0,8]) k_region = hmac(k_date, region) k_service = hmac(k_region, 'ProductAdvertisingAPI') k_credential = hmac(k_service, "aws4_request") OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), k_credential, string2sign(host, payload, time_stamp)) end |
.string2sign(host, payload, time_stamp) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/aws/sig_v4.rb', line 25 def self.string2sign(host, payload, time_stamp) [ 'AWS4-HMAC-SHA256', time_stamp, "#{time_stamp[0,8]}/us-west-2/ProductAdvertisingAPI/aws4_request", OpenSSL::Digest::SHA256.hexdigest(canonical_request(host, payload, time_stamp)) ].join("\n") end |