zxcvbn 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60e3fe0e3604968ba838150d7334d871d91a14bad10aa8c1a4050545cda8492c
4
- data.tar.gz: 8c5836256bc2d4a09ebd270d0197e7f59188b154e530e6d9c06054e1f4257cce
3
+ metadata.gz: f102d8ba269aad3742c05649bbb698c01d639ee794c8adc9abe66fb285674f42
4
+ data.tar.gz: 2f01f158959ed48ad413bb91970c7824efeb42392aca97b91e4d1be50a149e47
5
5
  SHA512:
6
- metadata.gz: a867966270f4d47b229c7be339d545e332c612fde4498ab1033ca21fa95d470938f11740109d7c6ec289dead9dc87f72eb1ad1d9d33f844ae16d9594b4de3df1
7
- data.tar.gz: d8788fbe1532f2ae838a4329d04ee3ba779cc8369f082b6f3aa2b4eb0f5b678c05e55f19ee254f26418da99e399821950ea814c6ba352f8ce2d69e1f1654ec4f
6
+ metadata.gz: c05246356ff182b57ca9acd01b6ee95269c4264a5d9cb1d947229de9ee9974e30a3860e4d860cec946c1ef22d9d9baa90dcf2f89bf843d8f5c749b3a0d64867c
7
+ data.tar.gz: 1dc9944425d5a9105ebe59eb0b1dab1a06bb98ff94e032b476714ebc23281560ea78a0ffebb4a086f7da42a6fdcd1502f296a1f45f84d94b99d63461d00c25eb
data/README.md CHANGED
@@ -75,7 +75,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
75
75
 
76
76
  ## Contributing
77
77
 
78
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/zxcvbn. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/zxcvbn/blob/master/CODE_OF_CONDUCT.md).
78
+ Bug reports and pull requests are welcome on GitHub at https://github.com/formigarafa/zxcvbn. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/zxcvbn/blob/master/CODE_OF_CONDUCT.md).
79
79
 
80
80
  ## License
81
81
 
@@ -4,231 +4,231 @@
4
4
  module Zxcvbn
