rassphrase 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .DS_Store
6
+ *.sublime-*
7
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ rassphrase
2
+ ==========
3
+
4
+ rassphrase is an implementation of the Diceware passphrase method for Ruby.
5
+ It's used to generate secure passphrase used for passwords.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/rassphrase ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ path_to_lib = "../../lib/"
4
+ $LOAD_PATH << File.expand_path(path_to_lib, __FILE__)
5
+
6
+ require "optparse"
7
+ require 'rassphrase'
8
+
9
+ @options = {
10
+ :number => 1,
11
+ :size => 5,
12
+ :wordlist_path => File.expand_path("#{path_to_lib}diceware.wordlist", __FILE__)
13
+ }
14
+ optparse = OptionParser.new do |opts|
15
+ opts.banner = "Usage: rassphrase [options]"
16
+
17
+ opts.on("-s SIZE", Integer, "Specifies the number of words for the passphrase") do |s|
18
+ @options[:size] = s
19
+ end
20
+
21
+ opts.on("-c", "Capitalizes the words in the passphrase") do
22
+ @options[:capitalize] = true
23
+ end
24
+
25
+ opts.on("-b", "Uses the Beale wordlist dictionary.") do |w|
26
+ @options[:wordlist_path] = File.expand_path("#{path_to_lib}beale.wordlist", __FILE__)
27
+ end
28
+
29
+ opts.on("-n NUMBER", Integer, "The number of passphrases to generate") do |n|
30
+ @options[:number] = n.to_i
31
+ end
32
+ end
33
+ optparse.parse!
34
+
35
+ rassphrase = Rassphrase::Rassphrase.new(@options)
36
+ @options[:number].times do
37
+ puts rassphrase.generate
38
+ end
@@ -0,0 +1,28 @@
1
+ Feature: Usage Diceware method
2
+
3
+ To protect my information, as a security aware user
4
+ I want to generate a secure passphrase using the diceware method
5
+
6
+ Scenario: Get a diceware code
7
+ Given I have a rassphrase
8
+ When I ask for a diceware code
9
+ Then the dice should roll 5 times
10
+
11
+ Scenario: Diceware code digits
12
+ Given I have a rassphrase
13
+ When I ask for a diceware code
14
+ Then I should get a code with digits from 1 to 6
15
+
16
+ Scenario Outline: Usage of diceware word list
17
+ Given I have a rassphrase with the Diceware wordlist
18
+ When I ask for the word with the code "<code>"
19
+ Then I should get the word "<word>"
20
+
21
+ Examples:
22
+ | code | word |
23
+ | 21111 | cliche |
24
+ | 16655 | clause |
25
+ | 15144 | brassy |
26
+ | 11164 | above |
27
+ | 36223 | lead |
28
+ | 52422 | rumen |
@@ -0,0 +1,19 @@
1
+ Feature: Generates a passphrase
2
+
3
+ To protect my information, as a security aware user
4
+ I want to generate a random passphrase
5
+
6
+ Scenario: Random passphrase
7
+ Given I have a rassphrase
8
+ When I generate a passphrase
9
+ Then I get a passphrase with concatenated words
10
+
11
+ Scenario: Different words
12
+ Given I have a rassphrase
13
+ When I generate a passphrase
14
+ Then all the words are different
15
+
16
+ Scenario: Specific word size
17
+ Given I have a rassphrase
18
+ When I generate a passphrase with 9 words
19
+ Then I get a passphrase with 9 words
@@ -0,0 +1,14 @@
1
+ Feature: Dice simulation
2
+
3
+ In real life a dice is used to generate a random number. To replicate
4
+ this randomness in software, I want to roll a virtual dice.
5
+
6
+ Scenario: Dice numbers range
7
+ Given that a dice has 6 sides
8
+ When I roll the dice 20 times
9
+ Then I should get 20 numbers between 1 and 6
10
+
11
+ Scenario: Numbers randomness
12
+ Given that a dice has 6 sides
13
+ When I roll the dice 20 times
14
+ Then I should get at least 4 different numbers
@@ -0,0 +1,33 @@
1
+ Given /^I have a rassphrase$/ do
2
+ @dice = Rassphrase::Dice.new
3
+ @rassphrase = Rassphrase::Rassphrase.new(:dice => @dice)
4
+ end
5
+
6
+ Given /^I have a rassphrase with the Diceware wordlist$/ do
7
+ wordlist_path = File.expand_path("../../../lib/diceware.wordlist", __FILE__)
8
+ @rassphrase = Rassphrase::Rassphrase.new(:wordlist_path => wordlist_path)
9
+ end
10
+
11
+ When /^I ask for a diceware code$/ do
12
+ @dice_rolls_before_code = @dice.roll_count
13
+ @code = @rassphrase.generate_code
14
+ end
15
+
16
+ Then /^the dice should roll (\d+) times$/ do |times|
17
+ @dice.roll_count.should == @dice_rolls_before_code + times.to_i
18
+ end
19
+
20
+ Then /^I should get a code with digits from (\d+) to (\d+)$/ do |min, max|
21
+ @code.split('').each do |n|
22
+ n.to_i.should be >= min.to_i
23
+ n.to_i.should be <= max.to_i
24
+ end
25
+ end
26
+
27
+ When /^I ask for the word with the code "([^"]*)"$/ do |code|
28
+ @word = @rassphrase.word(code)
29
+ end
30
+
31
+ Then /^I should get the word "([^"]*)"$/ do |word|
32
+ word.should == @word
33
+ end
@@ -0,0 +1,22 @@
1
+ When /^I generate a passphrase$/ do
2
+ @passphrase = @rassphrase.generate
3
+ end
4
+
5
+ When /^I generate a passphrase with (\d+) words$/ do |word_count|
6
+ @passphrase = @rassphrase.generate(word_count.to_i)
7
+ end
8
+
9
+ Then /^I get a passphrase with concatenated words$/ do
10
+ @passphrase.should == @rassphrase.words.join
11
+ end
12
+
13
+ Then /^all the words are different$/ do
14
+ words = @rassphrase.words
15
+ words.each do |w|
16
+ words.count(w).should be 1
17
+ end
18
+ end
19
+
20
+ Then /^I get a passphrase with (\d+) words$/ do |word_count|
21
+ @rassphrase.should have(word_count.to_i).words
22
+ end
@@ -0,0 +1,24 @@
1
+ Given /^that a dice has (\d+) sides$/ do |number_sides|
2
+ end
3
+
4
+ When /^I roll the dice (\d+) times$/ do |times|
5
+ @results = []
6
+ dice = Rassphrase::Dice.new
7
+ times.to_i.times do |n|
8
+ @results << dice.roll
9
+ end
10
+ end
11
+
12
+ Then /^I should get (\d+) numbers between (\d+) and (\d+)$/ do |count, minimum, maximum|
13
+ count.to_i.should == @results.size
14
+ @results.each do |n|
15
+ n.should be >= minimum.to_i
16
+ n.should be <= maximum.to_i
17
+ end
18
+ end
19
+
20
+ Then /^I should get at least (\d+) different numbers$/ do |count|
21
+ different = []
22
+ @results.each { |n| different << n unless different.index(n) }
23
+ different.size.should be >= count.to_i
24
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH << File.expand_path('../../../lib', __FILE__)
2
+ require "rassphrase"