h 2.2.2 → 3.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fad455705cf418f3479dff439b6cf79e4b7c239c
4
- data.tar.gz: a8d0d223ee5eeb2345ee8fcfcbdfd7aac8207ed4
3
+ metadata.gz: 6b16434031f5b5e709a131a094e25065701e207c
4
+ data.tar.gz: 1c0e43f7f37fa7727007eaae29bffb7fa5d9c3ed
5
5
  SHA512:
6
- metadata.gz: 5e85f0c4d67071419213fac60b28ac073176ef8181cd21f6a73941930515272a093ecca8e6cf24d16447a8ad731b5cb2bd5d3fe458ebadf6ab8ea0c5ee675ad8
7
- data.tar.gz: 8f6145528fdc206f37406272a02e50bd6eb20f70d4c8f42b596ce87aeaca787023a6b1a6dd05103e49a046d1739011fe38577cf87938033ee86daee99846ec40
6
+ metadata.gz: f35d34fc2ea767ec2c23dff59ebead4b2e4c51d58e7b0f7c0d47146a5957ef951a2a60419db4a10706f3e60edc0f63f90d98e05a8658e9d0ca217ab750484669
7
+ data.tar.gz: ef42be5f74e5450381a4e50ce75a167f2411ab7f46eed24423a53bf93ea9bc3a7057592d06d0434692288817075dd69f1443a63c1869c3cdea5c7a5e30207bd3
@@ -1 +1 @@
1
- 2.2.0
1
+ 2.4.1
@@ -1,5 +1,13 @@
1
1
  language: ruby
2
- script: 'bundle exec rake test:coverage'
2
+ sudo: false
3
+ cache: bundler
4
+ script: 'bundle exec rake test:coverage --trace'
5
+ before_install:
6
+ - gem install bundler
3
7
  rvm:
4
- - 2.0.0
8
+ - 2.0
9
+ - 2.1
10
+ - 2.2
5
11
  - ruby-head
12
+ - jruby-head
13
+ - rbx-2
File without changes
Binary file
data/Gemfile CHANGED
@@ -1,2 +1,3 @@
1
1
  source 'https://rubygems.org'
2
+
2
3
  gemspec
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011, Cyril Wack
1
+ Copyright (c) 2011, Cyril Kato
2
2
 
3
3
  Permission to use, copy, modify, and/or distribute this software for any
4
4
  purpose with or without fee is hereby granted, provided that the above
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- Small tool that generates salted hashes, scented with the SHA2 function.
5
+ Small tool that generates salted hashes, scented with the SHA-256 hash function.
6
6
 
7
7
  ## Why?
8
8
 
@@ -14,33 +14,41 @@ Small tool that generates salted hashes, scented with the SHA2 function.
14
14
 
15
15
  ## Configuration
16
16
 
17
- H reads its configuration from the `~/.h` file at initialization. This file, which should be readable by its owner only, have the salt value.
17
+ H reads its configuration from the `~/.h` file at initialization.
18
+ This file, which should be readable by its owner only, have the salt value.
18
19
 
19
20
  ## Examples
20
21
 
21
22
  Generate a digest from the system:
22
23
 
23
- $ echo "塩" > ~/.h
24
- $ h シークレット
25
- -q0zMnMSszj8D23a8aNJX_VYry9oSSLZ30XlHkmFt9I=
26
- $ h secret 3
27
- -q0
24
+ ```sh
25
+ $ echo "my-secret" > ~/.h
28
26
 
29
- Same operation, from Ruby:
27
+ $ h p@ssw0rd
28
+ ff665753fe1d26bd6a721760fe3b6623568a9c51962d6bfc9b7fc73d1f1c14d5
30
29
 
31
- irb(main):001:0> require "h"
32
- true
33
- irb(main):002:0> H::Generator.new("塩").input "シークレット", 3
34
- "-q0"
30
+ $ h シークレット
31
+ 069f550ba39da8f87b0229ad5e3d75814c472b1c5a109ff236f9184f49fb3a25
32
+ ```
33
+
34
+ Same operations, with Ruby:
35
+
36
+ ```ruby
37
+ require "h"
38
+
39
+ builder = H::Builder.new("my-secret")
40
+
41
+ builder.call("p@ssw0rd") # => ff665753fe1d26bd6a721760fe3b6623568a9c51962d6bfc9b7fc73d1f1c14d5
42
+ builder.call("シークレット") # => 069f550ba39da8f87b0229ad5e3d75814c472b1c5a109ff236f9184f49fb3a25
43
+ ```
35
44
 
36
45
  ## Status
37
46
 
38
47
  * [![Gem Version](https://badge.fury.io/rb/h.png)](http://badge.fury.io/rb/h)
39
48
  * [![Build Status](https://secure.travis-ci.org/cyril/h.rb.png)](//travis-ci.org/cyril/h.rb)
40
49
  * [![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
50
  * ![](https://ruby-gem-downloads-badge.herokuapp.com/h?type=total)
43
51
 
44
- * * *
52
+ ***
45
53
 
46
- Copyright (c) 2014 Cyril Wack, released under the [ISC license](LICENSE.md)
54
+ Copyright (c) 2014 Cyril Kato, released under the [ISC license](LICENSE.md)
data/Rakefile CHANGED
@@ -14,4 +14,4 @@ namespace :test do
14
14
  end
15
15
 
16
16
  task(:doc_stats) { ruby '-S yard stats' }
17
- task default: [:test, :doc_stats]
17
+ task default: %i[test doc_stats]
@@ -1 +1 @@
1
- 2.2.2
1
+ 3.0.0
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'qi'
5
+
6
+ require 'irb'
7
+ IRB.start
data/bin/h CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative File.join '..', 'lib', 'h'
3
+ require_relative File.join('..', 'lib', 'h')
4
4
 
5
5
  CONF_PATH = File.join(File.expand_path('~'), '.h')
6
6
 
@@ -16,10 +16,12 @@ unless File.exist?(CONF_PATH)
16
16
  puts 'Done.'
17
17
  end
18
18
 
19
- h = H::Generator.new(File.open(CONF_PATH).readlines.first.chomp)
19
+ secret = File.open(CONF_PATH)
20
+ .readlines
21
+ .fetch(0)
22
+ .chomp
20
23
 
21
- puts h.input ARGV[0].to_s, if ARGV[1].nil?
22
- 44
23
- else
24
- ARGV[1].to_i
25
- end
24
+ builder = H::Builder.new(secret)
25
+ result = builder.call(ARGV[0])
26
+
27
+ puts result
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ set -euo pipefail
4
+ IFS=$'\n\t'
5
+
6
+ bundle install
data/h.gemspec CHANGED
@@ -1,11 +1,11 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'h'
3
3
  spec.version = File.read('VERSION.semver')
4
- spec.authors = ['Cyril Wack']
4
+ spec.authors = ['Cyril Kato']
5
5
  spec.email = ['contact@cyril.email']
6
6
  spec.homepage = 'https://github.com/cyril/h.rb'
7
7
  spec.summary = 'Salted hashes tool'
8
- spec.description = 'Small tool that generates salted hashes, scented ' \
8
+ spec.description = 'Small tool that generates salted hashes, scented ' \
9
9
  'with the SHA2 function, for those who prefer to put ' \
10
10
  'makeup on passwords rather than yield them to Manager™.'
11
11
  spec.license = 'ISC'
@@ -15,9 +15,8 @@ Gem::Specification.new do |spec|
15
15
  spec.test_files = spec.files.grep(/^test\//)
16
16
  spec.require_paths = ['lib']
17
17
 
18
- spec.add_development_dependency 'bundler', '~> 1.8'
19
- spec.add_development_dependency 'fix', '~> 0.9'
20
- spec.add_development_dependency 'rake', '~> 10.4'
21
- spec.add_development_dependency 'yard', '~> 0.8'
18
+ spec.add_development_dependency 'bundler', '~> 1.15'
19
+ spec.add_development_dependency 'fix', '~> 0.17'
20
+ spec.add_development_dependency 'rake', '~> 12.1'
22
21
  spec.add_development_dependency 'coveralls', '~> 0.8'
23
22
  end
data/lib/h.rb CHANGED
@@ -1,56 +1,21 @@
1
- require 'digest'
1
+ require 'digest/sha2'
2
2
 
3
- # Namespace and main entry point for the H library.
4
3
  module H
5
- # Class that generates cryptographic hash
6
- class Generator
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
15
- end
4
+ class Builder
5
+ attr_reader :secret
16
6
 
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
27
- d = cryptographic_hash(m)
28
- truncate d, l
7
+ def initialize(secret)
8
+ @secret = secret.to_s
29
9
  end
30
10
 
31
- protected
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
- def cryptographic_hash(m)
41
- ::Digest::SHA256.base64digest(m).tr('+/', '-_')
11
+ def call(value)
12
+ ::Digest::SHA256.hexdigest(salt(value.to_s))
42
13
  end
43
14
 
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
52
- def truncate(str, lng)
53
- str[0, lng]
15
+ private
16
+
17
+ def salt(value)
18
+ value + secret
54
19
  end
55
20
  end
56
21
  end
@@ -1,39 +1,31 @@
1
1
  require_relative '_test_helper'
2
2
 
3
- Fix.describe H::Generator do
4
- # basic test
5
- on :new, 'my-salt' do
6
- # returns a salted hash
7
- on :input, '', 44 do
8
- it { MUST Eql: 'rdOQxxmSfOy-3-HA7OrnqT2Pl2Y_I7Ojqsc1NwVP4sg=' }
3
+ Fix.describe H::Builder do
4
+ on :new, 'my-secret' do
5
+ on :call, nil do
6
+ it { MUST eql '186ef76e9d6a723ecb570d4d9c287487d001e5d35f7ed4a313350a407950318e' }
9
7
  end
10
8
 
11
- # returns another salted hash
12
- on :input, 'p@ssw0rd', 44 do
13
- it { MUST Eql: 'LCoF25LqK6yFMRs6OoQoZEI4GV4-gR7vd1JZtbi8swA=' }
9
+ on :call, 'p@ssw0rd' do
10
+ it { MUST eql 'ff665753fe1d26bd6a721760fe3b6623568a9c51962d6bfc9b7fc73d1f1c14d5' }
14
11
  end
15
12
 
16
- # returns a salted hash of 8 chars
17
- on :input, 'p@ssw0rd', 8 do
18
- it { MUST Eql: 'LCoF25Lq' }
13
+ on :call, 'シークレット' do
14
+ it { MUST eql '069f550ba39da8f87b0229ad5e3d75814c472b1c5a109ff236f9184f49fb3a25' }
19
15
  end
20
16
  end
21
17
 
22
- # exotic test
23
- on :new, '塩' do
24
- # returns a different salted hash
25
- on :input, 'p@ssw0rd', 44 do
26
- it { MUST_NOT Eql: 'LCoF25LqK6yFMRs6OoQoZEI4GV4-gR7vd1JZtbi8swA=' }
18
+ on :new, nil do
19
+ on :call, nil do
20
+ it { MUST eql 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' }
27
21
  end
28
22
 
29
- # returns a salted hash
30
- on :input, 'シークレット', 44 do
31
- it { MUST Eql: '-q0zMnMSszj8D23a8aNJX_VYry9oSSLZ30XlHkmFt9I=' }
23
+ on :call, 'p@ssw0rd' do
24
+ it { MUST eql 'a075d17f3d453073853f813838c15b8023b8c487038436354fe599c3942e1f95' }
32
25
  end
33
26
 
34
- # returns a salted hash of 3 chars
35
- on :input, 'シークレット', 3 do
36
- it { MUST Eql: '-q0' }
27
+ on :call, 'シークレット' do
28
+ it { MUST eql '2f1a3e825632d6d5c2085839b7d82e38d9e7435d5cafb1d38801db87335ba0dd' }
37
29
  end
38
30
  end
39
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: h
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Cyril Wack
7
+ - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-11 00:00:00.000000000 Z
11
+ date: 2017-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,56 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '1.15'
20
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.8'
26
+ version: '1.15'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fix
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.9'
33
+ version: '0.17'
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: '0.9'
40
+ version: '0.17'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.4'
47
+ version: '12.1'
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: '10.4'
55
- - !ruby/object:Gem::Dependency
56
- name: yard
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.8'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.8'
54
+ version: '12.1'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: coveralls
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -85,7 +71,9 @@ description: Small tool that generates salted hashes, scented with the SHA2 func
85
71
  email:
86
72
  - contact@cyril.email
87
73
  executables:
74
+ - console
88
75
  - h
76
+ - setup
89
77
  extensions: []
90
78
  extra_rdoc_files: []
91
79
  files:
@@ -94,6 +82,7 @@ files:
94
82
  - ".ruby-version"
95
83
  - ".travis.yml"
96
84
  - ".yardoc/checksums"
85
+ - ".yardoc/complete"
97
86
  - ".yardoc/object_types"
98
87
  - ".yardoc/objects/root.dat"
99
88
  - ".yardoc/proxy_types"
@@ -102,7 +91,9 @@ files:
102
91
  - README.md
103
92
  - Rakefile
104
93
  - VERSION.semver
94
+ - bin/console
105
95
  - bin/h
96
+ - bin/setup
106
97
  - h.gemspec
107
98
  - lib/h.rb
108
99
  - test/_test_helper.rb
@@ -129,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
120
  version: '0'
130
121
  requirements: []
131
122
  rubyforge_project:
132
- rubygems_version: 2.4.5
123
+ rubygems_version: 2.6.11
133
124
  signing_key:
134
125
  specification_version: 4
135
126
  summary: Salted hashes tool
@@ -138,4 +129,3 @@ test_files:
138
129
  - test/support.rb
139
130
  - test/support/coverage.rb
140
131
  - test/test_h.rb
141
- has_rdoc: