leetpassword 0.1.2 → 1.0.1

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
- SHA1:
3
- metadata.gz: 95038516c6a9be16ac3e092307e222385c8b836a
4
- data.tar.gz: b8d629c7d30d7d69d346d04641614571690cfecd
2
+ SHA256:
3
+ metadata.gz: e88d4d8f34cbbbb99b1406a79474300e2b79e521bba67dce73298c812e148851
4
+ data.tar.gz: 56ae97da88d9901fdcd5d10ed14525e57a58ed2b1283a5f4dbcf61cdaeb2cc4f
5
5
  SHA512:
6
- metadata.gz: 8c228c172a16dc06325c20abd77da28b3d3f256f3e194713bab4af3a6d173e9cced02ce60e3bc08ed651494f9f2c5700ef4991678585224f2acef28d6afe2fd3
7
- data.tar.gz: 897ce5edf874aca4c04146c661df271e2e339a71efafa5c591a3f40a71c1e2004e3241e047c5bb5557f5e675f1a4056322f49f9b171f8c69420f3f2e0688fda5
6
+ metadata.gz: cb11c06c5e22a46d7e03dcc33740f1df49677a15772f9ae09bda2119c03afd9d5087b4d977ad634a2154d8c57fdc4debe253d542ac64c7333cceec6026eb4613
7
+ data.tar.gz: 046f61b38f49db3ddaddb542822f9b00f7290d7e32a29928b7cdb09fbc31e6c83528ec5b1e8f72d3eaf10d042ff68bbc983887d380de0cdddf1883eeb90608e1
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/leetpassword.rb CHANGED
@@ -2,46 +2,128 @@
2
2
 
3
3
  # file: leetpassword.rb
4
4
 
5
- require 'random-word'
5
+ require 'random_word'
6
6
 
7
7
  class LeetPassword
8
8
 
9
- def self.generate(max_len=nil, subs={i: '1', o: '0', e: '3'})
9
+ # note: nowadays it's typical for passwords to be required to
10
+ # contain at least 1 symbol, 2 uppercase characters and 2 numerals
11
+ #
12
+ def self.generate(max_len=nil, subs: {i: '1', o: '0', e: '3'},
13
+ symlist: ['@'], upcase: 2, symchar: 1, debug: false,
14
+ verbose: true)
15
+
16
+ max_len += symchar if max_len
10
17
 
11
18
  if max_len and max_len <= 6 then
12
19
  raise "max length must be greater than 6 characters"
13
20
  end
14
21
 
15
- noun = RandomWord.nouns.next.gsub(/_/,'')
22
+ rawnoun = RandomWord.nouns.next
23
+ hint1 = rawnoun.clone
24
+ noun = rawnoun.gsub(/_/,'')
16
25
  if max_len then
17
26
  until noun.length >= 6 and noun.length <= max_len
18
- noun = RandomWord.nouns.next.gsub(/_/,'')
27
+ rawnoun = RandomWord.nouns.next
28
+ hint1 = rawnoun.clone
29
+ noun = rawnoun.gsub(/_/,'')
19
30
  end
20
31
  end
21
32
 
33
+
22
34
  subs.each{|k,v| noun.gsub!(k.to_s,v)}
23
- return noun if noun.length > 7
24
35
 
