hashit 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9b100c155f7b4135120494f95793eef768cbb07
4
- data.tar.gz: d9a7206146c820db2683967a1777377a21c419c0
3
+ metadata.gz: beffcc18c2dc50482e9b341149136dc4f0240365
4
+ data.tar.gz: ca9eedf8bef02179ea1750fe11576598bcca7940
5
5
  SHA512:
6
- metadata.gz: 759b516205a9504eb81202b722183e8eec19fdc990b58e0dc92ee3d809b34265e2b2fecaa5304919cb449237de6598727d6d54bc4ff6877e3b082f2281e153bd
7
- data.tar.gz: 82a5f38d310917f1de26cf009c3ab2ac8a71936d41961c1e33b93cd82cac30d8291e18eb0dc24d83893f9bf155e8d61409afba87dec1e327bd9fd4181eb2ec05
6
+ metadata.gz: 4a6bb0d4aef6dfa2413d6ca8f9f24ba5833b513282f3a37acea2def47cc8e22c8699359093252b51c5adab718852efe62e6f94656f328feec1d07279ecef8462
7
+ data.tar.gz: 5a36dd04fc4e313b0a06f4717976887afae92a10a467b391400e94eb6c942d0a41d06d653aec66a22a785a8070aafb2c6c60815c60def10a37ab15a8270a906c
@@ -1,6 +1,6 @@
1
1
  require "hashit/digests"
2
- require "hashit/verifier"
3
2
 
4
3
  module Hashit
5
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
+ extend Digests
6
6
  end
@@ -3,20 +3,22 @@ require 'date'
3
3
  require 'hashit/prepare'
4
4
 
5
5
  module Hashit
6
- class << self
7
- %w[md2 md4 md5 sha sha1 sha224 sha256 sha384 sha512].each do |type|
6
+ module Digests
7
+ HASHING_DIGESTS = %w[md2 md4 md5 sha sha1 sha224 sha256 sha384 sha512]
8
+
9
+ HASHING_DIGESTS.each.with_index do |type, i|
8
10
  define_method(type.to_sym) do |key, text|
9
- "#{type}|" + generate_hash(OpenSSL::Digest.const_get(type.upcase.to_sym).new, key, text)
11
+ "r#{i}|" + generate_hash(OpenSSL::Digest.const_get(type.upcase.to_sym).new, key, text)
10
12
  end
11
13
 
12
14
  define_method("timed_#{type}".to_sym) do |key, text|
13
15
  key = ([] << key).flatten << current_time
14
- "timed_#{type}|" + generate_hash(OpenSSL::Digest.const_get(type.upcase.to_sym).new, key, text)
16
+ "t#{i}|" + generate_hash(OpenSSL::Digest.const_get(type.upcase.to_sym).new, key, text)
15
17
  end
16
18
 
17
19
  define_method("previous_#{type}".to_sym) do |key, text|
18
20
  key = ([] << key).flatten << last_time
19
- "timed_#{type}|" + generate_hash(OpenSSL::Digest.const_get(type.upcase.to_sym).new, key, text)
21
+ "t#{i}|" + generate_hash(OpenSSL::Digest.const_get(type.upcase.to_sym).new, key, text)
20
22
  end
21
23
  end
22
24
 
@@ -31,11 +33,11 @@ module Hashit
31
33
  end
32
34
 
33
35
  def generate_hash digest, key, text
34
- text = Hashit.prepare text
36
+ text = prepare text
35
37
 
36
38
  if key.is_a? Array
37
39
  key.reduce(text) do |text, k|
38
- k = Hashit.prepare k
40
+ k = prepare k
39
41
  OpenSSL::HMAC.hexdigest(digest, k, text)
40
42
  end
41
43
  else
@@ -43,5 +45,51 @@ module Hashit
43
45
  OpenSSL::HMAC.hexdigest(digest, key, text)
44
46
  end
45
47
  end
