diff --git a/README.md b/README.md index c3abe68..c69ac99 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ corresponging to the integer `24224384090962230467342891306`, or `4e45f0dced5ec1 ## I am sold. How does this work? -mnemonic.js uses a relatively small (1626 to be exact) set of English words that are chosen from the [list](http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/Contemporary_poetry) of frequently used words in contemporary English poetry and are (hopefully) memorable. +mnemonic.js uses a relatively small (1626 to be exact) set of English words that are chosen from the [list](http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/Contemporary_poetry) of frequently used words in contemporary English poetry and are (hopefully) memorable. An alternative set of English words has been added called `bitcoinSubset`. This list is a subset of the words used by crypto wallet passphrase generators. Currently you can view some at [Bitcoin mnenomic code tools](https://bitaps.com/mnemonic). To generate a passphrase, a random sequence of 32-bit unsigned integers is generated. The bigger the length of the sequence the stronger it is, for example 4 integers will give you 128-bit strong password. This sequence is then transformed to a list of words from the dictionary, 3 words per integer. The function that transforms the integer `x[i]` to the indices `w[i, j]` of the words is the following (1:1 and reversible) function: @@ -61,6 +61,16 @@ Generate for example a 96-bit password, i.e. 9 words or 3 random 32-bit unsigned ``` +To use an alternate list: + +```javascript + + m = new Mnemonic(96, 'bitcoinSubset'); + m.toWords(); + ["grey", "climb", "demon", "snap", "shove", "fruit", "grasp", "hum", "self"] + +``` + You can also obtain the random sequence, or the the 96-bit number in hexadecimal notation (useful if you need a uid that you can actually remember), ```javascript @@ -87,6 +97,20 @@ Finally, from a list of words or a hex string it is possible to recreate the `Mn ``` +Of course, if you generated using an alternate word list, you will need to specify that: + +```javascript + + m = Mnemonic.fromWords(["grey", "climb", "demon", "snap", "shove", "fruit", "grasp", "hum", "self"], 'bitcoinSubset'); + m.toHex(); + "0a6deb990a3db22d6ed3010b" + + m = Mnemonic.fromHex("0a6deb990a3db22d6ed3010b") + m.toWords('bitcoinSubset') + ["grey", "climb", "demon", "snap", "shove", "fruit", "grasp", "hum", "self"] + +``` + ## FAQ * *Why n=1626?* diff --git a/bower.json b/bower.json index 34b3181..d0b97d5 100644 --- a/bower.json +++ b/bower.json @@ -16,7 +16,7 @@ "tests", "**/.*" ], - "version": "1.1.1", + "version": "1.1.2", "homepage": "https://github.com/ggozad/mnemonic.js", "authors": [ "Yiorgis Gozadinos " diff --git a/mnemonic.js b/mnemonic.js index 9e61ca6..0419ab1 100644 --- a/mnemonic.js +++ b/mnemonic.js @@ -1,4 +1,4 @@ -// Mnemonic.js v. 1.1.0 +// Mnemonic.js v. 1.1.2 // (c) 2012-2015 Yiorgis Gozadinos, Crypho AS. // Mnemonic.js is distributed under the MIT license. @@ -69,30 +69,30 @@ return res; }; - Mnemonic.prototype.toWords = function () { + Mnemonic.prototype.toWords = function (wordlist = "poetry") { var i = 0, l = this.seed.length, n = Mnemonic.wc, words = [], x, w1, w2, w3; for (; i < l; i++) { x = this.seed[i]; w1 = x % n; w2 = (((x / n) >> 0) + w1 ) % n; w3 = (((((x / n) >> 0) / n ) >> 0) + w2 ) % n; - words.push(Mnemonic.words[w1]); - words.push(Mnemonic.words[w2]); - words.push(Mnemonic.words[w3]); + words.push(Mnemonic.words[wordlist][w1]); + words.push(Mnemonic.words[wordlist][w2]); + words.push(Mnemonic.words[wordlist][w3]); } return words; }; - Mnemonic.fromWords = function (words) { + Mnemonic.fromWords = function (words, wordlist = "poetry") { var i = 0, n = Mnemonic.wc, l = words.length / 3, seed = new Uint32Array(l), w1, w2, w3; for (; i < l; i++) { - w1 = Mnemonic.words.indexOf(words[3 * i]); - w2 = Mnemonic.words.indexOf(words[3 * i + 1]); - w3 = Mnemonic.words.indexOf(words[3 * i + 2]); + w1 = Mnemonic.words[wordlist].indexOf(words[3 * i]); + w2 = Mnemonic.words[wordlist].indexOf(words[3 * i + 1]); + w3 = Mnemonic.words[wordlist].indexOf(words[3 * i + 2]); seed[i] = w1 + n * Mnemonic._mod(w2 - w1, n) + n * n * Mnemonic._mod(w3 - w2, n); } @@ -114,7 +114,14 @@ }; Mnemonic.wc = 1626; - Mnemonic.words = JSON.parse('["like","just","love","know","never","want","time","out","there","make","look","eye","down","only","think","heart","back","then","into","about","more","away","still","them","take","thing","even","through","long","always","world","too","friend","tell","try","hand","thought","over","here","other","need","smile","again","much","cry","been","night","ever","little","said","end","some","those","around","mind","people","girl","leave","dream","left","turn","myself","give","nothing","really","off","before","something","find","walk","wish","good","once","place","ask","stop","keep","watch","seem","everything","wait","got","yet","made","remember","start","alone","run","hope","maybe","believe","body","hate","after","close","talk","stand","own","each","hurt","help","home","god","soul","new","many","two","inside","should","true","first","fear","mean","better","play","another","gone","change","use","wonder","someone","hair","cold","open","best","any","behind","happen","water","dark","laugh","stay","forever","name","work","show","sky","break","came","deep","door","put","black","together","upon","happy","such","great","white","matter","fill","past","please","burn","cause","enough","touch","moment","soon","voice","scream","anything","stare","sound","red","everyone","hide","kiss","truth","death","beautiful","mine","blood","broken","very","pass","next","forget","tree","wrong","air","mother","understand","lip","hit","wall","memory","sleep","free","high","realize","school","might","skin","sweet","perfect","blue","kill","breath","dance","against","fly","between","grow","strong","under","listen","bring","sometimes","speak","pull","person","become","family","begin","ground","real","small","father","sure","feet","rest","young","finally","land","across","today","different","guy","line","fire","reason","reach","second","slowly","write","eat","smell","mouth","step","learn","three","floor","promise","breathe","darkness","push","earth","guess","save","song","above","along","both","color","house","almost","sorry","anymore","brother","okay","dear","game","fade","already","apart","warm","beauty","heard","notice","question","shine","began","piece","whole","shadow","secret","street","within","finger","point","morning","whisper","child","moon","green","story","glass","kid","silence","since","soft","yourself","empty","shall","angel","answer","baby","bright","dad","path","worry","hour","drop","follow","power","war","half","flow","heaven","act","chance","fact","least","tired","children","near","quite","afraid","rise","sea","taste","window","cover","nice","trust","lot","sad","cool","force","peace","return","blind","easy","ready","roll","rose","drive","held","music","beneath","hang","mom","paint","emotion","quiet","clear","cloud","few","pretty","bird","outside","paper","picture","front","rock","simple","anyone","meant","reality","road","sense","waste","bit","leaf","thank","happiness","meet","men","smoke","truly","decide","self","age","book","form","alive","carry","escape","damn","instead","able","ice","minute","throw","catch","leg","ring","course","goodbye","lead","poem","sick","corner","desire","known","problem","remind","shoulder","suppose","toward","wave","drink","jump","woman","pretend","sister","week","human","joy","crack","grey","pray","surprise","dry","knee","less","search","bleed","caught","clean","embrace","future","king","son","sorrow","chest","hug","remain","sat","worth","blow","daddy","final","parent","tight","also","create","lonely","safe","cross","dress","evil","silent","bone","fate","perhaps","anger","class","scar","snow","tiny","tonight","continue","control","dog","edge","mirror","month","suddenly","comfort","given","loud","quickly","gaze","plan","rush","stone","town","battle","ignore","spirit","stood","stupid","yours","brown","build","dust","hey","kept","pay","phone","twist","although","ball","beyond","hidden","nose","taken","fail","float","pure","somehow","wash","wrap","angry","cheek","creature","forgotten","heat","rip","single","space","special","weak","whatever","yell","anyway","blame","job","choose","country","curse","drift","echo","figure","grew","laughter","neck","suffer","worse","yeah","disappear","foot","forward","knife","mess","somewhere","stomach","storm","beg","idea","lift","offer","breeze","field","five","often","simply","stuck","win","allow","confuse","enjoy","except","flower","seek","strength","calm","grin","gun","heavy","hill","large","ocean","shoe","sigh","straight","summer","tongue","accept","crazy","everyday","exist","grass","mistake","sent","shut","surround","table","ache","brain","destroy","heal","nature","shout","sign","stain","choice","doubt","glance","glow","mountain","queen","stranger","throat","tomorrow","city","either","fish","flame","rather","shape","spin","spread","ash","distance","finish","image","imagine","important","nobody","shatter","warmth","became","feed","flesh","funny","lust","shirt","trouble","yellow","attention","bare","bite","money","protect","amaze","appear","born","choke","completely","daughter","fresh","friendship","gentle","probably","six","deserve","expect","grab","middle","nightmare","river","thousand","weight","worst","wound","barely","bottle","cream","regret","relationship","stick","test","crush","endless","fault","itself","rule","spill","art","circle","join","kick","mask","master","passion","quick","raise","smooth","unless","wander","actually","broke","chair","deal","favorite","gift","note","number","sweat","box","chill","clothes","lady","mark","park","poor","sadness","tie","animal","belong","brush","consume","dawn","forest","innocent","pen","pride","stream","thick","clay","complete","count","draw","faith","press","silver","struggle","surface","taught","teach","wet","bless","chase","climb","enter","letter","melt","metal","movie","stretch","swing","vision","wife","beside","crash","forgot","guide","haunt","joke","knock","plant","pour","prove","reveal","steal","stuff","trip","wood","wrist","bother","bottom","crawl","crowd","fix","forgive","frown","grace","loose","lucky","party","release","surely","survive","teacher","gently","grip","speed","suicide","travel","treat","vein","written","cage","chain","conversation","date","enemy","however","interest","million","page","pink","proud","sway","themselves","winter","church","cruel","cup","demon","experience","freedom","pair","pop","purpose","respect","shoot","softly","state","strange","bar","birth","curl","dirt","excuse","lord","lovely","monster","order","pack","pants","pool","scene","seven","shame","slide","ugly","among","blade","blonde","closet","creek","deny","drug","eternity","gain","grade","handle","key","linger","pale","prepare","swallow","swim","tremble","wheel","won","cast","cigarette","claim","college","direction","dirty","gather","ghost","hundred","loss","lung","orange","present","swear","swirl","twice","wild","bitter","blanket","doctor","everywhere","flash","grown","knowledge","numb","pressure","radio","repeat","ruin","spend","unknown","buy","clock","devil","early","false","fantasy","pound","precious","refuse","sheet","teeth","welcome","add","ahead","block","bury","caress","content","depth","despite","distant","marry","purple","threw","whenever","bomb","dull","easily","grasp","hospital","innocence","normal","receive","reply","rhyme","shade","someday","sword","toe","visit","asleep","bought","center","consider","flat","hero","history","ink","insane","muscle","mystery","pocket","reflection","shove","silently","smart","soldier","spot","stress","train","type","view","whether","bus","energy","explain","holy","hunger","inch","magic","mix","noise","nowhere","prayer","presence","shock","snap","spider","study","thunder","trail","admit","agree","bag","bang","bound","butterfly","cute","exactly","explode","familiar","fold","further","pierce","reflect","scent","selfish","sharp","sink","spring","stumble","universe","weep","women","wonderful","action","ancient","attempt","avoid","birthday","branch","chocolate","core","depress","drunk","especially","focus","fruit","honest","match","palm","perfectly","pillow","pity","poison","roar","shift","slightly","thump","truck","tune","twenty","unable","wipe","wrote","coat","constant","dinner","drove","egg","eternal","flight","flood","frame","freak","gasp","glad","hollow","motion","peer","plastic","root","screen","season","sting","strike","team","unlike","victim","volume","warn","weird","attack","await","awake","built","charm","crave","despair","fought","grant","grief","horse","limit","message","ripple","sanity","scatter","serve","split","string","trick","annoy","blur","boat","brave","clearly","cling","connect","fist","forth","imagination","iron","jock","judge","lesson","milk","misery","nail","naked","ourselves","poet","possible","princess","sail","size","snake","society","stroke","torture","toss","trace","wise","bloom","bullet","cell","check","cost","darling","during","footstep","fragile","hallway","hardly","horizon","invisible","journey","midnight","mud","nod","pause","relax","shiver","sudden","value","youth","abuse","admire","blink","breast","bruise","constantly","couple","creep","curve","difference","dumb","emptiness","gotta","honor","plain","planet","recall","rub","ship","slam","soar","somebody","tightly","weather","adore","approach","bond","bread","burst","candle","coffee","cousin","crime","desert","flutter","frozen","grand","heel","hello","language","level","movement","pleasure","powerful","random","rhythm","settle","silly","slap","sort","spoken","steel","threaten","tumble","upset","aside","awkward","bee","blank","board","button","card","carefully","complain","crap","deeply","discover","drag","dread","effort","entire","fairy","giant","gotten","greet","illusion","jeans","leap","liquid","march","mend","nervous","nine","replace","rope","spine","stole","terror","accident","apple","balance","boom","childhood","collect","demand","depression","eventually","faint","glare","goal","group","honey","kitchen","laid","limb","machine","mere","mold","murder","nerve","painful","poetry","prince","rabbit","shelter","shore","shower","soothe","stair","steady","sunlight","tangle","tease","treasure","uncle","begun","bliss","canvas","cheer","claw","clutch","commit","crimson","crystal","delight","doll","existence","express","fog","football","gay","goose","guard","hatred","illuminate","mass","math","mourn","rich","rough","skip","stir","student","style","support","thorn","tough","yard","yearn","yesterday","advice","appreciate","autumn","bank","beam","bowl","capture","carve","collapse","confusion","creation","dove","feather","girlfriend","glory","government","harsh","hop","inner","loser","moonlight","neighbor","neither","peach","pig","praise","screw","shield","shimmer","sneak","stab","subject","throughout","thrown","tower","twirl","wow","army","arrive","bathroom","bump","cease","cookie","couch","courage","dim","guilt","howl","hum","husband","insult","led","lunch","mock","mostly","natural","nearly","needle","nerd","peaceful","perfection","pile","price","remove","roam","sanctuary","serious","shiny","shook","sob","stolen","tap","vain","void","warrior","wrinkle","affection","apologize","blossom","bounce","bridge","cheap","crumble","decision","descend","desperately","dig","dot","flip","frighten","heartbeat","huge","lazy","lick","odd","opinion","process","puzzle","quietly","retreat","score","sentence","separate","situation","skill","soak","square","stray","taint","task","tide","underneath","veil","whistle","anywhere","bedroom","bid","bloody","burden","careful","compare","concern","curtain","decay","defeat","describe","double","dreamer","driver","dwell","evening","flare","flicker","grandma","guitar","harm","horrible","hungry","indeed","lace","melody","monkey","nation","object","obviously","rainbow","salt","scratch","shown","shy","stage","stun","third","tickle","useless","weakness","worship","worthless","afternoon","beard","boyfriend","bubble","busy","certain","chin","concrete","desk","diamond","doom","drawn","due","felicity","freeze","frost","garden","glide","harmony","hopefully","hunt","jealous","lightning","mama","mercy","peel","physical","position","pulse","punch","quit","rant","respond","salty","sane","satisfy","savior","sheep","slept","social","sport","tuck","utter","valley","wolf","aim","alas","alter","arrow","awaken","beaten","belief","brand","ceiling","cheese","clue","confidence","connection","daily","disguise","eager","erase","essence","everytime","expression","fan","flag","flirt","foul","fur","giggle","glorious","ignorance","law","lifeless","measure","mighty","muse","north","opposite","paradise","patience","patient","pencil","petal","plate","ponder","possibly","practice","slice","spell","stock","strife","strip","suffocate","suit","tender","tool","trade","velvet","verse","waist","witch","aunt","bench","bold","cap","certainly","click","companion","creator","dart","delicate","determine","dish","dragon","drama","drum","dude","everybody","feast","forehead","former","fright","fully","gas","hook","hurl","invite","juice","manage","moral","possess","raw","rebel","royal","scale","scary","several","slight","stubborn","swell","talent","tea","terrible","thread","torment","trickle","usually","vast","violence","weave","acid","agony","ashamed","awe","belly","blend","blush","character","cheat","common","company","coward","creak","danger","deadly","defense","define","depend","desperate","destination","dew","duck","dusty","embarrass","engine","example","explore","foe","freely","frustrate","generation","glove","guilty","health","hurry","idiot","impossible","inhale","jaw","kingdom","mention","mist","moan","mumble","mutter","observe","ode","pathetic","pattern","pie","prefer","puff","rape","rare","revenge","rude","scrape","spiral","squeeze","strain","sunset","suspend","sympathy","thigh","throne","total","unseen","weapon","weary"]'); + Mnemonic.words = { + bitcoinSubset: JSON.parse( + '["ability", "able", "about", "above", "access", "account", "achieve", "acid", "acoustic", "acquire", "across", "action", "actor", "actual", "afford", "again", "age", "agree", "aim", "air", "airport", "album", "all", "almost", "alter", "always", "amazing", "among", "amount", "amuse", "anchor", "ancient", "angle", "animal", "ankle", "annual", "another", "answer", "antenna", "any", "apart", "appear", "apple", "approve", "april", "arch", "arctic", "area", "arm", "armor", "army", "around", "arrange", "arrest", "arrive", "art", "artist", "artwork", "ask", "aspect", "asthma", "athlete", "atom", "attend", "attitude", "attract", "august", "author", "auto", "average", "avocado", "avoid", "awake", "aware", "away", "awesome", "axis", "baby", "badge", "bag", "balance", "balcony", "ball", "bamboo", "banner", "bar", "bargain", "base", "basic", "basket", "battle", "beach", "bean", "become", "before", "begin", "behind", "believe", "below", "belt", "bench", "benefit", "best", "better", "between", "beyond", "bicycle", "bid", "bike", "bind", "biology", "bird", "birth", "black", "blanket", "bless", "blind", "blue", "blur", "blush", "board", "boat", "body", "boil", "bone", "bonus", "book", "boost", "border", "boring", "borrow", "bottom", "bounce", "box", "bracket", "brain", "brand", "brass", "brave", "bread", "breeze", "brick", "bridge", "brief", "bright", "bring", "brisk", "bronze", "broom", "brown", "brush", "bubble", "buddy", "buffalo", "build", "bulk", "bundle", "bunker", "burger", "burst", "bus", "butter", "buyer", "buzz", "cabin", "cable", "cactus", "cake", "call", "camera", "camp", "can", "canal", "cancel", "candy", "cannon", "canoe", "canvas", "canyon", "capable", "capital", "captain", "car", "card", "cargo", "carpet", "carry", "cart", "case", "cash", "castle", "casual", "cat", "catch", "cause", "cave", "ceiling", "cement", "census", "century", "cereal", "certain", "chair", "chalk", "champion", "change", "chapter", "chase", "chat", "check", "cheese", "cherry", "chest", "chief", "chimney", "choice", "choose", "chronic", "chuckle", "chunk", "churn", "cinnamon", "circle", "citizen", "city", "civil", "claim", "clap", "clarify", "clay", "clean", "clerk", "clever", "click", "client", "cliff", "climb", "clinic", "clip", "clock", "clog", "close", "cloth", "cloud", "clown", "club", "coach", "coast", "coconut", "code", "coffee", "coin", "collect", "color", "column", "combine", "comfort", "comic", "common", "company", "concert", "conduct", "confirm", "congress", "connect", "consider", "convince", "cook", "cool", "copper", "copy", "coral", "core", "corn", "correct", "cost", "couch", "country", "couple", "course", "cousin", "cover", "coyote", "cradle", "cram", "crane", "crawl", "crazy", "credit", "creek", "crew", "cricket", "crisp", "crop", "cross", "crouch", "crowd", "crucial", "cruise", "crumble", "crunch", "crush", "cry", "cube", "culture", "cup", "cupboard", "curious", "current", "curtain", "curve", "cushion", "custom", "cute", "cycle", "damp", "dance", "daring", "dash", "dawn", "day", "deal", "debate", "debris", "decade", "december", "decide", "decline", "decorate", "decrease", "deer", "define", "defy", "degree", "delay", "deliver", "demand", "dentist", "deny", "depart", "depend", "deposit", "depth", "derive", "describe", "desert", "design", "desk", "detail", "detect", "develop", "device", "devote", "diagram", "dial", "diamond", "diary", "dice", "diet", "differ", "digital", "dignity", "dinner", "dinosaur", "direct", "dirt", "discover", "dish", "dismiss", "disorder", "display", "distance", "divert", "divide", "document", "dog", "domain", "donate", "donkey", "door", "dose", "double", "dove", "draft", "dragon", "drama", "draw", "dream", "drift", "drill", "drink", "drip", "drive", "drop", "drum", "dry", "duck", "dune", "during", "dust", "dutch", "duty", "dynamic", "eager", "eagle", "early", "earn", "earth", "easily", "east", "easy", "echo", "ecology", "economy", "edge", "educate", "effort", "egg", "eight", "either", "elbow", "elder", "electric", "elegant", "element", "elevator", "elite", "embark", "embody", "embrace", "emerge", "emotion", "employ", "empower", "empty", "enable", "enact", "end", "endless", "enemy", "energy", "enforce", "engage", "engine", "enhance", "enjoy", "enlist", "enough", "enrich", "enroll", "ensure", "entire", "entry", "envelope", "equal", "equip", "era", "escape", "essay", "essence", "estate", "eternal", "ethics", "evidence", "evolve", "exact", "example", "excess", "exchange", "excite", "exclude", "excuse", "execute", "exercise", "exhaust", "exhibit", "exist", "exit", "exotic", "expand", "expect", "expire", "explain", "expose", "express", "extend", "extra", "eye", "eyebrow", "fabric", "face", "faculty", "fade", "faith", "fall", "false", "fame", "family", "famous", "fan", "fantasy", "farm", "fashion", "fat", "fault", "favorite", "feature", "february", "federal", "feed", "feel", "fence", "festival", "fetch", "fever", "few", "fiber", "fiction", "field", "figure", "file", "film", "filter", "final", "find", "fine", "finger", "finish", "firm", "first", "fish", "fit", "fitness", "fix", "flame", "flash", "flat", "flavor", "flight", "flip", "float", "flock", "floor", "flower", "fluid", "fly", "foam", "focus", "fog", "foil", "fold", "follow", "food", "foot", "force", "forest", "forget", "fork", "fortune", "forum", "forward", "fossil", "foster", "found", "fox", "frame", "frequent", "fresh", "friend", "frog", "front", "frost", "frown", "frozen", "fruit", "fuel", "fun", "furnace", "fury", "future", "gadget", "gain", "galaxy", "gallery", "game", "gap", "garage", "garbage", "garden", "garment", "gas", "gate", "gather", "gauge", "gaze", "general", "genius", "gentle", "genuine", "gesture", "giant", "gift", "giggle", "ginger", "giraffe", "girl", "give", "glad", "glance", "glass", "glide", "glimpse", "globe", "glory", "glove", "glow", "glue", "goat", "gold", "good", "goose", "gospel", "govern", "gown", "grace", "grain", "grant", "grape", "grass", "great", "green", "grid", "grit", "group", "grow", "grunt", "guard", "guess", "guide", "guitar", "gym", "habit", "hair", "hamster", "hand", "happy", "harbor", "hard", "harvest", "hat", "have", "hawk", "head", "health", "heart", "hedgehog", "height", "hello", "help", "hen", "hero", "hidden", "hill", "hint", "hip", "hobby", "hold", "hole", "holiday", "home", "hood", "hope", "horse", "host", "hotel", "hour", "hover", "huge", "human", "humble", "humor", "hundred", "hunt", "hurdle", "hurry", "hurt", "ice", "icon", "idea", "idle", "illness", "image", "immense", "immune", "impact", "impose", "improve", "inch", "include", "income", "increase", "index", "indicate", "indoor", "industry", "inform", "inhale", "inherit", "initial", "inner", "innocent", "input", "insect", "inside", "inspire", "install", "interest", "into", "invite", "involve", "iron", "island", "isolate", "item", "ivory", "jacket", "jaguar", "jar", "jeans", "jelly", "job", "join", "joke", "journey", "joy", "juice", "jump", "jungle", "junk", "just", "keen", "keep", "ketchup", "key", "kick", "kid", "kidney", "kind", "kingdom", "kiss", "kit", "kitchen", "kite", "kitten", "kiwi", "lab", "label", "labor", "ladder", "lady", "lake", "lamp", "language", "laptop", "large", "later", "latin", "laugh", "laundry", "lava", "law", "lawn", "layer", "lazy", "leader", "leaf", "learn", "leave", "left", "leg", "legend", "lemon", "length", "lens", "lesson", "letter", "level", "liberty", "library", "license", "life", "lift", "light", "like", "limit", "link", "lion", "liquid", "list", "little", "live", "lizard", "load", "lobster", "local", "lock", "logic", "long", "loop", "lottery", "loud", "lounge", "love", "loyal", "lucky", "luggage", "lumber", "lunar", "lunch", "luxury", "lyrics", "machine", "magic", "magnet", "major", "make", "mammal", "manage", "mango", "mansion", "manual", "maple", "marble", "march", "marine", "market", "mask", "mass", "master", "match", "material", "math", "matter", "maximum", "maze", "meadow", "mean", "measure", "meat", "mechanic", "medal", "media", "melody", "melt", "member", "memory", "mention", "menu", "mercy", "merit", "merry", "mesh", "message", "metal", "method", "middle", "midnight", "milk", "mind", "minimum", "minor", "minute", "miracle", "mirror", "miss", "mistake", "mix", "mixture", "mobile", "model", "moment", "monitor", "monkey", "monster", "month", "moon", "more", "morning", "mosquito", "motion", "motor", "mountain", "mouse", "move", "movie", "much", "muffin", "mule", "multiply", "muscle", "museum", "mushroom", "music", "mutual", "myself", "mystery", "myth", "name", "napkin", "narrow", "nation", "nature", "near", "neck", "need", "neither", "nerve", "nest", "net", "network", "never", "news", "next", "nice", "noble", "noodle", "normal", "north", "nose", "notable", "note", "nothing", "notice", "novel", "now", "number", "nurse", "nut", "oak", "obey", "observe", "obtain", "obvious", "occur", "ocean", "october", "off", "offer", "often", "oil", "okay", "old", "olive", "olympic", "one", "onion", "online", "only", "open", "opera", "opinion", "option", "orange", "orbit", "orchard", "order", "ordinary", "organ", "orient", "original", "ostrich", "other", "outdoor", "outer", "output", "outside", "oval", "oven", "over", "owner", "oxygen", "oyster", "ozone", "pact", "pair", "palace", "panda", "panel", "panic", "panther", "paper", "parade", "parent", "park", "party", "pass", "patch", "path", "pattern", "pause", "pave", "payment", "peanut", "pear", "peasant", "pelican", "pen", "pencil", "people", "perfect", "permit", "person", "pet", "piano", "picnic", "picture", "pig", "pilot", "pink", "pioneer", "pipe", "pitch", "pizza", "place", "planet", "plastic", "plate", "play", "please", "pledge", "plug", "poem", "poet", "point", "polar", "pole", "pond", "pony", "pool", "popular", "portion", "position", "possible", "post", "potato", "pottery", "powder", "power", "practice", "praise", "predict", "prefer", "prepare", "present", "pretty", "price", "pride", "primary", "print", "priority", "prison", "private", "prize", "problem", "process", "produce", "profit", "program", "project", "promote", "proof", "property", "prosper", "protect", "proud", "provide", "public", "pudding", "pumpkin", "punch", "pupil", "puppy", "purchase", "purity", "purpose", "purse", "push", "put", "puzzle", "pyramid", "quality", "quantum", "quarter", "quick", "quit", "quote", "rabbit", "raccoon", "race", "rack", "radar", "radio", "rain", "raise", "rally", "ramp", "ranch", "random", "range", "rapid", "rare", "rate", "rather", "ready", "real", "reason", "rebuild", "recall", "receive", "recipe", "record", "recycle", "reduce", "reflect", "reform", "region", "regular", "relax", "release", "relief", "remain", "remember", "remind", "remove", "render", "renew", "reopen", "repair", "repeat", "replace", "report", "rescue", "resemble", "resource", "result", "retire", "return", "reunion", "reveal", "review", "reward", "rhythm", "rib", "ribbon", "rice", "rich", "ride", "ridge", "right", "ring", "ripple", "risk", "ritual", "rival", "river", "road", "robot", "robust", "rocket", "roof", "rookie", "room", "rose", "rotate", "rough", "round", "route", "royal", "rubber", "rug", "rule", "run", "runway", "rural", "saddle", "safe", "sail", "salad", "salmon", "salon", "salt", "salute", "same", "sample", "sand", "satisfy", "satoshi", "sauce", "sausage", "save", "say", "scale", "scan", "scene", "scheme", "science", "screen", "script", "scrub", "sea", "search", "season", "seat", "second", "section", "seed", "seek", "select", "sell", "seminar", "senior", "sense", "series", "service", "session", "settle", "setup", "seven", "shadow", "shaft", "shallow", "share", "shed", "shell", "shield", "shift", "shine", "ship", "shiver", "shoe", "shop", "short", "shoulder", "shrimp", "shrug", "shuffle", "shy", "sick", "side", "sight", "sign", "silent", "silk", "silly", "silver", "similar", "simple", "since", "sing", "sister", "situate", "six", "size", "skate", "sketch", "ski", "skill", "skin", "skirt", "slab", "sleep", "slender", "slide", "slight", "slim", "slogan", "slot", "slow", "slush", "small", "smart", "smile", "smooth", "snack", "snake", "sniff", "snow", "soap", "soccer", "social", "sock", "soda", "soft", "solar", "solid", "solution", "solve", "someone", "song", "soon", "sorry", "sort", "soul", "sound", "soup", "source", "south", "space", "spare", "spatial", "speak", "special", "speed", "spend", "spice", "spider", "spike", "spin", "spirit", "split", "spoil", "sponsor", "spoon", "sport", "spot", "spray", "spread", "spring", "square", "squeeze", "squirrel", "stable", "stadium", "staff", "stage", "stairs", "stamp", "stand", "start", "state", "stay", "steak", "stem", "step", "stereo", "stick", "still", "sting", "stock", "stomach", "stone", "stool", "story", "stove", "strategy", "street", "strike", "strong", "student", "stuff", "style", "submit", "subway", "success", "such", "sudden", "sugar", "suggest", "suit", "summer", "sun", "sunny", "sunset", "super", "supply", "supreme", "sure", "surface", "surge", "surprise", "survey", "sustain", "swallow", "swap", "swarm", "sweet", "swim", "switch", "symbol", "symptom", "syrup", "system", "table", "tag", "tail", "talent", "talk", "tank", "tape", "task", "taste", "tattoo", "taxi", "teach", "team", "tell", "ten", "tenant", "tennis", "tent", "term", "test", "text", "thank", "that", "theme", "then", "theory", "there", "they", "thing", "this", "thought", "three", "thrive", "throw", "ticket", "tide", "tiger", "tilt", "timber", "time", "tiny", "tip", "tissue", "title", "today", "toe", "together", "token", "tomato", "tomorrow", "tone", "tonight", "tool", "tooth", "top", "topic", "topple", "tornado", "tortoise", "total", "tourist", "toward", "tower", "town", "toy", "track", "trade", "traffic", "tragic", "train", "transfer", "trap", "travel", "tray", "treat", "tree", "trend", "tribe", "trick", "trigger", "trim", "trip", "truck", "true", "truly", "trust", "truth", "try", "tube", "tuition", "tuna", "tunnel", "turkey", "turn", "turtle", "twelve", "twenty", "twice", "twin", "two", "type", "typical", "umbrella", "unable", "unaware", "uncover", "under", "undo", "unfair", "unfold", "uniform", "unique", "unit", "universe", "unknown", "unlock", "until", "unusual", "unveil", "update", "upgrade", "upon", "upper", "upset", "urban", "usage", "use", "useful", "useless", "usual", "utility", "vacant", "valid", "valley", "valve", "van", "vanish", "vapor", "various", "vast", "vault", "vehicle", "velvet", "vendor", "venture", "venue", "verb", "verify", "version", "very", "vessel", "viable", "vibrant", "vicious", "victory", "video", "view", "village", "vintage", "violin", "virtual", "visa", "visit", "visual", "vital", "vivid", "vocal", "voice", "void", "volume", "vote", "voyage", "wage", "wagon", "wait", "walk", "wall", "walnut", "want", "warm", "wash", "waste", "water", "wave", "way", "wear", "weather", "web", "wedding", "weekend", "welcome", "west", "wet", "whale", "what", "wheat", "wheel", "when", "where", "whisper", "wide", "width", "will", "win", "window", "wine", "wing", "wink", "winner", "winter", "wire", "wisdom", "wise", "wish", "wonder", "wood", "wool", "word", "work", "world", "worth", "wrap", "wrist", "write", "yard", "year", "yellow", "you", "young", "youth", "zebra", "zero", "zone", "zoo"]' + ), + poetry: JSON.parse( + '["like","just","love","know","never","want","time","out","there","make","look","eye","down","only","think","heart","back","then","into","about","more","away","still","them","take","thing","even","through","long","always","world","too","friend","tell","try","hand","thought","over","here","other","need","smile","again","much","cry","been","night","ever","little","said","end","some","those","around","mind","people","girl","leave","dream","left","turn","myself","give","nothing","really","off","before","something","find","walk","wish","good","once","place","ask","stop","keep","watch","seem","everything","wait","got","yet","made","remember","start","alone","run","hope","maybe","believe","body","hate","after","close","talk","stand","own","each","hurt","help","home","god","soul","new","many","two","inside","should","true","first","fear","mean","better","play","another","gone","change","use","wonder","someone","hair","cold","open","best","any","behind","happen","water","dark","laugh","stay","forever","name","work","show","sky","break","came","deep","door","put","black","together","upon","happy","such","great","white","matter","fill","past","please","burn","cause","enough","touch","moment","soon","voice","scream","anything","stare","sound","red","everyone","hide","kiss","truth","death","beautiful","mine","blood","broken","very","pass","next","forget","tree","wrong","air","mother","understand","lip","hit","wall","memory","sleep","free","high","realize","school","might","skin","sweet","perfect","blue","kill","breath","dance","against","fly","between","grow","strong","under","listen","bring","sometimes","speak","pull","person","become","family","begin","ground","real","small","father","sure","feet","rest","young","finally","land","across","today","different","guy","line","fire","reason","reach","second","slowly","write","eat","smell","mouth","step","learn","three","floor","promise","breathe","darkness","push","earth","guess","save","song","above","along","both","color","house","almost","sorry","anymore","brother","okay","dear","game","fade","already","apart","warm","beauty","heard","notice","question","shine","began","piece","whole","shadow","secret","street","within","finger","point","morning","whisper","child","moon","green","story","glass","kid","silence","since","soft","yourself","empty","shall","angel","answer","baby","bright","dad","path","worry","hour","drop","follow","power","war","half","flow","heaven","act","chance","fact","least","tired","children","near","quite","afraid","rise","sea","taste","window","cover","nice","trust","lot","sad","cool","force","peace","return","blind","easy","ready","roll","rose","drive","held","music","beneath","hang","mom","paint","emotion","quiet","clear","cloud","few","pretty","bird","outside","paper","picture","front","rock","simple","anyone","meant","reality","road","sense","waste","bit","leaf","thank","happiness","meet","men","smoke","truly","decide","self","age","book","form","alive","carry","escape","damn","instead","able","ice","minute","throw","catch","leg","ring","course","goodbye","lead","poem","sick","corner","desire","known","problem","remind","shoulder","suppose","toward","wave","drink","jump","woman","pretend","sister","week","human","joy","crack","grey","pray","surprise","dry","knee","less","search","bleed","caught","clean","embrace","future","king","son","sorrow","chest","hug","remain","sat","worth","blow","daddy","final","parent","tight","also","create","lonely","safe","cross","dress","evil","silent","bone","fate","perhaps","anger","class","scar","snow","tiny","tonight","continue","control","dog","edge","mirror","month","suddenly","comfort","given","loud","quickly","gaze","plan","rush","stone","town","battle","ignore","spirit","stood","stupid","yours","brown","build","dust","hey","kept","pay","phone","twist","although","ball","beyond","hidden","nose","taken","fail","float","pure","somehow","wash","wrap","angry","cheek","creature","forgotten","heat","rip","single","space","special","weak","whatever","yell","anyway","blame","job","choose","country","curse","drift","echo","figure","grew","laughter","neck","suffer","worse","yeah","disappear","foot","forward","knife","mess","somewhere","stomach","storm","beg","idea","lift","offer","breeze","field","five","often","simply","stuck","win","allow","confuse","enjoy","except","flower","seek","strength","calm","grin","gun","heavy","hill","large","ocean","shoe","sigh","straight","summer","tongue","accept","crazy","everyday","exist","grass","mistake","sent","shut","surround","table","ache","brain","destroy","heal","nature","shout","sign","stain","choice","doubt","glance","glow","mountain","queen","stranger","throat","tomorrow","city","either","fish","flame","rather","shape","spin","spread","ash","distance","finish","image","imagine","important","nobody","shatter","warmth","became","feed","flesh","funny","lust","shirt","trouble","yellow","attention","bare","bite","money","protect","amaze","appear","born","choke","completely","daughter","fresh","friendship","gentle","probably","six","deserve","expect","grab","middle","nightmare","river","thousand","weight","worst","wound","barely","bottle","cream","regret","relationship","stick","test","crush","endless","fault","itself","rule","spill","art","circle","join","kick","mask","master","passion","quick","raise","smooth","unless","wander","actually","broke","chair","deal","favorite","gift","note","number","sweat","box","chill","clothes","lady","mark","park","poor","sadness","tie","animal","belong","brush","consume","dawn","forest","innocent","pen","pride","stream","thick","clay","complete","count","draw","faith","press","silver","struggle","surface","taught","teach","wet","bless","chase","climb","enter","letter","melt","metal","movie","stretch","swing","vision","wife","beside","crash","forgot","guide","haunt","joke","knock","plant","pour","prove","reveal","steal","stuff","trip","wood","wrist","bother","bottom","crawl","crowd","fix","forgive","frown","grace","loose","lucky","party","release","surely","survive","teacher","gently","grip","speed","suicide","travel","treat","vein","written","cage","chain","conversation","date","enemy","however","interest","million","page","pink","proud","sway","themselves","winter","church","cruel","cup","demon","experience","freedom","pair","pop","purpose","respect","shoot","softly","state","strange","bar","birth","curl","dirt","excuse","lord","lovely","monster","order","pack","pants","pool","scene","seven","shame","slide","ugly","among","blade","blonde","closet","creek","deny","drug","eternity","gain","grade","handle","key","linger","pale","prepare","swallow","swim","tremble","wheel","won","cast","cigarette","claim","college","direction","dirty","gather","ghost","hundred","loss","lung","orange","present","swear","swirl","twice","wild","bitter","blanket","doctor","everywhere","flash","grown","knowledge","numb","pressure","radio","repeat","ruin","spend","unknown","buy","clock","devil","early","false","fantasy","pound","precious","refuse","sheet","teeth","welcome","add","ahead","block","bury","caress","content","depth","despite","distant","marry","purple","threw","whenever","bomb","dull","easily","grasp","hospital","innocence","normal","receive","reply","rhyme","shade","someday","sword","toe","visit","asleep","bought","center","consider","flat","hero","history","ink","insane","muscle","mystery","pocket","reflection","shove","silently","smart","soldier","spot","stress","train","type","view","whether","bus","energy","explain","holy","hunger","inch","magic","mix","noise","nowhere","prayer","presence","shock","snap","spider","study","thunder","trail","admit","agree","bag","bang","bound","butterfly","cute","exactly","explode","familiar","fold","further","pierce","reflect","scent","selfish","sharp","sink","spring","stumble","universe","weep","women","wonderful","action","ancient","attempt","avoid","birthday","branch","chocolate","core","depress","drunk","especially","focus","fruit","honest","match","palm","perfectly","pillow","pity","poison","roar","shift","slightly","thump","truck","tune","twenty","unable","wipe","wrote","coat","constant","dinner","drove","egg","eternal","flight","flood","frame","freak","gasp","glad","hollow","motion","peer","plastic","root","screen","season","sting","strike","team","unlike","victim","volume","warn","weird","attack","await","awake","built","charm","crave","despair","fought","grant","grief","horse","limit","message","ripple","sanity","scatter","serve","split","string","trick","annoy","blur","boat","brave","clearly","cling","connect","fist","forth","imagination","iron","jock","judge","lesson","milk","misery","nail","naked","ourselves","poet","possible","princess","sail","size","snake","society","stroke","torture","toss","trace","wise","bloom","bullet","cell","check","cost","darling","during","footstep","fragile","hallway","hardly","horizon","invisible","journey","midnight","mud","nod","pause","relax","shiver","sudden","value","youth","abuse","admire","blink","breast","bruise","constantly","couple","creep","curve","difference","dumb","emptiness","gotta","honor","plain","planet","recall","rub","ship","slam","soar","somebody","tightly","weather","adore","approach","bond","bread","burst","candle","coffee","cousin","crime","desert","flutter","frozen","grand","heel","hello","language","level","movement","pleasure","powerful","random","rhythm","settle","silly","slap","sort","spoken","steel","threaten","tumble","upset","aside","awkward","bee","blank","board","button","card","carefully","complain","crap","deeply","discover","drag","dread","effort","entire","fairy","giant","gotten","greet","illusion","jeans","leap","liquid","march","mend","nervous","nine","replace","rope","spine","stole","terror","accident","apple","balance","boom","childhood","collect","demand","depression","eventually","faint","glare","goal","group","honey","kitchen","laid","limb","machine","mere","mold","murder","nerve","painful","poetry","prince","rabbit","shelter","shore","shower","soothe","stair","steady","sunlight","tangle","tease","treasure","uncle","begun","bliss","canvas","cheer","claw","clutch","commit","crimson","crystal","delight","doll","existence","express","fog","football","gay","goose","guard","hatred","illuminate","mass","math","mourn","rich","rough","skip","stir","student","style","support","thorn","tough","yard","yearn","yesterday","advice","appreciate","autumn","bank","beam","bowl","capture","carve","collapse","confusion","creation","dove","feather","girlfriend","glory","government","harsh","hop","inner","loser","moonlight","neighbor","neither","peach","pig","praise","screw","shield","shimmer","sneak","stab","subject","throughout","thrown","tower","twirl","wow","army","arrive","bathroom","bump","cease","cookie","couch","courage","dim","guilt","howl","hum","husband","insult","led","lunch","mock","mostly","natural","nearly","needle","nerd","peaceful","perfection","pile","price","remove","roam","sanctuary","serious","shiny","shook","sob","stolen","tap","vain","void","warrior","wrinkle","affection","apologize","blossom","bounce","bridge","cheap","crumble","decision","descend","desperately","dig","dot","flip","frighten","heartbeat","huge","lazy","lick","odd","opinion","process","puzzle","quietly","retreat","score","sentence","separate","situation","skill","soak","square","stray","taint","task","tide","underneath","veil","whistle","anywhere","bedroom","bid","bloody","burden","careful","compare","concern","curtain","decay","defeat","describe","double","dreamer","driver","dwell","evening","flare","flicker","grandma","guitar","harm","horrible","hungry","indeed","lace","melody","monkey","nation","object","obviously","rainbow","salt","scratch","shown","shy","stage","stun","third","tickle","useless","weakness","worship","worthless","afternoon","beard","boyfriend","bubble","busy","certain","chin","concrete","desk","diamond","doom","drawn","due","felicity","freeze","frost","garden","glide","harmony","hopefully","hunt","jealous","lightning","mama","mercy","peel","physical","position","pulse","punch","quit","rant","respond","salty","sane","satisfy","savior","sheep","slept","social","sport","tuck","utter","valley","wolf","aim","alas","alter","arrow","awaken","beaten","belief","brand","ceiling","cheese","clue","confidence","connection","daily","disguise","eager","erase","essence","everytime","expression","fan","flag","flirt","foul","fur","giggle","glorious","ignorance","law","lifeless","measure","mighty","muse","north","opposite","paradise","patience","patient","pencil","petal","plate","ponder","possibly","practice","slice","spell","stock","strife","strip","suffocate","suit","tender","tool","trade","velvet","verse","waist","witch","aunt","bench","bold","cap","certainly","click","companion","creator","dart","delicate","determine","dish","dragon","drama","drum","dude","everybody","feast","forehead","former","fright","fully","gas","hook","hurl","invite","juice","manage","moral","possess","raw","rebel","royal","scale","scary","several","slight","stubborn","swell","talent","tea","terrible","thread","torment","trickle","usually","vast","violence","weave","acid","agony","ashamed","awe","belly","blend","blush","character","cheat","common","company","coward","creak","danger","deadly","defense","define","depend","desperate","destination","dew","duck","dusty","embarrass","engine","example","explore","foe","freely","frustrate","generation","glove","guilty","health","hurry","idiot","impossible","inhale","jaw","kingdom","mention","mist","moan","mumble","mutter","observe","ode","pathetic","pattern","pie","prefer","puff","rape","rare","revenge","rude","scrape","spiral","squeeze","strain","sunset","suspend","sympathy","thigh","throne","total","unseen","weapon","weary"]' + ), + }; // make modulo arithmetic work as in math, not as in javascript ;) Mnemonic._mod = function (a, b) {