5
5
  ADJACENCY_GRAPHS = {
6
6
  qwerty: {
7
- "!": ["`~", nil, nil, "2@", "qQ", nil],
8
- "\"": [";:", "[{", "]}", nil, nil, "/?"],
9
- "#": ["2@", nil, nil, "4$", "eE", "wW"],
10
- "$": ["3#", nil, nil, "5%", "rR", "eE"],
11
- "%": ["4$", nil, nil, "6^", "tT", "rR"],
12
- "&": ["6^", nil, nil, "8*", "uU", "yY"],
13
- "'": [";:", "[{", "]}", nil, nil, "/?"],
14
- "(": ["8*", nil, nil, "0)", "oO", "iI"],
15
- ")": ["9(", nil, nil, "-_", "pP", "oO"],
16
- "*": ["7&", nil, nil, "9(", "iI", "uU"],
17
- "+": ["-_", nil, nil, nil, "]}", "[{"],
18
- ",": ["mM", "kK", "lL", ".>", nil, nil],
19
- "-": ["0)", nil, nil, "=+", "[{", "pP"],
20
- ".": [",<", "lL", ";:", "/?", nil, nil],
21
- "/": [".>", ";:", "'\"", nil, nil, nil],
22
- "0": ["9(", nil, nil, "-_", "pP", "oO"],
23
- "1": ["`~", nil, nil, "2@", "qQ", nil],
24
- "2": ["1!", nil, nil, "3#", "wW", "qQ"],
25
- "3": ["2@", nil, nil, "4$", "eE", "wW"],
26
- "4": ["3#", nil, nil, "5%", "rR", "eE"],
27
- "5": ["4$", nil, nil, "6^", "tT", "rR"],
28
- "6": ["5%", nil, nil, "7&", "yY", "tT"],
29
- "7": ["6^", nil, nil, "8*", "uU", "yY"],
30
- "8": ["7&", nil, nil, "9(", "iI", "uU"],
31
- "9": ["8*", nil, nil, "0)", "oO", "iI"],
32
- ":": ["lL", "pP", "[{", "'\"", "/?", ".>"],
33
- ";": ["lL", "pP", "[{", "'\"", "/?", ".>"],
34
- "<": ["mM", "kK", "lL", ".>", nil, nil],
35
- "=": ["-_", nil, nil, nil, "]}", "[{"],
36
- ">": [",<", "lL", ";:", "/?", nil, nil],
37
- "?": [".>", ";:", "'\"", nil, nil, nil],
38
- "@": ["1!", nil, nil, "3#", "wW", "qQ"],
39
- "A": [ nil, "qQ", "wW", "sS", "zZ", nil],
40
- "B": ["vV", "gG", "hH", "nN", nil, nil],
41
- "C": ["xX", "dD", "fF", "vV", nil, nil],
42
- "D": ["sS", "eE", "rR", "fF", "cC", "xX"],
43
- "E": ["wW", "3#", "4$", "rR", "dD", "sS"],
44
- "F": ["dD", "rR", "tT", "gG", "vV", "cC"],
45
- "G": ["fF", "tT", "yY", "hH", "bB", "vV"],
46
- "H": ["gG", "yY", "uU", "jJ", "nN", "bB"],
47
- "I": ["uU", "8*", "9(", "oO", "kK", "jJ"],
48
- "J": ["hH", "uU", "iI", "kK", "mM", "nN"],
49
- "K": ["jJ", "iI", "oO", "lL", ",<", "mM"],
50
- "L": ["kK", "oO", "pP", ";:", ".>", ",<"],
51
- "M": ["nN", "jJ", "kK", ",<", nil, nil],
52
- "N": ["bB", "hH", "jJ", "mM", nil, nil],
53
- "O": ["iI", "9(", "0)", "pP", "lL", "kK"],
54
- "P": ["oO", "0)", "-_", "[{", ";:", "lL"],
55
- "Q": [ nil, "1!", "2@", "wW", "aA", nil],
56
- "R": ["eE", "4$", "5%", "tT", "fF", "dD"],
57
- "S": ["aA", "wW", "eE", "dD", "xX", "zZ"],
58
- "T": ["rR", "5%", "6^", "yY", "gG", "fF"],
59
- "U": ["yY", "7&", "8*", "iI", "jJ", "hH"],
60
- "V": ["cC", "fF", "gG", "bB", nil, nil],
61
- "W": ["qQ", "2@", "3#", "eE", "sS", "aA"],
62
- "X": ["zZ", "sS", "dD", "cC", nil, nil],
63
- "Y": ["tT", "6^", "7&", "uU", "hH", "gG"],
64
- "Z": [ nil, "aA", "sS", "xX", nil, nil],
65
- "[": ["pP", "-_", "=+", "]}", "'\"", ";:"],
66
- "\\": ["]}", nil, nil, nil, nil, nil],
67
- "]": ["[{", "=+", nil, "\\|", nil, "'\""],
68
- "^": ["5%", nil, nil, "7&", "yY", "tT"],
69
- "_": ["0)", nil, nil, "=+", "[{", "pP"],
70
- "`": [ nil, nil, nil, "1!", nil, nil],
71
- "a": [ nil, "qQ", "wW", "sS", "zZ", nil],
72
- "b": ["vV", "gG", "hH", "nN", nil, nil],
73
- "c": ["xX", "dD", "fF", "vV", nil, nil],
74
- "d": ["sS", "eE", "rR", "fF", "cC", "xX"],
75
- "e": ["wW", "3#", "4$", "rR", "dD", "sS"],
76
- "f": ["dD", "rR", "tT", "gG", "vV", "cC"],
77
- "g": ["fF", "tT", "yY", "hH", "bB", "vV"],
78
- "h": ["gG", "yY", "uU", "jJ", "nN", "bB"],
79
- "i": ["uU", "8*", "9(", "oO", "kK", "jJ"],
80
- "j": ["hH", "uU", "iI", "kK", "mM", "nN"],
81
- "k": ["jJ", "iI", "oO", "lL", ",<", "mM"],
82
- "l": ["kK", "oO", "pP", ";:", ".>", ",<"],
83
- "m": ["nN", "jJ", "kK", ",<", nil, nil],
84
- "n": ["bB", "hH", "jJ", "mM", nil, nil],
85
- "o": ["iI", "9(", "0)", "pP", "lL", "kK"],
86
- "p": ["oO", "0)", "-_", "[{", ";:", "lL"],
87
- "q": [ nil, "1!", "2@", "wW", "aA", nil],
88
- "r": ["eE", "4$", "5%", "tT", "fF", "dD"],
89
- "s": ["aA", "wW", "eE", "dD", "xX", "zZ"],
90
- "t": ["rR", "5%", "6^", "yY", "gG", "fF"],
91
- "u": ["yY", "7&", "8*", "iI", "jJ", "hH"],
92
- "v": ["cC", "fF", "gG", "bB", nil, nil],
93
- "w": ["qQ", "2@", "3#", "eE", "sS", "aA"],
94
- "x": ["zZ", "sS", "dD", "cC", nil, nil],
95
- "y": ["tT", "6^", "7&", "uU", "hH", "gG"],
96
- "z": [ nil, "aA", "sS", "xX", nil, nil],
97
- "{": ["pP", "-_", "=+", "]}", "'\"", ";:"],
98
- "|": ["]}", nil, nil, nil, nil, nil],
99
- "}": ["[{", "=+", nil, "\\|", nil, "'\""],
100
- "~": [ nil, nil, nil, "1!", nil, nil]
7
+ "!" => ["`~", nil, nil, "2@", "qQ", nil],
8
+ "\"" => [";:", "[{", "]}", nil, nil, "/?"],
9
+ "#" => ["2@", nil, nil, "4$", "eE", "wW"],
10
+ "$" => ["3#", nil, nil, "5%", "rR", "eE"],
11
+ "%" => ["4$", nil, nil, "6^", "tT", "rR"],
12
+ "&" => ["6^", nil, nil, "8*", "uU", "yY"],
13
+ "'" => [";:", "[{", "]}", nil, nil, "/?"],
14
+ "(" => ["8*", nil, nil, "0)", "oO", "iI"],
15
+ ")" => ["9(", nil, nil, "-_", "pP", "oO"],
16
+ "*" => ["7&", nil, nil, "9(", "iI", "uU"],
17
+ "+" => ["-_", nil, nil, nil, "]}", "[{"],
18
+ "," => ["mM", "kK", "lL", ".>", nil, nil],
19
+ "-" => ["0)", nil, nil, "=+", "[{", "pP"],
20
+ "." => [",<", "lL", ";:", "/?", nil, nil],
21
+ "/" => [".>", ";:", "'\"", nil, nil, nil],
22
+ "0" => ["9(", nil, nil, "-_", "pP", "oO"],
23
+ "1" => ["`~", nil, nil, "2@", "qQ", nil],
24
+ "2" => ["1!", nil, nil, "3#", "wW", "qQ"],
25
+ "3" => ["2@", nil, nil, "4$", "eE", "wW"],
26
+ "4" => ["3#", nil, nil, "5%", "rR", "eE"],
27
+ "5" => ["4$", nil, nil, "6^", "tT", "rR"],
28
+ "6" => ["5%", nil, nil, "7&", "yY", "tT"],
29
+ "7" => ["6^", nil, nil, "8*", "uU", "yY"],
30
+ "8" => ["7&", nil, nil, "9(", "iI", "uU"],
31
+ "9" => ["8*", nil, nil, "0)", "oO", "iI"],
32
+ ":" => ["lL", "pP", "[{", "'\"", "/?", ".>"],
33
+ ";" => ["lL", "pP", "[{", "'\"", "/?", ".>"],
34
+ "<" => ["mM", "kK", "lL", ".>", nil, nil],
35
+ "=" => ["-_", nil, nil, nil, "]}", "[{"],
36
+ ">" => [",<", "lL", ";:", "/?", nil, nil],
37
+ "?" => [".>", ";:", "'\"", nil, nil, nil],
38
+ "@" => ["1!", nil, nil, "3#", "wW", "qQ"],
39
+ "A" => [ nil, "qQ", "wW", "sS", "zZ", nil],
40
+ "B" => ["vV", "gG", "hH", "nN", nil, nil],
41
+ "C" => ["xX", "dD", "fF", "vV", nil, nil],
42
+ "D" => ["sS", "eE", "rR", "fF", "cC", "xX"],
43
+ "E" => ["wW", "3#", "4$", "rR", "dD", "sS"],
44
+ "F" => ["dD", "rR", "tT", "gG", "vV", "cC"],
45
+ "G" => ["fF", "tT", "yY", "hH", "bB", "vV"],
46
+ "H" => ["gG", "yY", "uU", "jJ", "nN", "bB"],
47
+ "I" => ["uU", "8*", "9(", "oO", "kK", "jJ"],
48
+ "J" => ["hH", "uU", "iI", "kK", "mM", "nN"],
49
+ "K" => ["jJ", "iI", "oO", "lL", ",<", "mM"],
50
+ "L" => ["kK", "oO", "pP", ";:", ".>", ",<"],
51
+ "M" => ["nN", "jJ", "kK", ",<", nil, nil],
52
+ "N" => ["bB", "hH", "jJ", "mM", nil, nil],
53
+ "O" => ["iI", "9(", "0)", "pP", "lL", "kK"],
54
+ "P" => ["oO", "0)", "-_", "[{", ";:", "lL"],
55
+ "Q" => [ nil, "1!", "2@", "wW", "aA", nil],
56
+ "R" => ["eE", "4$", "5%", "tT", "fF", "dD"],
57
+ "S" => ["aA", "wW", "eE", "dD", "xX", "zZ"],
58
+ "T" => ["rR", "5%", "6^", "yY", "gG", "fF"],
59
+ "U" => ["yY", "7&", "8*", "iI", "jJ", "hH"],
60
+ "V" => ["cC", "fF", "gG", "bB", nil, nil],
61
+ "W" => ["qQ", "2@", "3#", "eE", "sS", "aA"],
62
+ "X" => ["zZ", "sS", "dD", "cC", nil, nil],
63
+ "Y" => ["tT", "6^", "7&", "uU", "hH", "gG"],
64
+ "Z" => [ nil, "aA", "sS", "xX", nil, nil],
65
+ "[" => ["pP", "-_", "=+", "]}", "'\"", ";:"],
66
+ "\\" => ["]}", nil, nil, nil, nil, nil],
67
+ "]" => ["[{", "=+", nil, "\\|", nil, "'\""],
68
+ "^" => ["5%", nil, nil, "7&", "yY", "tT"],
69
+ "_" => ["0)", nil, nil, "=+", "[{", "pP"],
70
+ "`" => [ nil, nil, nil, "1!", nil, nil],
71
+ "a" => [ nil, "qQ", "wW", "sS", "zZ", nil],
72
+ "b" => ["vV", "gG", "hH", "nN", nil, nil],
73
+ "c" => ["xX", "dD", "fF", "vV", nil, nil],
74
+ "d" => ["sS", "eE", "rR", "fF", "cC", "xX"],
75
+ "e" => ["wW", "3#", "4$", "rR", "dD", "sS"],
76
+ "f" => ["dD", "rR", "tT", "gG", "vV", "cC"],
77
+ "g" => ["fF", "tT", "yY", "hH", "bB", "vV"],
78
+ "h" => ["gG", "yY", "uU", "jJ", "nN", "bB"],
79
+ "i" => ["uU", "8*", "9(", "oO", "kK", "jJ"],
80
+ "j" => ["hH", "uU", "iI", "kK", "mM", "nN"],
81
+ "k" => ["jJ", "iI", "oO", "lL", ",<", "mM"],
82
+ "l" => ["kK", "oO", "pP", ";:", ".>", ",<"],
83
+ "m" => ["nN", "jJ", "kK", ",<", nil, nil],
84
+ "n" => ["bB", "hH", "jJ", "mM", nil, nil],
85
+ "o" => ["iI", "9(", "0)", "pP", "lL", "kK"],
86
+ "p" => ["oO", "0)", "-_", "[{", ";:", "lL"],
87
+ "q" => [ nil, "1!", "2@", "wW", "aA", nil],
88
+ "r" => ["eE", "4$", "5%", "tT", "fF", "dD"],
89
+ "s" => ["aA", "wW", "eE", "dD", "xX", "zZ"],
90
+ "t" => ["rR", "5%", "6^", "yY", "gG", "fF"],
91
+ "u" => ["yY", "7&", "8*", "iI", "jJ", "hH"],
92
+ "v" => ["cC", "fF", "gG", "bB", nil, nil],
93
+ "w" => ["qQ", "2@", "3#", "eE", "sS", "aA"],
94
+ "x" => ["zZ", "sS", "dD", "cC", nil, nil],
95
+ "y" => ["tT", "6^", "7&", "uU", "hH", "gG"],
96
+ "z" => [ nil, "aA", "sS", "xX", nil, nil],
97
+ "{" => ["pP", "-_", "=+", "]}", "'\"", ";:"],
98
+ "|" => ["]}", nil, nil, nil, nil, nil],
99
+ "}" => ["[{", "=+", nil, "\\|", nil, "'\""],
100
+ "~" => [ nil, nil, nil, "1!", nil, nil]
101
101
  },
102
102
  dvorak: {
103
- "!": ["`~", nil, nil, "2@", "'\"", nil],
104
- "\"": [ nil, "1!", "2@", ",<", "aA", nil],
105
- "#": ["2@", nil, nil, "4$", ".>", ",<"],
106
- "$": ["3#", nil, nil, "5%", "pP", ".>"],
107
- "%": ["4$", nil, nil, "6^", "yY", "pP"],
108
- "&": ["6^", nil, nil, "8*", "gG", "fF"],
109
- "'": [ nil, "1!", "2@", ",<", "aA", nil],
110
- "(": ["8*", nil, nil, "0)", "rR", "cC"],
111
- ")": ["9(", nil, nil, "[{", "lL", "rR"],
112
- "*": ["7&", nil, nil, "9(", "cC", "gG"],
113
- "+": ["/?", "]}", nil, "\\|", nil, "-_"],
114
- ",": ["'\"", "2@", "3#", ".>", "oO", "aA"],
115
- "-": ["sS", "/?", "=+", nil, nil, "zZ"],
116
- ".": [",<", "3#", "4$", "pP", "eE", "oO"],
117
- "/": ["lL", "[{", "]}", "=+", "-_", "sS"],
118
- "0": ["9(", nil, nil, "[{", "lL", "rR"],
119
- "1": ["`~", nil, nil, "2@", "'\"", nil],
120
- "2": ["1!", nil, nil, "3#", ",<", "'\""],
121
- "3": ["2@", nil, nil, "4$", ".>", ",<"],
122
- "4": ["3#", nil, nil, "5%", "pP", ".>"],
123
- "5": ["4$", nil, nil, "6^", "yY", "pP"],
124
- "6": ["5%", nil, nil, "7&", "fF", "yY"],
125
- "7": ["6^", nil, nil, "8*", "gG", "fF"],
126
- "8": ["7&", nil, nil, "9(", "cC", "gG"],
127
- "9": ["8*", nil, nil, "0)", "rR", "cC"],
128
- ":": [ nil, "aA", "oO", "qQ", nil, nil],
129
- ";": [ nil, "aA", "oO", "qQ", nil, nil],
130
- "<": ["'\"", "2@", "3#", ".>", "oO", "aA"],
131
- "=": ["/?", "]}", nil, "\\|", nil, "-_"],
132
- ">": [",<", "3#", "4$", "pP", "eE", "oO"],
133
- "?": ["lL", "[{", "]}", "=+", "-_", "sS"],
134
- "@": ["1!", nil, nil, "3#", ",<", "'\""],
135
- "A": [ nil, "'\"", ",<", "oO", ";:", nil],
136
- "B": ["xX", "dD", "hH", "mM", nil, nil],
137
- "C": ["gG", "8*", "9(", "rR", "tT", "hH"],
138
- "D": ["iI", "fF", "gG", "hH", "bB", "xX"],
139
- "E": ["oO", ".>", "pP", "uU", "jJ", "qQ"],
140
- "F": ["yY", "6^", "7&", "gG", "dD", "iI"],
141
- "G": ["fF", "7&", "8*", "cC", "hH", "dD"],
142
- "H": ["dD", "gG", "cC", "tT", "mM", "bB"],
143
- "I": ["uU", "yY", "fF", "dD", "xX", "kK"],
144
- "J": ["qQ", "eE", "uU", "kK", nil, nil],
145
- "K": ["jJ", "uU", "iI", "xX", nil, nil],
146
- "L": ["rR", "0)", "[{", "/?", "sS", "nN"],
147
- "M": ["bB", "hH", "tT", "wW", nil, nil],
148
- "N": ["tT", "rR", "lL", "sS", "vV", "wW"],
149
- "O": ["aA", ",<", ".>", "eE", "qQ", ";:"],
150
- "P": [".>", "4$", "5%", "yY", "uU", "eE"],
151
- "Q": [";:", "oO", "eE", "jJ", nil, nil],
152
- "R": ["cC", "9(", "0)", "lL", "nN", "tT"],
153
- "S": ["nN", "lL", "/?", "-_", "zZ", "vV"],
154
- "T": ["hH", "cC", "rR", "nN", "wW", "mM"],
155
- "U": ["eE", "pP", "yY", "iI", "kK", "jJ"],
156
- "V": ["wW", "nN", "sS", "zZ", nil, nil],
157
- "W": ["mM", "tT", "nN", "vV", nil, nil],
158
- "X": ["kK", "iI", "dD", "bB", nil, nil],
159
- "Y": ["pP", "5%", "6^", "fF", "iI", "uU"],
160
- "Z": ["vV", "sS", "-_", nil, nil, nil],
161
- "[": ["0)", nil, nil, "]}", "/?", "lL"],
162
- "\\": ["=+", nil, nil, nil, nil, nil],
163
- "]": ["[{", nil, nil, nil, "=+", "/?"],
164
- "^": ["5%", nil, nil, "7&", "fF", "yY"],
165
- "_": ["sS", "/?", "=+", nil, nil, "zZ"],
166
- "`": [ nil, nil, nil, "1!", nil, nil],
167
- "a": [ nil, "'\"", ",<", "oO", ";:", nil],
168
- "b": ["xX", "dD", "hH", "mM", nil, nil],
169
- "c": ["gG", "8*", "9(", "rR", "tT", "hH"],
170
- "d": ["iI", "fF", "gG", "hH", "bB", "xX"],
171
- "e": ["oO", ".>", "pP", "uU", "jJ", "qQ"],
172
- "f": ["yY", "6^", "7&", "gG", "dD", "iI"],
173
- "g": ["fF", "7&", "8*", "cC", "hH", "dD"],
174
- "h": ["dD", "gG", "cC", "tT", "mM", "bB"],
175
- "i": ["uU", "yY", "fF", "dD", "xX", "kK"],
176
- "j": ["qQ", "eE", "uU", "kK", nil, nil],
177
- "k": ["jJ", "uU", "iI", "xX", nil, nil],
178
- "l": ["rR", "0)", "[{", "/?", "sS", "nN"],
179
- "m": ["bB", "hH", "tT", "wW", nil, nil],
180
- "n": ["tT", "rR", "lL", "sS", "vV", "wW"],
181
- "o": ["aA", ",<", ".>", "eE", "qQ", ";:"],
182
- "p": [".>", "4$", "5%", "yY", "uU", "eE"],
183
- "q": [";:", "oO", "eE", "jJ", nil, nil],
184
- "r": ["cC", "9(", "0)", "lL", "nN", "tT"],
185
- "s": ["nN", "lL", "/?", "-_", "zZ", "vV"],
186
- "t": ["hH", "cC", "rR", "nN", "wW", "mM"],
187
- "u": ["eE", "pP", "yY", "iI", "kK", "jJ"],
188
- "v": ["wW", "nN", "sS", "zZ", nil, nil],
189
- "w": ["mM", "tT", "nN", "vV", nil, nil],
190
- "x": ["kK", "iI", "dD", "bB", nil, nil],
191
- "y": ["pP", "5%", "6^", "fF", "iI", "uU"],
192
- "z": ["vV", "sS", "-_", nil, nil, nil],
193
- "{": ["0)", nil, nil, "]}", "/?", "lL"],
194
- "|": ["=+", nil, nil, nil, nil, nil],
195
- "}": ["[{", nil, nil, nil, "=+", "/?"],
196
- "~": [ nil, nil, nil, "1!", nil, nil]
103
+ "!" => ["`~", nil, nil, "2@", "'\"", nil],
104
+ "\"" => [ nil, "1!", "2@", ",<", "aA", nil],
105
+ "#" => ["2@", nil, nil, "4$", ".>", ",<"],
106
+ "$" => ["3#", nil, nil, "5%", "pP", ".>"],
107
+ "%" => ["4$", nil, nil, "6^", "yY", "pP"],
108
+ "&" => ["6^", nil, nil, "8*", "gG", "fF"],
109
+ "'" => [ nil, "1!", "2@", ",<", "aA", nil],
110
+ "(" => ["8*", nil, nil, "0)", "rR", "cC"],
111
+ ")" => ["9(", nil, nil, "[{", "lL", "rR"],
112
+ "*" => ["7&", nil, nil, "9(", "cC", "gG"],
113
+ "+" => ["/?", "]}", nil, "\\|", nil, "-_"],
114
+ "," => ["'\"", "2@", "3#", ".>", "oO", "aA"],
115
+ "-" => ["sS", "/?", "=+", nil, nil, "zZ"],
116
+ "." => [",<", "3#", "4$", "pP", "eE", "oO"],
117
+ "/" => ["lL", "[{", "]}", "=+", "-_", "sS"],
118
+ "0" => ["9(", nil, nil, "[{", "lL", "rR"],
119
+ "1" => ["`~", nil, nil, "2@", "'\"", nil],
120
+ "2" => ["1!", nil, nil, "3#", ",<", "'\""],
121
+ "3" => ["2@", nil, nil, "4$", ".>", ",<"],
122
+ "4" => ["3#", nil, nil, "5%", "pP", ".>"],
123
+ "5" => ["4$", nil, nil, "6^", "yY", "pP"],
124
+ "6" => ["5%", nil, nil, "7&", "fF", "yY"],
125
+ "7" => ["6^", nil, nil, "8*", "gG", "fF"],
126
+ "8" => ["7&", nil, nil, "9(", "cC", "gG"],
127
+ "9" => ["8*", nil, nil, "0)", "rR", "cC"],
128
+ ":" => [ nil, "aA", "oO", "qQ", nil, nil],
129
+ ";" => [ nil, "aA", "oO", "qQ", nil, nil],
130
+ "<" => ["'\"", "2@", "3#", ".>", "oO", "aA"],
131
+ "=" => ["/?", "]}", nil, "\\|", nil, "-_"],
132
+ ">" => [",<", "3#", "4$", "pP", "eE", "oO"],
133
+ "?" => ["lL", "[{", "]}", "=+", "-_", "sS"],
134
+ "@" => ["1!", nil, nil, "3#", ",<", "'\""],
135
+ "A" => [ nil, "'\"", ",<", "oO", ";:", nil],
136
+ "B" => ["xX", "dD", "hH", "mM", nil, nil],
137
+ "C" => ["gG", "8*", "9(", "rR", "tT", "hH"],
138
+ "D" => ["iI", "fF", "gG", "hH", "bB", "xX"],
139
+ "E" => ["oO", ".>", "pP", "uU", "jJ", "qQ"],
140
+ "F" => ["yY", "6^", "7&", "gG", "dD", "iI"],
141
+ "G" => ["fF", "7&", "8*", "cC", "hH", "dD"],
142
+ "H" => ["dD", "gG", "cC", "tT", "mM", "bB"],
143
+ "I" => ["uU", "yY", "fF", "dD", "xX", "kK"],
144
+ "J" => ["qQ", "eE", "uU", "kK", nil, nil],
145
+ "K" => ["jJ", "uU", "iI", "xX", nil, nil],
146
+ "L" => ["rR", "0)", "[{", "/?", "sS", "nN"],
147
+ "M" => ["bB", "hH", "tT", "wW", nil, nil],
148
+ "N" => ["tT", "rR", "lL", "sS", "vV", "wW"],
149
+ "O" => ["aA", ",<", ".>", "eE", "qQ", ";:"],
150
+ "P" => [".>", "4$", "5%", "yY", "uU", "eE"],
151
+ "Q" => [";:", "oO", "eE", "jJ", nil, nil],
152
+ "R" => ["cC", "9(", "0)", "lL", "nN", "tT"],
153
+ "S" => ["nN", "lL", "/?", "-_", "zZ", "vV"],
154
+ "T" => ["hH", "cC", "rR", "nN", "wW", "mM"],
155
+ "U" => ["eE", "pP", "yY", "iI", "kK", "jJ"],
156
+ "V" => ["wW", "nN", "sS", "zZ", nil, nil],
157
+ "W" => ["mM", "tT", "nN", "vV", nil, nil],
158
+ "X" => ["kK", "iI", "dD", "bB", nil, nil],
159
+ "Y" => ["pP", "5%", "6^", "fF", "iI", "uU"],
160
+ "Z" => ["vV", "sS", "-_", nil, nil, nil],
161
+ "[" => ["0)", nil, nil, "]}", "/?", "lL"],
162
+ "\\" => ["=+", nil, nil, nil, nil, nil],
163
+ "]" => ["[{", nil, nil, nil, "=+", "/?"],
164
+ "^" => ["5%", nil, nil, "7&", "fF", "yY"],
165
+ "_" => ["sS", "/?", "=+", nil, nil, "zZ"],
166
+ "`" => [ nil, nil, nil, "1!", nil, nil],
167
+ "a" => [ nil, "'\"", ",<", "oO", ";:", nil],
168
+ "b" => ["xX", "dD", "hH", "mM", nil, nil],
169
+ "c" => ["gG", "8*", "9(", "rR", "tT", "hH"],
170
+ "d" => ["iI", "fF", "gG", "hH", "bB", "xX"],
171
+ "e" => ["oO", ".>", "pP", "uU", "jJ", "qQ"],
172
+ "f" => ["yY", "6^", "7&", "gG", "dD", "iI"],
173
+ "g" => ["fF", "7&", "8*", "cC", "hH", "dD"],
174
+ "h" => ["dD", "gG", "cC", "tT", "mM", "bB"],
175
+ "i" => ["uU", "yY", "fF", "dD", "xX", "kK"],
176
+ "j" => ["qQ", "eE", "uU", "kK", nil, nil],
177
+ "k" => ["jJ", "uU", "iI", "xX", nil, nil],
178
+ "l" => ["rR", "0)", "[{", "/?", "sS", "nN"],
179
+ "m" => ["bB", "hH", "tT", "wW", nil, nil],
180
+ "n" => ["tT", "rR", "lL", "sS", "vV", "wW"],
181
+ "o" => ["aA", ",<", ".>", "eE", "qQ", ";:"],
182
+ "p" => [".>", "4$", "5%", "yY", "uU", "eE"],
183
+ "q" => [";:", "oO", "eE", "jJ", nil, nil],
184
+ "r" => ["cC", "9(", "0)", "lL", "nN", "tT"],
185
+ "s" => ["nN", "lL", "/?", "-_", "zZ", "vV"],
186
+ "t" => ["hH", "cC", "rR", "nN", "wW", "mM"],
187
+ "u" => ["eE", "pP", "yY", "iI", "kK", "jJ"],
188
+ "v" => ["wW", "nN", "sS", "zZ", nil, nil],
189
+ "w" => ["mM", "tT", "nN", "vV", nil, nil],
190
+ "x" => ["kK", "iI", "dD", "bB", nil, nil],
191
+ "y" => ["pP", "5%", "6^", "fF", "iI", "uU"],
192
+ "z" => ["vV", "sS", "-_", nil, nil, nil],
193
+ "{" => ["0)", nil, nil, "]}", "/?", "lL"],
194
+ "|" => ["=+", nil, nil, nil, nil, nil],
195
+ "}" => ["[{", nil, nil, nil, "=+", "/?"],
196
+ "~" => [ nil, nil, nil, "1!", nil, nil]
197
197
  },
198
198
  keypad: {
199
- "*": ["/", nil, nil, nil, "-", "+", "9", "8"],
200
- "+": ["9", "*", "-", nil, nil, nil, nil, "6"],
201
- "-": ["*", nil, nil, nil, nil, nil, "+", "9"],
202
- ".": ["0", "2", "3", nil, nil, nil, nil, nil],
203
- "/": [ nil, nil, nil, nil, "*", "9", "8", "7"],
204
- "0": [ nil, "1", "2", "3", ".", nil, nil, nil],
205
- "1": [ nil, nil, "4", "5", "2", "0", nil, nil],
206
- "2": ["1", "4", "5", "6", "3", ".", "0", nil],
207
- "3": ["2", "5", "6", nil, nil, nil, ".", "0"],
208
- "4": [ nil, nil, "7", "8", "5", "2", "1", nil],
209
- "5": ["4", "7", "8", "9", "6", "3", "2", "1"],
210
- "6": ["5", "8", "9", "+", nil, nil, "3", "2"],
211
- "7": [ nil, nil, nil, "/", "8", "5", "4", nil],
212
- "8": ["7", nil, "/", "*", "9", "6", "5", "4"],
213
- "9": ["8", "/", "*", "-", "+", nil, "6", "5"]
199
+ "*" => ["/", nil, nil, nil, "-", "+", "9", "8"],
200
+ "+" => ["9", "*", "-", nil, nil, nil, nil, "6"],
201
+ "-" => ["*", nil, nil, nil, nil, nil, "+", "9"],
202
+ "." => ["0", "2", "3", nil, nil, nil, nil, nil],
203
+ "/" => [ nil, nil, nil, nil, "*", "9", "8", "7"],
204
+ "0" => [ nil, "1", "2", "3", ".", nil, nil, nil],
205
+ "1" => [ nil, nil, "4", "5", "2", "0", nil, nil],
206
+ "2" => ["1", "4", "5", "6", "3", ".", "0", nil],
207
+ "3" => ["2", "5", "6", nil, nil, nil, ".", "0"],
208
+ "4" => [ nil, nil, "7", "8", "5", "2", "1", nil],
209
+ "5" => ["4", "7", "8", "9", "6", "3", "2", "1"],
210
+ "6" => ["5", "8", "9", "+", nil, nil, "3", "2"],
211
+ "7" => [ nil, nil, nil, "/", "8", "5", "4", nil],
212
+ "8" => ["7", nil, "/", "*", "9", "6", "5", "4"],
213
+ "9" => ["8", "/", "*", "-", "+", nil, "6", "5"]
214
214
  },
215
215
  mac_keypad: {
216
- "*": ["/", nil, nil, nil, nil, nil, "-", "9"],
217
- "+": ["6", "9", "-", nil, nil, nil, nil, "3"],
218
- "-": ["9", "/", "*", nil, nil, nil, "+", "6"],
219
- ".": ["0", "2", "3", nil, nil, nil, nil, nil],
220
- "/": ["=", nil, nil, nil, "*", "-", "9", "8"],
221
- "0": [ nil, "1", "2", "3", ".", nil, nil, nil],
222
- "1": [ nil, nil, "4", "5", "2", "0", nil, nil],
223
- "2": ["1", "4", "5", "6", "3", ".", "0", nil],
224
- "3": ["2", "5", "6", "+", nil, nil, ".", "0"],
225
- "4": [ nil, nil, "7", "8", "5", "2", "1", nil],
226
- "5": ["4", "7", "8", "9", "6", "3", "2", "1"],
227
- "6": ["5", "8", "9", "-", "+", nil, "3", "2"],
228
- "7": [ nil, nil, nil, "=", "8", "5", "4", nil],
229
- "8": ["7", nil, "=", "/", "9", "6", "5", "4"],
230
- "9": ["8", "=", "/", "*", "-", "+", "6", "5"],
231
- "=": [ nil, nil, nil, nil, "/", "9", "8", "7"]
216
+ "*" => ["/", nil, nil, nil, nil, nil, "-", "9"],
217
+ "+" => ["6", "9", "-", nil, nil, nil, nil, "3"],
218
+ "-" => ["9", "/", "*", nil, nil, nil, "+", "6"],
219
+ "." => ["0", "2", "3", nil, nil, nil, nil, nil],
220
+ "/" => ["=", nil, nil, nil, "*", "-", "9", "8"],
221
+ "0" => [ nil, "1", "2", "3", ".", nil, nil, nil],
222
+ "1" => [ nil, nil, "4", "5", "2", "0", nil, nil],
223
+ "2" => ["1", "4", "5", "6", "3", ".", "0", nil],
224
+ "3" => ["2", "5", "6", "+", nil, nil, ".", "0"],
225
+ "4" => [ nil, nil, "7", "8", "5", "2", "1", nil],
226
+ "5" => ["4", "7", "8", "9", "6", "3", "2", "1"],
227
+ "6" => ["5", "8", "9", "-", "+", nil, "3", "2"],
228
+ "7" => [ nil, nil, nil, "=", "8", "5", "4", nil],
229
+ "8" => ["7", nil, "=", "/", "9", "6", "5", "4"],
230
+ "9" => ["8", "=", "/", "*", "-", "+", "6", "5"],
231
+ "=" => [ nil, nil, nil, nil, "/", "9", "8", "7"]
232
232
  }
233
233
  }