48
+
49
+ def prepare obj
50
+ return obj if obj.is_a? String
51
+
52
+ if obj.is_a? Array
53
+ obj = prepare_array obj
54
+ elsif obj.nil?
55
+ raise ArgumentError, "Nil passed in as a text parameter"
56
+ elsif obj.respond_to? :to_s
57
+ obj = obj.to_s
58
+ else
59
+ raise ArgumentError, "Parameter #{obj} cannot be converted to string"
60
+ end
61
+
62
+ obj
63
+ end
64
+
65
+ def prepare_array arr
66
+ arr.reduce("") do |str, el|
67
+ str += prepare el
68
+ end
69
+ end
70
+
71
+ def matches? hash, key, text
72
+ type = get_hash_type hash.split('|').first
73
+ raise ArgumentError, "invalid hash" if type.nil? || !Hashit.respond_to?(type)
74
+ new_hash = Hashit.send type, key, text
75
+ new_hash == hash
76
+ end
77
+
78
+ def did_match? hash, key, text
79
+ type = get_hash_type hash.split('|').first
80
+ fn = type.to_s.sub("timed", "previous").to_sym
81
+ raise ArgumentError, "invalid hash" if type.nil? || !Hashit.respond_to?(fn)
82
+ new_hash = Hashit.send fn, key, text
83
+ new_hash == hash
84
+ end
85
+
86
+ private
87
+ def get_hash_type segment
88
+ i = segment[1..-1].to_i
89
+ return nil if segment[1..-1] != i.to_s
90
+ type = HASHING_DIGESTS[i]
91
+ type = "timed_#{type}" if segment[0] == 't'
92
+ type.to_sym
93
+ end
46
94
  end
47
95
  end
@@ -10,7 +10,7 @@ describe "Hashit Digests" do
10
10
  it 'generates a hash from a key and text' do
11
11
  key = "Key"
12
12
  text = "Some Text"
13
- hash = "sha256|cd904d6df2122eddf1d6df1240730d29056c171539f171a57ada2a16f5a54bf0"
13
+ hash = "r6|cd904d6df2122eddf1d6df1240730d29056c171539f171a57ada2a16f5a54bf0"
14
14
 
15
15
  expect(Hashit.sha256 key, text).to be == hash
16
16
  end
@@ -18,7 +18,7 @@ describe "Hashit Digests" do
18
18
  it 'generates a hash from an array of strings' do
19
19
  key = "key"
20
20
  text = %w[nitzan gabriel]
21
- hash = "sha256|08665f6532b0b28c1298955e2db2558a7ef06624708ac6cba6e73e88e0351b7d"
21
+ hash = "r6|08665f6532b0b28c1298955e2db2558a7ef06624708ac6cba6e73e88e0351b7d"
22
22
 
23
23
  expect(Hashit.sha256 key, text).to be == hash
24
24
  end
@@ -26,7 +26,7 @@ describe "Hashit Digests" do
26
26
  it 'generates a recursive hash from an array of keys' do
27
27
  key = %w[ron vivi]
28
28
  text = "text"
29
- hash = "sha256|54b11c895b426b527bc8c7029b3064d9b48dace3359b143268dac21d472def9c"
29
+ hash = "r6|54b11c895b426b527bc8c7029b3064d9b48dace3359b143268dac21d472def9c"
30
30
 
31
31
  expect(Hashit.sha256 key, text).to be == hash
32
32
  end
@@ -34,7 +34,7 @@ describe "Hashit Digests" do
34
34
  it 'converts parameters to strings' do
35
35
  key = 32
36
36
  text = 45
37
- hash="sha256|ef4f59fe5e91a86be6720d34a0b3413b1119638e271bcc4d2c24dbb7ef6a4bba"
37
+ hash="r6|ef4f59fe5e91a86be6720d34a0b3413b1119638e271bcc4d2c24dbb7ef6a4bba"
38
38
 
39
39
  expect(Hashit.sha256 key, text).to be == hash
40
40
  end
@@ -49,17 +49,19 @@ describe "Hashit Digests" do
49
49
  it 'generates a timed hash' do
50
50
  key = "key"
51
51
  text = "some text"
52
- hash = "timed_#{Hashit.sha256([key, Hashit.current_time], text)}"
52
+ allow(Hashit).to receive(:current_time).and_return(1408350600)
53
+ hash = Hashit.sha256([key, 1408350600], text)
53
54
 
