gtk2passwordapp 5.1.0 → 5.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +13 -33
- data/bin/gtk2pwdV +47 -59
- data/data/VERSION +1 -1
- data/lib/gtk2passwordapp.rb +2 -2
- data/lib/gtk2passwordapp/config.rb +6 -9
- data/lib/gtk2passwordapp/gtk2pwdv.rb +26 -28
- metadata +45 -26
- data/lib/gtk2passwordapp/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e1a7fc4482638c1e48e23e95acd85352c7394ef
|
4
|
+
data.tar.gz: d0e03faec80ad444b930b8f1154330c1a2b2aa0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e3b17b4781554d70e0b44781f74bd503c330bf171f475db5f3c177d3688f49adf75b0e84f89e15c23137dfe00a2a296ade1f4c945259f2f31eae103aa09d52f
|
7
|
+
data.tar.gz: 6e5550cc6bda20473c448059816672d83427e0144f422aab0413ebde722ac96531979b0d4070337a65ab1750cf6388eb81cbc091838090aec6282cfec9cbc07b
|
data/README.rdoc
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
=
|
1
|
+
= Gtk2PasswordApp
|
2
2
|
|
3
3
|
{<img src="https://badge.fury.io/rb/gtk2passwordapp.svg" alt="Gem Version" />}[http://badge.fury.io/rb/gtk2passwordapp]
|
4
4
|
|
5
|
-
==
|
5
|
+
== Description:
|
6
6
|
|
7
7
|
Ruby-Gnome Password Manager.
|
8
8
|
|
9
9
|
Uses Blowfish to encrypt the datafile.
|
10
|
-
Features random password generator
|
10
|
+
Features random password generator, clipboard use, and TOTP.
|
11
11
|
|
12
|
-
==
|
12
|
+
== Install:
|
13
13
|
|
14
14
|
sudo gem install gtk2passwordapp
|
15
15
|
|
16
|
-
==
|
16
|
+
== Help:
|
17
17
|
|
18
18
|
Usage:
|
19
19
|
gtk2pwdV [:options]
|
@@ -21,42 +21,22 @@ Features random password generator and clipboard use.
|
|
21
21
|
Options:
|
22
22
|
-v --version Show version and exit
|
23
23
|
-h --help Show help and exit
|
24
|
-
Notes:
|
25
|
-
With the --nogui option,
|
26
|
-
one can give a pattern to filter by account names.
|
27
|
-
On the first run, --nogui can be used to export
|
28
|
-
version's 4 password data into version's 5 password data.
|
29
24
|
|
30
|
-
==
|
25
|
+
== More:
|
31
26
|
|
32
27
|
"Mouse Left Click" on window to get the application menu.
|
33
|
-
Anything I thought could be customized I made configurable.
|
34
|
-
See:
|
35
28
|
|
36
|
-
~/.config/gtk3app/gtk2passwordapp/config-?.?.yml
|
37
29
|
|
38
|
-
|
30
|
+
== Configuration:
|
31
|
+
|
32
|
+
~/.config/gtk3app/gtk2passwordapp/config-?.?.yml
|
39
33
|
|
40
|
-
[
|
34
|
+
[Salt] If your master-password length is under 14(MinPwdLen), it'll append this Salt.
|
35
|
+
[TOTP] If password matches this pattern, it will show the time based one time code.
|
41
36
|
[BackupFile] Although the GUI allows you to specify the file, this gives a default.
|
42
37
|
[TooOld] I have this set for a year (in seconds).
|
43
|
-
[CustomDigits] I have this as "
|
44
|
-
[Custom] I have this as
|
45
|
-
|
46
|
-
If you're updating from a previous version,
|
47
|
-
you may need to edit the new config file to match you're previously edited changes.
|
48
|
-
|
49
|
-
If you use a qrcode to enter your master password, and
|
50
|
-
the result is a multiline string,
|
51
|
-
gtk2passwordapp will assume you want the qgraph-sha256-digest.
|
52
|
-
See gtk2passwordapp/gtk2pwdv.rb's #process_pwd_entries to see how that's done.
|
53
|
-
|
54
|
-
If you add :Salt to the configuration file, it'll use the qgraph-sha256-digest
|
55
|
-
of the entry salted as can be seen in #process_pwd_entries.
|
56
|
-
|
57
|
-
Note that the initial set up of the mater-password still needs to be done explicitly.
|
58
|
-
That is, you'll need to enter the final resulting string when setting the master-password.
|
59
|
-
Again, see Gtk2PasswordApp::Gtk2PwdV#process_pwd_entries.
|
38
|
+
[CustomDigits] I have this as "3479ACEFHJKLMNPRTUVWXYabcdefghijkmnopqrstuvwxyz".
|
39
|
+
[Custom] I have this as "Custom".
|
60
40
|
|
61
41
|
== LICENSE:
|
62
42
|
|
data/bin/gtk2pwdV
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
module Gtk2PasswordApp
|
3
|
+
VERSION = '5.2.1'
|
4
|
+
end
|
2
5
|
|
3
|
-
|
4
|
-
if
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
begin
|
7
|
+
if a1 = ARGV.shift
|
8
|
+
if ['-v', '--version'].include?(a1)
|
9
|
+
puts Gtk2PasswordApp::VERSION
|
10
|
+
exit 0
|
11
|
+
end
|
9
12
|
|
10
|
-
|
11
|
-
|
13
|
+
if ['-h', '--help'].include?(a1)
|
14
|
+
puts <<-HELP
|
12
15
|
Usage:
|
13
16
|
gtk2pwdV [:options]
|
14
17
|
gtk2pwdV --nogui [<pattern>]
|
@@ -18,62 +21,47 @@ Options:
|
|
18
21
|
Notes:
|
19
22
|
With the --nogui option,
|
20
23
|
one can give a pattern to filter by account names.
|
21
|
-
|
22
|
-
version's 4 password data into version's 5 password data.
|
23
|
-
Expected file is:
|
24
|
+
Expected passwords data file is:
|
24
25
|
~/.cache/gtk3app/gtk2passwordapp/gtk2pwdV.dat
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
HELP
|
27
|
+
exit 0
|
28
|
+
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
else
|
56
|
-
$stderr.puts "No passwords file found."
|
57
|
-
$stderr.puts "Expected: #{F1}"
|
30
|
+
if a1 == '--nogui'
|
31
|
+
dat = File.expand_path('~/.cache/gtk3app/gtk2passwordapp/gtk2pwdV.dat')
|
32
|
+
raise "Passwords data file missing: #{dat}" unless File.exist? dat
|
33
|
+
require 'pp'
|
34
|
+
require 'yaml_zlib_blowfish'
|
35
|
+
require 'base_convert'
|
36
|
+
system('clear; clear')
|
37
|
+
print "Enter password: "
|
38
|
+
pwd = $stdin.gets.strip
|
39
|
+
system('clear; clear')
|
40
|
+
print "Enter salt: "
|
41
|
+
pwd << $stdin.gets.strip
|
42
|
+
system('clear; clear')
|
43
|
+
pwd = BaseConvert::FromTo.new(:hex, :qgraph).convert Digest::SHA256.hexdigest pwd
|
44
|
+
begin
|
45
|
+
lst = YamlZlibBlowfish.new(pwd).load(dat)
|
46
|
+
rescue OpenSSL::Cipher::CipherError
|
47
|
+
$stderr.puts "Bad password"
|
48
|
+
exit 65
|
49
|
+
end
|
50
|
+
if pattern = ARGV.shift
|
51
|
+
pattern = Regexp.new(pattern, Regexp::IGNORECASE)
|
52
|
+
end
|
53
|
+
if ARGV.empty? # if ARGV is not empty, it's bad usage.
|
54
|
+
pp (pattern)? lst.select{|k,v|pattern.match(k)} : lst
|
55
|
+
exit 0
|
58
56
|
end
|
59
57
|
end
|
60
|
-
begin
|
61
|
-
LIST = YamlZlibBlowfish.new(PWD).load(F1)
|
62
|
-
rescue OpenSSL::Cipher::CipherError
|
63
|
-
$stderr.puts "Bad password"
|
64
|
-
exit 65
|
65
|
-
end
|
66
|
-
if pattern = ARGV.shift
|
67
|
-
pattern = Regexp.new(pattern, Regexp::IGNORECASE)
|
68
|
-
end
|
69
|
-
unless ARGV.shift
|
70
|
-
pp (pattern)? LIST.select{|k,v|pattern.match(k)} : LIST
|
71
|
-
exit 0
|
72
|
-
end
|
73
|
-
end
|
74
58
|
|
75
|
-
|
76
|
-
|
59
|
+
$stderr.puts "Please match usage."
|
60
|
+
exit 64
|
61
|
+
end
|
62
|
+
rescue RuntimeError
|
63
|
+
$stderr.puts $!
|
64
|
+
exit 66
|
77
65
|
end
|
78
66
|
|
79
67
|
require 'gtk2passwordapp'
|
data/data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.1
|
1
|
+
5.2.1
|
data/lib/gtk2passwordapp.rb
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
require 'gtk3app'
|
3
3
|
|
4
4
|
# Helper Gems.
|
5
|
+
require 'base32'
|
6
|
+
require 'totp'
|
5
7
|
require 'yaml_zlib_blowfish'
|
6
8
|
require 'super_random'
|
7
9
|
require 'base_convert'
|
8
|
-
require 'helpema'
|
9
10
|
|
10
11
|
# This Gem.
|
11
|
-
require_relative 'gtk2passwordapp/version.rb'
|
12
12
|
require_relative 'gtk2passwordapp/config.rb'
|
13
13
|
require_relative 'gtk2passwordapp/such_parts.rb'
|
14
14
|
require_relative 'gtk2passwordapp/account.rb'
|
@@ -8,12 +8,12 @@ module Gtk2PasswordApp
|
|
8
8
|
a0 = Rafini::Empty::ARRAY
|
9
9
|
|
10
10
|
CONFIG = {
|
11
|
+
Salt: s0, # Password Salt
|
12
|
+
MinPwdLen: 14,
|
13
|
+
TOTP: /^[A-Z2-7]{16,}$/,
|
11
14
|
|
12
15
|
# Password Data File
|
13
16
|
PwdFile: "#{XDG['CACHE']}/gtk3app/gtk2passwordapp/gtk2pwdV.dat",
|
14
|
-
# Shared Secret File
|
15
|
-
# Consider using a file found in a removable flashdrive.
|
16
|
-
SharedSecretFile: "#{XDG['CACHE']}/gtk3app/gtk2passwordapp/key.ssss",
|
17
17
|
BackupFile: "#{ENV['HOME']}/Dropbox/gtk2pwdV.bak",
|
18
18
|
|
19
19
|
# Mark Recent Selections
|
@@ -22,14 +22,11 @@ module Gtk2PasswordApp
|
|
22
22
|
# Mark Old Passwords
|
23
23
|
TooOld: 60*60*24*365, # Year
|
24
24
|
|
25
|
-
# Timeout for qr-code read.
|
26
|
-
QrcTimeOut: 15,
|
27
|
-
|
28
25
|
# Password Generators
|
29
26
|
Random: 'Random',
|
30
27
|
AlphaNumeric: 'Alpha-Numeric',
|
31
|
-
Custom: '
|
32
|
-
CustomDigits: '
|
28
|
+
Custom: 'Custom',
|
29
|
+
CustomDigits: '3479ACEFHJKLMNPRTUVWXYabcdefghijkmnopqrstuvwxyz',
|
33
30
|
|
34
31
|
# Button Labels
|
35
32
|
Go: 'Go',
|
@@ -126,7 +123,7 @@ module Gtk2PasswordApp
|
|
126
123
|
about_dialog: {
|
127
124
|
set_program_name: 'Password Manager',
|
128
125
|
set_version: VERSION.semantic(0..1),
|
129
|
-
set_copyright: '(c)
|
126
|
+
set_copyright: '(c) 2017 CarlosJHR64',
|
130
127
|
set_comments: 'A Gtk3App Password Manager',
|
131
128
|
set_website: 'https://github.com/carlosjhr64/gtk2passwordapp',
|
132
129
|
set_website_label: 'See it at GitHub!',
|
@@ -149,32 +149,20 @@ class Gtk2PwdV
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
152
|
+
def rehash(pwd)
|
153
|
+
pwd << CONFIG[:Salt] if pwd.length < CONFIG[:MinPwdLen]
|
154
|
+
BaseConvert::FromTo.new(:hex, :qgraph).convert Digest::SHA256.hexdigest(pwd)
|
155
|
+
end
|
156
|
+
|
152
157
|
def process_pwd_entries(entry1, entry2)
|
153
158
|
begin
|
154
|
-
|
155
|
-
|
156
|
-
if pwd.include?("\n")
|
157
|
-
pwd1 = BaseConvert::FromTo.new(:hex, :qgraph).convert Digest::SHA256.hexdigest pwd
|
158
|
-
else
|
159
|
-
pwd1 = pwd
|
160
|
-
end
|
161
|
-
end
|
162
|
-
raise 'No password given.' if pwd1 == ''
|
159
|
+
pwd = entry1.text.strip
|
160
|
+
raise 'No password given.' if pwd == ''
|
163
161
|
if entry2
|
164
|
-
raise 'Passwords did not match' unless entry2.text.strip==
|
165
|
-
@accounts.save
|
162
|
+
raise 'Passwords did not match' unless entry2.text.strip==pwd
|
163
|
+
@accounts.save rehash pwd
|
166
164
|
else
|
167
|
-
|
168
|
-
if File.exist? CONFIG[:SharedSecretFile] # and looks like we really do...
|
169
|
-
pwd0 = File.read(CONFIG[:SharedSecretFile]).strip
|
170
|
-
pwd = Helpema::SSSS.combine(pwd0, pwd1)
|
171
|
-
pwd1 = pwd unless pwd=='' # but maybe not.
|
172
|
-
end
|
173
|
-
end
|
174
|
-
if salt = CONFIG[:Salt]
|
175
|
-
pwd1 = BaseConvert::FromTo.new(:hex, :qgraph).convert Digest::SHA256.hexdigest(pwd1+salt)
|
176
|
-
end
|
177
|
-
@accounts.load pwd1
|
165
|
+
@accounts.load rehash pwd
|
178
166
|
end
|
179
167
|
true
|
180
168
|
rescue StandardError
|
@@ -253,8 +241,9 @@ class Gtk2PwdV
|
|
253
241
|
CONFIG[:FIELDS].each do |field, text|
|
254
242
|
entry = Such::PromptedLabel.new @page, :hbox!
|
255
243
|
entry.prompt_Label.text = text
|
256
|
-
entry.prompted_Label.text = @account.method(field).call
|
257
|
-
|
244
|
+
(_=entry.prompted_Label).text = @account.method(field).call
|
245
|
+
_.set_alignment(*CONFIG[:FIELD_ALIGNMENT])
|
246
|
+
_.selectable = true
|
258
247
|
entries[field] = entry
|
259
248
|
end
|
260
249
|
return entries
|
@@ -303,9 +292,18 @@ class Gtk2PwdV
|
|
303
292
|
when clip_box.b_Button # Previous
|
304
293
|
copy2clipboard @account.previous, @account.password
|
305
294
|
when clip_box.c_Button # Show
|
306
|
-
label.text
|
307
|
-
|
308
|
-
|
295
|
+
case label.text
|
296
|
+
when hidden
|
297
|
+
pwd = @account.password
|
298
|
+
if pwd=~/^[A-Z2-7]+$/
|
299
|
+
pwd = TOTP.passwords(pwd)[1].to_s
|
300
|
+
end
|
301
|
+
label.text = pwd
|
302
|
+
when @account.password
|
303
|
+
label.text = hidden
|
304
|
+
else
|
305
|
+
label.text = @account.password
|
306
|
+
end
|
309
307
|
end
|
310
308
|
end
|
311
309
|
clip_box.labels :Current, :Previous, :Show
|
@@ -353,7 +351,7 @@ class Gtk2PwdV
|
|
353
351
|
|
354
352
|
# cb and sb will be a CheckButton and SpinButton respectively.
|
355
353
|
cb = sb = nil
|
356
|
-
password =
|
354
|
+
password = (mode==:edit)? @account.password : ''
|
357
355
|
truncate = Proc.new do |p|
|
358
356
|
password = p
|
359
357
|
if cb.active?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtk2passwordapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.1
|
4
|
+
version: 5.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- carlosjhr64
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yaml_zlib_blowfish
|
@@ -30,6 +30,26 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: base_convert
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2.2'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.2.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '2.2'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.2.0
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
54
|
name: gtk3app
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +59,7 @@ dependencies:
|
|
39
59
|
version: '2.0'
|
40
60
|
- - ">="
|
41
61
|
- !ruby/object:Gem::Version
|
42
|
-
version: 2.0.
|
62
|
+
version: 2.0.1
|
43
63
|
type: :runtime
|
44
64
|
prerelease: false
|
45
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,67 +69,67 @@ dependencies:
|
|
49
69
|
version: '2.0'
|
50
70
|
- - ">="
|
51
71
|
- !ruby/object:Gem::Version
|
52
|
-
version: 2.0.
|
72
|
+
version: 2.0.1
|
53
73
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
74
|
+
name: base32
|
55
75
|
requirement: !ruby/object:Gem::Requirement
|
56
76
|
requirements:
|
57
77
|
- - "~>"
|
58
78
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
60
|
-
- -
|
79
|
+
version: '0.3'
|
80
|
+
- - '='
|
61
81
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
82
|
+
version: 0.3.2
|
63
83
|
type: :runtime
|
64
84
|
prerelease: false
|
65
85
|
version_requirements: !ruby/object:Gem::Requirement
|
66
86
|
requirements:
|
67
87
|
- - "~>"
|
68
88
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
70
|
-
- -
|
89
|
+
version: '0.3'
|
90
|
+
- - '='
|
71
91
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
92
|
+
version: 0.3.2
|
73
93
|
- !ruby/object:Gem::Dependency
|
74
|
-
name:
|
94
|
+
name: totp
|
75
95
|
requirement: !ruby/object:Gem::Requirement
|
76
96
|
requirements:
|
77
97
|
- - "~>"
|
78
98
|
- !ruby/object:Gem::Version
|
79
|
-
version: '
|
80
|
-
- -
|
99
|
+
version: '1.0'
|
100
|
+
- - '='
|
81
101
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
102
|
+
version: 1.0.0
|
83
103
|
type: :runtime
|
84
104
|
prerelease: false
|
85
105
|
version_requirements: !ruby/object:Gem::Requirement
|
86
106
|
requirements:
|
87
107
|
- - "~>"
|
88
108
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
-
- -
|
109
|
+
version: '1.0'
|
110
|
+
- - '='
|
91
111
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
112
|
+
version: 1.0.0
|
93
113
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
114
|
+
name: super_random
|
95
115
|
requirement: !ruby/object:Gem::Requirement
|
96
116
|
requirements:
|
97
117
|
- - "~>"
|
98
118
|
- !ruby/object:Gem::Version
|
99
|
-
version: '0
|
119
|
+
version: '1.0'
|
100
120
|
- - ">="
|
101
121
|
- !ruby/object:Gem::Version
|
102
|
-
version: 0.
|
122
|
+
version: 1.0.0
|
103
123
|
type: :runtime
|
104
124
|
prerelease: false
|
105
125
|
version_requirements: !ruby/object:Gem::Requirement
|
106
126
|
requirements:
|
107
127
|
- - "~>"
|
108
128
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0
|
129
|
+
version: '1.0'
|
110
130
|
- - ">="
|
111
131
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.
|
132
|
+
version: 1.0.0
|
113
133
|
description: |
|
114
134
|
Ruby-Gnome Password Manager.
|
115
135
|
|
@@ -132,7 +152,6 @@ files:
|
|
132
152
|
- lib/gtk2passwordapp/config.rb
|
133
153
|
- lib/gtk2passwordapp/gtk2pwdv.rb
|
134
154
|
- lib/gtk2passwordapp/such_parts.rb
|
135
|
-
- lib/gtk2passwordapp/version.rb
|
136
155
|
homepage: https://github.com/carlosjhr64/gtk2passwordapp
|
137
156
|
licenses:
|
138
157
|
- MIT
|
@@ -154,9 +173,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
173
|
- !ruby/object:Gem::Version
|
155
174
|
version: '0'
|
156
175
|
requirements:
|
157
|
-
- 'ruby: ruby 2.4.
|
176
|
+
- 'ruby: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]'
|
158
177
|
rubyforge_project:
|
159
|
-
rubygems_version: 2.6.
|
178
|
+
rubygems_version: 2.6.13
|
160
179
|
signing_key:
|
161
180
|
specification_version: 4
|
162
181
|
summary: Ruby-Gnome Password Manager.
|