zxcvbn 0.1.0 → 0.1.5

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: 60e3fe0e3604968ba838150d7334d871d91a14bad10aa8c1a4050545cda8492c
4
- data.tar.gz: 8c5836256bc2d4a09ebd270d0197e7f59188b154e530e6d9c06054e1f4257cce
3
+ metadata.gz: 50df44a0d9bdff1e7b99f5ef1fac71d95a5bc23bf1d01d302bd23a8d6e027d1e
4
+ data.tar.gz: 4f7c36d4c57b193b72b4964e002931cf665851b8bfb13ccfd7b0f7ea74773840
5
5
  SHA512:
6
- metadata.gz: a867966270f4d47b229c7be339d545e332c612fde4498ab1033ca21fa95d470938f11740109d7c6ec289dead9dc87f72eb1ad1d9d33f844ae16d9594b4de3df1
7
- data.tar.gz: d8788fbe1532f2ae838a4329d04ee3ba779cc8369f082b6f3aa2b4eb0f5b678c05e55f19ee254f26418da99e399821950ea814c6ba352f8ce2d69e1f1654ec4f
6
+ metadata.gz: 7210bdcd7b53a785cdc046b6886ba99f02da09905638eacf4f8acbebbd7c3f4e57121f9bf9e49650c2aae2c1b1a782bc7736edfc378ca40d2a5082ce4682133d
7
+ data.tar.gz: 600e750ee98acd0c1fa070cdf7144324165a894eb42eeff336e5e59d57be8e8c08fe06f9bb70ef5827208077febe0039783d5ef16aecde2eb4458fffa7594eaa
data/.rubocop.yml CHANGED
@@ -1,5 +1,31 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 2.5
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
6
+ Layout/EndAlignment:
7
+ EnforcedStyleAlignWith: start_of_line
8
+
9
+ Layout/LineLength:
10
+ Max: 120
11
+
12
+ Lint/UnderscorePrefixedVariableName:
13
+ Enabled: false
14
+
15
+ Metrics:
16
+ Enabled: false
17
+
18
+ Naming/VariableNumber:
19
+ Enabled: false
20
+
21
+ Style/Documentation:
22
+ Enabled: false
23
+
24
+ Style/Next:
25
+ Enabled: false
26
+
27
+ Style/NumericPredicate:
28
+ Enabled: false
3
29
 
4
30
  Style/StringLiterals:
5
31
  Enabled: true
@@ -9,5 +35,11 @@ Style/StringLiteralsInInterpolation:
9
35
  Enabled: true
10
36
  EnforcedStyle: double_quotes
11
37
 
12
- Layout/LineLength:
13
- Max: 120
38
+ Style/NegatedIf:
39
+ Enabled: false
40
+
41
+ Style/SymbolArray:
42
+ Enabled: false
43
+
44
+ Style/WordArray:
45
+ Enabled: false
data/.travis.yml CHANGED
@@ -2,5 +2,5 @@
2
2
  language: ruby
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.6.6
5
+ - 2.5.9
6
6
  before_install: gem install bundler -v 2.2.15
data/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
- ## [Unreleased]
1
+ ## [0.1.4] - 2021-05-16
2
+
3
+ - Bunch of fixes, eall example passwords included have same result as js version.
4
+ - consistent code style applied.
5
+
2
6
 
3
7
  ## [0.1.0] - 2021-05-16
4
8
 
data/Gemfile CHANGED
@@ -5,8 +5,13 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in zxcvbn.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
8
+ group :development do
9
+ gem "mini_racer"
10
+ gem "rake", "~> 13.0"
11
+ gem "rspec", "~> 3.0"
12
+ gem "rubocop", "~> 1.7"
9
13
 
