diff --git a/Gemfile b/Gemfile index edeb50958..754b3f945 100644 --- a/Gemfile +++ b/Gemfile @@ -8,5 +8,6 @@ gem 'mime-types', ">= 0" gem 'net-ssh', ">= 0" gem 'nokogiri', ">= 0" gem 'rspec', '>= 0' +gem 'ruby-hmac', '>= 0' gem 'shindo', '>= 0.1.5' gem 'builder', '>= 0' diff --git a/Gemfile.lock b/Gemfile.lock index e9e28a9a8..7c8870e2f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,9 +20,11 @@ specs: version: 1.4.2 - rspec: version: 1.3.0 +- ruby-hmac: + version: 0.4.0 - shindo: version: 0.1.5 -hash: 58a08d793d993ef27b7140767d8a94aa21a49a13 +hash: 12012795f07111bf764cef89d9ba91f521c54956 sources: - Rubygems: uri: http://gemcutter.org @@ -35,11 +37,15 @@ dependencies: version: ">= 0" group: - :default + rake: + version: ">= 0" + group: + - :default rspec: version: ">= 0" group: - :default - rake: + ruby-hmac: version: ">= 0" group: - :default @@ -51,14 +57,14 @@ dependencies: version: ">= 0" group: - :default - json: - version: ">= 0" - group: - - :default excon: version: ">= 0.0.26" group: - :default + json: + version: ">= 0" + group: + - :default builder: version: ">= 0" group: diff --git a/fog.gemspec b/fog.gemspec index df5061a6b..2aa2c0f3b 100644 --- a/fog.gemspec +++ b/fog.gemspec @@ -48,6 +48,7 @@ Gem::Specification.new do |s| s.add_dependency('mime-types') s.add_dependency('net-ssh') s.add_dependency('nokogiri') + s.add_dependency('ruby-hmac') ## List your development dependencies here. Development dependencies are ## those that are only needed during development diff --git a/lib/fog/hmac.rb b/lib/fog/hmac.rb index fc77b2ac1..8051947f1 100644 --- a/lib/fog/hmac.rb +++ b/lib/fog/hmac.rb @@ -25,9 +25,22 @@ module Fog end def setup_sha256 - @digest = OpenSSL::Digest::Digest.new('sha256') - @signer = lambda do |data| - OpenSSL::HMAC.digest(@digest, @key, data) + begin + @digest = OpenSSL::Digest::Digest.new('sha256') + @signer = lambda do |data| + OpenSSL::HMAC.digest(@digest, @key, data) + end + rescue RuntimeError => error + unless error.message == 'Unsupported digest algorithm (sha256).' + raise error + else + require 'hmac-sha2' + @hmac = ::HMAC::SHA256.new(@key) + @signer = lambda do |data| + @hmac.update(data) + @hmac.digest + end + end end end