salty 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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: