lorca 0.3.3 → 0.5.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
  SHA256:
3
- metadata.gz: 282095acf11f395d43ce90b273e0feef6bb9c13f171839d7eaaded6e83344505
4
- data.tar.gz: f3f0c756ba1579a93990467812e3a3aa5a1525af0f2e81fe631acf6106db51f3
3
+ metadata.gz: f0a97e4325c07eafa5299433125654c671cd81760bfe26a19e5a8b96ce5b3286
4
+ data.tar.gz: a3b7e99eb4dd782e71a2613a76131076c954e268985ede11fd345a63326f92d6
5
5
  SHA512:
6
- metadata.gz: 3e04e6708ea591617a1a1713b1e9a692dc6d592d819aee3d511fec0b70c29377f1c0dbfb1ba9f283ac0b9d4c8a2d816807c1479637d703dc3b812b3070dca9f6
7
- data.tar.gz: 0663d6bf02d0d9d0f7ac025216da27348b129fd09b19565fa8c00e9445a148f21dae707a6bc13ff3fc34010024e522dfafdf3fd6ea8f2851f03636066422fea9
6
+ metadata.gz: e3e0ce4f5b9be532ae17115ad2763e2fe2f69c65daf6d2e6c767ef4fc1c39068e2d40d2bce6806faabdd7438844e263e072e2120026b325b794461ff112d2f0b
7
+ data.tar.gz: cac033b57be5e3353f37bc58f722329457124d53cdfd657b210ce739be911a3392b12a502a67cbc62718e1b6bce0ecbff26173e4cb940262cd51e31c8497e8b0
@@ -6,6 +6,8 @@ Manifest.md
6
6
 
7
7
  ReadMe.md
8
8
 
9
+ Security.md
10
+
9
11
  _expand_lib_path.rb
10
12
 
11
13
  bin/lorca
data/ReadMe.md CHANGED
@@ -1,21 +1,73 @@
1
1
  # Lorca
2
2
 
3
+ [![Version](https://badge.fury.io/rb/lorca.svg)](https://badge.fury.io/rb/lorca)
4
+ [![pipeline status](https://gitlab.com/_rem/lorca/badges/master/pipeline.svg)](https://gitlab.com/_rem/lorca/commits/master)
5
+
6
+
3
7
  ## Details
4
8
 
5
- Lorca generates passphrases based on the algorithm originally described in
6
- [EFF Dice-Generated Passphrases](https://www.eff.org/dice).
9
+ Lorca is a gem for generating passphrases based on the algorithm originally
10
+ described in [EFF Dice-Generated Passphrases](https://www.eff.org/dice).
7
11
  It uses [EFF's long word list](https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt).
12
+ The generator can be used from the command line interface, or added as
13
+ a library.
8
14
 
9
- [![pipeline status](https://gitlab.com/_rem/lorca/badges/master/pipeline.svg)](https://gitlab.com/_rem/lorca/commits/master)
15
+ Passphrases, unlike passwords, are meant to be memorized. Check out these
16
+ links for a few ideas on how to memorize them:
17
+
18
+ - [Using memory effectively](https://www.studygs.net/memory/)
19
+ - [How to memorize lists](https://www.wikihow.com/Memorize-Lists)
20
+
21
+ Passphrases are great password manager keys.
22
+
23
+
24
+ ## Quick Start
25
+
26
+ ### Command line interface
27
+
28
+ Generate, and copy to clipboard, an 8-word passphrase.
29
+
30
+ ```terminal
31
+ $ lorca -p
32
+ ```
33
+
34
+ As Lorca is only capable of writing to the clipboard, it's up to the user
35
+ to paste it, and store it, somewhere safe.
36
+
37
+ For more details on how to use the CLI
38
+
39
+ ```terminal
40
+ $ lorca
41
+ ```
10
42
 
11
43
  ## System Requirements
12
44
 
13
45
  - *nix OS.
46
+ - xsel or xclip (linux)
14
47
  - Ruby 2.4+
15
48
 
49
+
16
50
  ## Installation
17
51
 
18
- Add to a project's Gemfile:
52
+ ### CLI
53
+
54
+ To use Lorca as a command line interface:
55
+
56
+ ```terminal
57
+ $ gem fetch lorca -v <version>
58
+ $ ruby -rdigest/sha2 -e "puts Digest::SHA512.new.hexdigest(File.read('lorca-<version>.gem'))"
59
+ ```
60
+
61
+ Compare it with the hash in `checksum/lorca-<version>.gem.sha512` to
62
+ verify the integrity of the fetched gem. If the checksum matches
63
+
64
+ ```terminal
65
+ $ gem install lorca -v <version>
66
+ ```
67
+
68
+ ### Gem
69
+
70
+ To use Lorca as a gem add it to the project's Gemfile:
19
71
 
20
72
  ```ruby
21
73
  gem "lorca"
@@ -24,20 +76,42 @@ gem "lorca"
24
76
  And then run
25
77
 
26
78
  ```bash
27
- $ bundle
79
+ $ bundle install
80
+ ```
81
+
82
+ For details on the API check out the [online documentation](https://_rem.gitlab.io/lorca).
83
+
84
+
85
+ ### Updates
86
+
87
+ Subscribe to the [update notification feed](https://rubygems.org/gems/lorca/versions.atom).
88
+ Whenever there's a new release available read the
89
+ [ChangeLog.md](https://_rem.gitlab.io/lorca/files/ChangeLog_md.html)
90
+ for details on what changed since the last release.
91
+
92
+ #### CLI
93
+
94
+ Fetch and verify gem, as above,
95
+
96
+ ```terminal
97
+ $ gem fetch lorca -v <version>
98
+ $ ruby -rdigest/sha2 -e "puts Digest::SHA512.new.hexdigest(File.read('lorca-<version>.gem'))"
28
99
  ```
29
100
 
30
- Or to install the command line interface locally:
101
+ then
31
102
 
32
103
  ```bash
33
- $ gem install lorca
104
+ $ gem update lorca
105
+ $ gem cleanup lorca
34
106
  ```
35
107
 
36
- ## Quick Start
108
+ #### Gem
37
109
 
38
- :TODO: Add usage examples here.
110
+ ```bash
111
+ $ bundle update lorca
112
+ ```
39
113
 
40
114
  ## License
41
115
 
42
- Copyright (c) 2018, René Maya. Licensed ISC. Read attached `License.md` file
43
- for details.
116
+ Copyright (c) 2018-2019, René Maya. Licensed ISC. Read attached
117
+ `License.md` file for details.
@@ -0,0 +1,75 @@
1
+ # Security
2
+
3
+ Security issues take precedence over bug fixes, and feature work.
4
+ Peer reviews, and security research, are also welcome to prevent users
5
+ from being compromised.
6
+
7
+
8
+ ## Where should I report security issues?
9
+
10
+ Email directly `rem at disroot [dot] org` with details, and reproduction
11
+ steps. Please allow 90-days, from when we first reply to your report,
12
+ before public disclosure. At that time you may add a copy of your
13
+ published findings in the `disclosed` directory to help update users
14
+ about new, or improved security measures.
15
+
16
+ If you wish to be acknowledge below, mention it explicitly, and include
17
+
18
+ - Your name or alias
19
+ - Report date. YYYY-MM-DD
20
+ - Bug reported. Name or one-line description.
21
+ - Main contact (optional)
22
+
23
+ (Lack of a `disclosed` folder only means nothing has been reported)
24
+
25
+
26
+ ## Configuration
27
+
28
+ According to [EFF's deep dive](https://www.eff.org/ar/deeplinks/2016/07/new-wordlists-random-passphrases)
29
+ into their wordlist released on 2016, each word has about 12.92 bits of
30
+ entropy.
31
+
32
+ By default, `Lorca` generates an 8-word passphrase (about 102.8 bits of
33
+ entropy). Which, considering the relevant calculations on this
34
+ [table](https://i.imgur.com/e3mGIFY.png), should take about 1.6 billion
35
+ years to guess when the cracker is able to generate 10^13 permutations
36
+ per second. Depending on the user's threat model `Lorca` may be configured
37
+ to return a passphrase with up to 53 words; about 684.76 bits of entropy.
38
+
39
+
40
+ ## Checksum
41
+
42
+ Although it's possible to install gems with a trust policy, is not a
43
+ widely used feature. In practice, we'd have to allow installing gems
44
+ without a cert defeating the purpose of having a policy.
45
+
46
+ Instead, we include the checksum of the released gems, as recommended on
47
+ [rubygems](https://guides.rubygems.org/security/#include-checksum-of-released-gems-in-your-repository).
48
+ To verify the gem before installing it
49
+
50
+ ```terminal
51
+ $ gem fetch lorca -v <version>
52
+ $ ruby -rdigest/sha2 -e "puts Digest::SHA512.new.hexdigest(File.read('lorca-<version>.gem'))"
53
+ ```
54
+
55
+ Compare it with the hash in `checksum/lorca-<version>.gem.sha512` to
56
+ verify the integrity of the fetched gem. If the checksum matches
57
+
58
+ ```terminal
59
+ $ gem install lorca -v <version>
60
+ ```
61
+
62
+ If you wish to audit the gem locally before installation
63
+
64
+ ```sh
65
+ $ gem unpack lorca -v <version>
66
+ ```
67
+
68
+
69
+ ## Acknowledgments
70
+
71
+ We would like to thank the following researchers:
72
+
73
+ | Name/alias | Date | Bug reported | Contact |
74
+ |------------|------|--------------|---------|
75
+ | | | | |
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "optparse"
5
5
  require "clipboard"
6
+ require "lorca/version"
6
7
  require "lorca/expansions/phrases"
7
8
 
8
9
  class Lorca
@@ -29,32 +30,46 @@ class Lorca
29
30
  expansion.add Lorca::Phrases
30
31
  end
31
32
 
32
- def parse argv=$argv, writer:Lorca.new, pad: Clipboard, notice: $stdout
33
+ def parse argv=$argv, writer:Lorca.new, stash: Clipboard, outlet: $stdout
33
34
  cli = OptionParser.new do |parser|
34
- write_phrase parser, notice, writer, pad
35
- display_help parser, notice
35
+ write_phrase parser, outlet, writer, stash
36
+ display_help parser, outlet
37
+ display_version parser, outlet
36
38
  end
37
39
 
38
40
  cli.parse!(*argv)
39
41
 
40
- notice.puts cli
42
+ outlet.puts cli
41
43
  end
42
44
 
43
45
  private
44
46
 
45
- def write_phrase cli, notice, writer, pad
47
+ def write_phrase cli, outlet, writer, stash
46
48
  description = "Generate a passphrase with optional number of WORDS"
47
49
  cli.on("-p", "--phrase [WORDS]", Integer, description) { |nw|
48
- phrase = nw ? writer.phrase(words: nw) : writer.phrase
49
- pad.copy phrase
50
- notice.puts "passphrase copied to clipboard"
50
+ phrase = writer.phrase words: nw
51
+ message = outlet.tty? ? stash_away(phrase, store: stash) : phrase
52
+
53
+ outlet.puts message
51
54
  exit_cli
52
55
  }
53
56
  end
54
57
 
55
- def display_help cli, notice
58
+ def stash_away phrase, store:
59
+ store.copy phrase
60
+ "passphrase copied to clipboard"
61
+ end
62
+
63
+ def display_help cli, outlet
56
64
  cli.on_tail("-h", "--help", "Show this message") {
57
- notice.puts cli
65
+ outlet.puts cli
66
+ exit_cli
67
+ }
68
+ end
69
+
70
+ def display_version cli, outlet
71
+ cli.on("--version", "Show Lorca's current version") {
72
+ outlet.puts Lorca::LorcaVersion
58
73
  exit_cli
59
74
  }
60
75
  end
@@ -39,9 +39,11 @@ class Lorca
39
39
  end
40
40
 
41
41
  module LorcaPlugin
42
- # The phrase written given a number of +words+.
43
- def phrase words: settings[:phrases][:min_words]
42
+ # The phrase written given a number of +words+. Defaults to
43
+ # Phrases::MIN_WORDS
44
+ def phrase words: nil
44
45
  conf = settings[:phrases]
46
+ words = words ? words : conf[:min_words]
45
47
  words = validate_counter words, range: conf[:min_words]..conf[:max_words]
46
48
  phrase_ids = []
47
49
  words.times { phrase_ids.push(roll_word_id dice: conf[:dice_to_toss]) }
@@ -52,6 +54,7 @@ class Lorca
52
54
  private
53
55
 
54
56
  WordIdError = Class.new StandardError
57
+ private_constant :WordIdError
55
58
 
56
59
  def word id, wordlist: settings[:phrases][:vocabulary], manager: SDBM
57
60
  read_only = 0444
@@ -34,6 +34,15 @@ class Lorca
34
34
  "ISC"
35
35
  end
36
36
 
37
+ # Online resources.
38
+ def self.metadata
39
+ {
40
+ "source_code_uri" => repo,
41
+ "bug_tracker_uri" => "https://notabug.org/rem/lorca/issues",
42
+ "changelog_uri" => "https://notabug.org/rem/lorca/src/master/ChangeLog.md"
43
+ }.freeze
44
+ end
45
+
37
46
  # Array of official gem files. Manually maintained at Manifest.md.
38
47
  #--
39
48
  # Not frozen, raises warnings building gem.
@@ -65,6 +74,9 @@ class Lorca
65
74
  end
66
75
 
67
76
  # Array of binstubs.
77
+ #---
78
+ # Officially, there can only be one
79
+ #+++
68
80
  def self.binstubs
69
81
  %w[lorca].freeze
70
82
  end
@@ -6,10 +6,10 @@ class Lorca
6
6
  LorcaMajorVersion = 0
7
7
 
8
8
  # Minor version. Updated for new feature releases.
9
- LorcaMinorVersion = 3
9
+ LorcaMinorVersion = 5
10
10
 
11
11
  # Patch version. Updated only for bug fixes from the last feature release.
12
- LorcaPatchVersion = 3
12
+ LorcaPatchVersion = 0
13
13
 
14
14
  # Full version as a string.
15
15
  LorcaVersion = "#{LorcaMajorVersion}.#{LorcaMinorVersion}.#{LorcaPatchVersion}"
@@ -7,6 +7,8 @@ require "minitest/proveit"
7
7
  require "minitest/unordered"
8
8
  require_relative "./../../_expand_lib_path"
9
9
 
10
+ ENV["LORCA_ENV"] = "test"
11
+
10
12
  class Minitest::Test
11
13
  make_my_diffs_pretty!
12
14
  prove_it!
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # -*- frozen_string_literal: true -*-
3
3
 
4
- require "_config/minitest"
4
+ require_relative "./../_config/minitest"
5
5
  require "rbconfig"
6
6
 
7
7
  class TestLorcaBin < Minitest::Test
@@ -3,6 +3,16 @@
3
3
  require_relative "./../../../_config/minitest"
4
4
  require "lorca/expansions/cli"
5
5
 
6
+ class FakeOutlet
7
+ def tty?
8
+ true
9
+ end
10
+
11
+ def puts text
12
+ $stdout.puts text
13
+ end
14
+ end
15
+
6
16
  class TestLorcaCLIExpansion < Minitest::Test
7
17
 
8
18
  # test dependencies, useful for testing Lorca::CLI but should be replaceable
@@ -27,26 +37,42 @@ class TestLorcaCLIExpansion < Minitest::Test
27
37
  writer = Lorca.add(Lorca::Phrases).new
28
38
  message = %r"\Apassphrase copied to clipboard\n"i # no `\z` due to `exit_cli`
29
39
  copied = "ah"
40
+ outlet = FakeOutlet.new
30
41
 
31
42
  writer.stub :phrase, copied do
32
- assert_output(message) { @cli.parse @argv.("--phrase"), writer: writer }
33
- assert_output { @cli.parse @argv.("-p"), writer: writer }
43
+ assert_output(message) { @cli.parse @argv.("--phrase"), writer: writer, outlet: outlet }
44
+ assert_output(message) { @cli.parse @argv.("-p"), writer: writer, outlet: outlet }
34
45
  end
35
46
 
36
47
  assert_equal copied, Clipboard.paste
37
48
  Clipboard.clear
38
49
  end
39
50
 
40
- def test_phrase_is_composed_of_as_many_words_as_the_given_number
51
+ def test_phrase_flag_can_take_an_optional_number_argument
41
52
  writer = Lorca.add(Lorca::Phrases).new
42
53
  copied = "ah"
54
+ outlet = FakeOutlet.new
43
55
 
44
56
  writer.stub :phrase, copied do
45
- _ = capture_io { @cli.parse @argv.("--phrase 9"), writer: writer }
57
+ _ = capture_io { @cli.parse @argv.("--phrase 9"), writer: writer, outlet: outlet }
46
58
  assert_equal copied, Clipboard.paste
47
59
  end
48
60
  Clipboard.clear
49
61
  end
62
+
63
+ def test_phrase_can_be_streamed
64
+ writer = Lorca.add(Lorca::Phrases).new
65
+ copied = "ah"
66
+
67
+ writer.stub :phrase, copied do
68
+ assert_output(%r"\Aah") { @cli.parse @argv.("--phrase"), writer: writer }
69
+ assert_output(%r"\Aah") { @cli.parse @argv.("-p"), writer: writer }
70
+ end
71
+ end
72
+
73
+ def test__version_displays_lorca_version
74
+ assert_output(%r"\A#{Lorca::LorcaVersion}") { @cli.parse @argv.("--version") }
75
+ end
50
76
  end
51
77
 
52
78
  class TestCLILorcaPlugin < Minitest::Test
@@ -6,6 +6,9 @@ require "lorca/expansions/phrases"
6
6
 
7
7
  # Use stubs for built-in expansions. External ones should instanciate Lorca.
8
8
  class TestLorcaPhrasesExpansion < Minitest::Test
9
+
10
+ parallelize_me!
11
+
9
12
  def setup
10
13
  Lorca.add Lorca::Phrases
11
14
  @lorca = Lorca.new
@@ -1,13 +1,16 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # -*- frozen_string_literal: true -*-
3
3
 
4
- require "_config/minitest"
4
+ require_relative "./../../_config/minitest"
5
5
  require "lorca/doc"
6
6
 
7
7
  # Tests w/ assert_respond_to show we care about the method existing not what's
8
8
  # returned, nor it's type. The type is implicitly check by building a gem w/o
9
9
  # warnings. There's a test for that.
10
10
  class TestLorcaDoc < Minitest::Test
11
+
12
+ parallelize_me!
13
+
11
14
  def test_has_summary
12
15
  assert_respond_to Lorca::LorcaDoc, :summary
13
16
  end
@@ -4,6 +4,9 @@ require_relative "./../../_config/minitest"
4
4
  require "lorca/manifest"
5
5
 
6
6
  class TestLorcaManifest < Minitest::Test
7
+
8
+ parallelize_me!
9
+
7
10
  def test_has_gem_name
8
11
  assert_equal "lorca", Lorca::LorcaManifest.gem_name
9
12
  end
@@ -35,10 +38,23 @@ class TestLorcaManifest < Minitest::Test
35
38
  assert_equal "ISC", Lorca::LorcaManifest.license
36
39
  end
37
40
 
41
+ def test_has_metadata
42
+ expected_metadata = {
43
+ "source_code_uri" => "https://notabug.org/rem/lorca",
44
+ "bug_tracker_uri" => "https://notabug.org/rem/lorca/issues",
45
+ "changelog_uri" => "https://notabug.org/rem/lorca/src/master/ChangeLog.md"
46
+ }
47
+
48
+ metadata = Lorca::LorcaManifest.metadata
49
+
50
+ assert_equal expected_metadata, metadata
51
+ assert_frozen metadata
52
+ end
53
+
38
54
  def test_has_files
39
55
  # test/**/dev/**/*.* files are excluded because they are development helpers
40
56
  expected_files =
41
- %w[ChangeLog.md License.md Manifest.md ReadMe.md _expand_lib_path.rb] +
57
+ %w[ChangeLog.md License.md Manifest.md ReadMe.md Security.md _expand_lib_path.rb] +
42
58
  Dir["bin/*"] +
43
59
  Dir["{lib,test}/**/*.{rb,txt,dir,pag}"] -
44
60
  Dir["test/**/dev/**/*.{rb,txt}"]
@@ -75,12 +91,15 @@ class TestLorcaManifest < Minitest::Test
75
91
  assert_equal "bin", Lorca::LorcaManifest.bindir
76
92
  end
77
93
 
94
+ # We don't check all binstubs in bin/ are included. Officially, there
95
+ # can only be one
78
96
  def test_binstubs_are_among_files_in_the_manifest
79
97
  binstubs = Lorca::LorcaManifest.binstubs
80
98
  files = Lorca::LorcaManifest.files
81
99
  bindir = Lorca::LorcaManifest.bindir
82
100
 
83
101
  binstubs.each { |b| assert_includes files, "#{bindir}/#{b}" }
102
+
84
103
  assert_frozen binstubs
85
104
  end
86
105
  end
@@ -1,10 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # -*- frozen_string_literal: true -*-
3
3
 
4
- require "_config/minitest"
4
+ require_relative "./../../_config/minitest"
5
5
  require "lorca/version"
6
6
 
7
7
  class TestLorcaVersion < Minitest::Test
8
+
9
+ parallelize_me!
10
+
8
11
  def test_lorca_has_a_version
9
12
  assert_match %r{\d+.\d+.\d+}, Lorca::LorcaVersion
10
13
  end
@@ -42,6 +42,9 @@ module ConfigurableExpansion
42
42
  end
43
43
 
44
44
  class TestLorcaCoreExtension < Minitest::Test
45
+
46
+ parallelize_me!
47
+
45
48
  def test_lorca_can_add_expansions
46
49
  Lorca.add FakeExpansion
47
50
  lorca = Lorca.new
@@ -80,6 +83,9 @@ class TestLorcaCoreExtension < Minitest::Test
80
83
  end
81
84
 
82
85
  class TestLorcaCorePlugin < Minitest::Test
86
+
87
+ parallelize_me!
88
+
83
89
  def setup
84
90
  @lorca = Lorca.new
85
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lorca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - René Maya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-16 00:00:00.000000000 Z
11
+ date: 2019-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clipboard
@@ -16,40 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: '1.3'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.1.1
22
+ version: 1.3.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.1'
29
+ version: '1.3'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 1.1.1
32
+ version: 1.3.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '1.16'
39
+ version: '2.0'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 1.16.1
42
+ version: 2.0.1
43
43
  type: :development
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '1.16'
49
+ version: '2.0'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 1.16.1
52
+ version: 2.0.1
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: rake
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: '12.3'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 12.3.0
62
+ version: 12.3.2
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -69,7 +69,7 @@ dependencies:
69
69
  version: '12.3'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 12.3.0
72
+ version: 12.3.2
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: hanna-nouveau
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -134,22 +134,22 @@ dependencies:
134
134
  name: minitest-proveit
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - "~>"
138
- - !ruby/object:Gem::Version
139
- version: '1.0'
140
137
  - - ">="
141
138
  - !ruby/object:Gem::Version
142
139
  version: 1.0.0
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '1.0'
143
143
  type: :development
144
144
  prerelease: false
145
145
  version_requirements: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - "~>"
148
- - !ruby/object:Gem::Version
149
- version: '1.0'
150
147
  - - ">="
151
148
  - !ruby/object:Gem::Version
152
149
  version: 1.0.0
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: minitest-autotest
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -183,11 +183,13 @@ extra_rdoc_files:
183
183
  - License.md
184
184
  - Manifest.md
185
185
  - ReadMe.md
186
+ - Security.md
186
187
  files:
187
188
  - ChangeLog.md
188
189
  - License.md
189
190
  - Manifest.md
190
191
  - ReadMe.md
192
+ - Security.md
191
193
  - _expand_lib_path.rb
192
194
  - bin/lorca
193
195
  - bin/lorca-alpine
@@ -210,7 +212,10 @@ files:
210
212
  homepage: https://notabug.org/rem/lorca
211
213
  licenses:
212
214
  - ISC
213
- metadata: {}
215
+ metadata:
216
+ source_code_uri: https://notabug.org/rem/lorca
217
+ bug_tracker_uri: https://notabug.org/rem/lorca/issues
218
+ changelog_uri: https://notabug.org/rem/lorca/src/master/ChangeLog.md
214
219
  post_install_message:
215
220
  rdoc_options:
216
221
  - "--line-numbers"
@@ -231,8 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
236
  - !ruby/object:Gem::Version
232
237
  version: '0'
233
238
  requirements: []
234
- rubyforge_project:
235
- rubygems_version: 2.7.7
239
+ rubygems_version: 3.0.2
236
240
  signing_key:
237
241
  specification_version: 4
238
242
  summary: Passphrase, and password generator