PwdStrength.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. var kNoCanonicalCounterpart = 0;
  2. var kCapitalLetter = 0;
  3. var kSmallLetter = 1;
  4. var kDigit = 2;
  5. var kPunctuation = 3;
  6. var kAlpha = 4;
  7. var kCanonicalizeLettersOnly = true;
  8. var kCananicalizeEverything = false;
  9. var gDebugOutput = null;
  10. var kDebugTraceLevelNone = 0;
  11. var kDebugTraceLevelSuperDetail = 120;
  12. var kDebugTraceLevelRealDetail = 100;
  13. var kDebugTraceLevelAll = 80;
  14. var kDebugTraceLevelMost = 60;
  15. var kDebugTraceLevelFew = 40;
  16. var kDebugTraceLevelRare = 20;
  17. var gDebugTraceLevel = kDebugTraceLevelNone;
  18. function DebugPrint()
  19. {
  20. var string = "";
  21. if (gDebugTraceLevel && gDebugOutput &&
  22. DebugPrint.arguments && (DebugPrint.arguments.length > 1) && (DebugPrint.arguments[0] <= gDebugTraceLevel))
  23. {
  24. for(var index = 1; index < DebugPrint.arguments.length; index++)
  25. {
  26. string += DebugPrint.arguments[index] + " ";
  27. }
  28. string += "<br>\n";
  29. gDebugOutput(string);
  30. }
  31. }
  32. function CSimilarityMap()
  33. {
  34. this.m_elements = "";
  35. this.m_canonicalCounterparts = "";
  36. }
  37. function SimilarityMap_Add(element, canonicalCounterpart)
  38. {
  39. this.m_elements += element;
  40. this.m_canonicalCounterparts += canonicalCounterpart;
  41. }
  42. function SimilarityMap_Lookup(element)
  43. {
  44. var canonicalCounterpart = kNoCanonicalCounterpart;
  45. var index = this.m_elements.indexOf(element);
  46. if (index >= 0)
  47. {
  48. canonicalCounterpart = this.m_canonicalCounterparts.charAt(index);
  49. }
  50. else
  51. {
  52. }
  53. return canonicalCounterpart;
  54. }
  55. function SimilarityMap_GetCount()
  56. {
  57. return this.m_elements.length;
  58. }
  59. CSimilarityMap.prototype.Add = SimilarityMap_Add;
  60. CSimilarityMap.prototype.Lookup = SimilarityMap_Lookup;
  61. CSimilarityMap.prototype.GetCount = SimilarityMap_GetCount;
  62. function CDictionaryEntry(length, wordList)
  63. {
  64. this.m_length = length;
  65. this.m_wordList = wordList;
  66. }
  67. function DictionaryEntry_Lookup(strWord)
  68. {
  69. var fFound = false;
  70. if (strWord.length == this.m_length)
  71. {
  72. var nFirst = 0;
  73. var nLast = this.m_wordList.length - 1;
  74. while( nFirst <= nLast )
  75. {
  76. var nCurrent = Math.floor((nFirst + nLast)/2);
  77. if( strWord == this.m_wordList[nCurrent])
  78. {
  79. fFound = true;
  80. break;
  81. }
  82. else if ( strWord > this.m_wordList[nCurrent])
  83. {
  84. nLast = nCurrent - 1;
  85. }
  86. else
  87. {
  88. nFirst = nCurrent + 1;
  89. }
  90. }
  91. }
  92. return fFound;
  93. }
  94. CDictionaryEntry.prototype.Lookup = DictionaryEntry_Lookup;
  95. function CDictionary()
  96. {
  97. this.m_entries = new Array()
  98. }
  99. function Dictionary_Lookup(strWord)
  100. {
  101. for (var index = 0; index < this.m_entries.length; index++)
  102. {
  103. if (this.m_entries[index].Lookup(strWord))
  104. {
  105. return true;
  106. }
  107. }
  108. }
  109. function Dictionary_Add(length, wordList)
  110. {
  111. var iL=this.m_entries.length;
  112. var cD=new CDictionaryEntry(length, wordList)
  113. this.m_entries[iL]=cD;
  114. }
  115. CDictionary.prototype.Lookup = Dictionary_Lookup;
  116. CDictionary.prototype.Add = Dictionary_Add;
  117. var gSimilarityMap = new CSimilarityMap();
  118. var gDictionary = new CDictionary();
  119. function CharacterSetChecks(type, fResult)
  120. {
  121. this.type = type;
  122. this.fResult = fResult;
  123. }
  124. function isctype(character, type, nDebugLevel)
  125. {
  126. var fResult = false;
  127. switch(type)
  128. {
  129. case kCapitalLetter:
  130. if((character >= 'A') && (character <= 'Z'))
  131. {
  132. fResult = true;
  133. }
  134. break;
  135. case kSmallLetter:
  136. if ((character >= 'a') && (character <= 'z'))
  137. {
  138. fResult = true;
  139. }
  140. break;
  141. case kDigit:
  142. if ((character >= '0') && (character <= '9'))
  143. {
  144. fResult = true;
  145. }
  146. break;
  147. case kPunctuation:
  148. if ("!@#$%^&*()_+-='\";:[{]}\|.>,</?`~".indexOf(character) >= 0)
  149. {
  150. fResult = true;
  151. }
  152. break;
  153. case kAlpha:
  154. if (isctype(character, kCapitalLetter) || isctype(character, kSmallLetter))
  155. {
  156. fResult = true;
  157. }
  158. break;
  159. default:
  160. break;
  161. }
  162. return fResult;
  163. }
  164. function CanonicalizeWord(strWord, similarityMap, fLettersOnly)
  165. {
  166. var canonicalCounterpart = kNoCanonicalCounterpart;
  167. var strCanonicalizedWord = "";
  168. var nStringLength = 0;
  169. if ((strWord != null) && (strWord.length > 0))
  170. {
  171. strCanonicalizedWord = strWord;
  172. strCanonicalizedWord = strCanonicalizedWord.toLowerCase();
  173. if (similarityMap.GetCount() > 0)
  174. {
  175. nStringLength = strCanonicalizedWord.length;
  176. for(var index = 0; index < nStringLength; index++)
  177. {
  178. if (fLettersOnly && !isctype(strCanonicalizedWord.charAt(index), kSmallLetter, kDebugTraceLevelSuperDetail))
  179. {
  180. continue;
  181. }
  182. canonicalCounterpart = similarityMap.Lookup(strCanonicalizedWord.charAt(index));
  183. if (canonicalCounterpart != kNoCanonicalCounterpart)
  184. {
  185. strCanonicalizedWord = strCanonicalizedWord.substring(0, index) + canonicalCounterpart +
  186. strCanonicalizedWord.substring(index + 1, nStringLength);
  187. }
  188. }
  189. }
  190. }
  191. return strCanonicalizedWord;
  192. }
  193. function IsLongEnough(strWord, nAtLeastThisLong)
  194. {
  195. if ((strWord == null) || isNaN(nAtLeastThisLong))
  196. {
  197. return false;
  198. }
  199. else if (strWord.length < nAtLeastThisLong)
  200. {
  201. return false;
  202. }
  203. return true;
  204. }
  205. function SpansEnoughCharacterSets(strWord, nAtLeastThisMany)
  206. {
  207. var nCharSets = 0;
  208. var characterSetChecks = new Array(
  209. new CharacterSetChecks(kCapitalLetter, false),
  210. new CharacterSetChecks(kSmallLetter, false),
  211. new CharacterSetChecks(kDigit, false),
  212. new CharacterSetChecks(kPunctuation, false)
  213. );
  214. if ((strWord == null) || isNaN(nAtLeastThisMany))
  215. {
  216. return false;
  217. }
  218. for(var index = 0; index < strWord.length; index++)
  219. {
  220. for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++)
  221. {
  222. if (!characterSetChecks[nCharSet].fResult && isctype(strWord.charAt(index), characterSetChecks[nCharSet].type, kDebugTraceLevelAll))
  223. {
  224. characterSetChecks[nCharSet].fResult = true;
  225. break;
  226. }
  227. }
  228. }
  229. for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++)
  230. {
  231. if (characterSetChecks[nCharSet].fResult)
  232. {
  233. nCharSets++;
  234. }
  235. }
  236. if (nCharSets < nAtLeastThisMany)
  237. {
  238. return false;
  239. }
  240. return true;
  241. }
  242. function FoundInDictionary(strWord, similarityMap, dictionary)
  243. {
  244. var strCanonicalizedWord = "";
  245. if((strWord == null) || (similarityMap == null) || (dictionary == null))
  246. {
  247. return true;
  248. }
  249. strCanonicalizedWord = CanonicalizeWord(strWord, similarityMap, kCanonicalizeLettersOnly);
  250. if (dictionary.Lookup(strCanonicalizedWord))
  251. {
  252. return true;
  253. }
  254. return false;
  255. }
  256. function IsCloseVariationOfAWordInDictionary(strWord, threshold, similarityMap, dictionary)
  257. {
  258. var strCanonicalizedWord = "";
  259. var nMinimumMeaningfulMatchLength = 0;
  260. if((strWord == null) || isNaN(threshold) || (similarityMap == null) || (dictionary == null))
  261. {
  262. return true;
  263. }
  264. strCanonicalizedWord = CanonicalizeWord(strWord, similarityMap, kCananicalizeEverything);
  265. nMinimumMeaningfulMatchLength = Math.floor((threshold) * strCanonicalizedWord.length);
  266. for (var nSubStringLength = strCanonicalizedWord.length; nSubStringLength >= nMinimumMeaningfulMatchLength; nSubStringLength--)
  267. {
  268. for(var nSubStringStart = 0; (nSubStringStart + nMinimumMeaningfulMatchLength) < strCanonicalizedWord.length; nSubStringStart++)
  269. {
  270. var strSubWord = strCanonicalizedWord.substr(nSubStringStart, nSubStringLength);
  271. if (dictionary.Lookup(strSubWord))
  272. {
  273. return true;
  274. }
  275. }
  276. }
  277. return false;
  278. }
  279. function Init()
  280. {
  281. gSimilarityMap.Add('3', 'e');
  282. gSimilarityMap.Add('x', 'k');
  283. gSimilarityMap.Add('5', 's');
  284. gSimilarityMap.Add('$', 's');
  285. gSimilarityMap.Add('6', 'g');
  286. gSimilarityMap.Add('7', 't');
  287. gSimilarityMap.Add('8', 'b');
  288. gSimilarityMap.Add('|', 'l');
  289. gSimilarityMap.Add('9', 'g');
  290. gSimilarityMap.Add('+', 't');
  291. gSimilarityMap.Add('@', 'a');
  292. gSimilarityMap.Add('0', 'o');
  293. gSimilarityMap.Add('1', 'l');
  294. gSimilarityMap.Add('2', 'z');
  295. gSimilarityMap.Add('!', 'i');
  296. gDictionary.Add(3,
  297. "oat|not|ken|keg|ham|hal|gas|cpu|cit|bop|bah".split("|"));
  298. gDictionary.Add(4,
  299. "zeus|ymca|yang|yaco|work|word|wool|will|viva|vito|vita|visa|vent|vain|uucp|util|utah|unix|trek|town|torn|tina|time|tier|tied|tidy|tide|thud|test|tess|tech|tara|tape|tapa|taos|tami|tall|tale|spit|sole|sold|soil|soft|sofa|soap|slav|slat|slap|slam|shit|sean|saud|sash|sara|sand|sail|said|sago|sage|saga|safe|ruth|russ|rusk|rush|ruse|runt|rung|rune|rove|rose|root|rick|rich|rice|reap|ream|rata|rare|ramp|prod|pork|pete|penn|penh|pend|pass|pang|pane|pale|orca|open|olin|olga|oldy|olav|olaf|okra|okay|ohio|oath|numb|null|nude|note|nosy|nose|nita|next|news|ness|nasa|mike|mets|mess|math|mash|mary|mars|mark|mara|mail|maid|mack|lyre|lyra|lyon|lynx|lynn|lucy|love|lose|lori|lois|lock|lisp|lisa|leah|lass|lash|lara|lank|lane|lana|kink|keri|kemp|kelp|keep|keen|kate|karl|june|judy|judo|judd|jody|jill|jean|jane|isis|iowa|inna|holm|help|hast|half|hale|hack|gust|gush|guru|gosh|gory|golf|glee|gina|germ|gatt|gash|gary|game|fred|fowl|ford|flea|flax|flaw|finn|fink|film|fill|file|erin|emit|elmo|easy|done|disk|disc|diet|dial|dawn|dave|data|dana|damn|dame|crab|cozy|coke|city|cite|chem|chat|cats|burl|bred|bill|bilk|bile|bike|beth|beta|benz|beau|bath|bass|bart|bank|bake|bait|bail|aria|anne|anna|andy|alex|abcd".split("|"));
  300. gDictionary.Add(5,
  301. "yacht|xerox|wilma|willy|wendy|wendi|water|warez|vitro|vital|vitae|vista|visor|vicky|venus|venom|value|ultra|u.s.a|tubas|tress|tramp|trait|tracy|traci|toxic|tiger|tidal|thumb|texas|test2|test1|terse|terry|tardy|tappa|tapis|tapir|taper|tanya|tansy|tammy|tamie|taint|sybil|suzie|susie|susan|super|steph|stacy|staci|spark|sonya|sonia|solar|soggy|sofia|smile|slave|slate|slash|slant|slang|simon|shiva|shell|shark|sharc|shack|scrim|screw|scott|scorn|score|scoot|scoop|scold|scoff|saxon|saucy|satan|sasha|sarah|sandy|sable|rural|rupee|runty|runny|runic|runge|rules|ruben|royal|route|rouse|roses|rolex|robyn|robot|robin|ridge|rhode|revel|renee|ranch|rally|radio|quark|quake|quail|power|polly|polis|polio|pluto|plane|pizza|photo|phone|peter|perry|penna|penis|paula|patty|parse|paris|parch|paper|panic|panel|olive|olden|okapi|oasis|oaken|nurse|notre|notch|nancy|nagel|mouse|moose|mogul|modem|merry|megan|mckee|mckay|mcgee|mccoy|marty|marni|mario|maria|marcy|marci|maint|maine|magog|magic|lyric|lyons|lynne|lynch|louis|lorry|loris|lorin|loren|linda|light|lewis|leroy|laura|later|lasso|laser|larry|ladle|kinky|keyes|kerry|kerri|kelly|keith|kazoo|kayla|kathy|karie|karen|julie|julia|joyce|jenny|jenni|japan|janie|janet|james|irene|inane|impel|idaho|horus|horse|honey|honda|holly|hello|heidi|hasty|haste|hamal|halve|haley|hague|hager|hagen|hades|guest|guess|gucci|group|grahm|gouge|gorse|gorky|glean|gleam|glaze|ghoul|ghost|gauss|gauge|gaudy|gator|gases|games|freer|fovea|float|fiona|finny|filly|field|erika|erica|enter|enemy|empty|emily|email|elmer|ellis|ellen|eight|eerie|edwin|edges|eatme|earth|eager|dulce|donor|donna|diane|diana|delay|defoe|david|danny|daisy|cuzco|cubit|cozen|coypu|coyly|cowry|condo|class|cindy|cigar|chess|cathy|carry|carol|carla|caret|caren|candy|candi|burma|burly|burke|brian|breed|borax|booze|booty|bloom|blood|bitch|bilge|bilbo|betty|beryl|becky|beach|bathe|batch|basic|bantu|banks|banjo|baird|baggy|azure|arrow|array|april|anita|angie|amber|amaze|alpha|alisa|alike|align|alice|alias|album|alamo|aires|admin|adept|adele|addle|addis|added|acura|abyss|abcde|1701d|123go|!@#$%".split("|"));
  302. gDictionary.Add(6,
  303. "yankee|yamaha|yakima|y7u8i9|xyzxyz|wombat|wizard|wilson|willie|weenie|warren|visual|virgin|viking|venous|venice|venial|vasant|vagina|ursula|urchin|uranus|uphill|umpire|u.s.a.|tuttle|trisha|trails|tracie|toyota|tomato|toggle|tidbit|thorny|thomas|terror|tennis|taylor|target|tardis|tappet|taoist|tannin|tanner|tanker|tamara|system|surfer|summer|subway|stacie|stacey|spring|sondra|solemn|soleil|solder|solace|soiree|soften|soffit|sodium|sodden|snoopy|snatch|smooch|smiles|slavic|slater|single|singer|simple|sherri|sharon|sharks|sesame|sensor|secret|second|season|search|scroll|scribe|scotty|scooby|schulz|school|scheme|saturn|sandra|sandal|saliva|saigon|sahara|safety|safari|sadism|saddle|sacral|russel|runyon|runway|runoff|runner|ronald|romano|rodent|ripple|riddle|ridden|reveal|return|remote|recess|recent|realty|really|reagan|raster|rascal|random|radish|radial|racoon|racket|racial|rachel|rabbit|qwerty|qawsed|puppet|puneet|public|prince|presto|praise|poster|polite|polish|policy|police|plover|pierre|phrase|photon|philip|persia|peoria|penmen|penman|pencil|peanut|parrot|parent|pardon|papers|pander|pamela|pallet|palace|oxford|outlaw|osiris|orwell|oregon|oracle|olivia|oliver|olefin|office|notion|notify|notice|notate|notary|noreen|nobody|nicole|newton|nevada|mutant|mozart|morley|monica|moguls|minsky|mickey|merlin|memory|mellon|meagan|mcneil|mcleod|mclean|mckeon|mchugh|mcgraw|mcgill|mccann|mccall|mccabe|mayfly|maxine|master|massif|maseru|marvin|markus|malcom|mailer|maiden|magpie|magnum|magnet|maggot|lorenz|lisbon|limpid|leslie|leland|latest|latera|latent|lascar|larkin|langur|landis|landau|lambda|kristy|kristi|krista|knight|kitten|kinney|kerrie|kernel|kermit|kennan|kelvin|kelsey|kelley|keller|keenan|katina|karina|kansas|juggle|judith|jsbach|joshua|joseph|johnny|joanne|joanna|jixian|jimmie|jimbob|jester|jeanne|jasmin|janice|jaguar|jackie|island|invest|instar|ingrid|ingres|impute|holmes|holman|hockey|hidden|hawaii|hasten|harvey|harold|hamlin|hamlet|halite|halide|haggle|haggis|hadron|hadley|hacker|gustav|gusset|gurkha|gurgle|guntis|guitar|graham|gospel|gorton|gorham|gorges|golfer|glassy|ginger|gibson|ghetto|german|george|gauche|gasify|gambol|gamble|gambit|friend|freest|fourth|format|flower|flaxen|flaunt|flakes|finley|finite|fillip|fillet|filler|filled|fermat|fender|fatten|fatima|fathom|father|evelyn|euclid|estate|enzyme|engine|employ|emboss|elanor|elaine|eileen|eighty|eighth|effect|efface|eeyore|eerily|edwina|easier|durkin|durkee|during|durham|duress|duncan|donner|donkey|donate|donald|domino|disney|dieter|device|denise|deluge|delete|debbie|deaden|ddurer|dapper|daniel|dancer|damask|dakota|daemon|cuvier|cuddly|cuddle|cuckoo|cretin|create|cozier|coyote|cowpox|cooper|cookie|connie|coneck|condom|coffee|citrus|citron|citric|circus|charon|change|censor|cement|celtic|cecily|cayuga|catnip|catkin|cation|castle|carson|carrot|carrie|carole|carmen|caress|cantor|burley|burlap|buried|burial|brenda|bremen|breezy|breeze|breech|brandy|brandi|border|borden|borate|bloody|bishop|bilbao|bikini|bigred|betsie|berman|berlin|bedbug|became|beavis|beaver|beauty|beater|batman|bathos|barony|barber|baobab|bantus|banter|bantam|banish|bangui|bangor|bangle|bandit|banana|bakery|bailey|bahama|bagley|badass|aztecs|azsxdc|athena|asylum|arthur|arrest|arrear|arrack|arlene|anvils|answer|angela|andrea|anchor|analog|amazon|amanda|alison|alight|alicia|albino|albert|albeit|albany|alaska|adrian|adelia|adduce|addict|addend|accrue|access|abcdef|abcabc|abc123|a1b2c3|a12345|@#$%^&|7y8u9i|1qw23e|1q2w3e|1p2o3i|1a2b3c|123abc|10sne1|0p9o8i|!@#$%^".split("|"));
  304. gDictionary.Add(7,
  305. "yolanda|wyoming|winston|william|whitney|whiting|whatnot|vitriol|vitrify|vitiate|vitamin|visitor|village|vertigo|vermont|venturi|venture|ventral|venison|valerie|utility|upgrade|unknown|unicorn|unhappy|trivial|torrent|tinfoil|tiffany|tidings|thunder|thistle|theresa|test123|terrify|teleost|tarbell|taproot|tapping|tapioca|tantrum|tantric|tanning|takeoff|swearer|suzanne|susanne|support|success|student|squires|sossina|soldier|sojourn|soignee|sodding|smother|slavish|slavery|slander|shuttle|shivers|shirley|sheldon|shannon|service|seattle|scooter|scissor|science|scholar|scamper|satisfy|sarcasm|salerno|sailing|saguaro|saginaw|sagging|saffron|sabrina|russell|rupture|running|runneth|rosebud|receipt|rebecca|realtor|raleigh|rainbow|quarrel|quality|qualify|pumpkin|protect|program|profile|profess|profane|private|prelude|porsche|politic|playboy|phoenix|persona|persian|perseus|perseid|perplex|penguin|pendant|parapet|panoply|panning|panicle|panicky|pangaea|pandora|palette|pacific|olivier|olduvai|oldster|okinawa|oakwood|nyquist|nursery|numeric|number1|nullify|nucleus|nuclear|notused|nothing|newyork|network|neptune|montana|minimum|michele|michael|merriam|mercury|melissa|mcnulty|mcnally|mcmahon|mckenna|mcguire|mcgrath|mcgowan|mcelroy|mcclure|mcclain|mccarty|mcbride|mcadams|mbabane|mayoral|maurice|marimba|manhole|manager|mammoth|malcolm|malaria|mailbox|magnify|magneto|losable|lorinda|loretta|lorelei|lockout|lioness|limpkin|library|lazarus|lathrop|lateran|lateral|kristin|kristie|kristen|kinsman|kingdom|kennedy|kendall|kellogg|keelson|katrina|jupiter|judaism|judaica|jessica|janeiro|inspire|inspect|insofar|ingress|indiana|include|impetus|imperil|holmium|holmdel|herbert|heather|headmen|headman|harmony|handily|hamburg|halifax|halibut|halfway|haggard|hafnium|hadrian|gustave|gunther|gunshot|gryphon|gosling|goshawk|gorilla|gleason|glacier|ghostly|germane|georgia|geology|gaseous|gascony|gardner|gabriel|freeway|fourier|flowers|florida|fishers|finnish|finland|ferrari|felicia|feather|fatigue|fairway|express|expound|emulate|empress|empower|emitted|emerald|embrace|embower|ellwood|ellison|egghead|durward|durrell|drought|donning|donahue|digital|develop|desiree|default|deborah|damming|cynthia|cyanate|cutworm|cutting|cuddles|cubicle|crystal|coxcomb|cowslip|cowpony|cowpoke|console|conquer|connect|comrade|compton|collins|cluster|claudia|classic|citroen|citrate|citizen|citadel|cistern|christy|chester|charles|charity|celtics|celsius|catlike|cathode|carroll|carrion|careful|carbine|carbide|caraway|caravan|camille|burmese|burgess|bridget|breccia|bradley|bopping|blondie|bilayer|beverly|bernard|bermuda|berlitz|berlioz|beowulf|beloved|because|beatnik|beatles|beatify|bassoon|bartman|baroque|barbara|baptism|banshee|banquet|bannock|banning|bananas|bainite|bailiff|bahrein|bagpipe|baghdad|bagging|bacchus|asshole|arrange|arraign|arragon|arizona|ariadne|annette|animals|anatomy|anatole|amatory|amateur|amadeus|allison|alimony|aliases|algebra|albumin|alberto|alberta|albania|alameda|aladdin|alabama|airport|airpark|airfoil|airflow|airfare|airdrop|adenoma|adenine|address|addison|accrual|acclaim|academy|abcdefg|!@#$%^&".split("|"));
  306. gDictionary.Add(8,
  307. "yosemite|y7u8i9o0|wormwood|woodwind|whistler|whatever|warcraft|vitreous|virginia|veronica|venomous|trombone|transfer|tortoise|tientsin|tideland|ticklish|thailand|testtest|tertiary|terrific|terminal|telegram|tarragon|tapeworm|tapestry|tanzania|tantalus|tantalum|sysadmin|symmetry|sunshine|strangle|startrek|springer|sparrows|somebody|solecism|soldiery|softwood|software|softball|socrates|slatting|slapping|slapdash|slamming|simpsons|serenity|security|schwartz|sanctity|sanctify|samantha|salesman|sailfish|sailboat|sagittal|sagacity|sabotage|rushmore|rosemary|rochelle|robotics|reverend|regional|raindrop|rachelle|qwertyui|qwerasdf|qawsedrf|q1w2e3r4|protozoa|prodding|princess|precious|politics|politico|plymouth|pershing|penitent|penelope|pendulum|patricia|password|passport|paranoia|panorama|panicked|pandemic|pandanus|pakistan|painless|operator|olivetti|oleander|oklahoma|notocord|notebook|notarize|nebraska|napoleon|missouri|michigan|michelle|mesmeric|mercedes|mcmullen|mcmillan|mcknight|mckinney|mckinley|mckesson|mckenzie|mcintyre|mcintosh|mcgregor|mcgovern|mcginnis|mcfadden|mcdowell|mcdonald|mcdaniel|mcconnel|mccauley|mccarthy|mccallum|mayapple|masonite|maryland|marjoram|marinate|marietta|maneuver|mandamus|maledict|maladapt|magnuson|magnolia|magnetic|lyrebird|lymphoma|lorraine|lionking|linoleum|limitate|limerick|laterite|landmass|landmark|landlord|landlady|landhold|landfill|kristine|kirkland|kingston|kimberly|khartoum|keystone|kentucky|keeshond|kathrine|kathleen|jubilant|joystick|jennifer|jacobsen|irishman|interpol|internet|insulate|instinct|instable|insomnia|insolent|insolate|inactive|imperial|iloveyou|illinois|hydrogen|hutchins|homework|hologram|holocene|hibernia|hiawatha|heinlein|hebrides|headlong|headline|headland|hastings|hamilton|halftone|halfback|hagstrom|gunsling|gunpoint|gumption|gorgeous|glaucous|glaucoma|glassine|ginnegan|ghoulish|gertrude|geometry|geometer|garfield|gamesman|gamecock|fungible|function|frighten|freetown|foxglove|fourteen|foursome|forsythe|football|flaxseed|flautist|flatworm|flatware|fidelity|exposure|eternity|enthrone|enthrall|enthalpy|entendre|entangle|engineer|emulsion|emulsify|emporium|employer|employee|employed|emmanuel|elliptic|elephant|einstein|eighteen|duration|donnelly|dominion|dlmhurst|delegate|delaware|december|deadwood|deadlock|deadline|deadhead|danielle|cyanamid|cucumber|cristina|criminal|creosote|creation|cowpunch|couscous|conquest|comrades|computer|comprise|compress|colorado|clusters|citation|charming|cerulean|cenozoic|cemetery|cellular|catskill|cationic|catholic|cathodic|catheter|cascades|carriage|caroline|carolina|carefree|cardinal|burgundy|burglary|bumbling|broadway|breeches|bordello|bordeaux|bilinear|bilabial|bernardo|berliner|berkeley|bedazzle|beaumont|beatrice|beatific|bathrobe|baronial|baritone|bankrupt|banister|bakelite|azsxdcfv|asdfqwer|arkansas|appraise|apposite|anything|angerine|ancestry|ancestor|anatomic|anathema|ambiance|alphabet|albright|albrecht|alberich|albacore|alastair|alacrity|airspace|airplane|airfield|airedale|aircraft|airbrush|airborne|aerobics|adrianna|adelaide|additive|addition|addendum|accouter|academic|academia|abcdefgh|abcd1234|a1b2c3d4|7y8u9i0o|7890yuio|1234qwer|0p9o8i7u|0987poiu|!@#$%^&*".split("|"));
  308. gDictionary.Add(9,
  309. "zimmerman|worldwide|wisconsin|wholesale|vitriolic|ventricle|ventilate|valentine|tidewater|testament|territory|tennessee|telephone|telepathy|teleology|telemetry|telemeter|telegraph|tarantula|tarantara|tangerine|supported|superuser|stuttgart|stratford|stephanie|solemnity|softcover|slaughter|slapstick|signature|sheffield|sarcastic|sanctuary|sagebrush|sagacious|runnymede|rochester|receptive|reception|racketeer|professor|princeton|pondering|politburo|policemen|policeman|persimmon|persevere|persecute|percolate|peninsula|penetrate|pendulous|paralytic|panoramic|panicking|panhandle|oligopoly|oligocene|oligarchy|olfactory|oldenburg|nutrition|nurturant|notorious|notoriety|minnesota|microsoft|mcpherson|mcfarland|mcdougall|mcdonnell|mcdermott|mccracken|mccormick|mcconnell|mccluskey|mcclellan|marijuana|malicious|magnitude|magnetron|magnetite|macintosh|lynchburg|louisiana|lissajous|limousine|limnology|landscape|landowner|kinshasha|kingsbury|kibbutzim|kennecott|jamestown|ironstone|invisible|invention|intuitive|intervene|intersect|inspector|insomniac|insolvent|insoluble|impetuous|imperious|imperfect|holocaust|hollywood|hollyhock|headphone|headlight|headdress|headcount|headboard|happening|hamburger|halverson|gustafson|gunpowder|glasswort|glassware|ghostlike|geometric|gaucherie|freewheel|freethink|freestone|foresight|foolproof|extension|expositor|establish|entertain|employing|emittance|ellsworth|elizabeth|eightieth|eightfold|eiderdown|dusenbury|dusenberg|donaldson|dominique|discovery|desperate|delegable|delectate|decompose|decompile|damnation|cutthroat|crabapple|cornelius|conqueror|connubial|commrades|citizenry|christine|christina|chemistry|cellulose|celluloid|catherine|carryover|burlesque|bloodshot|bloodshed|bloodroot|bloodline|bloodbath|bilingual|bilateral|bijective|bijection|bernadine|berkshire|beethoven|beatitude|bakhtiari|asymptote|asymmetry|apprehend|appraisal|apportion|ancestral|anatomist|alexander|albatross|alabaster|alabamian|adenosine|abcabcabc".split("|"));
  310. gDictionary.Add(10,
  311. "washington|volkswagen|topography|tessellate|temptation|telephonic|telepathic|telemetric|telegraphy|tantamount|superstage|slanderous|salamander|qwertyuiop|polynomial|politician|phrasemake|photometry|photolytic|photolysis|photogenic|phosphorus|phosphoric|persiflage|persephone|perquisite|peninsular|penicillin|penetrable|panjandrum|oligoclase|oligarchic|oldsmobile|nottingham|noticeable|noteworthy|mcnaughton|mclaughlin|mccullough|mcallister|malconduct|maidenhair|limitation|lascivious|landowning|landlubber|landlocked|lamination|khrushchev|juggernaut|irrational|invariable|insouciant|insolvable|incomplete|impervious|impersonal|headmaster|glaswegian|geopolitic|geophysics|fourteenth|foursquare|expressive|expression|expository|exposition|enterprise|eightyfold|eighteenth|effaceable|donnybrook|delectable|decolonize|cuttlefish|cuttlebone|compromise|compressor|comprehend|cellophane|carruthers|california|burlington|burgundian|borderline|borderland|bloodstone|bloodstain|bloodhound|bijouterie|biharmonic|bernardino|beaujolais|basketball|bankruptcy|bangladesh|atmosphere|asymptotic|asymmetric|appreciate|apposition|ambassador|amateurish|alimentary|additional|accomplish|1q2w3e4r5t".split("|"));
  312. gDictionary.Add(11,
  313. "yellowstone|venturesome|territorial|telekinesis|sagittarius|safekeeping|politicking|policewoman|photometric|photography|phosphorous|perseverant|persecutory|persecution|penitential|pandemonium|mississippi|marketplace|magnificent|irremovable|interrogate|institution|inspiration|incompetent|impertinent|impersonate|impermeable|headquarter|hamiltonian|halfhearted|hagiography|geophysical|expressible|emptyhanded|eigenvector|deleterious|decollimate|decolletage|connecticut|comptroller|compressive|compression|catholicism|bloodstream|bakersfield|arrangeable|appreciable|anastomotic|albuquerque".split("|"));
  314. gDictionary.Add(12,
  315. "williamsburg|testamentary|qwerasdfzxcv|q1w2e3r4t5y6|perseverance|pennsylvania|penitentiary|malformation|liquefaction|interstitial|inconclusive|incomputable|incompletion|incompatible|incomparable|imperishable|impenetrable|headquarters|geometrician|ellipsometry|decomposable|decommission|compressible|burglarproof|bloodletting|bilharziasis|asynchronous|asymptomatic|ambidextrous|1q2w3e4r5t6y".split("|"));
  316. gDictionary.Add(13,
  317. "ventriloquist|ventriloquism|poliomyelitis|phosphorylate|oleomargarine|massachusetts|jitterbugging|interpolatory|inconceivable|imperturbable|impermissible|decomposition|comprehensive|comprehension".split("|"));
  318. gDictionary.Add(14,
  319. "slaughterhouse|irreproducible|incompressible|comprehensible|bremsstrahlung".split("|"));
  320. gDictionary.Add(15,
  321. "irreconciliable|instrumentation|incomprehension".split("|"));
  322. gDictionary.Add(16,
  323. "incomprehensible".split("|"));
  324. }
  325. function ClientSideStrongPassword()
  326. {
  327. return (IsLongEnough(ClientSideStrongPassword.arguments[0], "7") &&
  328. SpansEnoughCharacterSets(ClientSideStrongPassword.arguments[0], "3") &&
  329. (!(IsCloseVariationOfAWordInDictionary(ClientSideStrongPassword.arguments[0], "0.6",
  330. ClientSideStrongPassword.arguments[1], ClientSideStrongPassword.arguments[2]))));
  331. }
  332. function ClientSideMediumPassword()
  333. {
  334. return (IsLongEnough(ClientSideMediumPassword.arguments[0], "7") &&
  335. SpansEnoughCharacterSets(ClientSideMediumPassword.arguments[0], "2") &&
  336. (!(FoundInDictionary(ClientSideMediumPassword.arguments[0], ClientSideMediumPassword.arguments[1],
  337. ClientSideMediumPassword.arguments[2]))));
  338. }
  339. function ClientSideWeakPassword()
  340. {
  341. return (IsLongEnough(ClientSideWeakPassword.arguments[0], "6") ||
  342. (!(IsLongEnough(ClientSideWeakPassword.arguments[0], "0"))));
  343. }