234
234
  end
@@ -23,21 +23,22 @@ module Zxcvbn
23
23
  }
24
24
 
25
25
  L33T_TABLE = {
26
- a: ['4', '@'],
27
- b: ['8'],
28
- c: ['(', '{', '[', '<'],
29
- e: ['3'],
30
- g: ['6', '9'],
31
- i: ['1', '!', '|'],
32
- l: ['1', '|', '7'],
33
- o: ['0'],
34
- s: ['$', '5'],
35
- t: ['+', '7'],
36
- x: ['%'],
37
- z: ['2']
26
+ "a" => ['4', '@'],
27
+ "b" => ['8'],
28
+ "c" => ['(', '{', '[', '<'],
29
+ "e" => ['3'],
30
+ "g" => ['6', '9'],
31
+ "i" => ['1', '!', '|'],
32
+ "l" => ['1', '|', '7'],
33
+ "o" => ['0'],
34
+ "s" => ['$', '5'],
35
+ "t" => ['+', '7'],
36
+ "x" => ['%'],
37
+ "z" => ['2']
38
38
  }
39
39
 
40
40
  REGEXEN = {
41
+ # alpha_lower: /[a-z]/,
41
42
  # recent_year: /19\d\d|200\d|201\d/g
42
43
  recent_year: /19\d\d|200\d|201\d/
43
44
  }
