ruby-hmac-openssl 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Matthew Knopp
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,5 @@
1
+ = ruby-hmac-openssl
2
+
3
+ Experimental ruby-hmac that uses OpenSSL for Digest and HMAC
4
+
5
+ Copyright (c) 2010 Matthew Knopp. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "ruby-hmac-openssl"
8
+ gem.summary = %Q{OpenSSL replacement for Ruby-HMAC}
9
+ gem.description = %Q{OpenSSL replacement for Ruby-HMAC}
10
+ gem.email = "mknopp@yammer-inc.com"
11
+ gem.homepage = "http://github.com/mhat/ruby-hmac-openssl"
12
+ gem.authors = ["Matthew Knopp"]
13
+ gem.add_dependency "openssl", ">= 0"
14
+ gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/test_*.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+ task :test => :check_dependencies
43
+
44
+ task :default => :test
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "ruby-hmac-openssl #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/hmac.rb ADDED
@@ -0,0 +1,62 @@
1
+ module HMAC
2
+ class MD5
3
+ def self.digest(key,text)
4
+ OpenSSL::HMAC.digest('md5', key, text)
5
+ end
6
+
7
+ def self.hexdigest(key,text)
8
+ OpenSSL::HMAC.hexdigest('md5', key, text)
9
+ end
10
+ end
11
+
12
+ class SHA1
13
+ def self.digest(key,text)
14
+ OpenSSL::HMAC.digest('sha1', key, text)
15
+ end
16
+
17
+ def self.hexdigest(key,text)
18
+ OpenSSL::HMAC.hexdigest('sha1', key, text)
19
+ end
20
+ end
21
+
22
+ class SHA256
23
+ def self.digest(key,text)
24
+ OpenSSL::HMAC.digest('sha256', key, text)
25
+ end
26
+
27
+ def self.hexdigest(key,text)
28
+ OpenSSL::HMAC.hexdigest('sha256', key, text)
29
+ end
30
+ end
31
+
32
+ class SHA384
33
+ def self.digest(key,text)
34
+ OpenSSL::HMAC.digest('sha384', key, text)
35
+ end
36
+
37
+ def self.hexdigest(key,text)
38
+ OpenSSL::HMAC.hexdigest('sha384', key, text)
39
+ end
40
+ end
41
+
42
+ class SHA512
43
+ def self.digest(key,text)
44
+ OpenSSL::HMAC.digest('sha512', key, text)
45
+ end
46
+
47
+ def self.hexdigest(key,text)
48
+ OpenSSL::HMAC.hexdigest('sha512', key, text)
49
+ end
50
+ end
51
+
52
+ class RMD160
53
+ def self.digest(key,text)
54
+ OpenSSL::HMAC.digest('rmd160', key, text)
55
+ end
56
+
57
+ def self.hexdigest(key,text)
58
+ OpenSSL::HMAC.hexdigest('rmd160', key, text)
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,65 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ruby-hmac-openssl}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Matthew Knopp"]
12
+ s.date = %q{2010-02-18}
13
+ s.description = %q{OpenSSL replacement for Ruby-HMAC}
14
+ s.email = %q{mknopp@yammer-inc.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "lib/hmac.rb",
27
+ "ruby-hmac-openssl.gemspec",
28
+ "test/bench/data.yml",
29
+ "test/bench/openssl-hmac.rb",
30
+ "test/bench/report.txt",
31
+ "test/bench/ruby-hmac-openssl.rb",
32
+ "test/bench/ruby-hmac.rb",
33
+ "test/helper.rb",
34
+ "test/test_ruby-hmac-openssl.rb"
35
+ ]
36
+ s.homepage = %q{http://github.com/mhat/ruby-hmac-openssl}
37
+ s.rdoc_options = ["--charset=UTF-8"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = %q{1.3.5}
40
+ s.summary = %q{OpenSSL replacement for Ruby-HMAC}
41
+ s.test_files = [
42
+ "test/bench/openssl-hmac.rb",
43
+ "test/bench/ruby-hmac-openssl.rb",
44
+ "test/bench/ruby-hmac.rb",
45
+ "test/helper.rb",
46
+ "test/test_ruby-hmac-openssl.rb"
47
+ ]
48
+
49
+ if s.respond_to? :specification_version then
50
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
+ s.specification_version = 3
52
+
53
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
54
+ s.add_runtime_dependency(%q<openssl>, [">= 0"])
55
+ s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
56
+ else
57
+ s.add_dependency(%q<openssl>, [">= 0"])
58
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<openssl>, [">= 0"])
62
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
63
+ end
64
+ end
65
+
@@ -0,0 +1,8 @@
1
+ ---
2
+ :medium: |-
3
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque mattis mollis turpis vel dignissim. Nam nunc tellus, suscipit a auctor quis, aliquam sed leo. Nunc quam diam, interdum vitae sodales at, convallis vitae elit. Duis id odio tortor. Etiam sollicitudin placerat metus nec dapibus. Suspendisse lectus erat, cursus pharetra sodales et, volutpat ac tellus. Vivamus ullamcorper dolor at mi convallis tempor. Praesent adipiscing libero nec lorem lobortis pellentesque. Nam nibh magna, mollis nec placerat scelerisque, pretium a erat. Morbi porta porttitor purus, dapibus tincidunt ante ultrices sed. Fusce eu consequat augue. Curabitur odio turpis, posuere id rutrum viverra, tincidunt sit amet ante. Integer eu nulla a mi feugiat posuere. Vivamus lacinia lacus eget lacus luctus rutrum in id ligula. Etiam pharetra posuere odio cursus convallis. Praesent iacul is placerat blandit. Vestibulum nec tellus purus. Cras hendrerit mollis lectus, vel venenatis felis pretium ut. Quisque congue porta arcu, in ornare magna dignissim eu. Pellentesque metus lorem, rutrum eu sollicitudin quis, feugiat quis nisl. Ut vulputate turpis sit amet mauris aliquet imperdiet. Pellentesque commodo, elit vel rutrum dignissim, tellus libero porttitor est, vel sodales arcu justo eu libero. Mauris quis nunc urna, non faucibus nunc. Nam porta volutpat felis ac euismod. Donec ultricies elementum lectus nec vehicula. Etiam nisi nibh, fermentum sit amet sagittis vitae, varius eget enim. Duis sit amet mi ac ipsum accumsan blandit. Nullam at sem elit. Aliquam ac varius dui. Aliquam erat volutpat. Aenean vel massa nec lacus dignissim dignissim.
4
+ :large: |-
5
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum mattis nisl et est facilisis a volutpat lectus dapibus. Nulla elit libero, consequat id pharetra vitae, rhoncus in lorem. Aenean in felis tortor, eget sag
6
+ ittis eros. Aliquam pellentesque iaculis augue, vel porttitor sem consequat non. Etiam varius accumsan lacus, sit amet posuere ligula consectetur eget. Nam volutpat diam a ante dignissim sit amet tristique sem bibendum. Morbi felis nisi, feugiat et consectetur at, consectetur non orci. Integer arcu neque, ultrices eu ultricies nec, fermentum sed metus. Nulla eget facilisis turpis. Integer varius, ligula in tristique suscipit, tellus tortor blandit velit, eu elementum justo ipsum id odio. Aliquam quis sapien sed dolor aliquet venenatis. Sed condimentum rhoncus orci quis posuere. Duis pretium lobortis fermentum. Aenean ultricies massa at nisi sagittis facilisis. Pellentesque euismod tincidunt massa ut scelerisque. Fusce in mi leo. Aliquam consectetur pellentesque sem eget convallis. Praesent bibendum est a dolor commodo ultricies. Nam odio mag na, fermentum ac rutrum nec, laoreet non diam. Quisque ultricies elit in nibh pretium mollis dapibus nisi pellentesque. Suspendisse vestibulum leo sed risus hendrerit fringilla. Pellentesque eget arcu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris sed odio nulla. Nulla sit amet tellus at purus euismod accumsan at eget dui. Nullam pulvinar eleifend nisi nec consectetur. Fusce tempus varius lacinia. Suspendisse potenti. Curabitur tristique quam id sapien consectetur vulputate. Nulla facilisi. Ut iaculis, felis eget consequat euismod, justo metus semper neque, ut egestas mauris erat a nibh. Nulla tempus erat commodo lacus aliquet condimentum. Mauris arcu purus, posuere id pretium id, laoreet et orci. Duis qui s ipsum nunc, at placerat libero. Aliquam vitae lorem ac tellus fermentum suscipit. Pellentesque accumsan tincidunt euismod. Vestibulum vestibulum ligula ut ligula fermentum vitae interdum eros feugiat. Fusce quam lorem, volutpat a imperdiet sit amet, blandit mattis mauris. Nullam ut eros tellus. Duis luctus suscipit ipsum, id tincidunt lorem adipiscing eu. Vivamus enim felis, convallis ut pulvinar mattis, auctor vel quam. Integer rhoncus sodales est, sed mollis magna iaculis at. Nunc interdum malesuada pharetra. Nulla facilisi. In enim urna, imperdiet sit amet elementum at, tempus ac odio. Aenean non sem sed urna dapibus varius id sodales urna. Mauris dignissim leo at purus tristique ultricies. Morbi fermentum sollicitudin mi, sit amet egestas quam egestas non. Fusce nibh lorem, tristique quis bibendum nec, suscipit eu mi. Proin nec malesuada metus. Aenean ac quam quam. Integer interdum placerat enim, sit amet porttitor lectus convallis non. Cras tristique mollis nisi eget tincidunt. Etiam el eifend rhoncus ultrices. Curabitur convallis, nunc ac sollicitudin vestibulum, arcu ante viverra augue, ut aliquam velit nunc at velit. Phasellus volutpat nibh ultrices sem molestie rhoncus. Etiam lacinia odio id risus scelerisque bibendum. Suspendisse imperdiet scelerisque arcu quis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc non nisl id lacus sollicitudin placerat eu et ante. Pellentesque pretium aliquam odio, quis consequat risus laoreet sed. Suspendisse laoreet commodo magna, vel fermentum turpis posuere blandit. Nunc pulvinar condimentum libero sed ornare. Suspendisse vel risus sapien, et varius erat. Quisque vel purus et orci pulvinar feugiat. Nunc tincidunt porta nisi, id scelerisque felis aliquam et. Fusce at lacus nec eros molestie malesuada ut non erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean id sem lacus. Integer nec convallis odio. Cras tempus porttitor turpis, a condimentum libero ornare in. Proin ac tellus mi, non venenatis justo. Pellentesque eget mauris diam, ac viverra justo. Morbi sapien mauris, venenatis vitae dapibus nec, iaculis id justo. Curabitur id volutpat libero. Vestibulum aliquam hendrerit tortor, vel tincidunt ligula condimentum et. In ipsum diam, venenatis at fringi lla non, facilisis et tortor. Proin enim dui, dictum eleifend malesuada id, rutrum id purus. Vestibulum tincidunt turpis non lorem ultrices facilisis. Proin ac erat nisi, quis gravida augue. Vivamus eleifend fringilla est, tempus vestibulum lectus luctus imperdiet. Cras malesuada venenatis nisi, id tristique ante posuere ac. Nullam a libero tellus. Suspendisse potenti. Vestibulum ante ipsum primis in faucibus orci luctus e t ultrices posuere cubilia Curae; Ut condimentum imperdiet elit sed ultrices. Phasellus vestibulum fermentum tortor vitae gravida. Nunc euismod congue lacinia. Donec libero diam, ullamcorper non tristique non, iaculis nec nisl. Sed sod ales auctor tincidunt. Quisque vehicula congue sem, ac accumsan leo rhoncus quis. Nulla dictum orci vel lorem iaculis pharetra id et erat. Aenean ac justo ut tortor ullamcorper ultrices. Ut sed magna vel turpis pretium venenatis et a r isus. Curabitur quis tempus magna. Vestibulum tempus, leo quis bibendum scelerisque, turpis nibh sollicitudin est, in aliquam ante tellus nec metus. Fusce eu massa fermentum mi egestas vestibulum in scelerisque turpis. Ut nec velit nul la. Nullam non dolor molestie magna convallis mollis non eget ipsum. Nunc suscipit diam fringilla tortor tempus facilisis. In a lorem nisi, sit amet pulvinar dui. Etiam aliquam purus in neque semper blandit. Donec nec nisl vel magna viverr a vehicula vel at sapien. Donec sollicitudin consequat lorem non commodo. Mauris tellus libero, ultrices et feugiat sit amet, pharetra eu ligula. Nullam pellentesque congue velit, sit amet porttitor arcu mollis auctor. Aenean vel nulla id mauris gravida aliquam sed sed ligula. Nam urna dolor, hendrerit at congue dictum, vulputate auctor metus. Aenean eleifend diam vel neque faucibus ac consequat odio sollicitudin. Aliquam et lobortis sem. Proin lorem magna, bibendum sit amet rhoncus eu, condimentum ac ligula. Morbi porta facilisis mollis. Ut erat nisi, lobortis quis varius eget, varius nec mi. Proin tempor metus eget dui venenatis sollicitudin. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer nec nibh ante. Duis euismod facilisis libero vel pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean in purus ac enim auctor pharetra. Suspendisse potenti. Aliquam hendrerit egestas enim ac ultricies. Suspendisse rhoncus est vitae justo dictum varius. Vestibulum et ullamcorper magna. Proin pellentesque arcu sed tortor semper posuere. Quisque adipiscing elit a ante lacinia porta. Duis a dolor sit amet mauris hendrerit lobortis. Suspendisse potenti. Mauris vel odio et turpis porttitor scelerisque nec in velit.
7
+ :small: |- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque mattis mollis turpis vel dignissim. Nam nunc tellus, suscipit a auctor quis, aliquam sed leo. Nunc quam diam, interdum vitae sodales at, convallis vitae elit . Duis id odio tortor. Etiam sollicitudin placerat metus nec dapibus. Suspendisse lectus erat, cursus pharetra sodales et, volutpat ac tellus. Vivamus ullamcorper dolor at mi convallis tempor. Praesent adipiscing libero nec lorem lobortis pellentesque. Nam nibh magna, mollis nec placerat scelerisque, pretium a erat. Morbi porta porttitor purus, dapibus tincidunt ante ultrices sed. Fusce eu consequat augue.
8
+ :secret: some secret key yup, it's rad
@@ -0,0 +1,24 @@
1
+ require 'benchmark'
2
+ require 'openssl'
3
+ require 'yaml'
4
+
5
+ iter = ARGV[0] ? ARGV[0].to_i : 100000
6
+ puts "Testing Pure OpenSSL HMAC"
7
+ puts "iterating #{iter} times"
8
+ puts "-------------------------"
9
+
10
+ data = YAML.load_file( File.join(File.dirname(__FILE__), 'data.yml') )
11
+ data[:small] = data[:small ] * 2
12
+ data[:medium] = data[:medium] * 10
13
+ data[:large] = data[:large ] * 10
14
+
15
+ puts "S size = #{data[:small ].size}"
16
+ puts "M size = #{data[:medium].size}"
17
+ puts "L size = #{data[:large ].size}"
18
+
19
+ Benchmark.bm do |x|
20
+ x.report("S") { iter.times { |i| OpenSSL::HMAC.digest('sha1', data[:secret], data[:small ]) } }
21
+ x.report("M") { iter.times { |i| OpenSSL::HMAC.digest('sha1', data[:secret], data[:medium]) } }
22
+ x.report("L") { iter.times { |i| OpenSSL::HMAC.digest('sha1', data[:secret], data[:large ]) } }
23
+ end
24
+
@@ -0,0 +1,35 @@
1
+ Testing Ruby HMAC
2
+ iterating 50000 times
3
+ -----------------------
4
+ S size = 1264
5
+ M size = 16320
6
+ L size = 68670
7
+ user system total real
8
+ S 10.880000 0.730000 11.610000 ( 12.079926)
9
+ M 13.180000 0.720000 13.900000 ( 13.987528)
10
+ L 21.080000 0.720000 21.800000 ( 21.875296)
11
+
12
+
13
+ Testing Ruby HMAC OpenSSL Wrapper
14
+ iterating 50000 times
15
+ ---------------------------------
16
+ S size = 1264
17
+ M size = 16320
18
+ L size = 68670
19
+ user system total real
20
+ S 0.410000 0.010000 0.420000 ( 0.500047)
21
+ M 2.740000 0.010000 2.750000 ( 3.090207)
22
+ L 10.760000 0.050000 10.810000 ( 13.941642)
23
+
24
+
25
+ Testing Pure OpenSSL HMAC
26
+ iterating 50000 times
27
+ -------------------------
28
+ S size = 1264
29
+ M size = 16320
30
+ L size = 68670
31
+ user system total real
32
+ S 0.390000 0.000000 0.390000 ( 0.389332)
33
+ M 2.690000 0.010000 2.700000 ( 2.714435)
34
+ L 10.690000 0.010000 10.700000 ( 10.740807)
35
+
@@ -0,0 +1,26 @@
1
+ require 'benchmark'
2
+ require 'openssl'
3
+ require 'hmac'
4
+ require 'yaml'
5
+
6
+ iter = ARGV[0] ? ARGV[0].to_i : 100000
7
+ puts "Testing Ruby HMAC OpenSSL Wrapper"
8
+ puts "iterating #{iter} times"
9
+ puts "---------------------------------"
10
+
11
+ data = YAML.load_file( File.join(File.dirname(__FILE__), 'data.yml') )
12
+ data[:small] = data[:small ] * 2
13
+ data[:medium] = data[:medium] * 10
14
+ data[:large] = data[:large ] * 10
15
+
16
+ puts "S size = #{data[:small ].size}"
17
+ puts "M size = #{data[:medium].size}"
18
+ puts "L size = #{data[:large ].size}"
19
+
20
+
21
+ Benchmark.bm do |x|
22
+ x.report("S") { iter.times { |i| HMAC::SHA1.digest(data[:secret], data[:small ]) } }
23
+ x.report("M") { iter.times { |i| HMAC::SHA1.digest(data[:secret], data[:medium]) } }
24
+ x.report("L") { iter.times { |i| HMAC::SHA1.digest(data[:secret], data[:large ]) } }
25
+ end
26
+
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'benchmark'
3
+ require 'hmac'
4
+ require 'hmac-sha1'
5
+ require 'yaml'
6
+
7
+ iter = ARGV[0] ? ARGV[0].to_i : 100000
8
+ puts "Testing Ruby HMAC"
9
+ puts "iterating #{iter} times"
10
+ puts "-----------------------"
11
+
12
+ data = YAML.load_file( File.join(File.dirname(__FILE__), 'data.yml') )
13
+ data[:small] = data[:small ] * 2
14
+ data[:medium] = data[:medium] * 10
15
+ data[:large] = data[:large ] * 10
16
+
17
+ puts "S size = #{data[:small ].size}"
18
+ puts "M size = #{data[:medium].size}"
19
+ puts "L size = #{data[:large ].size}"
20
+
21
+ Benchmark.bm do |x|
22
+ x.report("S") { iter.times { |i| HMAC::SHA1.digest( data[:secret], data[:small ]) } }
23
+ x.report("M") { iter.times { |i| HMAC::SHA1.digest( data[:secret], data[:medium]) } }
24
+ x.report("L") { iter.times { |i| HMAC::SHA1.digest( data[:secret], data[:large ]) } }
25
+ end
26
+
data/test/helper.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'openssl'
5
+
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+ require 'hmac'
9
+
10
+ class Test::Unit::TestCase
11
+ end
@@ -0,0 +1,41 @@
1
+ require 'helper'
2
+
3
+ class TestRubyHmacOpenssl < Test::Unit::TestCase
4
+
5
+ should "HMAC-MD5" do
6
+ # irb(main):006:0* OpenSSL::HMAC.hexdigest('md5', "hello", "nurse")
7
+ # => "a87fe83548f7458811d3394360fc9b42"
8
+ assert HMAC::MD5.hexdigest("hello", "nurse") == "a87fe83548f7458811d3394360fc9b42"
9
+ end
10
+
11
+ should "HMAC-SHA1" do
12
+ # irb(main):003:0> OpenSSL::HMAC.hexdigest('sha1', "hello", "nurse")
13
+ # => "97ee34f6f9a49602e253090315673bc1228de343"
14
+ assert HMAC::SHA1.hexdigest("hello", "nurse") == "97ee34f6f9a49602e253090315673bc1228de343"
15
+ end
16
+
17
+ should "HMAC-SHA256" do
18
+ #irb(main):007:0> OpenSSL::HMAC.hexdigest('sha256', "hello", "nurse")
19
+ #=> "ba71b8a76ecc0a68d12ca36c58b4719f06b1db77e5766b8766a9d1c444400a28"
20
+ assert HMAC::SHA256.hexdigest("hello", "nurse") == "ba71b8a76ecc0a68d12ca36c58b4719f06b1db77e5766b8766a9d1c444400a28"
21
+ end
22
+
23
+ should "HMAC-SHA384" do
24
+ #irb(main):008:0> OpenSSL::HMAC.hexdigest('sha384', "hello", "nurse")
25
+ #=> "0e2fc9cfac121fa212174e38c9993f6b8ee07bc8efc9f00f93d964b86a71ae6391bcf42ca152d78f46674a3f7ff7e6cf"
26
+ assert HMAC::SHA384.hexdigest("hello", "nurse") == "0e2fc9cfac121fa212174e38c9993f6b8ee07bc8efc9f00f93d964b86a71ae6391bcf42ca152d78f46674a3f7ff7e6cf"
27
+ end
28
+
29
+ should "HMAC-SHA512" do
30
+ # irb(main):008:0> OpenSSL::HMAC.hexdigest('sha384', "hello", "nurse")
31
+ # => "ba592455e8bbf8c596bf488d85adb3537e9d43d0815cd067441dad252e5b682d43861798fce6e75a20ff6869cc46400ef3d263407e408aba223348fc71dce3a1"
32
+ assert HMAC::SHA512.hexdigest("hello", "nurse") == "ba592455e8bbf8c596bf488d85adb3537e9d43d0815cd067441dad252e5b682d43861798fce6e75a20ff6869cc46400ef3d263407e408aba223348fc71dce3a1"
33
+ end
34
+
35
+ should "HMAC-RMD160" do
36
+ # irb(main):010:0> OpenSSL::HMAC.hexdigest('RMD160', "hello", "nurse")
37
+ # => "7838be414b8850a18251c60d8d19d5ca962a40fa"
38
+ assert HMAC::RMD160.hexdigest("hello", "nurse") == "7838be414b8850a18251c60d8d19d5ca962a40fa"
39
+ end
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-hmac-openssl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Matthew Knopp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-02-18 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: openssl
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: thoughtbot-shoulda
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: OpenSSL replacement for Ruby-HMAC
36
+ email: mknopp@yammer-inc.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.rdoc
44
+ files:
45
+ - .document
46
+ - .gitignore
47
+ - LICENSE
48
+ - README.rdoc
49
+ - Rakefile
50
+ - VERSION
51
+ - lib/hmac.rb
52
+ - ruby-hmac-openssl.gemspec
53
+ - test/bench/data.yml
54
+ - test/bench/openssl-hmac.rb
55
+ - test/bench/report.txt
56
+ - test/bench/ruby-hmac-openssl.rb
57
+ - test/bench/ruby-hmac.rb
58
+ - test/helper.rb
59
+ - test/test_ruby-hmac-openssl.rb
60
+ has_rdoc: true
61
+ homepage: http://github.com/mhat/ruby-hmac-openssl
62
+ licenses: []
63
+
64
+ post_install_message:
65
+ rdoc_options:
66
+ - --charset=UTF-8
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ version:
81
+ requirements: []
82
+
83
+ rubyforge_project:
84
+ rubygems_version: 1.3.5
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: OpenSSL replacement for Ruby-HMAC
88
+ test_files:
89
+ - test/bench/openssl-hmac.rb
90
+ - test/bench/ruby-hmac-openssl.rb
91
+ - test/bench/ruby-hmac.rb
92
+ - test/helper.rb
93
+ - test/test_ruby-hmac-openssl.rb