eff_diceware 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +55 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/eff_diceware.gemspec +23 -0
- data/eff_large_wordlist.txt +7776 -0
- data/exe/diceware +33 -0
- data/lib/eff_diceware.rb +33 -0
- data/lib/eff_diceware/version.rb +3 -0
- metadata +101 -0
data/exe/diceware
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
|
5
|
+
require "eff_diceware"
|
6
|
+
|
7
|
+
words = 5
|
8
|
+
phrases = 1
|
9
|
+
|
10
|
+
OptionParser.new do |opts|
|
11
|
+
opts.banner = "Usage: diceware [options] [count]"
|
12
|
+
|
13
|
+
opts.separator ""
|
14
|
+
opts.separator "Generate [count] secure passphrase(s) using the diceware method."
|
15
|
+
|
16
|
+
opts.separator ""
|
17
|
+
opts.separator "Options:"
|
18
|
+
|
19
|
+
opts.on("-n", "--words N", "Generate phrase with N words") do |n|
|
20
|
+
words = n.to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.separator ""
|
24
|
+
opts.separator "Or roll your own! https://www.eff.org/dice"
|
25
|
+
|
26
|
+
opts.version = EffDiceware::VERSION
|
27
|
+
end.parse!
|
28
|
+
|
29
|
+
unless ARGV.empty?
|
30
|
+
phrases = ARGV.shift.to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
phrases.times{ puts EffDiceware.generate(words) }
|
data/lib/eff_diceware.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require "pathname"
|
2
|
+
require "securerandom"
|
3
|
+
|
4
|
+
require "eff_diceware/version"
|
5
|
+
|
6
|
+
module EffDiceware
|
7
|
+
class << self
|
8
|
+
def generate(n = 5)
|
9
|
+
raise ArgumentError, "n must be greater than 0" unless n > 0
|
10
|
+
|
11
|
+
wordlist do |list|
|
12
|
+
words = n.times.map do
|
13
|
+
key = 5.times.map{ roll }.join
|
14
|
+
list.grep(/^#{key}/)[0].split("\t")[1]
|
15
|
+
end
|
16
|
+
|
17
|
+
words.join(" ")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def roll
|
22
|
+
1 + SecureRandom.random_number(6)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def wordlist
|
28
|
+
gem_root = File.expand_path(File.dirname(File.dirname(__FILE__)))
|
29
|
+
wordlist = Pathname.new(gem_root).join("eff_large_wordlist.txt")
|
30
|
+
yield File.readlines(wordlist).map(&:chomp)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eff_diceware
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Woo
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.12'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
- peterw@eff.org
|
58
|
+
executables:
|
59
|
+
- diceware
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- ".rspec"
|
65
|
+
- ".travis.yml"
|
66
|
+
- Gemfile
|
67
|
+
- LICENSE.txt
|
68
|
+
- README.md
|
69
|
+
- Rakefile
|
70
|
+
- bin/console
|
71
|
+
- bin/setup
|
72
|
+
- eff_diceware.gemspec
|
73
|
+
- eff_large_wordlist.txt
|
74
|
+
- exe/diceware
|
75
|
+
- lib/eff_diceware.rb
|
76
|
+
- lib/eff_diceware/version.rb
|
77
|
+
homepage:
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata: {}
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.5.1
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Generate passphrases using EFF's wordlist.
|
101
|
+
test_files: []
|