dgen 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/dgen.rb ADDED
@@ -0,0 +1 @@
1
+ require 'dgen/base'
data/lib/dgen/base.rb ADDED
@@ -0,0 +1,17 @@
1
+ # base script for dgen
2
+ # Copyright 2015 Richard Davis GPL v3
3
+ require 'dgen/passgen'
4
+
5
+ print 'Number of words for phrase (recommended minimum is 6 words) => '
6
+ n_words = gets.chomp.to_i
7
+ print 'Length of passphrase (recommended minimum is 17 characters) => '
8
+ p_length = gets.chomp.to_i
9
+ path = File.expand_path(File.join(File.dirname(__FILE__),
10
+ '..',
11
+ 'assets',
12
+ 'word-list.txt'))
13
+ f = File.new(path, 'r')
14
+ phrase = PassGen.new.generate_phrase(n_words, p_length, f)
15
+ puts "Passphrase with spaces: '#{phrase}'"
16
+ puts "Passphrase without spaces: '#{phrase.delete(' ')}'"
17
+ f.close
@@ -0,0 +1,46 @@
1
+ # PassGen Class
2
+ # Copyright 2015 Richard Davis GPL v3
3
+ require 'securerandom'
4
+
5
+ # creates a generator object
6
+ class PassGen
7
+ # creates array of random numbers
8
+ def roll_nums
9
+ numbers = []
10
+ 5.times do
11
+ numbers.push(SecureRandom.random_number(6) + 1)
12
+ end
13
+ num = numbers.join('')
14
+ num
15
+ end
16
+
17
+ # chooses words from wordlist
18
+ def find_word(file, number)
19
+ # scan file for number
20
+ File.foreach(file) do |line|
21
+ num = line.slice(0, 5)
22
+ @word = line.slice(6..-2)
23
+ break if num == number
24
+ end
25
+ @word
26
+ end
27
+
28
+ # makes the passphrase from the chosen words
29
+ def make_phrase(words)
30
+ phrase = words.join(' ')
31
+ phrase
32
+ end
33
+
34
+ # generates and returns the pass phrase
35
+ def generate_phrase(n_words, p_length, file)
36
+ loop do
37
+ words = []
38
+ n_words.times do
39
+ words.push(find_word(file, roll_nums))
40
+ end
41
+ @pass_phrase = make_phrase(words)
42
+ break unless @pass_phrase.length < p_length
43
+ end
44
+ @pass_phrase
45
+ end
46
+ end
data/test/test_dgen.rb ADDED
@@ -0,0 +1,29 @@
1
+ # PassGen Class tester
2
+ # Copyright 2015 Richard Davis GPL v3
3
+ require 'test/unit'
4
+ require 'dgen/passgen'
5
+
6
+ # tests the PassGen class
7
+ class PassGenTest < Test::Unit::TestCase
8
+ def test_roll_nums
9
+ assert_match(/^\d{5}$/, PassGen.new.roll_nums)
10
+ end
11
+
12
+ def test_find_word
13
+ file = File.new('lib/assets/word-list.txt', 'r+')
14
+ num = '11111'
15
+ assert_equal(PassGen.new.find_word(file, num), 'a')
16
+ end
17
+
18
+ def test_make_phrase
19
+ words = %w(this is a test just a test)
20
+ assert_equal(PassGen.new.make_phrase(words), 'this is a test just a test')
21
+ end
22
+
23
+ def test_generate_phrase
24
+ n_words = 6
25
+ p_length = 17
26
+ file = File.new('lib/assets/word-list.txt', 'r+')
27
+ assert_match(/\w||\s{17,}/, PassGen.new.generate_phrase(n_words, p_length, file))
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dgen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Richard Davis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ Using the diceware method to generate passwords results in stronger passwords
15
+ that are more resistant to cracking. This project implements the diceware
16
+ method to create passphrases that are strong and easy to remember.
17
+ email: dick@sbdsec.com
18
+ executables:
19
+ - dgen
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - bin/dgen
24
+ - lib/assets/word-list.txt
25
+ - lib/dgen.rb
26
+ - lib/dgen/base.rb
27
+ - lib/dgen/passgen.rb
28
+ - test/test_dgen.rb
29
+ homepage: https://github.com/d3d1rty/dgen
30
+ licenses:
31
+ - GPL v3
32
+ metadata: {}
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubyforge_project:
49
+ rubygems_version: 2.4.8
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: A simple diceware password generator
53
+ test_files:
54
+ - test/test_dgen.rb