25
- adj = RandomWord.adjs.next.gsub(/_/,'')
36
+ if noun.length > 7 then
37
+
38
+ n = upcase / 2
39
+ r = upcase - n
40
+ noun.sub!(/[a-z]{#{n}}/) {|x| x.upcase}
41
+ noun.sub!(/[a-z]{#{r}}/) {|x| x.upcase}
42
+
43
+ noun += symlist.sample
44
+ puts 'returning a noun' if debug
45
+ puts 'hint: ' + hint1 if verbose
46
+ return [noun, :noun, hint1]
47
+ end
48
+
49
+ rawadj = RandomWord.adjs.next
50
+ hint2 = rawadj.clone
51
+ adj = rawadj.gsub(/_/,'')
52
+
26
53
  if max_len then
27
54
  until adj.length >= 6 and adj.length <= max_len
28
- adj = RandomWord.adjs.next.gsub(/_/,'')
55
+ rawadj = RandomWord.adjs.next
56
+ hint2 = rawadj.clone
57
+ adj = rawadj.gsub(/_/,'')
29
58
  end
30
59
  end
31
60
 
61
+
32
62
  subs.each{|k,v| adj.gsub!(k.to_s,v)}
33
63
 
34
- return adj if adj.length > 7
64
+ if adj.length > 7 then
65
+ n = upcase / 2
66
+ r = upcase - n
67
+ adj.sub!(/[a-z]{#{n}}/) {|x| x.upcase}
68
+ adj.sub!(/[a-z]{#{r}}/) {|x| x.upcase}
69
+ adj += symlist.sample
70
+ puts 'returning an adjective' if debug
71
+ puts 'hint: ' + hint2 if verbose
72
+ return [adj, :adj, hint2]
73
+ end
74
+
75
+ hint = hint1 + ' ' + hint2
35
76
 
36
77
  if max_len then
37
- if (adj+noun).length <= max_len then
38
- return adj + noun
78
+
79
+ words = [noun, adj]
80
+
81
+ n = upcase / 2
82
+ r = upcase - n
83
+ words[0].sub!(/.{#{n}}/) {|x| x.upcase}
84
+ words[-1].sub!(/.{#{r}}/) {|x| x.upcase}
85
+ words.insert 1, symlist.sample(symchar)
86
+
87
+ if (words.join).length <= max_len then
88
+ puts 'returning a maxlen word' if debug
89
+ puts 'hint: ' + hint if verbose
90
+ return [words.join, :maxlen, hint]
39
91
  else
40
- LeetPassword.generate(max_len,subs)
92
+ LeetPassword.generate(max_len, verbose: verbose)
41
93
  end
94
+
42
95
  else
43
- return adj + noun
96
+
97
+ words = [noun, adj]
98
+ n = upcase / 2
99
+ r = upcase - n
100
+
101
+ words[0].sub!(/.{#{n}}/) {|x| x.upcase}
102
+ words[-1].sub!(/.{#{r}}/) {|x| x.upcase}
103
+ words.insert 1, symlist.sample(symchar)
104
+ puts 'words: ' + words.inspect if debug
105
+ puts 'returning a variable length' if debug
106
+ puts 'hint: ' + hint if verbose
107
+ return [words.join, :varlen, hint]
108
+
44
109
  end
110
+
111
+ end
112
+
113
+ # This method makes it easier to remember the password since it consists of
114
+ # the following:
115
+ #
116
+ # * 2 words
117
+ # * each word is capitalized
118
+ # * the letters i, e, o are replaced with the numbers 1, 3, and
119
+ # 0 respectively
120
+ # * the words are separated by the @ symbol
121
+ # * a password never longer than 12 characters
122
+ #
123
+ def self.easygen()
124
+ pwd, type, hint = self.generate(12, verbose: false) until type == :maxlen
125
+ puts 'hint: ' + hint
126
+ return pwd
45
127
  end
46
128
  end
47
129
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leetpassword
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,43 +10,55 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDRDCCAiygAwIBAgIBADANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
- 8ixkARkWAmV1MB4XDTEzMDIwNjIwNTg0N1oXDTE0MDIwNjIwNTg0N1owSDESMBAG
16
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBANUV5kzvqxLqMtq+RdzFxNxUWh4r6dqoVyOmR4KR5NQ92QEyb9O2gNwWUB8r
19
- qzMs1p0GQZ9z3TmD2gbZ/UvOkE3qxRd2sCjAOj4bbJN5FN7P4Ek+m19Pvb8rvx/s
20
- X8pSmNG9mW4iy4crRUeyDsJg6Qb0MVy0NvLtbgPSY4Z7LkZMsuxuhszHwMslKemz
21
- YAxF2cfsuadODb02tk7OsmksyGy41g/ZS1gvv/MFHK4kFir8diW+rq/Ledlr44SE
22
- rlq7Y0Jdi5n+3tyQXASqhm8MNKDLNrhh4o+exSJiJOXtHd7byAqrq7OD39+F82WK
23
- dTqcyeoRrKSHckMk7QNPcud4sZUCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4E
24
- FgQUzULP9LAPr4WL5ae6TRlZAs4Wl24wCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEB
25
- BQUAA4IBAQBk9u3c8ovMENKcpYrMAUvWgMtKm3XxOQ0wwX4cx8U9vI8mTCHuARf9
26
- H+1BhpuePgw4WI8iSwII2wTrsFy1kZ1TDTm68klLA+CBmaJLsyscTmLmmEdajfMF
27
- Ve8VlDI4B2t2qI8XYYwDfsCLBoEyn9iBDwyAQgMSG1/07s4xEZY496L/GtV+do/x
28
- MWVOK5IdBfJmht2Fh6xAKLttKMPteIx5kivA78mSz/9eBUiKp16mrrM52VJxn7zU
29
- fN2Hry5xFOmULxaHq0cp4fBwVTK0l1lcNIZ/Pn958RJBqpS72REg9yPaKxECqxwM
30
- SACOJXvb7sLlyn9zLaNDher+bKLaLwBq
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwNTI2MDcyNjI5WhcN
15
+ MjMwNTI2MDcyNjI5WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDjaDKP
17
+ VUyQS52JKpSAbbWga2HvFbGxoe5AkMT05MJCeCYOZeK9jWn/UNUoTQQKvQbUf/+G
18
+ KdAsnMfKN4J0ZDvZcT6F1/+xQfX1y96ZOYC2LpEFNXEZYgEEr6Nys7SZ7wwmCpLj
19
+ sT03cQmNboZSlx2To60hYVkEXweFwabUzciuRUURCvnqTG2aTQ5NCMYImhkbisY+
20
+ 6ZFnZyluumfZCo2XkF24X8J2KJvwaH76JE4e1JsvhYbx29ozp/1orSfZOs8ExWM9
21
+ sVpCWb92iuT0nCqDxkGR6tWuCnltnlL3zrhkT2FsKThzPyCoU+iIfruIrUbG65zG
22
+ 11UZ7o82YBz6VF9L2cm/c4LKIxiBplH4wvWy5T4xNmqwOHoubhV+br4abzOE4U/9
23
+ RChvKpn9nw+nUZupLZE53BSG80pPh+bPXpYGjw+7wSFfhwPmakD65v1UEECjbsQt
24
+ NiJWqmGqR2UPL4dGLej46xTSuQpsaot8TLac/h9l0RnE0FBY+7sW/xSIaBkCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUSPoELqlZ
26
+ Pxh1xm67yjd/p2ZNbwkwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAZAvMNWQmxsY7o1CzPoUSA3HUm/BXSbt7EyFr2e9u
29
+ KTgr0wHUsgh9Svu51fOG9w/+BsFd3yS9VEnJUztDWEPnX/OnXKrdlQMKPWSsAo9c
30
+ 8HG+KcXJjAgqG2C0+5yUCQXzej0wIWU0n3L1/6e5V8+2Xu1EyOKvC5A9I+oCc+P6
31
+ LJqaMufUX9Qefm34ZBdgvqzn0AftvMjYIUOvbIU5uem017NSHD00bmH1xO4+Dxhh
32
+ ve3J+5FvPjgE54S29bbfgvMJRPNPpRf1kAxpHNmm4d+5QJRoIkFgwqr83jFW1w+l
33
+ 5wuteMtb63Rh60vdtkMRexdlSWF0Tbns/otn0oLNTGDEjptmskS9Tt9asV+vy+38
34
+ gB5hvm0ZVOhWTupZAzI90V0KfVnVqfeBrXD+e+2LhQZPur7DKW6hJ7atyXoKnPGQ
35
+ wsJoMv/2Pxome92q2iZQ0ZEEV4DYM6tpetiC3sLMT70W5dBAck6YkUBfDlbRlrU1
36
+ a48r2r3b5G9dmbtyJVaowaxo
31
37
  -----END CERTIFICATE-----
32
- date: 2013-07-27 00:00:00.000000000 Z
38
+ date: 2022-05-26 00:00:00.000000000 Z
33
39
  dependencies:
34
40
  - !ruby/object:Gem::Dependency
35
- name: random-word
41
+ name: random_word
36
42
  requirement: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - '>='
44
+ - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: '0.2'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.2.0
41
50
  type: :runtime
42
51
  prerelease: false
43
52
  version_requirements: !ruby/object:Gem::Requirement
44
53
  requirements:
45
- - - '>='
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.2'
57
+ - - ">="
46
58
  - !ruby/object:Gem::Version
47
- version: '0'
59
+ version: 0.2.0
48
60
  description:
49
- email: james@r0bertson.co.uk
61
+ email: digital.robertson@gmail.com
50
62
  executables: []
51
63
  extensions: []
52
64
  extra_rdoc_files: []
@@ -62,17 +74,16 @@ require_paths:
62
74
  - lib
63
75
  required_ruby_version: !ruby/object:Gem::Requirement
64
76
  requirements:
65
- - - '>='
77
+ - - ">="
66
78
  - !ruby/object:Gem::Version
67
- version: '0'
79
+ version: 2.1.2
68
80
  required_rubygems_version: !ruby/object:Gem::Requirement
69
81
  requirements:
70
- - - '>='
82
+ - - ">="
71
83
  - !ruby/object:Gem::Version
72
84
  version: '0'
73
85
  requirements: []
74
- rubyforge_project:
75
- rubygems_version: 2.0.0.rc.2
86
+ rubygems_version: 3.2.22
76
87
  signing_key:
77
88
  specification_version: 4
78
89
  summary: leetpassword creates a password with 1 or 2 random leet words.
metadata.gz.sig CHANGED
Binary file