@@ -115,20 +116,10 @@ module Zxcvbn
115
116
  obj.empty?
116
117
  end
117
118
 
118
- # extend: function(lst, lst2) {
119
- # return lst.push.apply(lst, lst2);
120
- # },
121
-
122
119
  def self.translate(string, chr_map)
123
120
  string.split('').map {|chr| chr_map[chr] || chr}.join("")
124
121
  end
125
122
 
126
- def self.mod(n, m)
127
- # double check the need for this function
128
- binding.pry
129
- # return ((n % m) + m) % m; # mod impl that works for negative numbers
130
- end
131
-
132
123
  def self.sorted(matches)
133
124
  # sort on i primary, j secondary
134
125
  matches.sort_by{|match| [match[:i], match[:j]] }
@@ -164,7 +155,7 @@ module Zxcvbn
164
155
  pattern: 'dictionary',
165
156
  i: i,
166
157
  j: j,
167
- token: password_lower[i..j],
158
+ token: password[i..j],
168
159
  matched_word: word,
169
160
  rank: rank,
170
161
  dictionary_name: dictionary_name.to_s,
@@ -337,7 +328,7 @@ module Zxcvbn
337
328
  j = i + 1
338
329
  last_direction = nil
339
330
  turns = 0
340
- if (graph_name == 'qwerty' || graph_name == 'dvorak') && SHIFTED_RX.match?(password[i])
331
+ if (graph_name == :qwerty || graph_name == :dvorak) && SHIFTED_RX.match?(password[i])
341
332
  # initial character is shifted
342
333
  shifted_count = 1
343
334
  else
@@ -385,7 +376,7 @@ module Zxcvbn
385
376
  i: i,
386
377
  j: j - 1,
387
378
  token: password[i..j],
388
- graph: graph_name,
379
+ graph: graph_name.to_s,
389
380
  turns: turns,
390
381
  shifted_count: shifted_count
391
382
  }
@@ -473,6 +464,7 @@ module Zxcvbn
473
464
  result = []
474
465
 
475
466
  update = -> (i, j, delta) do
467
+ delta ||= 0
476
468
  if j - i > 1 || (delta).abs == 1
477
469
  if 0 < delta.abs && delta.abs <= MAX_DELTA
478
470
  token = password[i..j]
@@ -539,7 +531,7 @@ module Zxcvbn
539
531
  token: token,
540
532
  i: rx_match.begin(0),
541
533
  j: rx_match.end(0) - 1,
542
- regex_name: name,
534
+ regex_name: name.to_s,
543
535
  regex_match: rx_match
544
536
  }
545
537
  match_index = rx_match.begin(0) + 1
@@ -572,15 +564,17 @@ module Zxcvbn
572
564
  # to every possible date match.
573
565
  matches = []
574
566
  maybe_date_no_separator = /^\d{4,8}$/