10
- gem "rspec", "~> 3.0"
11
-
12
- gem "rubocop", "~> 1.7"
14
+ gem "pry"
15
+ gem "pry-byebug"
16
+ gem "simplecov", require: false
17
+ end
data/Gemfile.lock CHANGED
@@ -1,16 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zxcvbn (0.1.0)
4
+ zxcvbn (0.1.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  ast (2.4.2)
10
+ byebug (11.1.3)
11
+ coderay (1.1.3)
10
12
  diff-lcs (1.4.4)
13
+ docile (1.4.0)
14
+ libv8-node (15.14.0.1-x86_64-darwin-19)
15
+ libv8-node (15.14.0.1-x86_64-linux)
16
+ method_source (1.0.0)
17
+ mini_racer (0.4.0)
18
+ libv8-node (~> 15.14.0.0)
11
19
  parallel (1.20.1)
12
20
  parser (3.0.1.1)
13
21
  ast (~> 2.4.1)
22
+ pry (0.14.1)
23
+ coderay (~> 1.1)
24
+ method_source (~> 1.0)
25
+ pry-byebug (3.8.0)
26
+ byebug (~> 11.0)
27
+ pry (~> 0.10)
14
28
  rainbow (3.0.0)
15
29
  rake (13.0.3)
16
30
  regexp_parser (2.1.1)
@@ -40,15 +54,26 @@ GEM
40
54
  rubocop-ast (1.5.0)
41
55
  parser (>= 3.0.1.1)
42
56
  ruby-progressbar (1.11.0)
57
+ simplecov (0.21.2)
58
+ docile (~> 1.1)
59
+ simplecov-html (~> 0.11)
60
+ simplecov_json_formatter (~> 0.1)
61
+ simplecov-html (0.12.3)
62
+ simplecov_json_formatter (0.1.3)
43
63
  unicode-display_width (2.0.0)
44
64
 
45
65
  PLATFORMS
46
66
  x86_64-darwin-19
67
+ x86_64-linux
47
68
 
48
69
  DEPENDENCIES
70
+ mini_racer
71
+ pry
72
+ pry-byebug
49
73
  rake (~> 13.0)
50
74
  rspec (~> 3.0)
51
75
  rubocop (~> 1.7)
76
+ simplecov
52
77
  zxcvbn!
53
78
 
54
79
  BUNDLED WITH
data/README.md CHANGED
@@ -24,45 +24,45 @@ Or install it yourself as:
24
24
  ```
25
25
  Zxcvbn.zxcvbn("password")
26
26
  => {
27
- :password => "pasword",
28
- :guesses => 3566,
29
- :guesses_log10 => 3.5521813388393357,
30
- :sequence => [
27
+ "password" => "password",
28
+ "guesses" => 3,
29
+ "guesses_log10" => 0.47712125471966244,
30
+ "sequence" => [
31
31
  {
32
- :pattern => "dictionary",
33
- :i => 0,
34
- :j => 6,
35
- :token => "pasword",
36
- :matched_word => "pasword",
37
- :rank => 3565,
38
- :dictionary_name => "passwords",
39
- :reversed => false,
40
- :l33t => false,
41
- :base_guesses => 3565,
42
- :uppercase_variations => 1,
43
- :l33t_variations => 1,
44
- :guesses => 3565,
45
- :guesses_log10 => 3.5520595341878844
32
+ "pattern" => "dictionary",
33
+ "i" => 0,
34
+ "j" => 7,
35
+ "token" => "password",
36
+ "matched_word" => "password",
37
+ "rank" => 2,
38
+ "dictionary_name" => "passwords",
39
+ "reversed" => false,
40
+ "l33t" => false,
41
+ "base_guesses" => 2,
42
+ "uppercase_variations" => 1,
43
+ "l33t_variations" => 1,
44
+ "guesses" => 2,
45
+ "guesses_log10" => 0.3010299956639812
46
46
  }
47
47
  ],
48
- :calc_time => 0,
49
- :crack_times_seconds => {
50
- :online_throttling_100_per_hour => 128376.0,
51
- :online_no_throttling_10_per_second => 356.6,
52
- :offline_slow_hashing_1e4_per_second => 0.3566,
53
- :offline_fast_hashing_1e10_per_second => 3.566e-07
48
+ "calc_time" => 1,
49
+ "crack_times_seconds" => {
50
+ "online_throttling_100_per_hour" => 108.0,
51
+ "online_no_throttling_10_per_second" => 0.3,
52
+ "offline_slow_hashing_1e4_per_second" => 0.0003,
53
+ "offline_fast_hashing_1e10_per_second" => 3.0e-10},
54
+ "crack_times_display" => {
55
+ "online_throttling_100_per_hour" => "2 minutes",
56
+ "online_no_throttling_10_per_second" => "less than a second",
57
+ "offline_slow_hashing_1e4_per_second" => "less than a second",
58
+ "offline_fast_hashing_1e10_per_second" => "less than a second"
54
59
  },
55
- :crack_times_display => {
56
- :online_throttling_100_per_hour => "1 day",
57
- :online_no_throttling_10_per_second => "6 minutes",
58
- :offline_slow_hashing_1e4_per_second => "less than a second",
59
- :offline_fast_hashing_1e10_per_second => "less than a second"
60
- },
61
- :score => 1,
62
- :feedback =>
63
- {
64
- :warning => "This is a very common password",
65
- :suggestions => ["Add another word or two. Uncommon words are better."]
60
+ "score" => 0,
61
+ "feedback" => {
62
+ "warning" => "This is a top-10 common password",
63
+ "suggestions" => [
64
+ "Add another word or two. Uncommon words are better."
65
+ ]
66
66
  }
67
67
  }
68
68
  ```
@@ -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
 
data/bin/console CHANGED
@@ -11,5 +11,8 @@ require "zxcvbn"
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
14
- require "irb"
15
- IRB.start(__FILE__)
14
+ # require "irb"
15
+ # IRB.start(__FILE__)
16
+
17
+ require "pry"
18
+ Pry.start("main")
data/lib/zxcvbn.rb CHANGED
@@ -14,21 +14,19 @@ module Zxcvbn
14
14
  def self.zxcvbn(password, user_inputs = [])
15
15
  start = (Time.now.to_f * 1000).to_i
16
16
  # reset the user inputs matcher on a per-request basis to keep things stateless
17
- sanitized_inputs = [];
17
+ sanitized_inputs = []
18
18
  user_inputs.each do |arg|
19
- if arg.is_a?(String) || arg.is_a?(Numeric) || arg == true || arg == false
20
- sanitized_inputs << arg.to_s.downcase
21
- end
19
+ sanitized_inputs << arg.to_s.downcase if arg.is_a?(String) || arg.is_a?(Numeric) || arg == true || arg == false
22
20
  end
23
- Matching.set_user_input_dictionary(sanitized_inputs)
21
+ Matching.user_input_dictionary = sanitized_inputs
24
22
  matches = Matching.omnimatch(password)
25
23
  result = Scoring.most_guessable_match_sequence(password, matches)
26
- result[:calc_time] = (Time.now.to_f * 1000).to_i - start
27
- attack_times = TimeEstimates.estimate_attack_times(result[:guesses])
24
+ result["calc_time"] = (Time.now.to_f * 1000).to_i - start
25
+ attack_times = TimeEstimates.estimate_attack_times(result["guesses"])
28
26
  attack_times.each do |prop, val|
29
27
  result[prop] = val
30
28
  end
31
- result[:feedback] = Feedback.get_feedback(result[:score], result[:sequence])
32
- return result
29
+ result["feedback"] = Feedback.get_feedback(result["score"], result["sequence"])
30
+ result
33
31
  end
34
32
  end
@@ -2,233 +2,237 @@
2
2
 
3
3
  # generated by scripts/build_keyboard_adjacency_graphs.py
4
4
  module Zxcvbn
5
+ # rubocop:disable Layout/SpaceInsideArrayLiteralBrackets
6
+ # rubocop:disable Layout/ExtraSpacing
5
7
  ADJACENCY_GRAPHS = {
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]
8
+ "qwerty" => {
9
+ "!" => ["`~", nil, nil, "2@", "qQ", nil],
10
+ "\"" => [";:", "[{", "]}", nil, nil, "/?"],
11
+ "#" => ["2@", nil, nil, "4$", "eE", "wW"],
12
+ "$" => ["3#", nil, nil, "5%", "rR", "eE"],
13
+ "%" => ["4$", nil, nil, "6^", "tT", "rR"],
14
+ "&" => ["6^", nil, nil, "8*", "uU", "yY"],
15
+ "'" => [";:", "[{", "]}", nil, nil, "/?"],
16
+ "(" => ["8*", nil, nil, "0)", "oO", "iI"],
17
+ ")" => ["9(", nil, nil, "-_", "pP", "oO"],
18
+ "*" => ["7&", nil, nil, "9(", "iI", "uU"],
19
+ "+" => ["-_", nil, nil, nil, "]}", "[{"],
20
+ "," => ["mM", "kK", "lL", ".>", nil, nil],
21
+ "-" => ["0)", nil, nil, "=+", "[{", "pP"],
22
+ "." => [",<", "lL", ";:", "/?", nil, nil],
23
+ "/" => [".>", ";:", "'\"", nil, nil, nil],
24
+ "0" => ["9(", nil, nil, "-_", "pP", "oO"],
25
+ "1" => ["`~", nil, nil, "2@", "qQ", nil],
26
+ "2" => ["1!", nil, nil, "3#", "wW", "qQ"],
27
+ "3" => ["2@", nil, nil, "4$", "eE", "wW"],
28
+ "4" => ["3#", nil, nil, "5%", "rR", "eE"],
29
+ "5" => ["4$", nil, nil, "6^", "tT", "rR"],
30
+ "6" => ["5%", nil, nil, "7&", "yY", "tT"],
31
+ "7" => ["6^", nil, nil, "8*", "uU", "yY"],
32
+ "8" => ["7&", nil, nil, "9(", "iI", "uU"],
33
+ "9" => ["8*", nil, nil, "0)", "oO", "iI"],
34
+ ":" => ["lL", "pP", "[{", "'\"", "/?", ".>"],
35
+ ";" => ["lL", "pP", "[{", "'\"", "/?", ".>"],
36
+ "<" => ["mM", "kK", "lL", ".>", nil, nil],
37
+ "=" => ["-_", nil, nil, nil, "]}", "[{"],
38
+ ">" => [",<", "lL", ";:", "/?", nil, nil],
39
+ "?" => [".>", ";:", "'\"", nil, nil, nil],
40
+ "@" => ["1!", nil, nil, "3#", "wW", "qQ"],
41
+ "A" => [ nil, "qQ", "wW", "sS", "zZ", nil],
42
+ "B" => ["vV", "gG", "hH", "nN", nil, nil],
43
+ "C" => ["xX", "dD", "fF", "vV", nil, nil],
44
+ "D" => ["sS", "eE", "rR", "fF", "cC", "xX"],
45
+ "E" => ["wW", "3#", "4$", "rR", "dD", "sS"],
46
+ "F" => ["dD", "rR", "tT", "gG", "vV", "cC"],
47
+ "G" => ["fF", "tT", "yY", "hH", "bB", "vV"],
48
+ "H" => ["gG", "yY", "uU", "jJ", "nN", "bB"],
49
+ "I" => ["uU", "8*", "9(", "oO", "kK", "jJ"],
50
+ "J" => ["hH", "uU", "iI", "kK", "mM", "nN"],
51
+ "K" => ["jJ", "iI", "oO", "lL", ",<", "mM"],
52
+ "L" => ["kK", "oO", "pP", ";:", ".>", ",<"],
53
+ "M" => ["nN", "jJ", "kK", ",<", nil, nil],
54
+ "N" => ["bB", "hH", "jJ", "mM", nil, nil],
55
+ "O" => ["iI", "9(", "0)", "pP", "lL", "kK"],
56
+ "P" => ["oO", "0)", "-_", "[{", ";:", "lL"],
57
+ "Q" => [ nil, "1!", "2@", "wW", "aA", nil],
58
+ "R" => ["eE", "4$", "5%", "tT", "fF", "dD"],
59
+ "S" => ["aA", "wW", "eE", "dD", "xX", "zZ"],
60
+ "T" => ["rR", "5%", "6^", "yY", "gG", "fF"],
61
+ "U" => ["yY", "7&", "8*", "iI", "jJ", "hH"],
62
+ "V" => ["cC", "fF", "gG", "bB", nil, nil],
63
+ "W" => ["qQ", "2@", "3#", "eE", "sS", "aA"],
64
+ "X" => ["zZ", "sS", "dD", "cC", nil, nil],
65
+ "Y" => ["tT", "6^", "7&", "uU", "hH", "gG"],
66
+ "Z" => [ nil, "aA", "sS", "xX", nil, nil],
67
+ "[" => ["pP", "-_", "=+", "]}", "'\"", ";:"],
68
+ "\\" => ["]}", nil, nil, nil, nil, nil],
69
+ "]" => ["[{", "=+", nil, "\\|", nil, "'\""],
70
+ "^" => ["5%", nil, nil, "7&", "yY", "tT"],
71
+ "_" => ["0)", nil, nil, "=+", "[{", "pP"],
72
+ "`" => [ nil, nil, nil, "1!", nil, nil],
73
+ "a" => [ nil, "qQ", "wW", "sS", "zZ", nil],
74
+ "b" => ["vV", "gG", "hH", "nN", nil, nil],
75
+ "c" => ["xX", "dD", "fF", "vV", nil, nil],
76
+ "d" => ["sS", "eE", "rR", "fF", "cC", "xX"],
77
+ "e" => ["wW", "3#", "4$", "rR", "dD", "sS"],
78
+ "f" => ["dD", "rR", "tT", "gG", "vV", "cC"],
79
+ "g" => ["fF", "tT", "yY", "hH", "bB", "vV"],
80
+ "h" => ["gG", "yY", "uU", "jJ", "nN", "bB"],
81
+ "i" => ["uU", "8*", "9(", "oO", "kK", "jJ"],
82
+ "j" => ["hH", "uU", "iI", "kK", "mM", "nN"],
83
+ "k" => ["jJ", "iI", "oO", "lL", ",<", "mM"],
84
+ "l" => ["kK", "oO", "pP", ";:", ".>", ",<"],
85
+ "m" => ["nN", "jJ", "kK", ",<", nil, nil],
86
+ "n" => ["bB", "hH", "jJ", "mM", nil, nil],
87
+ "o" => ["iI", "9(", "0)", "pP", "lL", "kK"],
88
+ "p" => ["oO", "0)", "-_", "[{", ";:", "lL"],
89
+ "q" => [ nil, "1!", "2@", "wW", "aA", nil],
90
+ "r" => ["eE", "4$", "5%", "tT", "fF", "dD"],
91
+ "s" => ["aA", "wW", "eE", "dD", "xX", "zZ"],
92
+ "t" => ["rR", "5%", "6^", "yY", "gG", "fF"],
93
+ "u" => ["yY", "7&", "8*", "iI", "jJ", "hH"],
94
+ "v" => ["cC", "fF", "gG", "bB", nil, nil],
95
+ "w" => ["qQ", "2@", "3#", "eE", "sS", "aA"],
96
+ "x" => ["zZ", "sS", "dD", "cC", nil, nil],
97
+ "y" => ["tT", "6^", "7&", "uU", "hH", "gG"],
98
+ "z" => [ nil, "aA", "sS", "xX", nil, nil],
99
+ "{" => ["pP", "-_", "=+", "]}", "'\"", ";:"],
100
+ "|" => ["]}", nil, nil, nil, nil, nil],
101
+ "}" => ["[{", "=+", nil, "\\|", nil, "'\""],
102
+ "~" => [ nil, nil, nil, "1!", nil, nil]
101
103
  },
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]
104
+ "dvorak" => {
105
+ "!" => ["`~", nil, nil, "2@", "'\"", nil],
106
+ "\"" => [ nil, "1!", "2@", ",<", "aA", nil],
107
+ "#" => ["2@", nil, nil, "4$", ".>", ",<"],
108
+ "$" => ["3#", nil, nil, "5%", "pP", ".>"],
109
+ "%" => ["4$", nil, nil, "6^", "yY", "pP"],
110
+ "&" => ["6^", nil, nil, "8*", "gG", "fF"],
111
+ "'" => [ nil, "1!", "2@", ",<", "aA", nil],
112
+ "(" => ["8*", nil, nil, "0)", "rR", "cC"],
113
+ ")" => ["9(", nil, nil, "[{", "lL", "rR"],
114
+ "*" => ["7&", nil, nil, "9(", "cC", "gG"],
115
+ "+" => ["/?", "]}", nil, "\\|", nil, "-_"],
116
+ "," => ["'\"", "2@", "3#", ".>", "oO", "aA"],
117
+ "-" => ["sS", "/?", "=+", nil, nil, "zZ"],
118
+ "." => [",<", "3#", "4$", "pP", "eE", "oO"],
119
+ "/" => ["lL", "[{", "]}", "=+", "-_", "sS"],
120
+ "0" => ["9(", nil, nil, "[{", "lL", "rR"],
121
+ "1" => ["`~", nil, nil, "2@", "'\"", nil],
122
+ "2" => ["1!", nil, nil, "3#", ",<", "'\""],
123
+ "3" => ["2@", nil, nil, "4$", ".>", ",<"],
124
+ "4" => ["3#", nil, nil, "5%", "pP", ".>"],
125
+ "5" => ["4$", nil, nil, "6^", "yY", "pP"],
126
+ "6" => ["5%", nil, nil, "7&", "fF", "yY"],
127
+ "7" => ["6^", nil, nil, "8*", "gG", "fF"],
128
+ "8" => ["7&", nil, nil, "9(", "cC", "gG"],
129
+ "9" => ["8*", nil, nil, "0)", "rR", "cC"],
130
+ ":" => [ nil, "aA", "oO", "qQ", nil, nil],
131
+ ";" => [ nil, "aA", "oO", "qQ", nil, nil],
132
+ "<" => ["'\"", "2@", "3#", ".>", "oO", "aA"],
133
+ "=" => ["/?", "]}", nil, "\\|", nil, "-_"],
134
+ ">" => [",<", "3#", "4$", "pP", "eE", "oO"],
135
+ "?" => ["lL", "[{", "]}", "=+", "-_", "sS"],
136
+ "@" => ["1!", nil, nil, "3#", ",<", "'\""],
137
+ "A" => [ nil, "'\"", ",<", "oO", ";:", nil],
138
+ "B" => ["xX", "dD", "hH", "mM", nil, nil],
139
+ "C" => ["gG", "8*", "9(", "rR", "tT", "hH"],
140
+ "D" => ["iI", "fF", "gG", "hH", "bB", "xX"],
141
+ "E" => ["oO", ".>", "pP", "uU", "jJ", "qQ"],
142
+ "F" => ["yY", "6^", "7&", "gG", "dD", "iI"],
143
+ "G" => ["fF", "7&", "8*", "cC", "hH", "dD"],
144
+ "H" => ["dD", "gG", "cC", "tT", "mM", "bB"],
145
+ "I" => ["uU", "yY", "fF", "dD", "xX", "kK"],
146
+ "J" => ["qQ", "eE", "uU", "kK", nil, nil],
147
+ "K" => ["jJ", "uU", "iI", "xX", nil, nil],
148
+ "L" => ["rR", "0)", "[{", "/?", "sS", "nN"],
149
+ "M" => ["bB", "hH", "tT", "wW", nil, nil],
150
+ "N" => ["tT", "rR", "lL", "sS", "vV", "wW"],
151
+ "O" => ["aA", ",<", ".>", "eE", "qQ", ";:"],
152
+ "P" => [".>", "4$", "5%", "yY", "uU", "eE"],
153
+ "Q" => [";:", "oO", "eE", "jJ", nil, nil],
154
+ "R" => ["cC", "9(", "0)", "lL", "nN", "tT"],
155
+ "S" => ["nN", "lL", "/?", "-_", "zZ", "vV"],
156
+ "T" => ["hH", "cC", "rR", "nN", "wW", "mM"],
157
+ "U" => ["eE", "pP", "yY", "iI", "kK", "jJ"],
158
+ "V" => ["wW", "nN", "sS", "zZ", nil, nil],
159
+ "W" => ["mM", "tT", "nN", "vV", nil, nil],
160
+ "X" => ["kK", "iI", "dD", "bB", nil, nil],
161
+ "Y" => ["pP", "5%", "6^", "fF", "iI", "uU"],
162
+ "Z" => ["vV", "sS", "-_", nil, nil, nil],
163
+ "[" => ["0)", nil, nil, "]}", "/?", "lL"],
164
+ "\\" => ["=+", nil, nil, nil, nil, nil],
165
+ "]" => ["[{", nil, nil, nil, "=+", "/?"],
166
+ "^" => ["5%", nil, nil, "7&", "fF", "yY"],
167
+ "_" => ["sS", "/?", "=+", nil, nil, "zZ"],
168
+ "`" => [ nil, nil, nil, "1!", nil, nil],
169
+ "a" => [ nil, "'\"", ",<", "oO", ";:", nil],
170
+ "b" => ["xX", "dD", "hH", "mM", nil, nil],
171
+ "c" => ["gG", "8*", "9(", "rR", "tT", "hH"],
172
+ "d" => ["iI", "fF", "gG", "hH", "bB", "xX"],
173
+ "e" => ["oO", ".>", "pP", "uU", "jJ", "qQ"],
174
+ "f" => ["yY", "6^", "7&", "gG", "dD", "iI"],
175
+ "g" => ["fF", "7&", "8*", "cC", "hH", "dD"],
176
+ "h" => ["dD", "gG", "cC", "tT", "mM", "bB"],
177
+ "i" => ["uU", "yY", "fF", "dD", "xX", "kK"],
178
+ "j" => ["qQ", "eE", "uU", "kK", nil, nil],
179
+ "k" => ["jJ", "uU", "iI", "xX", nil, nil],
180
+ "l" => ["rR", "0)", "[{", "/?", "sS", "nN"],
181
+ "m" => ["bB", "hH", "tT", "wW", nil, nil],
182
+ "n" => ["tT", "rR", "lL", "sS", "vV", "wW"],
183
+ "o" => ["aA", ",<", ".>", "eE", "qQ", ";:"],
184
+ "p" => [".>", "4$", "5%", "yY", "uU", "eE"],
185
+ "q" => [";:", "oO", "eE", "jJ", nil, nil],
186
+ "r" => ["cC", "9(", "0)", "lL", "nN", "tT"],
187
+ "s" => ["nN", "lL", "/?", "-_", "zZ", "vV"],
188
+ "t" => ["hH", "cC", "rR", "nN", "wW", "mM"],
189
+ "u" => ["eE", "pP", "yY", "iI", "kK", "jJ"],
190
+ "v" => ["wW", "nN", "sS", "zZ", nil, nil],
191
+ "w" => ["mM", "tT", "nN", "vV", nil, nil],
192
+ "x" => ["kK", "iI", "dD", "bB", nil, nil],
193
+ "y" => ["pP", "5%", "6^", "fF", "iI", "uU"],
194
+ "z" => ["vV", "sS", "-_", nil, nil, nil],
195
+ "{" => ["0)", nil, nil, "]}", "/?", "lL"],
196
+ "|" => ["=+", nil, nil, nil, nil, nil],
197
+ "}" => ["[{", nil, nil, nil, "=+", "/?"],
198
+ "~" => [ nil, nil, nil, "1!", nil, nil]
197
199
  },
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"]
200
+ "keypad" => {
201
+ "*" => ["/", nil, nil, nil, "-", "+", "9", "8"],
202
+ "+" => ["9", "*", "-", nil, nil, nil, nil, "6"],
203
+ "-" => ["*", nil, nil, nil, nil, nil, "+", "9"],
204
+ "." => ["0", "2", "3", nil, nil, nil, nil, nil],
205
+ "/" => [nil, nil, nil, nil, "*", "9", "8", "7"],
206
+ "0" => [nil, "1", "2", "3", ".", nil, nil, nil],
207
+ "1" => [nil, nil, "4", "5", "2", "0", nil, nil],
208
+ "2" => ["1", "4", "5", "6", "3", ".", "0", nil],
209
+ "3" => ["2", "5", "6", nil, nil, nil, ".", "0"],
210
+ "4" => [nil, nil, "7", "8", "5", "2", "1", nil],
211
+ "5" => ["4", "7", "8", "9", "6", "3", "2", "1"],
212
+ "6" => ["5", "8", "9", "+", nil, nil, "3", "2"],
213
+ "7" => [nil, nil, nil, "/", "8", "5", "4", nil],
214
+ "8" => ["7", nil, "/", "*", "9", "6", "5", "4"],
215
+ "9" => ["8", "/", "*", "-", "+", nil, "6", "5"]
214
216
  },
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"]
217
+ "mac_keypad" => {
218
+ "*" => ["/", nil, nil, nil, nil, nil, "-", "9"],
219
+ "+" => ["6", "9", "-", nil, nil, nil, nil, "3"],
220
+ "-" => ["9", "/", "*", nil, nil, nil, "+", "6"],
221
+ "." => ["0", "2", "3", nil, nil, nil, nil, nil],
222
+ "/" => ["=", nil, nil, nil, "*", "-", "9", "8"],
223
+ "0" => [nil, "1", "2", "3", ".", nil, nil, nil],
224
+ "1" => [nil, nil, "4", "5", "2", "0", nil, nil],
225
+ "2" => ["1", "4", "5", "6", "3", ".", "0", nil],
226
+ "3" => ["2", "5", "6", "+", nil, nil, ".", "0"],
227
+ "4" => [nil, nil, "7", "8", "5", "2", "1", nil],
228
+ "5" => ["4", "7", "8", "9", "6", "3", "2", "1"],
229
+ "6" => ["5", "8", "9", "-", "+", nil, "3", "2"],
230
+ "7" => [nil, nil, nil, "=", "8", "5", "4", nil],
231
+ "8" => ["7", nil, "=", "/", "9", "6", "5", "4"],
232
+ "9" => ["8", "=", "/", "*", "-", "+", "6", "5"],
233
+ "=" => [nil, nil, nil, nil, "/", "9", "8", "7"]
232
234
  }
233
- }
235
+ }.freeze
236
+ # rubocop:enable Layout/ExtraSpacing
237
+ # rubocop:enable Layout/SpaceInsideArrayLiteralBrackets
234
238
  end