├── .github └── workflows │ └── release.yaml ├── LICENSE ├── README.md ├── go.mod ├── go.sum └── main.go /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: release 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | 8 | jobs: 9 | 10 | goreleaser: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | 15 | - name: Set up Go 16 | uses: actions/setup-go@v3 17 | with: 18 | go-version: 1.19 19 | 20 | - name: Run GoReleaser 21 | uses: goreleaser/goreleaser-action@v4 22 | with: 23 | distribution: goreleaser 24 | version: latest 25 | args: release 26 | env: 27 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2020 modood 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | xmrkeygen 2 | ========= 3 | 4 | [![license](https://img.shields.io/badge/license-WTFPL%20--%20Do%20What%20the%20Fuck%20You%20Want%20to%20Public%20License-green.svg)](https://github.com/modood/xmrkeygen/blob/master/LICENSE) 5 | 6 | A simple and easy to use monero key generator 7 | 8 | Can I trust this code? 9 | ---------------------- 10 | 11 | > Don't Trust. Verify. 12 | 13 | > We recommend every user of this library audit and verify any underlying code for its validity and suitability. 14 | > 15 | > You can do so by using this tool: https://xmr.llcoins.net/ 16 | 17 | Installation 18 | ------------ 19 | 20 | ``` 21 | $ go install github.com/modood/xmrkeygen@latest 22 | ``` 23 | 24 | Example 25 | ------- 26 | 27 | ```txt 28 | $ xmrkeygen 29 | 30 | Mnemonic Seed: cistern mammal moat tossed movement oozed fierce zigzags nucleus pyramid hybrid wrist pegs candy duets cupcake mammal slackens gymnast issued tarnished ghost leopard liquid movement 31 | Private Spend Key: c7c4a004731871110ead3c97e77c22961f71171440f0a843fa07a668d8f4b302 32 | Private View Key: ffebd5d02a9fbfbf1986143eb56446d4ae2e6bef328236bf45606a93169e970a 33 | Public Address: 43Rr7KiCUY2jTvNebYKGchaZeEHNSTaad3TQZ57w2a4Q98ppGBpYZwxSYDetzLpuwE4LMR6C2HEcj4DjCVdg9wP85xspxeS 34 | ``` 35 | 36 | License 37 | ------- 38 | 39 | This repo is released under the [WTFPL](http://www.wtfpl.net/) – Do What the Fuck You Want to Public License. 40 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/modood/xmrkeygen 2 | 3 | go 1.14 4 | 5 | require ( 6 | github.com/ebfe/keccak v0.0.0-20150115210727-5cc570678d1b // indirect 7 | github.com/paxos-bankchain/moneroutil v0.0.0-20170611151923-33d7e0c11a62 8 | golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 9 | ) 10 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/ebfe/keccak v0.0.0-20150115210727-5cc570678d1b h1:BMyjwV6Fal/Ffphi4dJfulSxMeDl0xFS2vs5QLr6rsI= 2 | github.com/ebfe/keccak v0.0.0-20150115210727-5cc570678d1b/go.mod h1:fnviDXB7GJWiSUI9thIXmk9QKM8Rhj1JV/LcMRzkiVA= 3 | github.com/paxos-bankchain/moneroutil v0.0.0-20170611151923-33d7e0c11a62 h1:QYHPf1LKI9NldUrn3Elc6YQwJPJEbFgO+4vQCShYLTI= 4 | github.com/paxos-bankchain/moneroutil v0.0.0-20170611151923-33d7e0c11a62/go.mod h1:luERRHUHsQsJNogV9bXoGW6dRFS9qjv0121Z6Gg/iuk= 5 | golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= 6 | golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= 7 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 8 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 9 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 10 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 11 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 12 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "crypto/rand" 5 | "encoding/binary" 6 | "encoding/hex" 7 | "fmt" 8 | "hash/crc32" 9 | "strings" 10 | "unsafe" 11 | 12 | "github.com/paxos-bankchain/moneroutil" 13 | "golang.org/x/crypto/sha3" 14 | ) 15 | 16 | // Key consists of a ed25519 256-bit SpendKey and a ViewKey. 17 | // In order to make the mnemonic seeds work, ViewKey is actually derived from 18 | // SpendKey with Keccak256, also leading to SpendKey serving as the seed. 19 | type Key struct { 20 | spendKey, viewKey *[32]byte 21 | } 22 | 23 | // NewKey construsts a Key with random seed. 24 | func NewKey() *Key { 25 | seed := new([32]byte) 26 | rand.Read(seed[:]) 27 | 28 | k := &Key{new([32]byte), new([32]byte)} 29 | 30 | // The seed, which is actually just a representation of the Private Spend Key itself 31 | copy(k.spendKey[:], seed[:]) 32 | moneroutil.ScReduce32((*moneroutil.Key)(k.spendKey)) 33 | 34 | // The Private View Key is derived by hashing the Private Spend Key with Keccak-256 35 | k.viewKey = keccak256(k.spendKey[:]) 36 | moneroutil.ScReduce32((*moneroutil.Key)(k.viewKey)) 37 | 38 | return k 39 | } 40 | 41 | // Mnemonic encodes a key to mnemonic seeds. 42 | func (k *Key) Mnemonic() []string { 43 | 44 | w := new([25]string) 45 | 46 | // Mnemonics convert on a ratio of 4:3 minimum: four bytes creates three words, plus one checksum word 47 | size := uint32(len(words)) 48 | for i := 0; i < 32; i += 4 { 49 | x := binary.LittleEndian.Uint32(k.spendKey[i : i+4]) 50 | w1 := x % size 51 | w2 := (x/size + w1) % size 52 | w3 := (x/size/size + w2) % size 53 | w[i/4*3] = words[w1] 54 | w[i/4*3+1] = words[w2] 55 | w[i/4*3+2] = words[w3] 56 | } 57 | 58 | // checksum word 59 | h := crc32.NewIEEE() 60 | for _, v := range w[:24] { 61 | r := string([]rune(v)[:3]) 62 | h.Write([]byte(r)) 63 | } 64 | sum := h.Sum32() 65 | idx := sum % 24 66 | w[24] = w[idx] 67 | 68 | return w[:] 69 | } 70 | 71 | // Address encodes public spend key and view key in base58 format. 72 | func (k *Key) Address() string { 73 | 74 | // The Private Spend Key and Private View Key are sent to the ed25519 scalarmult function 75 | // to create their counterparts, the Public Spend Key and Public View Key 76 | spendPub := publicKeyFromPrivateKey(k.spendKey) 77 | viewPub := publicKeyFromPrivateKey(k.viewKey) 78 | 79 | // monero main network 80 | network := []byte{0x12} 81 | 82 | // The pair of public keys are prepended with one network byte (the number 18, 0x12, for Monero). 83 | // It looks like this: (network byte) + (32-byte public spend key) + (32-byte public view key). 84 | // These 65 bytes are hashed with Keccak-256. 85 | hash := keccak256(network, spendPub[:], viewPub[:]) 86 | 87 | // The first four bytes of the hash are appended, creating a 69-byte Public Address. 88 | // As a last step, this 69-byte string is converted to Base58. 89 | // However, it's not done all at once like a Bitcoin address, but rather in 8-byte blocks. 90 | // This gives us eight full-sized blocks and one 5-byte block. Eight bytes converts to 11 or less Base58 characters; 91 | // if a particular block converts to <11 characters, the conversion pads it with "1"s (1 is 0 in Base58). 92 | // Likewise, the final 5-byte block can convert to 7 or less Base58 digits; the conversion will ensure the result is 7 digits. 93 | // Due to the conditional padding, the 69-byte string will always convert to 95 Base58 characters (8 * 11 + 7). 94 | address := moneroutil.EncodeMoneroBase58(network, spendPub[:], viewPub[:], hash[:4]) 95 | 96 | return address 97 | } 98 | 99 | // SpendKey encodes spend key in hex format. 100 | func (k *Key) SpendKey() string { 101 | return hex.EncodeToString(k.spendKey[:]) 102 | } 103 | 104 | // ViewKey encodes view key in hex format. 105 | func (k *Key) ViewKey() string { 106 | return hex.EncodeToString(k.viewKey[:]) 107 | } 108 | 109 | func keccak256(data ...[]byte) *[32]byte { 110 | h := sha3.NewLegacyKeccak256() 111 | for _, v := range data { 112 | h.Write(v) 113 | } 114 | sum := h.Sum(nil) 115 | sum32 := (*[32]byte)(unsafe.Pointer(&sum[0])) 116 | 117 | return sum32 118 | } 119 | 120 | func publicKeyFromPrivateKey(priv *[32]byte) *[32]byte { 121 | pub := new([32]byte) 122 | 123 | p := new(moneroutil.ExtendedGroupElement) 124 | moneroutil.GeScalarMultBase(p, (*moneroutil.Key)(priv)) 125 | p.ToBytes((*moneroutil.Key)(pub)) 126 | 127 | return pub 128 | } 129 | 130 | func main() { 131 | key := NewKey() 132 | fmt.Println() 133 | fmt.Printf(" %s %s\n", "Mnemonic Seed: ", strings.Join(key.Mnemonic(), " ")) 134 | fmt.Printf(" %s %s\n", "Private Spend Key: ", key.SpendKey()) 135 | fmt.Printf(" %s %s\n", "Private View Key: ", key.ViewKey()) 136 | fmt.Printf(" %s %s\n", "Public Address: ", key.Address()) 137 | fmt.Println() 138 | } 139 | 140 | // English Mnemonic: https://github.com/monero-project/monero/blob/master/src/mnemonics/english.h 141 | var words = &[...]string{ 142 | "abbey", 143 | "abducts", 144 | "ability", 145 | "ablaze", 146 | "abnormal", 147 | "abort", 148 | "abrasive", 149 | "absorb", 150 | "abyss", 151 | "academy", 152 | "aces", 153 | "aching", 154 | "acidic", 155 | "acoustic", 156 | "acquire", 157 | "across", 158 | "actress", 159 | "acumen", 160 | "adapt", 161 | "addicted", 162 | "adept", 163 | "adhesive", 164 | "adjust", 165 | "adopt", 166 | "adrenalin", 167 | "adult", 168 | "adventure", 169 | "aerial", 170 | "afar", 171 | "affair", 172 | "afield", 173 | "afloat", 174 | "afoot", 175 | "afraid", 176 | "after", 177 | "against", 178 | "agenda", 179 | "aggravate", 180 | "agile", 181 | "aglow", 182 | "agnostic", 183 | "agony", 184 | "agreed", 185 | "ahead", 186 | "aided", 187 | "ailments", 188 | "aimless", 189 | "airport", 190 | "aisle", 191 | "ajar", 192 | "akin", 193 | "alarms", 194 | "album", 195 | "alchemy", 196 | "alerts", 197 | "algebra", 198 | "alkaline", 199 | "alley", 200 | "almost", 201 | "aloof", 202 | "alpine", 203 | "already", 204 | "also", 205 | "altitude", 206 | "alumni", 207 | "always", 208 | "amaze", 209 | "ambush", 210 | "amended", 211 | "amidst", 212 | "ammo", 213 | "amnesty", 214 | "among", 215 | "amply", 216 | "amused", 217 | "anchor", 218 | "android", 219 | "anecdote", 220 | "angled", 221 | "ankle", 222 | "annoyed", 223 | "answers", 224 | "antics", 225 | "anvil", 226 | "anxiety", 227 | "anybody", 228 | "apart", 229 | "apex", 230 | "aphid", 231 | "aplomb", 232 | "apology", 233 | "apply", 234 | "apricot", 235 | "aptitude", 236 | "aquarium", 237 | "arbitrary", 238 | "archer", 239 | "ardent", 240 | "arena", 241 | "argue", 242 | "arises", 243 | "army", 244 | "around", 245 | "arrow", 246 | "arsenic", 247 | "artistic", 248 | "ascend", 249 | "ashtray", 250 | "aside", 251 | "asked", 252 | "asleep", 253 | "aspire", 254 | "assorted", 255 | "asylum", 256 | "athlete", 257 | "atlas", 258 | "atom", 259 | "atrium", 260 | "attire", 261 | "auburn", 262 | "auctions", 263 | "audio", 264 | "august", 265 | "aunt", 266 | "austere", 267 | "autumn", 268 | "avatar", 269 | "avidly", 270 | "avoid", 271 | "awakened", 272 | "awesome", 273 | "awful", 274 | "awkward", 275 | "awning", 276 | "awoken", 277 | "axes", 278 | "axis", 279 | "axle", 280 | "aztec", 281 | "azure", 282 | "baby", 283 | "bacon", 284 | "badge", 285 | "baffles", 286 | "bagpipe", 287 | "bailed", 288 | "bakery", 289 | "balding", 290 | "bamboo", 291 | "banjo", 292 | "baptism", 293 | "basin", 294 | "batch", 295 | "bawled", 296 | "bays", 297 | "because", 298 | "beer", 299 | "befit", 300 | "begun", 301 | "behind", 302 | "being", 303 | "below", 304 | "bemused", 305 | "benches", 306 | "berries", 307 | "bested", 308 | "betting", 309 | "bevel", 310 | "beware", 311 | "beyond", 312 | "bias", 313 | "bicycle", 314 | "bids", 315 | "bifocals", 316 | "biggest", 317 | "bikini", 318 | "bimonthly", 319 | "binocular", 320 | "biology", 321 | "biplane", 322 | "birth", 323 | "biscuit", 324 | "bite", 325 | "biweekly", 326 | "blender", 327 | "blip", 328 | "bluntly", 329 | "boat", 330 | "bobsled", 331 | "bodies", 332 | "bogeys", 333 | "boil", 334 | "boldly", 335 | "bomb", 336 | "border", 337 | "boss", 338 | "both", 339 | "bounced", 340 | "bovine", 341 | "bowling", 342 | "boxes", 343 | "boyfriend", 344 | "broken", 345 | "brunt", 346 | "bubble", 347 | "buckets", 348 | "budget", 349 | "buffet", 350 | "bugs", 351 | "building", 352 | "bulb", 353 | "bumper", 354 | "bunch", 355 | "business", 356 | "butter", 357 | "buying", 358 | "buzzer", 359 | "bygones", 360 | "byline", 361 | "bypass", 362 | "cabin", 363 | "cactus", 364 | "cadets", 365 | "cafe", 366 | "cage", 367 | "cajun", 368 | "cake", 369 | "calamity", 370 | "camp", 371 | "candy", 372 | "casket", 373 | "catch", 374 | "cause", 375 | "cavernous", 376 | "cease", 377 | "cedar", 378 | "ceiling", 379 | "cell", 380 | "cement", 381 | "cent", 382 | "certain", 383 | "chlorine", 384 | "chrome", 385 | "cider", 386 | "cigar", 387 | "cinema", 388 | "circle", 389 | "cistern", 390 | "citadel", 391 | "civilian", 392 | "claim", 393 | "click", 394 | "clue", 395 | "coal", 396 | "cobra", 397 | "cocoa", 398 | "code", 399 | "coexist", 400 | "coffee", 401 | "cogs", 402 | "cohesive", 403 | "coils", 404 | "colony", 405 | "comb", 406 | "cool", 407 | "copy", 408 | "corrode", 409 | "costume", 410 | "cottage", 411 | "cousin", 412 | "cowl", 413 | "criminal", 414 | "cube", 415 | "cucumber", 416 | "cuddled", 417 | "cuffs", 418 | "cuisine", 419 | "cunning", 420 | "cupcake", 421 | "custom", 422 | "cycling", 423 | "cylinder", 424 | "cynical", 425 | "dabbing", 426 | "dads", 427 | "daft", 428 | "dagger", 429 | "daily", 430 | "damp", 431 | "dangerous", 432 | "dapper", 433 | "darted", 434 | "dash", 435 | "dating", 436 | "dauntless", 437 | "dawn", 438 | "daytime", 439 | "dazed", 440 | "debut", 441 | "decay", 442 | "dedicated", 443 | "deepest", 444 | "deftly", 445 | "degrees", 446 | "dehydrate", 447 | "deity", 448 | "dejected", 449 | "delayed", 450 | "demonstrate", 451 | "dented", 452 | "deodorant", 453 | "depth", 454 | "desk", 455 | "devoid", 456 | "dewdrop", 457 | "dexterity", 458 | "dialect", 459 | "dice", 460 | "diet", 461 | "different", 462 | "digit", 463 | "dilute", 464 | "dime", 465 | "dinner", 466 | "diode", 467 | "diplomat", 468 | "directed", 469 | "distance", 470 | "ditch", 471 | "divers", 472 | "dizzy", 473 | "doctor", 474 | "dodge", 475 | "does", 476 | "dogs", 477 | "doing", 478 | "dolphin", 479 | "domestic", 480 | "donuts", 481 | "doorway", 482 | "dormant", 483 | "dosage", 484 | "dotted", 485 | "double", 486 | "dove", 487 | "down", 488 | "dozen", 489 | "dreams", 490 | "drinks", 491 | "drowning", 492 | "drunk", 493 | "drying", 494 | "dual", 495 | "dubbed", 496 | "duckling", 497 | "dude", 498 | "duets", 499 | "duke", 500 | "dullness", 501 | "dummy", 502 | "dunes", 503 | "duplex", 504 | "duration", 505 | "dusted", 506 | "duties", 507 | "dwarf", 508 | "dwelt", 509 | "dwindling", 510 | "dying", 511 | "dynamite", 512 | "dyslexic", 513 | "each", 514 | "eagle", 515 | "earth", 516 | "easy", 517 | "eating", 518 | "eavesdrop", 519 | "eccentric", 520 | "echo", 521 | "eclipse", 522 | "economics", 523 | "ecstatic", 524 | "eden", 525 | "edgy", 526 | "edited", 527 | "educated", 528 | "eels", 529 | "efficient", 530 | "eggs", 531 | "egotistic", 532 | "eight", 533 | "either", 534 | "eject", 535 | "elapse", 536 | "elbow", 537 | "eldest", 538 | "eleven", 539 | "elite", 540 | "elope", 541 | "else", 542 | "eluded", 543 | "emails", 544 | "ember", 545 | "emerge", 546 | "emit", 547 | "emotion", 548 | "empty", 549 | "emulate", 550 | "energy", 551 | "enforce", 552 | "enhanced", 553 | "enigma", 554 | "enjoy", 555 | "enlist", 556 | "enmity", 557 | "enough", 558 | "enraged", 559 | "ensign", 560 | "entrance", 561 | "envy", 562 | "epoxy", 563 | "equip", 564 | "erase", 565 | "erected", 566 | "erosion", 567 | "error", 568 | "eskimos", 569 | "espionage", 570 | "essential", 571 | "estate", 572 | "etched", 573 | "eternal", 574 | "ethics", 575 | "etiquette", 576 | "evaluate", 577 | "evenings", 578 | "evicted", 579 | "evolved", 580 | "examine", 581 | "excess", 582 | "exhale", 583 | "exit", 584 | "exotic", 585 | "exquisite", 586 | "extra", 587 | "exult", 588 | "fabrics", 589 | "factual", 590 | "fading", 591 | "fainted", 592 | "faked", 593 | "fall", 594 | "family", 595 | "fancy", 596 | "farming", 597 | "fatal", 598 | "faulty", 599 | "fawns", 600 | "faxed", 601 | "fazed", 602 | "feast", 603 | "february", 604 | "federal", 605 | "feel", 606 | "feline", 607 | "females", 608 | "fences", 609 | "ferry", 610 | "festival", 611 | "fetches", 612 | "fever", 613 | "fewest", 614 | "fiat", 615 | "fibula", 616 | "fictional", 617 | "fidget", 618 | "fierce", 619 | "fifteen", 620 | "fight", 621 | "films", 622 | "firm", 623 | "fishing", 624 | "fitting", 625 | "five", 626 | "fixate", 627 | "fizzle", 628 | "fleet", 629 | "flippant", 630 | "flying", 631 | "foamy", 632 | "focus", 633 | "foes", 634 | "foggy", 635 | "foiled", 636 | "folding", 637 | "fonts", 638 | "foolish", 639 | "fossil", 640 | "fountain", 641 | "fowls", 642 | "foxes", 643 | "foyer", 644 | "framed", 645 | "friendly", 646 | "frown", 647 | "fruit", 648 | "frying", 649 | "fudge", 650 | "fuel", 651 | "fugitive", 652 | "fully", 653 | "fuming", 654 | "fungal", 655 | "furnished", 656 | "fuselage", 657 | "future", 658 | "fuzzy", 659 | "gables", 660 | "gadget", 661 | "gags", 662 | "gained", 663 | "galaxy", 664 | "gambit", 665 | "gang", 666 | "gasp", 667 | "gather", 668 | "gauze", 669 | "gave", 670 | "gawk", 671 | "gaze", 672 | "gearbox", 673 | "gecko", 674 | "geek", 675 | "gels", 676 | "gemstone", 677 | "general", 678 | "geometry", 679 | "germs", 680 | "gesture", 681 | "getting", 682 | "geyser", 683 | "ghetto", 684 | "ghost", 685 | "giant", 686 | "giddy", 687 | "gifts", 688 | "gigantic", 689 | "gills", 690 | "gimmick", 691 | "ginger", 692 | "girth", 693 | "giving", 694 | "glass", 695 | "gleeful", 696 | "glide", 697 | "gnaw", 698 | "gnome", 699 | "goat", 700 | "goblet", 701 | "godfather", 702 | "goes", 703 | "goggles", 704 | "going", 705 | "goldfish", 706 | "gone", 707 | "goodbye", 708 | "gopher", 709 | "gorilla", 710 | "gossip", 711 | "gotten", 712 | "gourmet", 713 | "governing", 714 | "gown", 715 | "greater", 716 | "grunt", 717 | "guarded", 718 | "guest", 719 | "guide", 720 | "gulp", 721 | "gumball", 722 | "guru", 723 | "gusts", 724 | "gutter", 725 | "guys", 726 | "gymnast", 727 | "gypsy", 728 | "gyrate", 729 | "habitat", 730 | "hacksaw", 731 | "haggled", 732 | "hairy", 733 | "hamburger", 734 | "happens", 735 | "hashing", 736 | "hatchet", 737 | "haunted", 738 | "having", 739 | "hawk", 740 | "haystack", 741 | "hazard", 742 | "hectare", 743 | "hedgehog", 744 | "heels", 745 | "hefty", 746 | "height", 747 | "hemlock", 748 | "hence", 749 | "heron", 750 | "hesitate", 751 | "hexagon", 752 | "hickory", 753 | "hiding", 754 | "highway", 755 | "hijack", 756 | "hiker", 757 | "hills", 758 | "himself", 759 | "hinder", 760 | "hippo", 761 | "hire", 762 | "history", 763 | "hitched", 764 | "hive", 765 | "hoax", 766 | "hobby", 767 | "hockey", 768 | "hoisting", 769 | "hold", 770 | "honked", 771 | "hookup", 772 | "hope", 773 | "hornet", 774 | "hospital", 775 | "hotel", 776 | "hounded", 777 | "hover", 778 | "howls", 779 | "hubcaps", 780 | "huddle", 781 | "huge", 782 | "hull", 783 | "humid", 784 | "hunter", 785 | "hurried", 786 | "husband", 787 | "huts", 788 | "hybrid", 789 | "hydrogen", 790 | "hyper", 791 | "iceberg", 792 | "icing", 793 | "icon", 794 | "identity", 795 | "idiom", 796 | "idled", 797 | "idols", 798 | "igloo", 799 | "ignore", 800 | "iguana", 801 | "illness", 802 | "imagine", 803 | "imbalance", 804 | "imitate", 805 | "impel", 806 | "inactive", 807 | "inbound", 808 | "incur", 809 | "industrial", 810 | "inexact", 811 | "inflamed", 812 | "ingested", 813 | "initiate", 814 | "injury", 815 | "inkling", 816 | "inline", 817 | "inmate", 818 | "innocent", 819 | "inorganic", 820 | "input", 821 | "inquest", 822 | "inroads", 823 | "insult", 824 | "intended", 825 | "inundate", 826 | "invoke", 827 | "inwardly", 828 | "ionic", 829 | "irate", 830 | "iris", 831 | "irony", 832 | "irritate", 833 | "island", 834 | "isolated", 835 | "issued", 836 | "italics", 837 | "itches", 838 | "items", 839 | "itinerary", 840 | "itself", 841 | "ivory", 842 | "jabbed", 843 | "jackets", 844 | "jaded", 845 | "jagged", 846 | "jailed", 847 | "jamming", 848 | "january", 849 | "jargon", 850 | "jaunt", 851 | "javelin", 852 | "jaws", 853 | "jazz", 854 | "jeans", 855 | "jeers", 856 | "jellyfish", 857 | "jeopardy", 858 | "jerseys", 859 | "jester", 860 | "jetting", 861 | "jewels", 862 | "jigsaw", 863 | "jingle", 864 | "jittery", 865 | "jive", 866 | "jobs", 867 | "jockey", 868 | "jogger", 869 | "joining", 870 | "joking", 871 | "jolted", 872 | "jostle", 873 | "journal", 874 | "joyous", 875 | "jubilee", 876 | "judge", 877 | "juggled", 878 | "juicy", 879 | "jukebox", 880 | "july", 881 | "jump", 882 | "junk", 883 | "jury", 884 | "justice", 885 | "juvenile", 886 | "kangaroo", 887 | "karate", 888 | "keep", 889 | "kennel", 890 | "kept", 891 | "kernels", 892 | "kettle", 893 | "keyboard", 894 | "kickoff", 895 | "kidneys", 896 | "king", 897 | "kiosk", 898 | "kisses", 899 | "kitchens", 900 | "kiwi", 901 | "knapsack", 902 | "knee", 903 | "knife", 904 | "knowledge", 905 | "knuckle", 906 | "koala", 907 | "laboratory", 908 | "ladder", 909 | "lagoon", 910 | "lair", 911 | "lakes", 912 | "lamb", 913 | "language", 914 | "laptop", 915 | "large", 916 | "last", 917 | "later", 918 | "launching", 919 | "lava", 920 | "lawsuit", 921 | "layout", 922 | "lazy", 923 | "lectures", 924 | "ledge", 925 | "leech", 926 | "left", 927 | "legion", 928 | "leisure", 929 | "lemon", 930 | "lending", 931 | "leopard", 932 | "lesson", 933 | "lettuce", 934 | "lexicon", 935 | "liar", 936 | "library", 937 | "licks", 938 | "lids", 939 | "lied", 940 | "lifestyle", 941 | "light", 942 | "likewise", 943 | "lilac", 944 | "limits", 945 | "linen", 946 | "lion", 947 | "lipstick", 948 | "liquid", 949 | "listen", 950 | "lively", 951 | "loaded", 952 | "lobster", 953 | "locker", 954 | "lodge", 955 | "lofty", 956 | "logic", 957 | "loincloth", 958 | "long", 959 | "looking", 960 | "lopped", 961 | "lordship", 962 | "losing", 963 | "lottery", 964 | "loudly", 965 | "love", 966 | "lower", 967 | "loyal", 968 | "lucky", 969 | "luggage", 970 | "lukewarm", 971 | "lullaby", 972 | "lumber", 973 | "lunar", 974 | "lurk", 975 | "lush", 976 | "luxury", 977 | "lymph", 978 | "lynx", 979 | "lyrics", 980 | "macro", 981 | "madness", 982 | "magically", 983 | "mailed", 984 | "major", 985 | "makeup", 986 | "malady", 987 | "mammal", 988 | "maps", 989 | "masterful", 990 | "match", 991 | "maul", 992 | "maverick", 993 | "maximum", 994 | "mayor", 995 | "maze", 996 | "meant", 997 | "mechanic", 998 | "medicate", 999 | "meeting", 1000 | "megabyte", 1001 | "melting", 1002 | "memoir", 1003 | "menu", 1004 | "merger", 1005 | "mesh", 1006 | "metro", 1007 | "mews", 1008 | "mice", 1009 | "midst", 1010 | "mighty", 1011 | "mime", 1012 | "mirror", 1013 | "misery", 1014 | "mittens", 1015 | "mixture", 1016 | "moat", 1017 | "mobile", 1018 | "mocked", 1019 | "mohawk", 1020 | "moisture", 1021 | "molten", 1022 | "moment", 1023 | "money", 1024 | "moon", 1025 | "mops", 1026 | "morsel", 1027 | "mostly", 1028 | "motherly", 1029 | "mouth", 1030 | "movement", 1031 | "mowing", 1032 | "much", 1033 | "muddy", 1034 | "muffin", 1035 | "mugged", 1036 | "mullet", 1037 | "mumble", 1038 | "mundane", 1039 | "muppet", 1040 | "mural", 1041 | "musical", 1042 | "muzzle", 1043 | "myriad", 1044 | "mystery", 1045 | "myth", 1046 | "nabbing", 1047 | "nagged", 1048 | "nail", 1049 | "names", 1050 | "nanny", 1051 | "napkin", 1052 | "narrate", 1053 | "nasty", 1054 | "natural", 1055 | "nautical", 1056 | "navy", 1057 | "nearby", 1058 | "necklace", 1059 | "needed", 1060 | "negative", 1061 | "neither", 1062 | "neon", 1063 | "nephew", 1064 | "nerves", 1065 | "nestle", 1066 | "network", 1067 | "neutral", 1068 | "never", 1069 | "newt", 1070 | "nexus", 1071 | "nibs", 1072 | "niche", 1073 | "niece", 1074 | "nifty", 1075 | "nightly", 1076 | "nimbly", 1077 | "nineteen", 1078 | "nirvana", 1079 | "nitrogen", 1080 | "nobody", 1081 | "nocturnal", 1082 | "nodes", 1083 | "noises", 1084 | "nomad", 1085 | "noodles", 1086 | "northern", 1087 | "nostril", 1088 | "noted", 1089 | "nouns", 1090 | "novelty", 1091 | "nowhere", 1092 | "nozzle", 1093 | "nuance", 1094 | "nucleus", 1095 | "nudged", 1096 | "nugget", 1097 | "nuisance", 1098 | "null", 1099 | "number", 1100 | "nuns", 1101 | "nurse", 1102 | "nutshell", 1103 | "nylon", 1104 | "oaks", 1105 | "oars", 1106 | "oasis", 1107 | "oatmeal", 1108 | "obedient", 1109 | "object", 1110 | "obliged", 1111 | "obnoxious", 1112 | "observant", 1113 | "obtains", 1114 | "obvious", 1115 | "occur", 1116 | "ocean", 1117 | "october", 1118 | "odds", 1119 | "odometer", 1120 | "offend", 1121 | "often", 1122 | "oilfield", 1123 | "ointment", 1124 | "okay", 1125 | "older", 1126 | "olive", 1127 | "olympics", 1128 | "omega", 1129 | "omission", 1130 | "omnibus", 1131 | "onboard", 1132 | "oncoming", 1133 | "oneself", 1134 | "ongoing", 1135 | "onion", 1136 | "online", 1137 | "onslaught", 1138 | "onto", 1139 | "onward", 1140 | "oozed", 1141 | "opacity", 1142 | "opened", 1143 | "opposite", 1144 | "optical", 1145 | "opus", 1146 | "orange", 1147 | "orbit", 1148 | "orchid", 1149 | "orders", 1150 | "organs", 1151 | "origin", 1152 | "ornament", 1153 | "orphans", 1154 | "oscar", 1155 | "ostrich", 1156 | "otherwise", 1157 | "otter", 1158 | "ouch", 1159 | "ought", 1160 | "ounce", 1161 | "ourselves", 1162 | "oust", 1163 | "outbreak", 1164 | "oval", 1165 | "oven", 1166 | "owed", 1167 | "owls", 1168 | "owner", 1169 | "oxidant", 1170 | "oxygen", 1171 | "oyster", 1172 | "ozone", 1173 | "pact", 1174 | "paddles", 1175 | "pager", 1176 | "pairing", 1177 | "palace", 1178 | "pamphlet", 1179 | "pancakes", 1180 | "paper", 1181 | "paradise", 1182 | "pastry", 1183 | "patio", 1184 | "pause", 1185 | "pavements", 1186 | "pawnshop", 1187 | "payment", 1188 | "peaches", 1189 | "pebbles", 1190 | "peculiar", 1191 | "pedantic", 1192 | "peeled", 1193 | "pegs", 1194 | "pelican", 1195 | "pencil", 1196 | "people", 1197 | "pepper", 1198 | "perfect", 1199 | "pests", 1200 | "petals", 1201 | "phase", 1202 | "pheasants", 1203 | "phone", 1204 | "phrases", 1205 | "physics", 1206 | "piano", 1207 | "picked", 1208 | "pierce", 1209 | "pigment", 1210 | "piloted", 1211 | "pimple", 1212 | "pinched", 1213 | "pioneer", 1214 | "pipeline", 1215 | "pirate", 1216 | "pistons", 1217 | "pitched", 1218 | "pivot", 1219 | "pixels", 1220 | "pizza", 1221 | "playful", 1222 | "pledge", 1223 | "pliers", 1224 | "plotting", 1225 | "plus", 1226 | "plywood", 1227 | "poaching", 1228 | "pockets", 1229 | "podcast", 1230 | "poetry", 1231 | "point", 1232 | "poker", 1233 | "polar", 1234 | "ponies", 1235 | "pool", 1236 | "popular", 1237 | "portents", 1238 | "possible", 1239 | "potato", 1240 | "pouch", 1241 | "poverty", 1242 | "powder", 1243 | "pram", 1244 | "present", 1245 | "pride", 1246 | "problems", 1247 | "pruned", 1248 | "prying", 1249 | "psychic", 1250 | "public", 1251 | "puck", 1252 | "puddle", 1253 | "puffin", 1254 | "pulp", 1255 | "pumpkins", 1256 | "punch", 1257 | "puppy", 1258 | "purged", 1259 | "push", 1260 | "putty", 1261 | "puzzled", 1262 | "pylons", 1263 | "pyramid", 1264 | "python", 1265 | "queen", 1266 | "quick", 1267 | "quote", 1268 | "rabbits", 1269 | "racetrack", 1270 | "radar", 1271 | "rafts", 1272 | "rage", 1273 | "railway", 1274 | "raking", 1275 | "rally", 1276 | "ramped", 1277 | "randomly", 1278 | "rapid", 1279 | "rarest", 1280 | "rash", 1281 | "rated", 1282 | "ravine", 1283 | "rays", 1284 | "razor", 1285 | "react", 1286 | "rebel", 1287 | "recipe", 1288 | "reduce", 1289 | "reef", 1290 | "refer", 1291 | "regular", 1292 | "reheat", 1293 | "reinvest", 1294 | "rejoices", 1295 | "rekindle", 1296 | "relic", 1297 | "remedy", 1298 | "renting", 1299 | "reorder", 1300 | "repent", 1301 | "request", 1302 | "reruns", 1303 | "rest", 1304 | "return", 1305 | "reunion", 1306 | "revamp", 1307 | "rewind", 1308 | "rhino", 1309 | "rhythm", 1310 | "ribbon", 1311 | "richly", 1312 | "ridges", 1313 | "rift", 1314 | "rigid", 1315 | "rims", 1316 | "ringing", 1317 | "riots", 1318 | "ripped", 1319 | "rising", 1320 | "ritual", 1321 | "river", 1322 | "roared", 1323 | "robot", 1324 | "rockets", 1325 | "rodent", 1326 | "rogue", 1327 | "roles", 1328 | "romance", 1329 | "roomy", 1330 | "roped", 1331 | "roster", 1332 | "rotate", 1333 | "rounded", 1334 | "rover", 1335 | "rowboat", 1336 | "royal", 1337 | "ruby", 1338 | "rudely", 1339 | "ruffled", 1340 | "rugged", 1341 | "ruined", 1342 | "ruling", 1343 | "rumble", 1344 | "runway", 1345 | "rural", 1346 | "rustled", 1347 | "ruthless", 1348 | "sabotage", 1349 | "sack", 1350 | "sadness", 1351 | "safety", 1352 | "saga", 1353 | "sailor", 1354 | "sake", 1355 | "salads", 1356 | "sample", 1357 | "sanity", 1358 | "sapling", 1359 | "sarcasm", 1360 | "sash", 1361 | "satin", 1362 | "saucepan", 1363 | "saved", 1364 | "sawmill", 1365 | "saxophone", 1366 | "sayings", 1367 | "scamper", 1368 | "scenic", 1369 | "school", 1370 | "science", 1371 | "scoop", 1372 | "scrub", 1373 | "scuba", 1374 | "seasons", 1375 | "second", 1376 | "sedan", 1377 | "seeded", 1378 | "segments", 1379 | "seismic", 1380 | "selfish", 1381 | "semifinal", 1382 | "sensible", 1383 | "september", 1384 | "sequence", 1385 | "serving", 1386 | "session", 1387 | "setup", 1388 | "seventh", 1389 | "sewage", 1390 | "shackles", 1391 | "shelter", 1392 | "shipped", 1393 | "shocking", 1394 | "shrugged", 1395 | "shuffled", 1396 | "shyness", 1397 | "siblings", 1398 | "sickness", 1399 | "sidekick", 1400 | "sieve", 1401 | "sifting", 1402 | "sighting", 1403 | "silk", 1404 | "simplest", 1405 | "sincerely", 1406 | "sipped", 1407 | "siren", 1408 | "situated", 1409 | "sixteen", 1410 | "sizes", 1411 | "skater", 1412 | "skew", 1413 | "skirting", 1414 | "skulls", 1415 | "skydive", 1416 | "slackens", 1417 | "sleepless", 1418 | "slid", 1419 | "slower", 1420 | "slug", 1421 | "smash", 1422 | "smelting", 1423 | "smidgen", 1424 | "smog", 1425 | "smuggled", 1426 | "snake", 1427 | "sneeze", 1428 | "sniff", 1429 | "snout", 1430 | "snug", 1431 | "soapy", 1432 | "sober", 1433 | "soccer", 1434 | "soda", 1435 | "software", 1436 | "soggy", 1437 | "soil", 1438 | "solved", 1439 | "somewhere", 1440 | "sonic", 1441 | "soothe", 1442 | "soprano", 1443 | "sorry", 1444 | "southern", 1445 | "sovereign", 1446 | "sowed", 1447 | "soya", 1448 | "space", 1449 | "speedy", 1450 | "sphere", 1451 | "spiders", 1452 | "splendid", 1453 | "spout", 1454 | "sprig", 1455 | "spud", 1456 | "spying", 1457 | "square", 1458 | "stacking", 1459 | "stellar", 1460 | "stick", 1461 | "stockpile", 1462 | "strained", 1463 | "stunning", 1464 | "stylishly", 1465 | "subtly", 1466 | "succeed", 1467 | "suddenly", 1468 | "suede", 1469 | "suffice", 1470 | "sugar", 1471 | "suitcase", 1472 | "sulking", 1473 | "summon", 1474 | "sunken", 1475 | "superior", 1476 | "surfer", 1477 | "sushi", 1478 | "suture", 1479 | "swagger", 1480 | "swept", 1481 | "swiftly", 1482 | "sword", 1483 | "swung", 1484 | "syllabus", 1485 | "symptoms", 1486 | "syndrome", 1487 | "syringe", 1488 | "system", 1489 | "taboo", 1490 | "tacit", 1491 | "tadpoles", 1492 | "tagged", 1493 | "tail", 1494 | "taken", 1495 | "talent", 1496 | "tamper", 1497 | "tanks", 1498 | "tapestry", 1499 | "tarnished", 1500 | "tasked", 1501 | "tattoo", 1502 | "taunts", 1503 | "tavern", 1504 | "tawny", 1505 | "taxi", 1506 | "teardrop", 1507 | "technical", 1508 | "tedious", 1509 | "teeming", 1510 | "tell", 1511 | "template", 1512 | "tender", 1513 | "tepid", 1514 | "tequila", 1515 | "terminal", 1516 | "testing", 1517 | "tether", 1518 | "textbook", 1519 | "thaw", 1520 | "theatrics", 1521 | "thirsty", 1522 | "thorn", 1523 | "threaten", 1524 | "thumbs", 1525 | "thwart", 1526 | "ticket", 1527 | "tidy", 1528 | "tiers", 1529 | "tiger", 1530 | "tilt", 1531 | "timber", 1532 | "tinted", 1533 | "tipsy", 1534 | "tirade", 1535 | "tissue", 1536 | "titans", 1537 | "toaster", 1538 | "tobacco", 1539 | "today", 1540 | "toenail", 1541 | "toffee", 1542 | "together", 1543 | "toilet", 1544 | "token", 1545 | "tolerant", 1546 | "tomorrow", 1547 | "tonic", 1548 | "toolbox", 1549 | "topic", 1550 | "torch", 1551 | "tossed", 1552 | "total", 1553 | "touchy", 1554 | "towel", 1555 | "toxic", 1556 | "toyed", 1557 | "trash", 1558 | "trendy", 1559 | "tribal", 1560 | "trolling", 1561 | "truth", 1562 | "trying", 1563 | "tsunami", 1564 | "tubes", 1565 | "tucks", 1566 | "tudor", 1567 | "tuesday", 1568 | "tufts", 1569 | "tugs", 1570 | "tuition", 1571 | "tulips", 1572 | "tumbling", 1573 | "tunnel", 1574 | "turnip", 1575 | "tusks", 1576 | "tutor", 1577 | "tuxedo", 1578 | "twang", 1579 | "tweezers", 1580 | "twice", 1581 | "twofold", 1582 | "tycoon", 1583 | "typist", 1584 | "tyrant", 1585 | "ugly", 1586 | "ulcers", 1587 | "ultimate", 1588 | "umbrella", 1589 | "umpire", 1590 | "unafraid", 1591 | "unbending", 1592 | "uncle", 1593 | "under", 1594 | "uneven", 1595 | "unfit", 1596 | "ungainly", 1597 | "unhappy", 1598 | "union", 1599 | "unjustly", 1600 | "unknown", 1601 | "unlikely", 1602 | "unmask", 1603 | "unnoticed", 1604 | "unopened", 1605 | "unplugs", 1606 | "unquoted", 1607 | "unrest", 1608 | "unsafe", 1609 | "until", 1610 | "unusual", 1611 | "unveil", 1612 | "unwind", 1613 | "unzip", 1614 | "upbeat", 1615 | "upcoming", 1616 | "update", 1617 | "upgrade", 1618 | "uphill", 1619 | "upkeep", 1620 | "upload", 1621 | "upon", 1622 | "upper", 1623 | "upright", 1624 | "upstairs", 1625 | "uptight", 1626 | "upwards", 1627 | "urban", 1628 | "urchins", 1629 | "urgent", 1630 | "usage", 1631 | "useful", 1632 | "usher", 1633 | "using", 1634 | "usual", 1635 | "utensils", 1636 | "utility", 1637 | "utmost", 1638 | "utopia", 1639 | "uttered", 1640 | "vacation", 1641 | "vague", 1642 | "vain", 1643 | "value", 1644 | "vampire", 1645 | "vane", 1646 | "vapidly", 1647 | "vary", 1648 | "vastness", 1649 | "vats", 1650 | "vaults", 1651 | "vector", 1652 | "veered", 1653 | "vegan", 1654 | "vehicle", 1655 | "vein", 1656 | "velvet", 1657 | "venomous", 1658 | "verification", 1659 | "vessel", 1660 | "veteran", 1661 | "vexed", 1662 | "vials", 1663 | "vibrate", 1664 | "victim", 1665 | "video", 1666 | "viewpoint", 1667 | "vigilant", 1668 | "viking", 1669 | "village", 1670 | "vinegar", 1671 | "violin", 1672 | "vipers", 1673 | "virtual", 1674 | "visited", 1675 | "vitals", 1676 | "vivid", 1677 | "vixen", 1678 | "vocal", 1679 | "vogue", 1680 | "voice", 1681 | "volcano", 1682 | "vortex", 1683 | "voted", 1684 | "voucher", 1685 | "vowels", 1686 | "voyage", 1687 | "vulture", 1688 | "wade", 1689 | "waffle", 1690 | "wagtail", 1691 | "waist", 1692 | "waking", 1693 | "wallets", 1694 | "wanted", 1695 | "warped", 1696 | "washing", 1697 | "water", 1698 | "waveform", 1699 | "waxing", 1700 | "wayside", 1701 | "weavers", 1702 | "website", 1703 | "wedge", 1704 | "weekday", 1705 | "weird", 1706 | "welders", 1707 | "went", 1708 | "wept", 1709 | "were", 1710 | "western", 1711 | "wetsuit", 1712 | "whale", 1713 | "when", 1714 | "whipped", 1715 | "whole", 1716 | "wickets", 1717 | "width", 1718 | "wield", 1719 | "wife", 1720 | "wiggle", 1721 | "wildly", 1722 | "winter", 1723 | "wipeout", 1724 | "wiring", 1725 | "wise", 1726 | "withdrawn", 1727 | "wives", 1728 | "wizard", 1729 | "wobbly", 1730 | "woes", 1731 | "woken", 1732 | "wolf", 1733 | "womanly", 1734 | "wonders", 1735 | "woozy", 1736 | "worry", 1737 | "wounded", 1738 | "woven", 1739 | "wrap", 1740 | "wrist", 1741 | "wrong", 1742 | "yacht", 1743 | "yahoo", 1744 | "yanks", 1745 | "yard", 1746 | "yawning", 1747 | "yearbook", 1748 | "yellow", 1749 | "yesterday", 1750 | "yeti", 1751 | "yields", 1752 | "yodel", 1753 | "yoga", 1754 | "younger", 1755 | "yoyo", 1756 | "zapped", 1757 | "zeal", 1758 | "zebra", 1759 | "zero", 1760 | "zesty", 1761 | "zigzags", 1762 | "zinger", 1763 | "zippers", 1764 | "zodiac", 1765 | "zombie", 1766 | "zones", 1767 | "zoom", 1768 | } 1769 | --------------------------------------------------------------------------------