575
- maybe_date_with_separator = %r{
576
- ^
577
- ( \d{1,4} ) # day, month, year
578
- ( [\s/\\_.-] ) # separator
579
- ( \d{1,2} ) # day, month
580
- \2 # same separator
581
- ( \d{1,4} ) # day, month, year
582
- $
583
- }
567
+
568
+ # maybe_date_with_separator = %r{
569
+ # ^
570
+ # ( \d{1,4} ) # day, month, year
571
+ # ( [\s/\\_.-] ) # separator
572
+ # ( \d{1,2} ) # day, month
573
+ # \2 # same separator
574
+ # ( \d{1,4} ) # day, month, year
575
+ # $
576
+ # }
577
+ maybe_date_with_separator = /^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/
584
578
 
585
579
  (0..(password.length - 4)).each do |i|
586
580
  (i + 3..i + 7).each do |j|
@@ -642,9 +636,9 @@ module Zxcvbn
642
636
  i: i,
643
637
  j: j,
644
638
  separator: rx_match[2],
645
- year: dmy.year,
646
- month: dmy.month,
647
- day: dmy.day
639
+ year: dmy[:year],
640
+ month: dmy[:month],
641
+ day: dmy[:day]
648
642
  }
649
643
  end
650
644
  end
@@ -705,8 +699,8 @@ module Zxcvbn
705
699
  if dm
