salty 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. data/README.rdoc +6 -3
  2. data/VERSION +1 -1
  3. data/lib/salty.rb +18 -6
  4. data/salty.gemspec +1 -1
  5. data/test/test_salty.rb +12 -13
  6. metadata +12 -12
data/README.rdoc CHANGED
@@ -19,15 +19,18 @@ and get the file locally. It's less than 1KB.
19
19
 
20
20
  require 'salty' # you may need to do './salty' if you used wget
21
21
 
22
- salt = generate_salt
23
- password = salty("mypassword",salt) # iterative salted SHA1 hash
22
+ password = salty("mypassword") # iterative salted SHA1 hash
24
23
 
25
- if salty_eq("mypassword",password,salt)
24
+ if salty_eq("mypassword",password)
26
25
  puts "You're logged in!"
27
26
  else
28
27
  puts "Wrong password"
29
28
  end
30
29
 
30
+ A salt is generated and embeded in the output from (({salty("mypassword")})). (({salty_eq})) will then extract this salt. So there is no need to handle the salt yourself.
31
+
32
+ Obviously, the order of arguments to (({salty_eq})) is important. The plain-text data must come first, followed by the previously-hashed data.
33
+
31
34
  == Contributing to salty
32
35
 
33
36
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/lib/salty.rb CHANGED
@@ -1,9 +1,16 @@
1
1
  require 'digest/sha1'
2
2
 
3
+ SALT_LENGTH=30
4
+ ALPHA = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a
5
+
3
6
  def hash_fn(str)
4
7
  Digest::SHA1.hexdigest str
5
8
  end
6
9
 
10
+ def generate_salt
11
+ (1..SALT_LENGTH).map{ALPHA.sample}.join
12
+ end
13
+
7
14
  def salted_hash(str,salt)
8
15
  res = str
9
16
  100.times do
@@ -12,14 +19,19 @@ def salted_hash(str,salt)
12
19
  res
13
20
  end
14
21
 
15
- alias :salty :salted_hash
22
+ def salty(str)
23
+ salt = generate_salt
24
+
25
+ res = salted_hash(str,salt)
16
26
 
17
- def salty_eq(unhashed,hashed,salt)
18
- hashed == salted_hash(unhashed,salt)
27
+ n = str.length
28
+ res[0...n] + salt + res[n..-1]
19
29
  end
20
30
 
21
- ALPHA = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a
31
+ def salty_eq(unhashed,hashed)
32
+ n = unhashed.length
33
+ salt = hashed[n,SALT_LENGTH]
34
+ myhashed = hashed[0...n] + hashed[n+SALT_LENGTH..-1]
22
35
 
23
- def generate_salt(n=30)
24
- (1..n).map{ALPHA.sample}.join
36
+ myhashed == salted_hash(unhashed,salt)
25
37
  end
data/salty.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{salty}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Alec Benzer}]
data/test/test_salty.rb CHANGED
@@ -6,24 +6,23 @@ end
6
6
 
7
7
  class TestSalty < Test::Unit::TestCase
8
8
  context "test salt" do
9
- should "basic" do
10
- salt = generate_salt
11
- hashed = salty("bob",salt)
12
- end
13
-
14
9
  should "hash equality" do
15
- str = random_string
16
- salt = generate_salt
10
+ 10.times do
11
+ str = random_string
17
12
 
18
- assert_equal salted_hash(str,salt), salted_hash(str,salt)
13
+ hashed = salty(str)
14
+ assert salty_eq(str,hashed)
15
+ end
19
16
  end
20
17
 
21
- should "hash equality method" do
22
- str = random_string
23
- salt = generate_salt
18
+ should "hash inequaliy" do
19
+ 10.times do
20
+ str = random_string
21
+ hashed = salty(str)
24
22
 
25
- hashed = salted_hash(str,salt)
26
- assert salty_eq(str,hashed,salt)
23
+ other = random_string
24
+ assert(other == str || (not salty_eq(other,hashed)))
25
+ end
27
26
  end
28
27
  end
29
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &25936460 !ruby/object:Gem::Requirement
16
+ requirement: &16996260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *25936460
24
+ version_requirements: *16996260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &25935860 !ruby/object:Gem::Requirement
27
+ requirement: &16995080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *25935860
35
+ version_requirements: *16995080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &25891600 !ruby/object:Gem::Requirement
38
+ requirement: &16993980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *25891600
46
+ version_requirements: *16993980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &25891120 !ruby/object:Gem::Requirement
49
+ requirement: &16993120 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.8.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *25891120
57
+ version_requirements: *16993120
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &25890540 !ruby/object:Gem::Requirement
60
+ requirement: &16992300 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *25890540
68
+ version_requirements: *16992300
69
69
  description: stupid little gem for salted hashing
70
70
  email: alecbenzer@gmail.com
71
71
  executables: []
@@ -100,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
100
  version: '0'
101
101
  segments:
102
102
  - 0
103
- hash: -118519924956232819
103
+ hash: -3069907584758105957
104
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements: