{
 "tests": [
  {
   "id": "words",
   "name": "Passphrase words (EFF list)",
   "what": "passphrase(), 6 words per phrase, 1,296,000 phrases",
   "samples": 7776000,
   "bins": 7776,
   "min": 882,
   "max": 1109,
   "chi2": 7756.79400000003,
   "df": 7775,
   "p": 0.5559724699835582,
   "pass": true
  },
  {
   "id": "chars",
   "name": "Password characters (94 printable)",
   "what": "password(), length 100, 100,000 passwords",
   "samples": 10000000,
   "bins": 94,
   "min": 105460,
   "max": 107053,
   "chi2": 89.68780599999998,
   "df": 93,
   "p": 0.5779894541730176,
   "pass": true
  },
  {
   "id": "pw3",
   "name": "Whole short passwords (3 digits)",
   "what": "password(), every one of the 1,000 possible strings counted",
   "samples": 2000000,
   "bins": 1000,
   "min": 1842,
   "max": 2134,
   "chi2": 982.6090000000006,
   "df": 999,
   "p": 0.6382505320640262,
   "pass": true
  },
  {
   "id": "require",
   "name": "\u201cAt least one of each\u201d stays uniform",
   "what": "password(), length 2, lowercase + digits, both required: 520 distinct strings seen of 520 allowed",
   "samples": 1040000,
   "bins": 520,
   "min": 1852,
   "max": 2112,
   "chi2": 517.8599999999997,
   "df": 519,
   "p": 0.5058689524786442,
   "pass_extra": true,
   "pass": true
  },
  {
   "id": "pins",
   "name": "PIN digit pairs",
   "what": "pin(), 6 digits, 1,000,000 PINs, each split into three 2-digit pairs",
   "samples": 3000000,
   "bins": 100,
   "min": 29661,
   "max": 30353,
   "chi2": 79.52639999999997,
   "df": 99,
   "p": 0.9248582277611281,
   "pass": true
  },
  {
   "id": "below7",
   "name": "randomBelow(7)",
   "what": "the uniform-integer primitive, n = 7",
   "samples": 7000000,
   "bins": 7,
   "min": 997913,
   "max": 1002126,
   "chi2": 10.915002000000001,
   "df": 6,
   "p": 0.09103919006970904,
   "pass": true
  }
 ],
 "entropy": [
  {
   "id": "phrase6",
   "kind": "phrase",
   "label": "Passphrase: 6 words, lowercase, hyphens (the default)",
   "settings": {
    "words": 6,
    "sep": "hyphen",
    "caps": "lower",
    "digit": false,
    "symbol": false
   },
   "count": "221073919720733357899776",
   "how": "Six independent picks from 7,776 words: 7,776^6 = 2.21 \u00d7 10^23 phrases. The separator is fixed, so it adds nothing.",
   "bits": 77.54887502163469,
   "got": 77.54887502163469,
   "pass": true
  },
  {
   "id": "phrase4x",
   "kind": "phrase",
   "label": "Passphrase: 4 words, one word in CAPITALS, plus a digit and a symbol",
   "settings": {
    "words": 4,
    "sep": "space",
    "caps": "upper-one",
    "digit": true,
    "symbol": true
   },
   "count": "18719531213122437120",
   "how": "7,776^4 word choices \u00d7 4 places for the capitals \u00d7 (10 digits \u00d7 4 words) \u00d7 (8 symbols \u00d7 4 words).",
   "bits": 64.02117810931048,
   "got": 64.02117810931048,
   "pass": true
  },
  {
   "id": "phrase5r",
   "kind": "phrase",
   "label": "Passphrase: 5 words, each randomly capitalized or not",
   "settings": {
    "words": 5,
    "sep": "period",
    "caps": "random",
    "digit": false,
    "symbol": false
   },
   "count": "909769216957750444032",
   "how": "7,776^5 \u00d7 2 choices of capitalization per word.",
   "bits": 69.62406251802891,
   "got": 69.62406251802891,
   "pass": true
  },
  {
   "id": "pw20",
   "kind": "password",
   "label": "Password: 20 characters, lower + upper + digits + 13 easy symbols (the default)",
   "settings": {
    "length": 20,
    "lower": true,
    "upper": true,
    "digits": true,
    "symbols": true,
    "symbolSet": "easy",
    "noLookalike": false,
    "requireEach": false
   },
   "count": "31712119389339932240545749664306640625",
   "how": "75 possible characters, 20 independent picks: 75^20.",
   "bits": 124.57637380991761,
   "got_count": "31712119389339932240545749664306640625",
   "got": 124.57637380991761,
   "pass": true
  },
  {
   "id": "pw16all",
   "kind": "password",
   "label": "Password: 16 characters from all 94 printable ASCII",
   "settings": {
    "length": 16,
    "lower": true,
    "upper": true,
    "digits": true,
    "symbols": true,
    "symbolSet": "all",
    "noLookalike": false,
    "requireEach": false
   },
   "count": "37157429083410091685945089785856",
   "how": "26 + 26 + 10 + 32 = 94 characters; 94^16.",
   "bits": 104.8734216268422,
   "got_count": "37157429083410091685945089785856",
   "got": 104.8734216268422,
   "pass": true
  },
  {
   "id": "pw12nl",
   "kind": "password",
   "label": "Password: 12 characters, lowercase + digits, look-alikes removed",
   "settings": {
    "length": 12,
    "lower": true,
    "upper": false,
    "digits": true,
    "symbols": false,
    "symbolSet": "easy",
    "noLookalike": true,
    "requireEach": false
   },
   "count": "1152921504606846976",
   "how": "Lowercase without l and o leaves 24; digits without 1 and 0 leave 8; 32^12 = 2^60, exactly 60 bits.",
   "bits": 60,
   "got_count": "1152921504606846976",
   "got": 60,
   "pass": true
  },
  {
   "id": "pw3req",
   "kind": "password",
   "label": "Password: 3 characters, lowercase + digits, at least one of each",
   "settings": {
    "length": 3,
    "lower": true,
    "upper": false,
    "digits": true,
    "symbols": false,
    "symbolSet": "easy",
    "noLookalike": false,
    "requireEach": true
   },
   "count": "28080",
   "how": "All 36^3 strings, minus the 26^3 with no digit, minus the 10^3 with no letter: 46,656 \u2212 17,576 \u2212 1,000 = 28,080.",
   "bits": 14.777255315191923,
   "got_count": "28080",
   "got": 14.777255315191923,
   "pass": true
  },
  {
   "id": "pw8req4",
   "kind": "password",
   "label": "Password: 8 characters, all four classes (94), at least one of each",
   "settings": {
    "length": 8,
    "lower": true,
    "upper": true,
    "digits": true,
    "symbols": true,
    "symbolSet": "all",
    "noLookalike": false,
    "requireEach": true
   },
   "count": "2807657387458560",
   "how": "Inclusion-exclusion over the four classes (26, 26, 10, 32): subtract strings missing one class, add back those missing two, subtract those missing three; none can miss all four. Missing one class leaves 68, 68, 84 or 62 characters; missing two leaves 42, 58, 36, 58, 36 or 52; missing three leaves 32, 10, 26 or 26. About 2.8 \u00d7 10^15 of the 6.1 \u00d7 10^15 eight-character strings qualify: the rule costs 1.1 bits.",
   "bits": 51.31828832064395,
   "got_count": "2807657387458560",
   "got": 51.31828832064395,
   "pass": true
  },
  {
   "id": "pin4",
   "kind": "pin",
   "label": "PIN: 4 digits",
   "settings": {
    "length": 4,
    "avoidObvious": false
   },
   "count": "10000",
   "how": "10,000 PINs from 0000 to 9999.",
   "bits": 13.287712379549449,
   "got_count": "10000",
   "got": 13.287712379549449,
   "pass": true
  },
  {
   "id": "pin4avoid",
   "kind": "pin",
   "label": "PIN: 4 digits, obvious PINs avoided",
   "settings": {
    "length": 4,
    "avoidObvious": true
   },
   "count": "9608",
   "how": "Remove 10 repeats (0000\u20269999), 7 runs up (0123\u20266789), 7 runs down (9876\u20263210), 90 more repeated pairs (abab, not already counted), 128 more years 1900-2029 (1919 and 2020 are already pairs), and 150 further all-digit 4-character entries from the common-password list.",
   "bits": 13.230020435705635,
   "got_count": "9608",
   "got": 13.230020435705635,
   "pass": true
  },
  {
   "id": "pin6",
   "kind": "pin",
   "label": "PIN: 6 digits",
   "settings": {
    "length": 6,
    "avoidObvious": false
   },
   "count": "1000000",
   "how": "1,000,000 PINs.",
   "bits": 19.931568569324174,
   "got_count": "1000000",
   "got": 19.931568569324174,
   "pass": true
  },
  {
   "id": "pin6avoid",
   "kind": "pin",
   "label": "PIN: 6 digits, obvious PINs avoided (the default)",
   "settings": {
    "length": 6,
    "avoidObvious": true
   },
   "count": "999801",
   "how": "Remove 10 repeats, 5 runs up (012345\u2026456789), 5 runs down, 90 more repeated pairs (ababab), and 89 further all-digit 6-character entries from the common-password list.",
   "bits": 19.931281444441165,
   "got_count": "999801",
   "got": 19.931281444441165,
   "pass": true
  }
 ],
 "strength": {
  "cases": [
   {
    "pw": "password",
    "band": "very-weak",
    "note": "the most common password",
    "known_limit": false,
    "why": "",
    "bits": 1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "123456",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 1.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "qwerty",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 2.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "iloveyou",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 6.7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Password1",
    "band": "very-weak",
    "note": "capital + digit added the predictable way",
    "known_limit": false,
    "why": "",
    "bits": 5.3,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "P@ssw0rd",
    "band": "very-weak",
    "note": "letter-for-symbol swaps",
    "known_limit": false,
    "why": "",
    "bits": 4,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Passw0rd!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 8,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "letmein!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 8.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "monkey123",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 7.3,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "dragon2020",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 10.1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "abc123",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 3.9,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "111111",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 4.4,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "7777777",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 6.1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "qwertyuiop",
    "band": "very-weak",
    "note": "keyboard row",
    "known_limit": false,
    "why": "",
    "bits": 11,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "1qaz2wsx",
    "band": "very-weak",
    "note": "keyboard columns",
    "known_limit": false,
    "why": "",
    "bits": 9.4,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "zaq12wsx",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 11.7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "asdfgh",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 6.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "1234qwer",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 10.3,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Summer2024!",
    "band": "very-weak",
    "note": "season + year + !",
    "known_limit": false,
    "why": "",
    "bits": 19.5,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Spring2023",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 18,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Welcome1",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 11.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Football!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 9.5,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "admin123",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 13.1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Admin@123",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 19.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "passw0rd",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "01011990",
    "band": "very-weak",
    "note": "a date",
    "known_limit": false,
    "why": "",
    "bits": 14.8,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "12/25/1990",
    "band": "very-weak",
    "note": "a date with separators",
    "known_limit": false,
    "why": "",
    "bits": 17.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "superman",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 4.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "trustno1",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 4.9,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "sunshine1",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 8.9,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "aaaaaa",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 6.8,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "abcabcabc",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 5.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "987654321",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 5.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "princess!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 11.5,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Qwerty123!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 12.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Liverpool1",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 14,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "baseball7",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 6.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "michael1985",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 11.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Jennifer01",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 12,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "drowssap",
    "band": "very-weak",
    "note": "password reversed",
    "known_limit": false,
    "why": "",
    "bits": 2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "!QAZ2wsx",
    "band": "very-weak",
    "note": "keyboard columns with Shift",
    "known_limit": false,
    "why": "",
    "bits": 21.3,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "football4life",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 17.7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "ilovemycat",
    "band": "very-weak",
    "note": "a short common phrase",
    "known_limit": false,
    "why": "",
    "bits": 33.8,
    "got": "weak",
    "diff": 1
   },
   {
    "pw": "q1w2e3r4t5",
    "band": "very-weak",
    "note": "interleaved keyboard rows",
    "known_limit": false,
    "why": "",
    "bits": 18.1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "hello world",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 21.4,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Ch@rlie2012",
    "band": "weak",
    "note": "a name, swaps and a year",
    "known_limit": false,
    "why": "",
    "bits": 14.4,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "Mustang1969!",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 17.2,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "MyDogRex2015!",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 49.8,
    "got": "fair",
    "diff": 1
   },
   {
    "pw": "correcthorse",
    "band": "weak",
    "note": "two dictionary words",
    "known_limit": false,
    "why": "",
    "bits": 22.3,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "BlueSky42",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 22,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "coffee&cake",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 25.2,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "Tr0ub4dor&3",
    "band": "weak",
    "note": "XKCD 936's example: a word with swaps and a suffix",
    "known_limit": true,
    "why": "the checker's dictionary is only the 7,776 EFF words, so 'troubador' is charged letter by letter",
    "bits": 47.9,
    "got": "fair",
    "diff": 1
   },
   {
    "pw": "Bananas!!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 18.8,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "JohnSmith1975",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 25.7,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "sweetpea22",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 17.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "zebra-lamp",
    "band": "weak",
    "note": "two words",
    "known_limit": false,
    "why": "",
    "bits": 36,
    "got": "weak",
    "diff": 0
   },
   {
    "pw": "Nov-14-1988",
    "band": "weak",
    "known_limit": true,
    "why": "month names are not in the date rules, so 'Nov' is charged as three letters",
    "note": "",
    "bits": 33.9,
    "got": "weak",
    "diff": 0
   },
   {
    "pw": "london2012olympics",
    "band": "weak",
    "note": "a city, an event year and a word",
    "known_limit": false,
    "why": "",
    "bits": 27.5,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "2580",
    "band": "very-weak",
    "note": "a straight line down a phone keypad",
    "known_limit": true,
    "why": "keypad walks are not modelled; only the QWERTY keyboard is",
    "bits": 12.7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Kx9#mT",
    "band": "weak",
    "note": "6 random-looking characters (39.3 bits if drawn from all 94)",
    "known_limit": false,
    "why": "",
    "bits": 27.2,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "h7Gq2x",
    "band": "weak",
    "note": "6 random-looking letters and digits (35.7 bits if drawn from 62)",
    "known_limit": false,
    "why": "",
    "bits": 25.4,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "glacier violin nutmeg",
    "band": "weak",
    "note": "3 random EFF words: 38.8 bits",
    "known_limit": false,
    "why": "",
    "bits": 43.8,
    "got": "weak",
    "diff": 0
   },
   {
    "pw": "q7#Lm2!x",
    "band": "fair",
    "note": "8 random printable characters: 52.4 bits",
    "known_limit": false,
    "why": "",
    "bits": 35.5,
    "got": "weak",
    "diff": -1
   },
   {
    "pw": "correct horse battery staple",
    "band": "very-weak",
    "note": "the famous XKCD example: it is in cracking dictionaries now",
    "known_limit": true,
    "why": "the checker has no list of famous passphrases; it scores the four words as if chosen at random",
    "bits": 54.6,
    "got": "fair",
    "diff": 2
   },
   {
    "pw": "parrot-tiger-cactus-wobble",
    "band": "fair",
    "note": "4 EFF words: 51.7 bits",
    "known_limit": false,
    "why": "",
    "bits": 49.1,
    "got": "fair",
    "diff": 0
   },
   {
    "pw": "Xk3pL9wQ2m",
    "band": "fair",
    "note": "10 random letters and digits: 59.5 bits",
    "known_limit": false,
    "why": "",
    "bits": 42.9,
    "got": "weak",
    "diff": -1
   },
   {
    "pw": "My first car was a blue 1998 Civic!",
    "band": "fair",
    "note": "a personal sentence: long, but built from guessable facts",
    "known_limit": true,
    "why": "the checker charges most words of a sentence as random dictionary picks; real attackers model grammar and personal facts",
    "bits": 97.9,
    "got": "very-strong",
    "diff": 2
   },
   {
    "pw": "Hq8vN2xLp4Rz",
    "band": "strong",
    "note": "12 random letters and digits: 71.5 bits",
    "known_limit": false,
    "why": "",
    "bits": 52.3,
    "got": "fair",
    "diff": -1
   },
   {
    "pw": "ladle-unbent-sprout-casing-gerbil",
    "band": "strong",
    "note": "5 EFF words: 64.6 bits",
    "known_limit": false,
    "why": "",
    "bits": 72.3,
    "got": "strong",
    "diff": 0
   },
   {
    "pw": "rT6!vP2@kL9#",
    "band": "very-strong",
    "note": "12 random printable characters: 78.7 bits",
    "known_limit": true,
    "why": "per-class charging (4.7 bits a letter, 3.3 a digit) under-rates random strings that are mostly digits and letters; the checker cannot know it was generated",
    "bits": 53.3,
    "got": "fair",
    "diff": -2
   },
   {
    "pw": "unwind tamale exile pebble cobweb outlet",
    "band": "very-strong",
    "note": "6 EFF words: 77.5 bits",
    "known_limit": false,
    "why": "",
    "bits": 86.6,
    "got": "very-strong",
    "diff": 0
   },
   {
    "pw": "7rC#vL2q9Wx!pZ4e",
    "band": "very-strong",
    "note": "16 random printable: 104.9 bits",
    "known_limit": false,
    "why": "",
    "bits": 70.4,
    "got": "strong",
    "diff": -1
   },
   {
    "pw": "Oyster.Banjo.Wiry.Trench.Dimmer.Rebel.Haiku",
    "band": "very-strong",
    "note": "7 EFF words, Title Case: 90.5 bits",
    "known_limit": false,
    "why": "",
    "bits": 105.9,
    "got": "very-strong",
    "diff": 0
   },
   {
    "pw": "mN4$sQ8&wE2^zR7*tY5!",
    "band": "very-strong",
    "note": "20 random printable",
    "known_limit": false,
    "why": "",
    "bits": 88.8,
    "got": "very-strong",
    "diff": 0
   },
   {
    "pw": "ilovechocolatecake",
    "band": "weak",
    "note": "a common phrase run together",
    "known_limit": false,
    "why": "",
    "bits": 34.5,
    "got": "weak",
    "diff": 0
   },
   {
    "pw": "PurpleMonkeyDishwasher",
    "band": "fair",
    "note": "three words, a well-known joke phrase",
    "known_limit": true,
    "why": "the checker has no list of phrases from popular culture",
    "bits": 39.3,
    "got": "weak",
    "diff": -1
   },
   {
    "pw": "Iloveyou4ever!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 25.1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Pa$$word2024",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 11.1,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "letmein123456",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 5.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "11223344",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 10.9,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "abcdefgh",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 5,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "zxcvbnm123",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 11.4,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Winter2025!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 20.8,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "Tigger123",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 9.7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "loveyou",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 10.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "whatever",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "starwars",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 5.9,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "batman1",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 8.6,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "123abc!",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 12.2,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "access14",
    "band": "very-weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 10.2,
    "got": "very-weak",
    "diff": 0
   }
  ],
  "total": 90,
  "exact": 71,
  "within1": 87,
  "over": 5,
  "under": 14,
  "over2": 2,
  "known": [
   {
    "pw": "Tr0ub4dor&3",
    "band": "weak",
    "note": "XKCD 936's example: a word with swaps and a suffix",
    "known_limit": true,
    "why": "the checker's dictionary is only the 7,776 EFF words, so 'troubador' is charged letter by letter",
    "bits": 47.9,
    "got": "fair",
    "diff": 1
   },
   {
    "pw": "Nov-14-1988",
    "band": "weak",
    "known_limit": true,
    "why": "month names are not in the date rules, so 'Nov' is charged as three letters",
    "note": "",
    "bits": 33.9,
    "got": "weak",
    "diff": 0
   },
   {
    "pw": "2580",
    "band": "very-weak",
    "note": "a straight line down a phone keypad",
    "known_limit": true,
    "why": "keypad walks are not modelled; only the QWERTY keyboard is",
    "bits": 12.7,
    "got": "very-weak",
    "diff": 0
   },
   {
    "pw": "correct horse battery staple",
    "band": "very-weak",
    "note": "the famous XKCD example: it is in cracking dictionaries now",
    "known_limit": true,
    "why": "the checker has no list of famous passphrases; it scores the four words as if chosen at random",
    "bits": 54.6,
    "got": "fair",
    "diff": 2
   },
   {
    "pw": "My first car was a blue 1998 Civic!",
    "band": "fair",
    "note": "a personal sentence: long, but built from guessable facts",
    "known_limit": true,
    "why": "the checker charges most words of a sentence as random dictionary picks; real attackers model grammar and personal facts",
    "bits": 97.9,
    "got": "very-strong",
    "diff": 2
   },
   {
    "pw": "rT6!vP2@kL9#",
    "band": "very-strong",
    "note": "12 random printable characters: 78.7 bits",
    "known_limit": true,
    "why": "per-class charging (4.7 bits a letter, 3.3 a digit) under-rates random strings that are mostly digits and letters; the checker cannot know it was generated",
    "bits": 53.3,
    "got": "fair",
    "diff": -2
   },
   {
    "pw": "PurpleMonkeyDishwasher",
    "band": "fair",
    "note": "three words, a well-known joke phrase",
    "known_limit": true,
    "why": "the checker has no list of phrases from popular culture",
    "bits": 39.3,
    "got": "weak",
    "diff": -1
   }
  ],
  "disagree": [
   {
    "pw": "ilovemycat",
    "band": "very-weak",
    "note": "a short common phrase",
    "known_limit": false,
    "why": "",
    "bits": 33.8,
    "got": "weak",
    "diff": 1
   },
   {
    "pw": "Ch@rlie2012",
    "band": "weak",
    "note": "a name, swaps and a year",
    "known_limit": false,
    "why": "",
    "bits": 14.4,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "Mustang1969!",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 17.2,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "MyDogRex2015!",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 49.8,
    "got": "fair",
    "diff": 1
   },
   {
    "pw": "correcthorse",
    "band": "weak",
    "note": "two dictionary words",
    "known_limit": false,
    "why": "",
    "bits": 22.3,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "coffee&cake",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 25.2,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "JohnSmith1975",
    "band": "weak",
    "note": "",
    "known_limit": false,
    "why": "",
    "bits": 25.7,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "london2012olympics",
    "band": "weak",
    "note": "a city, an event year and a word",
    "known_limit": false,
    "why": "",
    "bits": 27.5,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "Kx9#mT",
    "band": "weak",
    "note": "6 random-looking characters (39.3 bits if drawn from all 94)",
    "known_limit": false,
    "why": "",
    "bits": 27.2,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "h7Gq2x",
    "band": "weak",
    "note": "6 random-looking letters and digits (35.7 bits if drawn from 62)",
    "known_limit": false,
    "why": "",
    "bits": 25.4,
    "got": "very-weak",
    "diff": -1
   },
   {
    "pw": "q7#Lm2!x",
    "band": "fair",
    "note": "8 random printable characters: 52.4 bits",
    "known_limit": false,
    "why": "",
    "bits": 35.5,
    "got": "weak",
    "diff": -1
   },
   {
    "pw": "Xk3pL9wQ2m",
    "band": "fair",
    "note": "10 random letters and digits: 59.5 bits",
    "known_limit": false,
    "why": "",
    "bits": 42.9,
    "got": "weak",
    "diff": -1
   },
   {
    "pw": "Hq8vN2xLp4Rz",
    "band": "strong",
    "note": "12 random letters and digits: 71.5 bits",
    "known_limit": false,
    "why": "",
    "bits": 52.3,
    "got": "fair",
    "diff": -1
   },
   {
    "pw": "7rC#vL2q9Wx!pZ4e",
    "band": "very-strong",
    "note": "16 random printable: 104.9 bits",
    "known_limit": false,
    "why": "",
    "bits": 70.4,
    "got": "strong",
    "diff": -1
   }
  ]
 },
 "random": [
  {
   "name": "Passphrase, 4 words, hyphens",
   "truth": 51.69925001442312,
   "min": 53.16987081925576,
   "median": 58.74364413378157,
   "max": 61.65882270071568,
   "mean": 58.02073135581997,
   "pass": true
  },
  {
   "name": "Passphrase, 6 words, spaces",
   "truth": 77.54887502163469,
   "min": 77.09813458767003,
   "median": 86.34912254872334,
   "max": 87.76977579181063,
   "mean": 85.34677893387803,
   "pass": true
  },
  {
   "name": "Passphrase, 5 words, Title Case, no separator",
   "truth": 64.62406251802891,
   "min": 58.24385630961427,
   "median": 69.62406251802891,
   "max": 69.8005691688464,
   "mean": 68.70627430673534,
   "pass": true
  },
  {
   "name": "Password, 12, letters + digits",
   "truth": 71.4503557246425,
   "min": 40.38867927050109,
   "median": 53.64825337118564,
   "max": 56.405276617693104,
   "mean": 53.110033718299675,
   "pass": true
  },
  {
   "name": "Password, 16, all 94 printable",
   "truth": 104.8734216268422,
   "min": 63.309473194917324,
   "median": 73.23742643705054,
   "max": 77.95867069999636,
   "mean": 73.26431885866492,
   "pass": true
  },
  {
   "name": "Password, 20, default settings",
   "truth": 124.57637380991761,
   "min": 77.66630001853953,
   "median": 90.21721389427802,
   "max": 95.72856636890864,
   "mean": 89.5449369562649,
   "pass": true
  },
  {
   "name": "Password, 10, lowercase only",
   "truth": 47.00439718141092,
   "min": 35.90307802698764,
   "median": 47.004397181410916,
   "max": 47.004397181410916,
   "mean": 46.41162016473482,
   "pass": true
  }
 ],
 "ran": "2026-10-31T20:18:32.149Z",
 "node": "v20.19.2",
 "alpha": 0.001,
 "rejection": {
  "n": 2147483649,
  "calls": 1000000,
  "draws": 2000644,
  "measured": 2.000644,
  "expected": 1.9999999990686774
 },
 "control": {
  "name": "Naive byte % 94 (deliberately biased control)",
  "samples": 9400000,
  "bins": 94,
  "chi2": 254337.1569599999,
  "df": 93,
  "p": 0,
  "min": 72602,
  "max": 110709,
  "detected": true
 },
 "attempt": 1
}