706
700
  return {
707
701
  year: y,
708
- month: dm.month,
709
- day: dm.day
702
+ month: dm[:month],
703
+ day: dm[:day]
710
704
  }
711
705
  else
712
706
  # for a candidate that includes a four-digit year,
@@ -178,7 +178,7 @@ module Zxcvbn
178
178
  optimal_match_sequence = []
179
179
  k = n - 1
180
180
  # find the final best sequence length and score
181
- l, g = optimal[:g][k].min_by{|candidate_l, candidate_g| candidate_g }
181
+ l, g = (optimal[:g][k] || []).min_by{|candidate_l, candidate_g| candidate_g || 0 }
182
182
  while k >= 0
183
183
  m = optimal[:m][k][l]
184
184
  optimal_match_sequence.unshift(m)
@@ -245,7 +245,7 @@ module Zxcvbn
245
245
  date: method(:date_guesses),
246
246
  }
247
247
  guesses = estimation_functions[match[:pattern].to_sym].call(match)
248
- match[:guesses] = [guesses, min_guesses].max;
248
+ match[:guesses] = [guesses, min_guesses].max
249
249
  match[:guesses_log10] = Math.log10(match[:guesses])
250
250
  return match[:guesses]
251
251
  end
@@ -308,12 +308,12 @@ module Zxcvbn
308
308
  digits: 10,
