h 2.1.2 → 2.2.0

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: 9fbc46de0065e17f1a304f81fd70ff90ecf7fab2
4
- data.tar.gz: 36189d636953da2c574c6b8b1d1ac488f63b2fe3
3
+ metadata.gz: daf6350a70f380ef714bfb86e77e8a1d5f4b05ed
4
+ data.tar.gz: 9b3baceb934db36f229949fbbb765b6bbcf15d68
5
5
  SHA512:
6
- metadata.gz: 43045f4df0b930e4bbd189d3f53ba4cfabd1e78fa25155744a7a0fee0d33dede07cdf484122ca8a6426192ab4df8e70f80488ed3ce6f9bfa33956a06197aad05
7
- data.tar.gz: 4a0a7835c9650c40c7e7f7b05ec475e3a57fb86291cdaad3bac4f5dc9982fe90499630be18930a593a1aaeb405bc12774ecf2d480e1024a516235fd827710fa8
6
+ metadata.gz: 8b86e45795c948aa6efbbcc3cc12f1b240b182f49f60564b526418b78f18457c9dd843da052998a04bc5f10a3058092f65c0cb50ecc4e406a5198be7d6d78f22
7
+ data.tar.gz: 5ee9d076127028ac24d27835df735066c405cbce1a8a807267537b2a5bb2f90b2e5ec261fe026321b21e4036e3994f4ec1052021caeb140da46fb33199313799
@@ -1 +1 @@
1
- 2.1.2
1
+ 2.2.0
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
- script: 'bundle exec rake test'
2
+ script: 'bundle exec rake test:coverage'
3
3
  rvm:
4
- - 2.1.2
4
+ - 2.0.0
5
+ - ruby-head
data/README.md CHANGED
@@ -33,16 +33,13 @@ Same operation, from Ruby:
33
33
  irb(main):002:0> H::Generator.new("塩").input "シークレット", 3
34
34
  "-q0"
35
35
 
36
- To prevent your log display the message as a string, do not specify it at first.
37
-
38
- $ h
39
- Message: ******
40
- -q0zMnMSszj8D23a8aNJX_VYry9oSSLZ30XlHkmFt9I=
41
-
42
36
  ## Status
43
37
 
