github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/libkb/secwords.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package libkb 5 6 import ( 7 "crypto/rand" 8 "fmt" 9 "math" 10 "math/big" 11 "strings" 12 ) 13 14 // SecWordList returns an array of words from secwords. It 15 // returns enough words to satisfy the desired entropy. 16 func SecWordList(entropy int) ([]string, error) { 17 return secWordListN(secWordCount(entropy)) 18 } 19 20 func secWordCount(entropy int) int { 21 return int(math.Ceil(float64(entropy) / math.Log2(float64(len(secwords))))) 22 } 23 24 // secWordListN returns n random words from secwords. 25 func secWordListN(n int) ([]string, error) { 26 var res []string 27 max := big.NewInt(int64(len(secwords))) 28 for i := 0; i < n; i++ { 29 x, err := rand.Int(rand.Reader, max) 30 if err != nil { 31 return []string{}, err 32 } 33 res = append(res, secwords[x.Int64()]) 34 } 35 return res, nil 36 } 37 38 func validPhrase(p string, entropies []int) error { 39 40 lens := make(map[int]bool) 41 for _, e := range entropies { 42 lens[secWordCount(e)] = true 43 } 44 45 words := strings.Split(p, " ") 46 47 if words[len(words)-1] == kexPhraseVersion { 48 words = words[:len(words)-1] 49 } 50 51 if !lens[len(words)] { 52 return fmt.Errorf("phrase had %d words, expected %v", len(words), entropies) 53 } 54 for _, w := range words { 55 if !ValidSecWord(w) { 56 return fmt.Errorf("word %q is not a valid word", w) 57 } 58 } 59 return nil 60 } 61 62 func ValidSecWord(w string) bool { 63 return secwordSet[w] 64 } 65 66 // SecWord returns the n'th word from the BIP-0039 list, mod the size 67 // of the list. 68 func SecWord(n int) string { 69 return secwords[n%len(secwords)] 70 } 71 72 // Wordlist from BIP0039: 73 // 74 // https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt 75 var secwords = []string{ 76 "abandon", 77 "ability", 78 "able", 79 "about", 80 "above", 81 "absent", 82 "absorb", 83 "abstract", 84 "absurd", 85 "abuse", 86 "access", 87 "accident", 88 "account", 89 "accuse", 90 "achieve", 91 "acid", 92 "acoustic", 93 "acquire", 94 "across", 95 "act", 96 "action", 97 "actor", 98 "actress", 99 "actual", 100 "adapt", 101 "add", 102 "addict", 103 "address", 104 "adjust", 105 "admit", 106 "adult", 107 "advance", 108 "advice", 109 "aerobic", 110 "affair", 111 "afford", 112 "afraid", 113 "again", 114 "age", 115 "agent", 116 "agree", 117 "ahead", 118 "aim", 119 "air", 120 "airport", 121 "aisle", 122 "alarm", 123 "album", 124 "alcohol", 125 "alert", 126 "alien", 127 "all", 128 "alley", 129 "allow", 130 "almost", 131 "alone", 132 "alpha", 133 "already", 134 "also", 135 "alter", 136 "always", 137 "amateur", 138 "amazing", 139 "among", 140 "amount", 141 "amused", 142 "analyst", 143 "anchor", 144 "ancient", 145 "anger", 146 "angle", 147 "angry", 148 "animal", 149 "ankle", 150 "announce", 151 "annual", 152 "another", 153 "answer", 154 "antenna", 155 "antique", 156 "anxiety", 157 "any", 158 "apart", 159 "apology", 160 "appear", 161 "apple", 162 "approve", 163 "april", 164 "arch", 165 "arctic", 166 "area", 167 "arena", 168 "argue", 169 "arm", 170 "armed", 171 "armor", 172 "army", 173 "around", 174 "arrange", 175 "arrest", 176 "arrive", 177 "arrow", 178 "art", 179 "artefact", 180 "artist", 181 "artwork", 182 "ask", 183 "aspect", 184 "assault", 185 "asset", 186 "assist", 187 "assume", 188 "asthma", 189 "athlete", 190 "atom", 191 "attack", 192 "attend", 193 "attitude", 194 "attract", 195 "auction", 196 "audit", 197 "august", 198 "aunt", 199 "author", 200 "auto", 201 "autumn", 202 "average", 203 "avocado", 204 "avoid", 205 "awake", 206 "aware", 207 "away", 208 "awesome", 209 "awful", 210 "awkward", 211 "axis", 212 "baby", 213 "bachelor", 214 "bacon", 215 "badge", 216 "bag", 217 "balance", 218 "balcony", 219 "ball", 220 "bamboo", 221 "banana", 222 "banner", 223 "bar", 224 "barely", 225 "bargain", 226 "barrel", 227 "base", 228 "basic", 229 "basket", 230 "battle", 231 "beach", 232 "bean", 233 "beauty", 234 "because", 235 "become", 236 "beef", 237 "before", 238 "begin", 239 "behave", 240 "behind", 241 "believe", 242 "below", 243 "belt", 244 "bench", 245 "benefit", 246 "best", 247 "betray", 248 "better", 249 "between", 250 "beyond", 251 "bicycle", 252 "bid", 253 "bike", 254 "bind", 255 "biology", 256 "bird", 257 "birth", 258 "bitter", 259 "black", 260 "blade", 261 "blame", 262 "blanket", 263 "blast", 264 "bleak", 265 "bless", 266 "blind", 267 "blood", 268 "blossom", 269 "blouse", 270 "blue", 271 "blur", 272 "blush", 273 "board", 274 "boat", 275 "body", 276 "boil", 277 "bomb", 278 "bone", 279 "bonus", 280 "book", 281 "boost", 282 "border", 283 "boring", 284 "borrow", 285 "boss", 286 "bottom", 287 "bounce", 288 "box", 289 "boy", 290 "bracket", 291 "brain", 292 "brand", 293 "brass", 294 "brave", 295 "bread", 296 "breeze", 297 "brick", 298 "bridge", 299 "brief", 300 "bright", 301 "bring", 302 "brisk", 303 "broccoli", 304 "broken", 305 "bronze", 306 "broom", 307 "brother", 308 "brown", 309 "brush", 310 "bubble", 311 "buddy", 312 "budget", 313 "buffalo", 314 "build", 315 "bulb", 316 "bulk", 317 "bullet", 318 "bundle", 319 "bunker", 320 "burden", 321 "burger", 322 "burst", 323 "bus", 324 "business", 325 "busy", 326 "butter", 327 "buyer", 328 "buzz", 329 "cabbage", 330 "cabin", 331 "cable", 332 "cactus", 333 "cage", 334 "cake", 335 "call", 336 "calm", 337 "camera", 338 "camp", 339 "can", 340 "canal", 341 "cancel", 342 "candy", 343 "cannon", 344 "canoe", 345 "canvas", 346 "canyon", 347 "capable", 348 "capital", 349 "captain", 350 "car", 351 "carbon", 352 "card", 353 "cargo", 354 "carpet", 355 "carry", 356 "cart", 357 "case", 358 "cash", 359 "casino", 360 "castle", 361 "casual", 362 "cat", 363 "catalog", 364 "catch", 365 "category", 366 "cattle", 367 "caught", 368 "cause", 369 "caution", 370 "cave", 371 "ceiling", 372 "celery", 373 "cement", 374 "census", 375 "century", 376 "cereal", 377 "certain", 378 "chair", 379 "chalk", 380 "champion", 381 "change", 382 "chaos", 383 "chapter", 384 "charge", 385 "chase", 386 "chat", 387 "cheap", 388 "check", 389 "cheese", 390 "chef", 391 "cherry", 392 "chest", 393 "chicken", 394 "chief", 395 "child", 396 "chimney", 397 "choice", 398 "choose", 399 "chronic", 400 "chuckle", 401 "chunk", 402 "churn", 403 "cigar", 404 "cinnamon", 405 "circle", 406 "citizen", 407 "city", 408 "civil", 409 "claim", 410 "clap", 411 "clarify", 412 "claw", 413 "clay", 414 "clean", 415 "clerk", 416 "clever", 417 "click", 418 "client", 419 "cliff", 420 "climb", 421 "clinic", 422 "clip", 423 "clock", 424 "clog", 425 "close", 426 "cloth", 427 "cloud", 428 "clown", 429 "club", 430 "clump", 431 "cluster", 432 "clutch", 433 "coach", 434 "coast", 435 "coconut", 436 "code", 437 "coffee", 438 "coil", 439 "coin", 440 "collect", 441 "color", 442 "column", 443 "combine", 444 "come", 445 "comfort", 446 "comic", 447 "common", 448 "company", 449 "concert", 450 "conduct", 451 "confirm", 452 "congress", 453 "connect", 454 "consider", 455 "control", 456 "convince", 457 "cook", 458 "cool", 459 "copper", 460 "copy", 461 "coral", 462 "core", 463 "corn", 464 "correct", 465 "cost", 466 "cotton", 467 "couch", 468 "country", 469 "couple", 470 "course", 471 "cousin", 472 "cover", 473 "coyote", 474 "crack", 475 "cradle", 476 "craft", 477 "cram", 478 "crane", 479 "crash", 480 "crater", 481 "crawl", 482 "crazy", 483 "cream", 484 "credit", 485 "creek", 486 "crew", 487 "cricket", 488 "crime", 489 "crisp", 490 "critic", 491 "crop", 492 "cross", 493 "crouch", 494 "crowd", 495 "crucial", 496 "cruel", 497 "cruise", 498 "crumble", 499 "crunch", 500 "crush", 501 "cry", 502 "crystal", 503 "cube", 504 "culture", 505 "cup", 506 "cupboard", 507 "curious", 508 "current", 509 "curtain", 510 "curve", 511 "cushion", 512 "custom", 513 "cute", 514 "cycle", 515 "dad", 516 "damage", 517 "damp", 518 "dance", 519 "danger", 520 "daring", 521 "dash", 522 "daughter", 523 "dawn", 524 "day", 525 "deal", 526 "debate", 527 "debris", 528 "decade", 529 "december", 530 "decide", 531 "decline", 532 "decorate", 533 "decrease", 534 "deer", 535 "defense", 536 "define", 537 "defy", 538 "degree", 539 "delay", 540 "deliver", 541 "demand", 542 "demise", 543 "denial", 544 "dentist", 545 "deny", 546 "depart", 547 "depend", 548 "deposit", 549 "depth", 550 "deputy", 551 "derive", 552 "describe", 553 "desert", 554 "design", 555 "desk", 556 "despair", 557 "destroy", 558 "detail", 559 "detect", 560 "develop", 561 "device", 562 "devote", 563 "diagram", 564 "dial", 565 "diamond", 566 "diary", 567 "dice", 568 "diesel", 569 "diet", 570 "differ", 571 "digital", 572 "dignity", 573 "dilemma", 574 "dinner", 575 "dinosaur", 576 "direct", 577 "dirt", 578 "disagree", 579 "discover", 580 "disease", 581 "dish", 582 "dismiss", 583 "disorder", 584 "display", 585 "distance", 586 "divert", 587 "divide", 588 "divorce", 589 "dizzy", 590 "doctor", 591 "document", 592 "dog", 593 "doll", 594 "dolphin", 595 "domain", 596 "donate", 597 "donkey", 598 "donor", 599 "door", 600 "dose", 601 "double", 602 "dove", 603 "draft", 604 "dragon", 605 "drama", 606 "drastic", 607 "draw", 608 "dream", 609 "dress", 610 "drift", 611 "drill", 612 "drink", 613 "drip", 614 "drive", 615 "drop", 616 "drum", 617 "dry", 618 "duck", 619 "dumb", 620 "dune", 621 "during", 622 "dust", 623 "dutch", 624 "duty", 625 "dwarf", 626 "dynamic", 627 "eager", 628 "eagle", 629 "early", 630 "earn", 631 "earth", 632 "easily", 633 "east", 634 "easy", 635 "echo", 636 "ecology", 637 "economy", 638 "edge", 639 "edit", 640 "educate", 641 "effort", 642 "egg", 643 "eight", 644 "either", 645 "elbow", 646 "elder", 647 "electric", 648 "elegant", 649 "element", 650 "elephant", 651 "elevator", 652 "elite", 653 "else", 654 "embark", 655 "embody", 656 "embrace", 657 "emerge", 658 "emotion", 659 "employ", 660 "empower", 661 "empty", 662 "enable", 663 "enact", 664 "end", 665 "endless", 666 "endorse", 667 "enemy", 668 "energy", 669 "enforce", 670 "engage", 671 "engine", 672 "enhance", 673 "enjoy", 674 "enlist", 675 "enough", 676 "enrich", 677 "enroll", 678 "ensure", 679 "enter", 680 "entire", 681 "entry", 682 "envelope", 683 "episode", 684 "equal", 685 "equip", 686 "era", 687 "erase", 688 "erode", 689 "erosion", 690 "error", 691 "erupt", 692 "escape", 693 "essay", 694 "essence", 695 "estate", 696 "eternal", 697 "ethics", 698 "evidence", 699 "evil", 700 "evoke", 701 "evolve", 702 "exact", 703 "example", 704 "excess", 705 "exchange", 706 "excite", 707 "exclude", 708 "excuse", 709 "execute", 710 "exercise", 711 "exhaust", 712 "exhibit", 713 "exile", 714 "exist", 715 "exit", 716 "exotic", 717 "expand", 718 "expect", 719 "expire", 720 "explain", 721 "expose", 722 "express", 723 "extend", 724 "extra", 725 "eye", 726 "eyebrow", 727 "fabric", 728 "face", 729 "faculty", 730 "fade", 731 "faint", 732 "faith", 733 "fall", 734 "false", 735 "fame", 736 "family", 737 "famous", 738 "fan", 739 "fancy", 740 "fantasy", 741 "farm", 742 "fashion", 743 "fat", 744 "fatal", 745 "father", 746 "fatigue", 747 "fault", 748 "favorite", 749 "feature", 750 "february", 751 "federal", 752 "fee", 753 "feed", 754 "feel", 755 "female", 756 "fence", 757 "festival", 758 "fetch", 759 "fever", 760 "few", 761 "fiber", 762 "fiction", 763 "field", 764 "figure", 765 "file", 766 "film", 767 "filter", 768 "final", 769 "find", 770 "fine", 771 "finger", 772 "finish", 773 "fire", 774 "firm", 775 "first", 776 "fiscal", 777 "fish", 778 "fit", 779 "fitness", 780 "fix", 781 "flag", 782 "flame", 783 "flash", 784 "flat", 785 "flavor", 786 "flee", 787 "flight", 788 "flip", 789 "float", 790 "flock", 791 "floor", 792 "flower", 793 "fluid", 794 "flush", 795 "fly", 796 "foam", 797 "focus", 798 "fog", 799 "foil", 800 "fold", 801 "follow", 802 "food", 803 "foot", 804 "force", 805 "forest", 806 "forget", 807 "fork", 808 "fortune", 809 "forum", 810 "forward", 811 "fossil", 812 "foster", 813 "found", 814 "fox", 815 "fragile", 816 "frame", 817 "frequent", 818 "fresh", 819 "friend", 820 "fringe", 821 "frog", 822 "front", 823 "frost", 824 "frown", 825 "frozen", 826 "fruit", 827 "fuel", 828 "fun", 829 "funny", 830 "furnace", 831 "fury", 832 "future", 833 "gadget", 834 "gain", 835 "galaxy", 836 "gallery", 837 "game", 838 "gap", 839 "garage", 840 "garbage", 841 "garden", 842 "garlic", 843 "garment", 844 "gas", 845 "gasp", 846 "gate", 847 "gather", 848 "gauge", 849 "gaze", 850 "general", 851 "genius", 852 "genre", 853 "gentle", 854 "genuine", 855 "gesture", 856 "ghost", 857 "giant", 858 "gift", 859 "giggle", 860 "ginger", 861 "giraffe", 862 "girl", 863 "give", 864 "glad", 865 "glance", 866 "glare", 867 "glass", 868 "glide", 869 "glimpse", 870 "globe", 871 "gloom", 872 "glory", 873 "glove", 874 "glow", 875 "glue", 876 "goat", 877 "goddess", 878 "gold", 879 "good", 880 "goose", 881 "gorilla", 882 "gospel", 883 "gossip", 884 "govern", 885 "gown", 886 "grab", 887 "grace", 888 "grain", 889 "grant", 890 "grape", 891 "grass", 892 "gravity", 893 "great", 894 "green", 895 "grid", 896 "grief", 897 "grit", 898 "grocery", 899 "group", 900 "grow", 901 "grunt", 902 "guard", 903 "guess", 904 "guide", 905 "guilt", 906 "guitar", 907 "gun", 908 "gym", 909 "habit", 910 "hair", 911 "half", 912 "hammer", 913 "hamster", 914 "hand", 915 "happy", 916 "harbor", 917 "hard", 918 "harsh", 919 "harvest", 920 "hat", 921 "have", 922 "hawk", 923 "hazard", 924 "head", 925 "health", 926 "heart", 927 "heavy", 928 "hedgehog", 929 "height", 930 "hello", 931 "helmet", 932 "help", 933 "hen", 934 "hero", 935 "hidden", 936 "high", 937 "hill", 938 "hint", 939 "hip", 940 "hire", 941 "history", 942 "hobby", 943 "hockey", 944 "hold", 945 "hole", 946 "holiday", 947 "hollow", 948 "home", 949 "honey", 950 "hood", 951 "hope", 952 "horn", 953 "horror", 954 "horse", 955 "hospital", 956 "host", 957 "hotel", 958 "hour", 959 "hover", 960 "hub", 961 "huge", 962 "human", 963 "humble", 964 "humor", 965 "hundred", 966 "hungry", 967 "hunt", 968 "hurdle", 969 "hurry", 970 "hurt", 971 "husband", 972 "hybrid", 973 "ice", 974 "icon", 975 "idea", 976 "identify", 977 "idle", 978 "ignore", 979 "ill", 980 "illegal", 981 "illness", 982 "image", 983 "imitate", 984 "immense", 985 "immune", 986 "impact", 987 "impose", 988 "improve", 989 "impulse", 990 "inch", 991 "include", 992 "income", 993 "increase", 994 "index", 995 "indicate", 996 "indoor", 997 "industry", 998 "infant", 999 "inflict", 1000 "inform", 1001 "inhale", 1002 "inherit", 1003 "initial", 1004 "inject", 1005 "injury", 1006 "inmate", 1007 "inner", 1008 "innocent", 1009 "input", 1010 "inquiry", 1011 "insane", 1012 "insect", 1013 "inside", 1014 "inspire", 1015 "install", 1016 "intact", 1017 "interest", 1018 "into", 1019 "invest", 1020 "invite", 1021 "involve", 1022 "iron", 1023 "island", 1024 "isolate", 1025 "issue", 1026 "item", 1027 "ivory", 1028 "jacket", 1029 "jaguar", 1030 "jar", 1031 "jazz", 1032 "jealous", 1033 "jeans", 1034 "jelly", 1035 "jewel", 1036 "job", 1037 "join", 1038 "joke", 1039 "journey", 1040 "joy", 1041 "judge", 1042 "juice", 1043 "jump", 1044 "jungle", 1045 "junior", 1046 "junk", 1047 "just", 1048 "kangaroo", 1049 "keen", 1050 "keep", 1051 "ketchup", 1052 "key", 1053 "kick", 1054 "kid", 1055 "kidney", 1056 "kind", 1057 "kingdom", 1058 "kiss", 1059 "kit", 1060 "kitchen", 1061 "kite", 1062 "kitten", 1063 "kiwi", 1064 "knee", 1065 "knife", 1066 "knock", 1067 "know", 1068 "lab", 1069 "label", 1070 "labor", 1071 "ladder", 1072 "lady", 1073 "lake", 1074 "lamp", 1075 "language", 1076 "laptop", 1077 "large", 1078 "later", 1079 "latin", 1080 "laugh", 1081 "laundry", 1082 "lava", 1083 "law", 1084 "lawn", 1085 "lawsuit", 1086 "layer", 1087 "lazy", 1088 "leader", 1089 "leaf", 1090 "learn", 1091 "leave", 1092 "lecture", 1093 "left", 1094 "leg", 1095 "legal", 1096 "legend", 1097 "leisure", 1098 "lemon", 1099 "lend", 1100 "length", 1101 "lens", 1102 "leopard", 1103 "lesson", 1104 "letter", 1105 "level", 1106 "liar", 1107 "liberty", 1108 "library", 1109 "license", 1110 "life", 1111 "lift", 1112 "light", 1113 "like", 1114 "limb", 1115 "limit", 1116 "link", 1117 "lion", 1118 "liquid", 1119 "list", 1120 "little", 1121 "live", 1122 "lizard", 1123 "load", 1124 "loan", 1125 "lobster", 1126 "local", 1127 "lock", 1128 "logic", 1129 "lonely", 1130 "long", 1131 "loop", 1132 "lottery", 1133 "loud", 1134 "lounge", 1135 "love", 1136 "loyal", 1137 "lucky", 1138 "luggage", 1139 "lumber", 1140 "lunar", 1141 "lunch", 1142 "luxury", 1143 "lyrics", 1144 "machine", 1145 "mad", 1146 "magic", 1147 "magnet", 1148 "maid", 1149 "mail", 1150 "main", 1151 "major", 1152 "make", 1153 "mammal", 1154 "man", 1155 "manage", 1156 "mandate", 1157 "mango", 1158 "mansion", 1159 "manual", 1160 "maple", 1161 "marble", 1162 "march", 1163 "margin", 1164 "marine", 1165 "market", 1166 "marriage", 1167 "mask", 1168 "mass", 1169 "master", 1170 "match", 1171 "material", 1172 "math", 1173 "matrix", 1174 "matter", 1175 "maximum", 1176 "maze", 1177 "meadow", 1178 "mean", 1179 "measure", 1180 "meat", 1181 "mechanic", 1182 "medal", 1183 "media", 1184 "melody", 1185 "melt", 1186 "member", 1187 "memory", 1188 "mention", 1189 "menu", 1190 "mercy", 1191 "merge", 1192 "merit", 1193 "merry", 1194 "mesh", 1195 "message", 1196 "metal", 1197 "method", 1198 "middle", 1199 "midnight", 1200 "milk", 1201 "million", 1202 "mimic", 1203 "mind", 1204 "minimum", 1205 "minor", 1206 "minute", 1207 "miracle", 1208 "mirror", 1209 "misery", 1210 "miss", 1211 "mistake", 1212 "mix", 1213 "mixed", 1214 "mixture", 1215 "mobile", 1216 "model", 1217 "modify", 1218 "mom", 1219 "moment", 1220 "monitor", 1221 "monkey", 1222 "monster", 1223 "month", 1224 "moon", 1225 "moral", 1226 "more", 1227 "morning", 1228 "mosquito", 1229 "mother", 1230 "motion", 1231 "motor", 1232 "mountain", 1233 "mouse", 1234 "move", 1235 "movie", 1236 "much", 1237 "muffin", 1238 "mule", 1239 "multiply", 1240 "muscle", 1241 "museum", 1242 "mushroom", 1243 "music", 1244 "must", 1245 "mutual", 1246 "myself", 1247 "mystery", 1248 "myth", 1249 "naive", 1250 "name", 1251 "napkin", 1252 "narrow", 1253 "nasty", 1254 "nation", 1255 "nature", 1256 "near", 1257 "neck", 1258 "need", 1259 "negative", 1260 "neglect", 1261 "neither", 1262 "nephew", 1263 "nerve", 1264 "nest", 1265 "net", 1266 "network", 1267 "neutral", 1268 "never", 1269 "news", 1270 "next", 1271 "nice", 1272 "night", 1273 "noble", 1274 "noise", 1275 "nominee", 1276 "noodle", 1277 "normal", 1278 "north", 1279 "nose", 1280 "notable", 1281 "note", 1282 "nothing", 1283 "notice", 1284 "novel", 1285 "now", 1286 "nuclear", 1287 "number", 1288 "nurse", 1289 "nut", 1290 "oak", 1291 "obey", 1292 "object", 1293 "oblige", 1294 "obscure", 1295 "observe", 1296 "obtain", 1297 "obvious", 1298 "occur", 1299 "ocean", 1300 "october", 1301 "odor", 1302 "off", 1303 "offer", 1304 "office", 1305 "often", 1306 "oil", 1307 "okay", 1308 "old", 1309 "olive", 1310 "olympic", 1311 "omit", 1312 "once", 1313 "one", 1314 "onion", 1315 "online", 1316 "only", 1317 "open", 1318 "opera", 1319 "opinion", 1320 "oppose", 1321 "option", 1322 "orange", 1323 "orbit", 1324 "orchard", 1325 "order", 1326 "ordinary", 1327 "organ", 1328 "orient", 1329 "original", 1330 "orphan", 1331 "ostrich", 1332 "other", 1333 "outdoor", 1334 "outer", 1335 "output", 1336 "outside", 1337 "oval", 1338 "oven", 1339 "over", 1340 "own", 1341 "owner", 1342 "oxygen", 1343 "oyster", 1344 "ozone", 1345 "pact", 1346 "paddle", 1347 "page", 1348 "pair", 1349 "palace", 1350 "palm", 1351 "panda", 1352 "panel", 1353 "panic", 1354 "panther", 1355 "paper", 1356 "parade", 1357 "parent", 1358 "park", 1359 "parrot", 1360 "party", 1361 "pass", 1362 "patch", 1363 "path", 1364 "patient", 1365 "patrol", 1366 "pattern", 1367 "pause", 1368 "pave", 1369 "payment", 1370 "peace", 1371 "peanut", 1372 "pear", 1373 "peasant", 1374 "pelican", 1375 "pen", 1376 "penalty", 1377 "pencil", 1378 "people", 1379 "pepper", 1380 "perfect", 1381 "permit", 1382 "person", 1383 "pet", 1384 "phone", 1385 "photo", 1386 "phrase", 1387 "physical", 1388 "piano", 1389 "picnic", 1390 "picture", 1391 "piece", 1392 "pig", 1393 "pigeon", 1394 "pill", 1395 "pilot", 1396 "pink", 1397 "pioneer", 1398 "pipe", 1399 "pistol", 1400 "pitch", 1401 "pizza", 1402 "place", 1403 "planet", 1404 "plastic", 1405 "plate", 1406 "play", 1407 "please", 1408 "pledge", 1409 "pluck", 1410 "plug", 1411 "plunge", 1412 "poem", 1413 "poet", 1414 "point", 1415 "polar", 1416 "pole", 1417 "police", 1418 "pond", 1419 "pony", 1420 "pool", 1421 "popular", 1422 "portion", 1423 "position", 1424 "possible", 1425 "post", 1426 "potato", 1427 "pottery", 1428 "poverty", 1429 "powder", 1430 "power", 1431 "practice", 1432 "praise", 1433 "predict", 1434 "prefer", 1435 "prepare", 1436 "present", 1437 "pretty", 1438 "prevent", 1439 "price", 1440 "pride", 1441 "primary", 1442 "print", 1443 "priority", 1444 "prison", 1445 "private", 1446 "prize", 1447 "problem", 1448 "process", 1449 "produce", 1450 "profit", 1451 "program", 1452 "project", 1453 "promote", 1454 "proof", 1455 "property", 1456 "prosper", 1457 "protect", 1458 "proud", 1459 "provide", 1460 "public", 1461 "pudding", 1462 "pull", 1463 "pulp", 1464 "pulse", 1465 "pumpkin", 1466 "punch", 1467 "pupil", 1468 "puppy", 1469 "purchase", 1470 "purity", 1471 "purpose", 1472 "purse", 1473 "push", 1474 "put", 1475 "puzzle", 1476 "pyramid", 1477 "quality", 1478 "quantum", 1479 "quarter", 1480 "question", 1481 "quick", 1482 "quit", 1483 "quiz", 1484 "quote", 1485 "rabbit", 1486 "raccoon", 1487 "race", 1488 "rack", 1489 "radar", 1490 "radio", 1491 "rail", 1492 "rain", 1493 "raise", 1494 "rally", 1495 "ramp", 1496 "ranch", 1497 "random", 1498 "range", 1499 "rapid", 1500 "rare", 1501 "rate", 1502 "rather", 1503 "raven", 1504 "raw", 1505 "razor", 1506 "ready", 1507 "real", 1508 "reason", 1509 "rebel", 1510 "rebuild", 1511 "recall", 1512 "receive", 1513 "recipe", 1514 "record", 1515 "recycle", 1516 "reduce", 1517 "reflect", 1518 "reform", 1519 "refuse", 1520 "region", 1521 "regret", 1522 "regular", 1523 "reject", 1524 "relax", 1525 "release", 1526 "relief", 1527 "rely", 1528 "remain", 1529 "remember", 1530 "remind", 1531 "remove", 1532 "render", 1533 "renew", 1534 "rent", 1535 "reopen", 1536 "repair", 1537 "repeat", 1538 "replace", 1539 "report", 1540 "require", 1541 "rescue", 1542 "resemble", 1543 "resist", 1544 "resource", 1545 "response", 1546 "result", 1547 "retire", 1548 "retreat", 1549 "return", 1550 "reunion", 1551 "reveal", 1552 "review", 1553 "reward", 1554 "rhythm", 1555 "rib", 1556 "ribbon", 1557 "rice", 1558 "rich", 1559 "ride", 1560 "ridge", 1561 "rifle", 1562 "right", 1563 "rigid", 1564 "ring", 1565 "riot", 1566 "ripple", 1567 "risk", 1568 "ritual", 1569 "rival", 1570 "river", 1571 "road", 1572 "roast", 1573 "robot", 1574 "robust", 1575 "rocket", 1576 "romance", 1577 "roof", 1578 "rookie", 1579 "room", 1580 "rose", 1581 "rotate", 1582 "rough", 1583 "round", 1584 "route", 1585 "royal", 1586 "rubber", 1587 "rude", 1588 "rug", 1589 "rule", 1590 "run", 1591 "runway", 1592 "rural", 1593 "sad", 1594 "saddle", 1595 "sadness", 1596 "safe", 1597 "sail", 1598 "salad", 1599 "salmon", 1600 "salon", 1601 "salt", 1602 "salute", 1603 "same", 1604 "sample", 1605 "sand", 1606 "satisfy", 1607 "satoshi", 1608 "sauce", 1609 "sausage", 1610 "save", 1611 "say", 1612 "scale", 1613 "scan", 1614 "scare", 1615 "scatter", 1616 "scene", 1617 "scheme", 1618 "school", 1619 "science", 1620 "scissors", 1621 "scorpion", 1622 "scout", 1623 "scrap", 1624 "screen", 1625 "script", 1626 "scrub", 1627 "sea", 1628 "search", 1629 "season", 1630 "seat", 1631 "second", 1632 "secret", 1633 "section", 1634 "security", 1635 "seed", 1636 "seek", 1637 "segment", 1638 "select", 1639 "sell", 1640 "seminar", 1641 "senior", 1642 "sense", 1643 "sentence", 1644 "series", 1645 "service", 1646 "session", 1647 "settle", 1648 "setup", 1649 "seven", 1650 "shadow", 1651 "shaft", 1652 "shallow", 1653 "share", 1654 "shed", 1655 "shell", 1656 "sheriff", 1657 "shield", 1658 "shift", 1659 "shine", 1660 "ship", 1661 "shiver", 1662 "shock", 1663 "shoe", 1664 "shoot", 1665 "shop", 1666 "short", 1667 "shoulder", 1668 "shove", 1669 "shrimp", 1670 "shrug", 1671 "shuffle", 1672 "shy", 1673 "sibling", 1674 "sick", 1675 "side", 1676 "siege", 1677 "sight", 1678 "sign", 1679 "silent", 1680 "silk", 1681 "silly", 1682 "silver", 1683 "similar", 1684 "simple", 1685 "since", 1686 "sing", 1687 "siren", 1688 "sister", 1689 "situate", 1690 "six", 1691 "size", 1692 "skate", 1693 "sketch", 1694 "ski", 1695 "skill", 1696 "skin", 1697 "skirt", 1698 "skull", 1699 "slab", 1700 "slam", 1701 "sleep", 1702 "slender", 1703 "slice", 1704 "slide", 1705 "slight", 1706 "slim", 1707 "slogan", 1708 "slot", 1709 "slow", 1710 "slush", 1711 "small", 1712 "smart", 1713 "smile", 1714 "smoke", 1715 "smooth", 1716 "snack", 1717 "snake", 1718 "snap", 1719 "sniff", 1720 "snow", 1721 "soap", 1722 "soccer", 1723 "social", 1724 "sock", 1725 "soda", 1726 "soft", 1727 "solar", 1728 "soldier", 1729 "solid", 1730 "solution", 1731 "solve", 1732 "someone", 1733 "song", 1734 "soon", 1735 "sorry", 1736 "sort", 1737 "soul", 1738 "sound", 1739 "soup", 1740 "source", 1741 "south", 1742 "space", 1743 "spare", 1744 "spatial", 1745 "spawn", 1746 "speak", 1747 "special", 1748 "speed", 1749 "spell", 1750 "spend", 1751 "sphere", 1752 "spice", 1753 "spider", 1754 "spike", 1755 "spin", 1756 "spirit", 1757 "split", 1758 "spoil", 1759 "sponsor", 1760 "spoon", 1761 "sport", 1762 "spot", 1763 "spray", 1764 "spread", 1765 "spring", 1766 "spy", 1767 "square", 1768 "squeeze", 1769 "squirrel", 1770 "stable", 1771 "stadium", 1772 "staff", 1773 "stage", 1774 "stairs", 1775 "stamp", 1776 "stand", 1777 "start", 1778 "state", 1779 "stay", 1780 "steak", 1781 "steel", 1782 "stem", 1783 "step", 1784 "stereo", 1785 "stick", 1786 "still", 1787 "sting", 1788 "stock", 1789 "stomach", 1790 "stone", 1791 "stool", 1792 "story", 1793 "stove", 1794 "strategy", 1795 "street", 1796 "strike", 1797 "strong", 1798 "struggle", 1799 "student", 1800 "stuff", 1801 "stumble", 1802 "style", 1803 "subject", 1804 "submit", 1805 "subway", 1806 "success", 1807 "such", 1808 "sudden", 1809 "suffer", 1810 "sugar", 1811 "suggest", 1812 "suit", 1813 "summer", 1814 "sun", 1815 "sunny", 1816 "sunset", 1817 "super", 1818 "supply", 1819 "supreme", 1820 "sure", 1821 "surface", 1822 "surge", 1823 "surprise", 1824 "surround", 1825 "survey", 1826 "suspect", 1827 "sustain", 1828 "swallow", 1829 "swamp", 1830 "swap", 1831 "swarm", 1832 "swear", 1833 "sweet", 1834 "swift", 1835 "swim", 1836 "swing", 1837 "switch", 1838 "sword", 1839 "symbol", 1840 "symptom", 1841 "syrup", 1842 "system", 1843 "table", 1844 "tackle", 1845 "tag", 1846 "tail", 1847 "talent", 1848 "talk", 1849 "tank", 1850 "tape", 1851 "target", 1852 "task", 1853 "taste", 1854 "tattoo", 1855 "taxi", 1856 "teach", 1857 "team", 1858 "tell", 1859 "ten", 1860 "tenant", 1861 "tennis", 1862 "tent", 1863 "term", 1864 "test", 1865 "text", 1866 "thank", 1867 "that", 1868 "theme", 1869 "then", 1870 "theory", 1871 "there", 1872 "they", 1873 "thing", 1874 "this", 1875 "thought", 1876 "three", 1877 "thrive", 1878 "throw", 1879 "thumb", 1880 "thunder", 1881 "ticket", 1882 "tide", 1883 "tiger", 1884 "tilt", 1885 "timber", 1886 "time", 1887 "tiny", 1888 "tip", 1889 "tired", 1890 "tissue", 1891 "title", 1892 "toast", 1893 "tobacco", 1894 "today", 1895 "toddler", 1896 "toe", 1897 "together", 1898 "toilet", 1899 "token", 1900 "tomato", 1901 "tomorrow", 1902 "tone", 1903 "tongue", 1904 "tonight", 1905 "tool", 1906 "tooth", 1907 "top", 1908 "topic", 1909 "topple", 1910 "torch", 1911 "tornado", 1912 "tortoise", 1913 "toss", 1914 "total", 1915 "tourist", 1916 "toward", 1917 "tower", 1918 "town", 1919 "toy", 1920 "track", 1921 "trade", 1922 "traffic", 1923 "tragic", 1924 "train", 1925 "transfer", 1926 "trap", 1927 "trash", 1928 "travel", 1929 "tray", 1930 "treat", 1931 "tree", 1932 "trend", 1933 "trial", 1934 "tribe", 1935 "trick", 1936 "trigger", 1937 "trim", 1938 "trip", 1939 "trophy", 1940 "trouble", 1941 "truck", 1942 "true", 1943 "truly", 1944 "trumpet", 1945 "trust", 1946 "truth", 1947 "try", 1948 "tube", 1949 "tuition", 1950 "tumble", 1951 "tuna", 1952 "tunnel", 1953 "turkey", 1954 "turn", 1955 "turtle", 1956 "twelve", 1957 "twenty", 1958 "twice", 1959 "twin", 1960 "twist", 1961 "two", 1962 "type", 1963 "typical", 1964 "ugly", 1965 "umbrella", 1966 "unable", 1967 "unaware", 1968 "uncle", 1969 "uncover", 1970 "under", 1971 "undo", 1972 "unfair", 1973 "unfold", 1974 "unhappy", 1975 "uniform", 1976 "unique", 1977 "unit", 1978 "universe", 1979 "unknown", 1980 "unlock", 1981 "until", 1982 "unusual", 1983 "unveil", 1984 "update", 1985 "upgrade", 1986 "uphold", 1987 "upon", 1988 "upper", 1989 "upset", 1990 "urban", 1991 "urge", 1992 "usage", 1993 "use", 1994 "used", 1995 "useful", 1996 "useless", 1997 "usual", 1998 "utility", 1999 "vacant", 2000 "vacuum", 2001 "vague", 2002 "valid", 2003 "valley", 2004 "valve", 2005 "van", 2006 "vanish", 2007 "vapor", 2008 "various", 2009 "vast", 2010 "vault", 2011 "vehicle", 2012 "velvet", 2013 "vendor", 2014 "venture", 2015 "venue", 2016 "verb", 2017 "verify", 2018 "version", 2019 "very", 2020 "vessel", 2021 "veteran", 2022 "viable", 2023 "vibrant", 2024 "vicious", 2025 "victory", 2026 "video", 2027 "view", 2028 "village", 2029 "vintage", 2030 "violin", 2031 "virtual", 2032 "virus", 2033 "visa", 2034 "visit", 2035 "visual", 2036 "vital", 2037 "vivid", 2038 "vocal", 2039 "voice", 2040 "void", 2041 "volcano", 2042 "volume", 2043 "vote", 2044 "voyage", 2045 "wage", 2046 "wagon", 2047 "wait", 2048 "walk", 2049 "wall", 2050 "walnut", 2051 "want", 2052 "warfare", 2053 "warm", 2054 "warrior", 2055 "wash", 2056 "wasp", 2057 "waste", 2058 "water", 2059 "wave", 2060 "way", 2061 "wealth", 2062 "weapon", 2063 "wear", 2064 "weasel", 2065 "weather", 2066 "web", 2067 "wedding", 2068 "weekend", 2069 "weird", 2070 "welcome", 2071 "west", 2072 "wet", 2073 "whale", 2074 "what", 2075 "wheat", 2076 "wheel", 2077 "when", 2078 "where", 2079 "whip", 2080 "whisper", 2081 "wide", 2082 "width", 2083 "wife", 2084 "wild", 2085 "will", 2086 "win", 2087 "window", 2088 "wine", 2089 "wing", 2090 "wink", 2091 "winner", 2092 "winter", 2093 "wire", 2094 "wisdom", 2095 "wise", 2096 "wish", 2097 "witness", 2098 "wolf", 2099 "woman", 2100 "wonder", 2101 "wood", 2102 "wool", 2103 "word", 2104 "work", 2105 "world", 2106 "worry", 2107 "worth", 2108 "wrap", 2109 "wreck", 2110 "wrestle", 2111 "wrist", 2112 "write", 2113 "wrong", 2114 "yard", 2115 "year", 2116 "yellow", 2117 "you", 2118 "young", 2119 "youth", 2120 "zebra", 2121 "zero", 2122 "zone", 2123 "zoo", 2124 } 2125 2126 var secwordSet map[string]bool 2127 2128 func init() { 2129 secwordSet = make(map[string]bool) 2130 for _, w := range secwords { 2131 secwordSet[w] = true 2132 } 2133 }