54
- expect(Hashit.timed_sha256 key, text).to be == hash
55
+ expect(Hashit.timed_sha256(key, text)[1..-1]).to be == hash[1..-1]
55
56
  end
56
57
 
57
58
  it 'generates a previous timed hash' do
58
59
  key = "key"
59
60
  text = "some text"
60
- hash = "timed_#{Hashit.sha256([key, Hashit.last_time], text)}"
61
+ allow(Hashit).to receive(:current_time).and_return(1408350600)
62
+ hash = Hashit.sha256([key, 1408348800], text)
61
63
 
62
- expect(Hashit.previous_sha256 key, text).to be == hash
64
+ expect(Hashit.previous_sha256(key, text)[1..-1]).to be == hash[1..-1]
63
65
  end
64
66
 
65
67
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "Hashit Verifier" do
4
4
 
5
5
  it 'can verify an old hash' do
6
- hash = "sha256|cd904d6df2122eddf1d6df1240730d29056c171539f171a57ada2a16f5a54bf0"
6
+ hash = "r6|cd904d6df2122eddf1d6df1240730d29056c171539f171a57ada2a16f5a54bf0"
7
7
  key = "Key"
8
8
  text = "Some Text"
9
9
 
@@ -21,6 +21,7 @@ describe "Hashit Verifier" do
21
21
  it 'matches timed hashes' do
22
22
  key = "Key"
23
23
  text = "Some Text"
24
+ allow(Hashit).to receive(:current_time).and_return(1408350600)
24
25
  hash = Hashit.timed_sha256 key, text
25
26
 
26
27
  expect(Hashit.matches? hash, key, text).to be true
@@ -29,6 +30,7 @@ describe "Hashit Verifier" do
29
30
  it 'matches previous hashes' do
30
31
  key = "Key"
31
32
  text = "Some Text"
33
+ allow(Hashit).to receive(:current_time).and_return(1408350600)
32
34
  hash = Hashit.previous_sha256 key, text
33
35
 
34
36
  expect(Hashit.matches? hash, key, text).to be false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nitzan Blankleder
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-17 00:00:00.000000000 Z
12
+ date: 2014-08-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -70,8 +70,6 @@ files:
70
70
  - hashit.gemspec
71
71
  - lib/hashit.rb
72
72
  - lib/hashit/digests.rb
73
- - lib/hashit/prepare.rb
74
- - lib/hashit/verifier.rb
75
73
  - spec/digests_spec.rb
76
74
  - spec/hashit_spec.rb
77
75
  - spec/spec_helper.rb
@@ -1,25 +0,0 @@
1
- module Hashit
2
- class << self
3
- def prepare obj
4
- return obj if obj.is_a? String
5
-
6
- if obj.is_a? Array
7
- obj = prepare_array obj
8
- elsif obj.nil?
9
- raise ArgumentError, "Nil passed in as a text parameter"
10
- elsif obj.respond_to? :to_s
11
- obj = obj.to_s
12
- else
13
- raise ArgumentError, "Parameter #{obj} cannot be converted to string"
14
- end
15
-
16
- obj
17
- end
18
-
19
- def prepare_array arr
20
- arr.reduce("") do |str, el|
21
- str += prepare el
22
- end
23
- end
24
- end
25
- end
@@ -1,19 +0,0 @@
1
- require 'hashit/digests'
2
-
3
- module Hashit
4
- class << self
5
- def matches? hash, key, text
6
- type = hash.split('|').first
7
- raise ArgumentError, "invalid hash" unless Hashit.respond_to?(type.to_sym)
8
- new_hash = Hashit.send type.to_sym, key, text
9
- new_hash == hash
10
- end
11
-
12
- def did_match? hash, key, text
13
- type = hash.split('|').first.sub("timed", "previous")
14
- raise ArgumentError, "invalid hash" unless Hashit.respond_to?(type.to_sym)
15
- new_hash = Hashit.send type.to_sym, key, text
16
- new_hash == hash
17
- end
18
- end
19
- end