309
309
  symbols: 33
310
310
  }
311
- if char_class_bases.has_key? match[:regex_name]
312
- return char_class_bases[match[:regex_name]] ** match[:token].length
311
+ if char_class_bases.has_key? match[:regex_name].to_sym
312
+ return char_class_bases[match[:regex_name].to_sym] ** match[:token].length
313
313
  elsif match[:regex_name] == 'recent_year'
314
314
  # conservative estimate of year space: num years from REFERENCE_YEAR.
315
315
  # if year is close to REFERENCE_YEAR, estimate a year space of MIN_YEAR_SPACE.
316
- year_space = abs(match[:regex_match[0]].to_i - REFERENCE_YEAR).abs
316
+ year_space = (match[:regex_match[0]].to_i - REFERENCE_YEAR).abs
317
317
  year_space = [year_space, MIN_YEAR_SPACE].max
318
318
  return year_space
319
319
  end
@@ -421,7 +421,7 @@ module Zxcvbn
421
421
  chrs = match[:token].downcase.split('')
422
422
  ss = chrs.count{|chr| chr == subbed }
423
423
  uu = chrs.count{|chr| chr == unsubbed }
424
- if ss === 0 || uu === 0
424
+ if ss == 0 || uu == 0
425
425
  # for this sub, password is either fully subbed (444) or fully unsubbed (aaa)
426
426
  # treat that as doubling the space (attacker needs to try fully subbed chars in addition to
427
427
  # unsubbed.)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zxcvbn
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zxcvbn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Santos
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-15 00:00:00.000000000 Z
11
+ date: 2021-05-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby port of Dropbox's zxcvbn.js
14
14
  email: