leetpassword 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 525ed07cdf7cb955fea1468d151e39b33493e8382e5243702f8601606f897206
4
+ data.tar.gz: 77ce5322708ffb6a0295988e3049d619a855ab09434d83cd6dc5bef73ce16f43
5
+ SHA512:
6
+ metadata.gz: e670eaa8346bc1b380a0644f4d4797c945ee51cbf5a79c7667943581c4d5691f0f88b0ad50c61131181a3ec7f9ab14f78fcfb61e01592b51d598dab09520c650
7
+ data.tar.gz: 318377588112f117415b5cbbc56c368afd4e0fb16c29179dc54ea2d38536efa1a6299c820312ac2f81ed550c51fdf144b5a167772816f67f0a975d65920f57dd
checksums.yaml.gz.sig ADDED
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
@@ -1,2 +1,2 @@
1
- ��E⥊��'o��J�QJ��O��A�Э�p|��)EV� �=9���� y��o����z�� ����w7_i�~6arL$����iF��H�|��N��d��'�}�$�w$��+�f��D����Ty]r:�/f�"�(�� �A���$ܧ��2C��a�a��3c��;�Ÿ�������A�K�
2
- =cr�
1
+ V^DCH���h73�� y���ߦ`������8 +!�O�`����~�?=�"�8i�#Z�0�K6@�SKa#=��=�V� 6�7A���- UUq]��'J��T ��|���@��Qւ@d��a17E���MA�����f���KK��x�q�˙���^�P5�����iZW�:B���{qB��S�+#�`@�����
2
+ �ً�r��@m�>���Y2A��J.k�SJ�לs���[t��P#�c���f̃�o���Ƣ*P�Θ^C[�Ж ޢ�8��: ����g���
metadata CHANGED
@@ -1,85 +1,90 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: leetpassword
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - James Robertson
9
8
  autorequire:
10
9
  bindir: bin
11
- cert_chain:
10
+ cert_chain:
12
11
  - |
13
12
  -----BEGIN CERTIFICATE-----
14
- MIIDRDCCAiygAwIBAgIBADANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
15
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
16
- 8ixkARkWAmV1MB4XDTEzMDIwNjIwNTg0N1oXDTE0MDIwNjIwNTg0N1owSDESMBAG
17
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
18
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
19
- ggEBANUV5kzvqxLqMtq+RdzFxNxUWh4r6dqoVyOmR4KR5NQ92QEyb9O2gNwWUB8r
20
- qzMs1p0GQZ9z3TmD2gbZ/UvOkE3qxRd2sCjAOj4bbJN5FN7P4Ek+m19Pvb8rvx/s
21
- X8pSmNG9mW4iy4crRUeyDsJg6Qb0MVy0NvLtbgPSY4Z7LkZMsuxuhszHwMslKemz
22
- YAxF2cfsuadODb02tk7OsmksyGy41g/ZS1gvv/MFHK4kFir8diW+rq/Ledlr44SE
23
- rlq7Y0Jdi5n+3tyQXASqhm8MNKDLNrhh4o+exSJiJOXtHd7byAqrq7OD39+F82WK
24
- dTqcyeoRrKSHckMk7QNPcud4sZUCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4E
25
- FgQUzULP9LAPr4WL5ae6TRlZAs4Wl24wCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEB
26
- BQUAA4IBAQBk9u3c8ovMENKcpYrMAUvWgMtKm3XxOQ0wwX4cx8U9vI8mTCHuARf9
27
- H+1BhpuePgw4WI8iSwII2wTrsFy1kZ1TDTm68klLA+CBmaJLsyscTmLmmEdajfMF
28
- Ve8VlDI4B2t2qI8XYYwDfsCLBoEyn9iBDwyAQgMSG1/07s4xEZY496L/GtV+do/x
29
- MWVOK5IdBfJmht2Fh6xAKLttKMPteIx5kivA78mSz/9eBUiKp16mrrM52VJxn7zU
30
- fN2Hry5xFOmULxaHq0cp4fBwVTK0l1lcNIZ/Pn958RJBqpS72REg9yPaKxECqxwM
31
- 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
32
37
  -----END CERTIFICATE-----
33
-
34
- date: 2013-02-06 00:00:00 Z
35
- dependencies:
36
- - !ruby/object:Gem::Dependency
37
- name: random-word
38
- prerelease: false
39
- requirement: &id001 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
38
+ date: 2022-05-26 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: random_word
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.1'
42
47
  - - ">="
43
- - !ruby/object:Gem::Version
44
- version: "0"
48
+ - !ruby/object:Gem::Version
49
+ version: 2.1.1
45
50
  type: :runtime
46
- version_requirements: *id001
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.1'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 2.1.1
47
60
  description:
48
- email:
61
+ email: digital.robertson@gmail.com
49
62
  executables: []
50
-
51
63
  extensions: []
52
-
53
64
  extra_rdoc_files: []
54
-
55
- files:
65
+ files:
56
66
  - lib/leetpassword.rb
57
- homepage:
58
- licenses: []
59
-
67
+ homepage: https://github.com/jrobertson/leetpassword
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
60
71
  post_install_message:
61
72
  rdoc_options: []
62
-
63
- require_paths:
73
+ require_paths:
64
74
  - lib
65
- required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
68
77
  - - ">="
69
- - !ruby/object:Gem::Version
70
- version: "0"
71
- required_rubygems_version: !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
78
+ - !ruby/object:Gem::Version
79
+ version: 2.1.2
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
74
82
  - - ">="
75
- - !ruby/object:Gem::Version
76
- version: "0"
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
77
85
  requirements: []
78
-
79
- rubyforge_project:
80
- rubygems_version: 1.8.23
86
+ rubygems_version: 3.2.22
81
87
  signing_key:
82
- specification_version: 3
88
+ specification_version: 4
83
89
  summary: leetpassword creates a password with 1 or 2 random leet words.
84
90
  test_files: []
85
-
metadata.gz.sig CHANGED
Binary file