38
+ * [![Gem Version](https://badge.fury.io/rb/h.png)](http://badge.fury.io/rb/h)
44
39
  * [![Build Status](https://secure.travis-ci.org/cyril/h.rb.png)](//travis-ci.org/cyril/h.rb)
45
40
  * [![Dependency Status](https://gemnasium.com/cyril/h.rb.svg)](//gemnasium.com/cyril/h.rb)
41
+ * [![Inline docs](http://inch-ci.org/github/cyril/h.rb.png)](http://inch-ci.org/github/cyril/h.rb)
42
+ * ![](https://ruby-gem-downloads-badge.herokuapp.com/h?type=total)
46
43
 
47
44
  * * *
48
45
 
data/Rakefile CHANGED
@@ -2,6 +2,16 @@ require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new do |t|
5
+ t.verbose = true
6
+ t.warning = true
5
7
  end
6
8
 
7
- task default: :test
9
+ namespace :test do
10
+ task :coverage do
11
+ ENV['COVERAGE'] = 'true'
12
+ Rake::Task['test'].invoke
13
+ end
14
+ end
15
+
16
+ task(:doc_stats) { ruby '-S yard stats' }
17
+ task default: [:test, :doc_stats]
@@ -1 +1 @@
1
- 2.1.2
1
+ 2.2.0
data/bin/h CHANGED
@@ -1,17 +1,25 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'h'
3
+ require_relative File.join '..', 'lib', 'h'
4
4
 
5
- h = H::Generator.new
5
+ CONF_PATH = File.join(File.expand_path('~'), '.h')
6
6
 
7
- result = if ARGV.first
8
- if ARGV[1]
9
- h.input ARGV[0].to_s, ARGV[1].to_i
10
- else
11
- h.input ARGV[0].to_s
7
+ unless File.exist?(CONF_PATH)
8
+ print "Creating #{CONF_PATH} file... "
9
+
10
+ File.open(CONF_PATH, 'w') do |f|
11
+ f.write('secret')
12
12
  end
13
- else
14
- h.prompt
13
+
14
+ File.chmod(0600, CONF_PATH)
15
+
16
+ puts 'Done.'
15
17
  end
16
18
 
17
- puts result
19
+ h = H::Generator.new(File.open(CONF_PATH).readlines.first.chomp)
20
+
21
+ puts h.input ARGV[0].to_s, if ARGV[1].nil?
22
+ 44
23
+ else
24
+ ARGV[1].to_i
25
+ end
data/h.gemspec CHANGED
@@ -2,20 +2,22 @@ Gem::Specification.new do |spec|
2
2
  spec.name = 'h'
3
3
  spec.version = File.read('VERSION.semver')
4
4
  spec.authors = ['Cyril Wack']
5
- spec.email = ['contact@cyril.io']
5
+ spec.email = ['contact@cyril.email']
6
6
  spec.homepage = 'https://github.com/cyril/h.rb'
7
- spec.summary = %q{Salted hashes tool}
8
- spec.description = %q{Small tool that generates salted hashes, scented with the SHA2 function, for those who prefer to put makeup on passwords rather than yield them to Manager™.}
7
+ spec.summary = 'Salted hashes tool'
8
+ spec.description = 'Small tool that generates salted hashes, scented ' \
9
+ 'with the SHA2 function, for those who prefer to put ' \
10
+ 'makeup on passwords rather than yield them to Manager™.'
9
11
  spec.license = 'ISC'
10
12
 
11
13
  spec.files = `git ls-files -z`.split("\x0")
12
- spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
13
- spec.test_files = spec.files.grep(%r{^test/})
14
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
15
+ spec.test_files = spec.files.grep(/^test\//)
14
16
  spec.require_paths = ['lib']
15
17
 
16
- spec.add_dependency 'highline', '~> 1'
17
-
18
- spec.add_development_dependency 'bundler', '~> 1.6'
18
+ spec.add_development_dependency 'bundler', '~> 1.7'
19
19
  spec.add_development_dependency 'minitest', '~> 5'
20
20
  spec.add_development_dependency 'rake', '~> 10'
21
+ spec.add_development_dependency 'yard', '~> 0.8'
22
+ spec.add_development_dependency 'coveralls', '~> 0.7'
21
23
  end
data/lib/h.rb CHANGED
@@ -1,46 +1,54 @@
1
- require 'highline/import'
2
1
  require 'digest'
3
2
 
3
+ # Namespace and main entry point for the H library.
4
4
  module H
5
+ # Class that generates cryptographic hash
5
6
  class Generator
6
- CONF_PATH = File.join(File.expand_path('~'), '.h')
7
-
8
- def initialize(static_key = nil)
9
- @static_key = if static_key
10
- static_key
11
- else
12
- unless File.exists?(CONF_PATH)
13
- print "Creating #{CONF_PATH} file... "
14
-
15
- File.open(CONF_PATH, 'w') do |f|
16
- f.write('secret')
17
- end
18
-
19
- File.chmod(0600, CONF_PATH)
20
-
21
- puts "Done."
22
- end
23
-
24
- File.open(CONF_PATH).readlines.first.chomp
25
- end
26
- end
27
-
28
- def prompt
29
- input ask('Message: ') {|q| q.echo = '*' }
7
+ # Initialize a H instance.
8
+ #
9
+ # @param static_key [String] a random data
10
+ #
11
+ # @return [H::Generator] instance
12
+ #
13
+ def initialize(static_key)
14
+ @static_key = static_key
30
15
  end
31
16
 
32
- def input(m, l = 44)
33
- m = m + @static_key
17
+ # Return a hash of +l+ length.
18
+ #
19
+ # @param m [String] a message
20
+ # @param l [Fixnum] the length of the returned string
21
+ #
22
+ # @return [String] salted cryptographic hash.
23
+ #
24
+ # @api public
25
+ def input(m, l)
26
+ m += @static_key
34
27
  d = cryptographic_hash(m)
35
28
  truncate d, l
36
29
  end
37
30
 
38
31
  protected
39
32
 
33
+ # Build a hash from +m+ message.
34
+ #
35
+ # @param m [String] a message
36
+ #
37
+ # @return [String] cryptographic hash.
38
+ #
39
+ # @api private
40
40
  def cryptographic_hash(m)
41
- Digest::SHA2.base64digest(m).tr('+/', '-_')
41
+ ::Digest::SHA256.base64digest(m).tr('+/', '-_')
42
42
  end
43
43
 
44
+ # Truncate the given string from +lng+ param.
45
+ #
46
+ # @param str [String] a string to truncate
47
+ # @param lng [Fixnum] the length of the truncated string
48
+ #
49
+ # @return [String] truncated string.
50
+ #
51
+ # @api private
44
52
  def truncate(str, lng)
45
53
  str[0, lng]
46
54
  end
@@ -1,2 +1,3 @@
1
- require 'h'
1
+ require_relative 'support'
2
+ require_relative File.join '..', 'lib', 'h'
2
3
  require 'minitest/autorun'
@@ -7,11 +7,12 @@ describe H::Generator do
7
7
  end
8
8
 
9
9
  it 'returns a salted hash' do
10
- @h.input('').must_equal 'rdOQxxmSfOy-3-HA7OrnqT2Pl2Y_I7Ojqsc1NwVP4sg='
10
+ @h.input('', 44).must_equal 'rdOQxxmSfOy-3-HA7OrnqT2Pl2Y_I7Ojqsc1NwVP4sg='
11
11
  end
12
12
 
13
13
  it 'returns another salted hash' do
14
- @h.input('p@ssw0rd').must_equal 'LCoF25LqK6yFMRs6OoQoZEI4GV4-gR7vd1JZtbi8swA='
14
+ @h.input('p@ssw0rd', 44).must_equal 'LCoF25LqK6yFMRs6OoQoZEI4GV4-gR7vd1' \
15
+ 'JZtbi8swA='
15
16
  end
16
17
 
17
18
  it 'returns a salted hash of 8 chars' do
@@ -25,11 +26,13 @@ describe H::Generator do
25
26
  end
26
27
 
27
28
  it 'returns a different salted hash' do
28
- @h.input('p@ssw0rd').wont_equal 'LCoF25LqK6yFMRs6OoQoZEI4GV4-gR7vd1JZtbi8swA='
29
+ @h.input('p@ssw0rd', 44).wont_equal 'LCoF25LqK6yFMRs6OoQoZEI4GV4-gR7vd1' \
30
+ 'JZtbi8swA='
29
31
  end
30
32
 
31
33
  it 'returns a salted hash' do
32
- @h.input('シークレット').must_equal '-q0zMnMSszj8D23a8aNJX_VYry9oSSLZ30XlHkmFt9I='
34
+ @h.input('シークレット', 44).must_equal '-q0zMnMSszj8D23a8aNJX_VYry9oSSLZ30Xl' \
35
+ 'HkmFt9I='
33
36
  end
34
37
 
35
38
  it 'returns a salted hash of 3 chars' do
metadata CHANGED
@@ -1,75 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: h
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Wack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-30 00:00:00.000000000 Z
11
+ date: 2014-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: highline
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1'
20
- type: :runtime
19
+ version: '1.7'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.6'
33
+ version: '5'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.6'
40
+ version: '5'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5'
47
+ version: '10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5'
54
+ version: '10'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10'
61
+ version: '0.8'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10'
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.7'
69
83
  description: Small tool that generates salted hashes, scented with the SHA2 function,
70
84
  for those who prefer to put makeup on passwords rather than yield them to Manager™.
71
85
  email:
72
- - contact@cyril.io
86
+ - contact@cyril.email
73
87
  executables:
74
88
  - h
75
89
  extensions: []
@@ -108,10 +122,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
122
  version: '0'
109
123
  requirements: []
110
124
  rubyforge_project:
111
- rubygems_version: 2.2.2
125
+ rubygems_version: 2.4.5
112
126
  signing_key:
113
127
  specification_version: 4
114
128
  summary: Salted hashes tool
115
129
  test_files:
116
130
  - test/_test_helper.rb
117
131
  - test/test_h.rb
132
+ has_rdoc: