summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjaseg <git@jaseg.net>2018-12-01 14:02:37 +0900
committerjaseg <git@jaseg.net>2018-12-01 14:02:37 +0900
commita818c94fc4474afcdebdf6eea80608c130830db1 (patch)
treefc3d512a2476992c7139a89b06a31773072a1147
parente613f1b9a2e8006527aec57adebd28f01a6b2390 (diff)
downloadsecure-hid-a818c94fc4474afcdebdf6eea80608c130830db1.tar.gz
secure-hid-a818c94fc4474afcdebdf6eea80608c130830db1.tar.bz2
secure-hid-a818c94fc4474afcdebdf6eea80608c130830db1.zip
Replace word lists by PGP word lists
from https://en.wikipedia.org/wiki/PGP_word_list
-rwxr-xr-xhexnoise.py138
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/adjectives.c262
-rw-r--r--src/demo.c4
-rw-r--r--src/nouns.c262
-rw-r--r--src/pgp_wordlist257
-rw-r--r--src/words.c521
-rw-r--r--src/words.h4
8 files changed, 852 insertions, 599 deletions
diff --git a/hexnoise.py b/hexnoise.py
index 8ae6c4b..c7acd65 100755
--- a/hexnoise.py
+++ b/hexnoise.py
@@ -126,75 +126,75 @@ class Magic:
nfirst = ", ".join(elems[:-1])
return f'{nfirst} and {elems[-1]}'
- ADJECTIVES = '''
- wrathful worthy weird warm volatile veiled vacuous useless
- upset unsoiled unsightly unpronounceable unfriendly unfree unfit unfaithful
- unchaste unbroken unbound unblessed unbefitting unaltered unabused unable
- ugly tongued thorny thirsty thick terminal ten-sided teeming
- tangerine taken substantial stupefying stringy strange stillborn sticky
- stagnant spongy sour soul-destroying smoldering smitten slain six-sided
- shifting shadowy severed seven-sided serene salty rust-red royal
- rotten riddled resentful regrettable reeking rare rank rancid
- quiescent putrid putrid putrescent prehistoric predatory predaceous porous
- poisonous pierced phlegmatic petrifying pessimal pathetic odorless oddish
- obsessed obscene numb nine-sided nasty mysterious mute musky
- morose moribund moldy miasmic material many-lobed malodorous malign
- maimed luminescent low-cut lousy live limp lifeless leering
- leaky layered latent lackluster jagged irregular iridescent intangible
- infinite inept incomprehensible in-between improper idle hunted hideous
- heavy hairy guilty grotesque grey greedy gory gorgeous
- gooey golden-brown golden ghastly frostbitten fresh-cut freakish frantic
- fossilized formless formidable floccose five-lobed firstborn filthy fickle
- fetid fertile fearful fatal familiar fallen fallacious faint
- faceless extinct esoteric errant emergent elastic eight-sided eerie
- ebon dysphoric dying dumb dull-purple dull dull dull
- dormant doomed disfigured dirty defenseless deep-pink deep deconsecrated
- deathlike deadly dead dark-blue dark curly curious cured
- cunning crystalline cryptic crying crumbly crimson crested creepy
- crazy corrupt corporeal contemptible contained concrete cloudy chopped
- chained caustic catholic cathartic captive cancerous cabalistic burnt
- buoyant bronze-red bronze broken bright-red breathless bound bound
- bottomless bony bodiless blue-lilac blue bloody bloodthirsty bloodsucking
- bloodstained bloodcurdling blonde blistered blank bitter bilgy bewitched
- befouled beardless bastardly barbed baleful balding awkward awful
- atrocious arcane appalling antic anonymous angry ample ambiguous
- amber-green amber aghast activated acidic abused abstruse abject
- '''.split()
-
- NOUNS = '''
- yolk writing wrath wound worm wings whistle watchdog
- waste vomit vermin variation underachievement tusk troll trick
- transplant transgression tooth tongue tickle tick thorn thistle
- thing terror tentacle tease surrender surge sucker substance
- storm stone stew stalk squid sprout sponge spill
- spider sphere spectacle speck spawn soul solution snout
- snake smell sloth slime slice sleeper slave sinew
- shell shape seizure seed schism scam scale sainthood
- root robe roach rinse remains relay rejuvenation realization
- reaction ransom pupa pride prey predator potion pornography
- polyp plum pleasure pitch pigeon phenomenon pest periwinkle
- percolation parasite pair oyster orphan orgasm organism orchid
- object nail mushroom murder mucus movement mother mold
- mist mildew metal mesh meddling mayhem masterpiece masonry
- mask manhood maggot lust loop living_thing liquor liquid
- lining laceration knife kitten kiss jumper jest instrument
- injustice injury influence indulgence incursion impulse imago hound
- horn hook hoof heirloom heart hawk hare hair
- gulp guardian grass goat gnat gluttony glowworm gasp
- game fusion fungus frustration frog foul foot food
- fog foal fluke fluff flower flicker flea flattery
- flask flare firefly finger filtration female feeder feather
- fart fang failure face fabrication extract exodus evil
- envy enema embryo egress echo eater ear dwarf
- dust drop draft domestication distortion dew depravity deity
- death daughter dash dagger culture crutch crow critter
- creeper creation crab corruption cocoon claw chip child
- cell catch carving carrot carnival cancer butterfly burn
- buildup brush brew bottle boot book bone blunder
- blot blood blink bite bird benthos beak basket
- bark ball baby axolotl ashes artifact arson armor
- apparition antenna alms alienation advent adornment abomination abandonment
- '''.split()
+ EVEN = '''
+ aardvark absurd accrue acme adrift adult afflict ahead
+ aimless Algol allow alone ammo ancient apple artist
+ assume Athens atlas Aztec baboon backfield backward banjo
+ beaming bedlamp beehive beeswax befriend Belfast berserk billiard
+ bison blackjack blockade blowtorch bluebird bombast bookshelf brackish
+ breadline breakup brickyard briefcase Burbank button buzzard cement
+ chairlift chatter checkup chisel choking chopper Christmas clamshell
+ classic classroom cleanup clockwork cobra commence concert cowbell
+ crackdown cranky crowfoot crucial crumpled crusade cubic dashboard
+ deadbolt deckhand dogsled dragnet drainage dreadful drifter dropper
+ drumbeat drunken Dupont dwelling eating edict egghead eightball
+ endorse endow enlist erase escape exceed eyeglass eyetooth
+ facial fallout flagpole flatfoot flytrap fracture framework freedom
+ frighten gazelle Geiger glitter glucose goggles goldfish gremlin
+ guidance hamlet highchair hockey indoors indulge inverse involve
+ island jawbone keyboard kickoff kiwi klaxon locale lockup
+ merit minnow miser Mohawk mural music necklace Neptune
+ newborn nightbird Oakland obtuse offload optic orca payday
+ peachy pheasant physique playhouse Pluto preclude prefer preshrunk
+ printer prowler pupil puppy python quadrant quiver quota
+ ragtime ratchet rebirth reform regain reindeer rematch repay
+ retouch revenge reward rhythm ribcage ringbolt robust rocker
+ ruffled sailboat sawdust scallion scenic scorecard Scotland seabird
+ select sentence shadow shamrock showgirl skullcap skydive slingshot
+ slowdown snapline snapshot snowcap snowslide solo southward soybean
+ spaniel spearhead spellbind spheroid spigot spindle spyglass stagehand
+ stagnate stairway standard stapler steamship sterling stockman stopwatch
+ stormy sugar surmount suspense sweatband swelter tactics talon
+ tapeworm tempest tiger tissue tonic topmost tracker transit
+ trauma treadmill Trojan trouble tumor tunnel tycoon uncut
+ unearth unwind uproot upset upshot vapor village virus
+ Vulcan waffle wallet watchword wayside willow woodlark Zulu
+ '''.split()
+
+ ODD = '''
+ adroitness adviser aftermath aggregate alkali almighty amulet amusement
+ antenna applicant Apollo armistice article asteroid Atlantic atmosphere
+ autopsy Babylon backwater barbecue belowground bifocals bodyguard bookseller
+ borderline bottomless Bradbury bravado Brazilian breakaway Burlington businessman
+ butterfat Camelot candidate cannonball Capricorn caravan caretaker celebrate
+ cellulose certify chambermaid Cherokee Chicago clergyman coherence combustion
+ commando company component concurrent confidence conformist congregate consensus
+ consulting corporate corrosion councilman crossover crucifix cumbersome customer
+ Dakota decadence December decimal designing detector detergent determine
+ dictator dinosaur direction disable disbelief disruptive distortion document
+ embezzle enchanting enrollment enterprise equation equipment escapade Eskimo
+ everyday examine existence exodus fascinate filament finicky forever
+ fortitude frequency gadgetry Galveston getaway glossary gossamer graduate
+ gravity guitarist hamburger Hamilton handiwork hazardous headwaters hemisphere
+ hesitate hideaway holiness hurricane hydraulic impartial impetus inception
+ indigo inertia infancy inferno informant insincere insurgent integrate
+ intention inventive Istanbul Jamaica Jupiter leprosy letterhead liberty
+ maritime matchmaker maverick Medusa megaton microscope microwave midsummer
+ millionaire miracle misnomer molasses molecule Montana monument mosquito
+ narrative nebula newsletter Norwegian October Ohio onlooker opulent
+ Orlando outfielder Pacific pandemic Pandora paperweight paragon paragraph
+ paramount passenger pedigree Pegasus penetrate perceptive performance pharmacy
+ phonetic photograph pioneer pocketful politeness positive potato processor
+ provincial proximate puberty publisher pyramid quantity racketeer rebellion
+ recipe recover repellent replica reproduce resistor responsive retraction
+ retrieval retrospect revenue revival revolver sandalwood sardonic Saturday
+ savagery scavenger sensation sociable souvenir specialist speculate stethoscope
+ stupendous supportive surrender suspicious sympathy tambourine telephone therapist
+ tobacco tolerance tomorrow torpedo tradition travesty trombonist truncated
+ typewriter ultimate undaunted underfoot unicorn unify universe unravel
+ upcoming vacancy vagabond vertigo Virginia visitor vocalist voyager
+ warranty Waterloo whimsical Wichita Wilmington Wyoming yesteryear Yucatan
+ '''.split()
class NoiseEngine:
def __init__(self, host_key, packetizer, debug=False):
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9084cbb..f2ae83f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,8 +24,7 @@ add_library (usbhost
cobs.c
noise.c
packet_interface.c
- adjectives.c
- nouns.c
+ words.c
hid_keycodes.c
)
diff --git a/src/adjectives.c b/src/adjectives.c
deleted file mode 100644
index e3bc3d0..0000000
--- a/src/adjectives.c
+++ /dev/null
@@ -1,262 +0,0 @@
-
-#include "words.h"
-
-const char * const adjectives[256] = {
- "wrathful", /* 0 */
- "worthy", /* 1 */
- "weird", /* 2 */
- "warm", /* 3 */
- "volatile", /* 4 */
- "veiled", /* 5 */
- "vacuous", /* 6 */
- "useless", /* 7 */
- "upset", /* 8 */
- "unsoiled", /* 9 */
- "unsightly", /* 10 */
- "unpronounceable", /* 11 */
- "unfriendly", /* 12 */
- "unfree", /* 13 */
- "unfit", /* 14 */
- "unfaithful", /* 15 */
- "unchaste", /* 16 */
- "unbroken", /* 17 */
- "unbound", /* 18 */
- "unblessed", /* 19 */
- "unbefitting", /* 20 */
- "unaltered", /* 21 */
- "unabused", /* 22 */
- "unable", /* 23 */
- "ugly", /* 24 */
- "tongued", /* 25 */
- "thorny", /* 26 */
- "thirsty", /* 27 */
- "thick", /* 28 */
- "terminal", /* 29 */
- "ten-sided", /* 30 */
- "teeming", /* 31 */
- "tangerine", /* 32 */
- "taken", /* 33 */
- "substantial", /* 34 */
- "stupefying", /* 35 */
- "stringy", /* 36 */
- "strange", /* 37 */
- "stillborn", /* 38 */
- "sticky", /* 39 */
- "stagnant", /* 40 */
- "spongy", /* 41 */
- "sour", /* 42 */
- "soul-destroying", /* 43 */
- "smoldering", /* 44 */
- "smitten", /* 45 */
- "slain", /* 46 */
- "six-sided", /* 47 */
- "shifting", /* 48 */
- "shadowy", /* 49 */
- "severed", /* 50 */
- "seven-sided", /* 51 */
- "serene", /* 52 */
- "salty", /* 53 */
- "rust-red", /* 54 */
- "royal", /* 55 */
- "rotten", /* 56 */
- "riddled", /* 57 */
- "resentful", /* 58 */
- "regrettable", /* 59 */
- "reeking", /* 60 */
- "rare", /* 61 */
- "rank", /* 62 */
- "rancid", /* 63 */
- "quiescent", /* 64 */
- "putrid", /* 65 */
- "putrid", /* 66 */
- "putrescent", /* 67 */
- "prehistoric", /* 68 */
- "predatory", /* 69 */
- "predaceous", /* 70 */
- "porous", /* 71 */
- "poisonous", /* 72 */
- "pierced", /* 73 */
- "phlegmatic", /* 74 */
- "petrifying", /* 75 */
- "pessimal", /* 76 */
- "pathetic", /* 77 */
- "odorless", /* 78 */
- "oddish", /* 79 */
- "obsessed", /* 80 */
- "obscene", /* 81 */
- "numb", /* 82 */
- "nine-sided", /* 83 */
- "nasty", /* 84 */
- "mysterious", /* 85 */
- "mute", /* 86 */
- "musky", /* 87 */
- "morose", /* 88 */
- "moribund", /* 89 */
- "moldy", /* 90 */
- "miasmic", /* 91 */
- "material", /* 92 */
- "many-lobed", /* 93 */
- "malodorous", /* 94 */
- "malign", /* 95 */
- "maimed", /* 96 */
- "luminescent", /* 97 */
- "low-cut", /* 98 */
- "lousy", /* 99 */
- "live", /* 100 */
- "limp", /* 101 */
- "lifeless", /* 102 */
- "leering", /* 103 */
- "leaky", /* 104 */
- "layered", /* 105 */
- "latent", /* 106 */
- "lackluster", /* 107 */
- "jagged", /* 108 */
- "irregular", /* 109 */
- "iridescent", /* 110 */
- "intangible", /* 111 */
- "infinite", /* 112 */
- "inept", /* 113 */
- "incomprehensible", /* 114 */
- "in-between", /* 115 */
- "improper", /* 116 */
- "idle", /* 117 */
- "hunted", /* 118 */
- "hideous", /* 119 */
- "heavy", /* 120 */
- "hairy", /* 121 */
- "guilty", /* 122 */
- "grotesque", /* 123 */
- "grey", /* 124 */
- "greedy", /* 125 */
- "gory", /* 126 */
- "gorgeous", /* 127 */
- "gooey", /* 128 */
- "golden-brown", /* 129 */
- "golden", /* 130 */
- "ghastly", /* 131 */
- "frostbitten", /* 132 */
- "fresh-cut", /* 133 */
- "freakish", /* 134 */
- "frantic", /* 135 */
- "fossilized", /* 136 */
- "formless", /* 137 */
- "formidable", /* 138 */
- "floccose", /* 139 */
- "five-lobed", /* 140 */
- "firstborn", /* 141 */
- "filthy", /* 142 */
- "fickle", /* 143 */
- "fetid", /* 144 */
- "fertile", /* 145 */
- "fearful", /* 146 */
- "fatal", /* 147 */
- "familiar", /* 148 */
- "fallen", /* 149 */
- "fallacious", /* 150 */
- "faint", /* 151 */
- "faceless", /* 152 */
- "extinct", /* 153 */
- "esoteric", /* 154 */
- "errant", /* 155 */
- "emergent", /* 156 */
- "elastic", /* 157 */
- "eight-sided", /* 158 */
- "eerie", /* 159 */
- "ebon", /* 160 */
- "dysphoric", /* 161 */
- "dying", /* 162 */
- "dumb", /* 163 */
- "dull-purple", /* 164 */
- "dull", /* 165 */
- "dull", /* 166 */
- "dull", /* 167 */
- "dormant", /* 168 */
- "doomed", /* 169 */
- "disfigured", /* 170 */
- "dirty", /* 171 */
- "defenseless", /* 172 */
- "deep-pink", /* 173 */
- "deep", /* 174 */
- "deconsecrated", /* 175 */
- "deathlike", /* 176 */
- "deadly", /* 177 */
- "dead", /* 178 */
- "dark-blue", /* 179 */
- "dark", /* 180 */
- "curly", /* 181 */
- "curious", /* 182 */
- "cured", /* 183 */
- "cunning", /* 184 */
- "crystalline", /* 185 */
- "cryptic", /* 186 */
- "crying", /* 187 */
- "crumbly", /* 188 */
- "crimson", /* 189 */
- "crested", /* 190 */
- "creepy", /* 191 */
- "crazy", /* 192 */
- "corrupt", /* 193 */
- "corporeal", /* 194 */
- "contemptible", /* 195 */
- "contained", /* 196 */
- "concrete", /* 197 */
- "cloudy", /* 198 */
- "chopped", /* 199 */
- "chained", /* 200 */
- "caustic", /* 201 */
- "catholic", /* 202 */
- "cathartic", /* 203 */
- "captive", /* 204 */
- "cancerous", /* 205 */
- "cabalistic", /* 206 */
- "burnt", /* 207 */
- "buoyant", /* 208 */
- "bronze-red", /* 209 */
- "bronze", /* 210 */
- "broken", /* 211 */
- "bright-red", /* 212 */
- "breathless", /* 213 */
- "bound", /* 214 */
- "bound", /* 215 */
- "bottomless", /* 216 */
- "bony", /* 217 */
- "bodiless", /* 218 */
- "blue-lilac", /* 219 */
- "blue", /* 220 */
- "bloody", /* 221 */
- "bloodthirsty", /* 222 */
- "bloodsucking", /* 223 */
- "bloodstained", /* 224 */
- "bloodcurdling", /* 225 */
- "blonde", /* 226 */
- "blistered", /* 227 */
- "blank", /* 228 */
- "bitter", /* 229 */
- "bilgy", /* 230 */
- "bewitched", /* 231 */
- "befouled", /* 232 */
- "beardless", /* 233 */
- "bastardly", /* 234 */
- "barbed", /* 235 */
- "baleful", /* 236 */
- "balding", /* 237 */
- "awkward", /* 238 */
- "awful", /* 239 */
- "atrocious", /* 240 */
- "arcane", /* 241 */
- "appalling", /* 242 */
- "antic", /* 243 */
- "anonymous", /* 244 */
- "angry", /* 245 */
- "ample", /* 246 */
- "ambiguous", /* 247 */
- "amber-green", /* 248 */
- "amber", /* 249 */
- "aghast", /* 250 */
- "activated", /* 251 */
- "acidic", /* 252 */
- "abused", /* 253 */
- "abstruse", /* 254 */
- "abject", /* 255 */
-};
-
diff --git a/src/demo.c b/src/demo.c
index 8329c62..b47dc71 100644
--- a/src/demo.c
+++ b/src/demo.c
@@ -243,8 +243,8 @@ int pairing_check(struct NoiseState *st, const char *buf) {
if (strncasecmp(p, "and", plen)) { /* ignore "and" */
int num = -1;
for (int i=0; i<256; i++) {
- if ((!strncasecmp(p, adjectives[i], plen) && plen == strlen(adjectives[i]))
- || (!strncasecmp(p, nouns[i], plen) && plen == strlen(nouns[i] ))) {
+ if ((!strncasecmp(p, even[i], plen) && plen == strlen(even[i]))
+ || (!strncasecmp(p, odd[i], plen) && plen == strlen(odd[i] ))) {
//LOG_PRINTF(" idx=%02d h=%02x i=%02x adj=%s n=%s plen=%d s=%s\n", idx, st->handshake_hash[idx], i, adjectives[i], nouns[i], plen, p);
num = i;
break;
diff --git a/src/nouns.c b/src/nouns.c
deleted file mode 100644
index 65cae90..0000000
--- a/src/nouns.c
+++ /dev/null
@@ -1,262 +0,0 @@
-
-#include "words.h"
-
-const char * const nouns[256] = {
- "yolk", /* 0 */
- "writing", /* 1 */
- "wrath", /* 2 */
- "wound", /* 3 */
- "worm", /* 4 */
- "wings", /* 5 */
- "whistle", /* 6 */
- "watchdog", /* 7 */
- "waste", /* 8 */
- "vomit", /* 9 */
- "vermin", /* 10 */
- "variation", /* 11 */
- "underachievement", /* 12 */
- "tusk", /* 13 */
- "troll", /* 14 */
- "trick", /* 15 */
- "transplant", /* 16 */
- "transgression", /* 17 */
- "tooth", /* 18 */
- "tongue", /* 19 */
- "tickle", /* 20 */
- "tick", /* 21 */
- "thorn", /* 22 */
- "thistle", /* 23 */
- "thing", /* 24 */
- "terror", /* 25 */
- "tentacle", /* 26 */
- "tease", /* 27 */
- "surrender", /* 28 */
- "surge", /* 29 */
- "sucker", /* 30 */
- "substance", /* 31 */
- "storm", /* 32 */
- "stone", /* 33 */
- "stew", /* 34 */
- "stalk", /* 35 */
- "squid", /* 36 */
- "sprout", /* 37 */
- "sponge", /* 38 */
- "spill", /* 39 */
- "spider", /* 40 */
- "sphere", /* 41 */
- "spectacle", /* 42 */
- "speck", /* 43 */
- "spawn", /* 44 */
- "soul", /* 45 */
- "solution", /* 46 */
- "snout", /* 47 */
- "snake", /* 48 */
- "smell", /* 49 */
- "sloth", /* 50 */
- "slime", /* 51 */
- "slice", /* 52 */
- "sleeper", /* 53 */
- "slave", /* 54 */
- "sinew", /* 55 */
- "shell", /* 56 */
- "shape", /* 57 */
- "seizure", /* 58 */
- "seed", /* 59 */
- "schism", /* 60 */
- "scam", /* 61 */
- "scale", /* 62 */
- "sainthood", /* 63 */
- "root", /* 64 */
- "robe", /* 65 */
- "roach", /* 66 */
- "rinse", /* 67 */
- "remains", /* 68 */
- "relay", /* 69 */
- "rejuvenation", /* 70 */
- "realization", /* 71 */
- "reaction", /* 72 */
- "ransom", /* 73 */
- "pupa", /* 74 */
- "pride", /* 75 */
- "prey", /* 76 */
- "predator", /* 77 */
- "potion", /* 78 */
- "pornography", /* 79 */
- "polyp", /* 80 */
- "plum", /* 81 */
- "pleasure", /* 82 */
- "pitch", /* 83 */
- "pigeon", /* 84 */
- "phenomenon", /* 85 */
- "pest", /* 86 */
- "periwinkle", /* 87 */
- "percolation", /* 88 */
- "parasite", /* 89 */
- "pair", /* 90 */
- "oyster", /* 91 */
- "orphan", /* 92 */
- "orgasm", /* 93 */
- "organism", /* 94 */
- "orchid", /* 95 */
- "object", /* 96 */
- "nail", /* 97 */
- "mushroom", /* 98 */
- "murder", /* 99 */
- "mucus", /* 100 */
- "movement", /* 101 */
- "mother", /* 102 */
- "mold", /* 103 */
- "mist", /* 104 */
- "mildew", /* 105 */
- "metal", /* 106 */
- "mesh", /* 107 */
- "meddling", /* 108 */
- "mayhem", /* 109 */
- "masterpiece", /* 110 */
- "masonry", /* 111 */
- "mask", /* 112 */
- "manhood", /* 113 */
- "maggot", /* 114 */
- "lust", /* 115 */
- "loop", /* 116 */
- "living_thing", /* 117 */
- "liquor", /* 118 */
- "liquid", /* 119 */
- "lining", /* 120 */
- "laceration", /* 121 */
- "knife", /* 122 */
- "kitten", /* 123 */
- "kiss", /* 124 */
- "jumper", /* 125 */
- "jest", /* 126 */
- "instrument", /* 127 */
- "injustice", /* 128 */
- "injury", /* 129 */
- "influence", /* 130 */
- "indulgence", /* 131 */
- "incursion", /* 132 */
- "impulse", /* 133 */
- "imago", /* 134 */
- "hound", /* 135 */
- "horn", /* 136 */
- "hook", /* 137 */
- "hoof", /* 138 */
- "heirloom", /* 139 */
- "heart", /* 140 */
- "hawk", /* 141 */
- "hare", /* 142 */
- "hair", /* 143 */
- "gulp", /* 144 */
- "guardian", /* 145 */
- "grass", /* 146 */
- "goat", /* 147 */
- "gnat", /* 148 */
- "gluttony", /* 149 */
- "glowworm", /* 150 */
- "gasp", /* 151 */
- "game", /* 152 */
- "fusion", /* 153 */
- "fungus", /* 154 */
- "frustration", /* 155 */
- "frog", /* 156 */
- "foul", /* 157 */
- "foot", /* 158 */
- "food", /* 159 */
- "fog", /* 160 */
- "foal", /* 161 */
- "fluke", /* 162 */
- "fluff", /* 163 */
- "flower", /* 164 */
- "flicker", /* 165 */
- "flea", /* 166 */
- "flattery", /* 167 */
- "flask", /* 168 */
- "flare", /* 169 */
- "firefly", /* 170 */
- "finger", /* 171 */
- "filtration", /* 172 */
- "female", /* 173 */
- "feeder", /* 174 */
- "feather", /* 175 */
- "fart", /* 176 */
- "fang", /* 177 */
- "failure", /* 178 */
- "face", /* 179 */
- "fabrication", /* 180 */
- "extract", /* 181 */
- "exodus", /* 182 */
- "evil", /* 183 */
- "envy", /* 184 */
- "enema", /* 185 */
- "embryo", /* 186 */
- "egress", /* 187 */
- "echo", /* 188 */
- "eater", /* 189 */
- "ear", /* 190 */
- "dwarf", /* 191 */
- "dust", /* 192 */
- "drop", /* 193 */
- "draft", /* 194 */
- "domestication", /* 195 */
- "distortion", /* 196 */
- "dew", /* 197 */
- "depravity", /* 198 */
- "deity", /* 199 */
- "death", /* 200 */
- "daughter", /* 201 */
- "dash", /* 202 */
- "dagger", /* 203 */
- "culture", /* 204 */
- "crutch", /* 205 */
- "crow", /* 206 */
- "critter", /* 207 */
- "creeper", /* 208 */
- "creation", /* 209 */
- "crab", /* 210 */
- "corruption", /* 211 */
- "cocoon", /* 212 */
- "claw", /* 213 */
- "chip", /* 214 */
- "child", /* 215 */
- "cell", /* 216 */
- "catch", /* 217 */
- "carving", /* 218 */
- "carrot", /* 219 */
- "carnival", /* 220 */
- "cancer", /* 221 */
- "butterfly", /* 222 */
- "burn", /* 223 */
- "buildup", /* 224 */
- "brush", /* 225 */
- "brew", /* 226 */
- "bottle", /* 227 */
- "boot", /* 228 */
- "book", /* 229 */
- "bone", /* 230 */
- "blunder", /* 231 */
- "blot", /* 232 */
- "blood", /* 233 */
- "blink", /* 234 */
- "bite", /* 235 */
- "bird", /* 236 */
- "benthos", /* 237 */
- "beak", /* 238 */
- "basket", /* 239 */
- "bark", /* 240 */
- "ball", /* 241 */
- "baby", /* 242 */
- "axolotl", /* 243 */
- "ashes", /* 244 */
- "artifact", /* 245 */
- "arson", /* 246 */
- "armor", /* 247 */
- "apparition", /* 248 */
- "antenna", /* 249 */
- "alms", /* 250 */
- "alienation", /* 251 */
- "advent", /* 252 */
- "adornment", /* 253 */
- "abomination", /* 254 */
- "abandonment", /* 255 */
-};
-
diff --git a/src/pgp_wordlist b/src/pgp_wordlist
new file mode 100644
index 0000000..fcc3508
--- /dev/null
+++ b/src/pgp_wordlist
@@ -0,0 +1,257 @@
+Hex Even Word Odd Word
+00 aardvark adroitness
+01 absurd adviser
+02 accrue aftermath
+03 acme aggregate
+04 adrift alkali
+05 adult almighty
+06 afflict amulet
+07 ahead amusement
+08 aimless antenna
+09 Algol applicant
+0A allow Apollo
+0B alone armistice
+0C ammo article
+0D ancient asteroid
+0E apple Atlantic
+0F artist atmosphere
+10 assume autopsy
+11 Athens Babylon
+12 atlas backwater
+13 Aztec barbecue
+14 baboon belowground
+15 backfield bifocals
+16 backward bodyguard
+17 banjo bookseller
+18 beaming borderline
+19 bedlamp bottomless
+1A beehive Bradbury
+1B beeswax bravado
+1C befriend Brazilian
+1D Belfast breakaway
+1E berserk Burlington
+1F billiard businessman
+20 bison butterfat
+21 blackjack Camelot
+22 blockade candidate
+23 blowtorch cannonball
+24 bluebird Capricorn
+25 bombast caravan
+26 bookshelf caretaker
+27 brackish celebrate
+28 breadline cellulose
+29 breakup certify
+2A brickyard chambermaid
+2B briefcase Cherokee
+2C Burbank Chicago
+2D button clergyman
+2E buzzard coherence
+2F cement combustion
+30 chairlift commando
+31 chatter company
+32 checkup component
+33 chisel concurrent
+34 choking confidence
+35 chopper conformist
+36 Christmas congregate
+37 clamshell consensus
+38 classic consulting
+39 classroom corporate
+3A cleanup corrosion
+3B clockwork councilman
+3C cobra crossover
+3D commence crucifix
+3E concert cumbersome
+3F cowbell customer
+40 crackdown Dakota
+41 cranky decadence
+42 crowfoot December
+43 crucial decimal
+44 crumpled designing
+45 crusade detector
+46 cubic detergent
+47 dashboard determine
+48 deadbolt dictator
+49 deckhand dinosaur
+4A dogsled direction
+4B dragnet disable
+4C drainage disbelief
+4D dreadful disruptive
+4E drifter distortion
+4F dropper document
+50 drumbeat embezzle
+51 drunken enchanting
+52 Dupont enrollment
+53 dwelling enterprise
+54 eating equation
+55 edict equipment
+56 egghead escapade
+57 eightball Eskimo
+58 endorse everyday
+59 endow examine
+5A enlist existence
+5B erase exodus
+5C escape fascinate
+5D exceed filament
+5E eyeglass finicky
+5F eyetooth forever
+60 facial fortitude
+61 fallout frequency
+62 flagpole gadgetry
+63 flatfoot Galveston
+64 flytrap getaway
+65 fracture glossary
+66 framework gossamer
+67 freedom graduate
+68 frighten gravity
+69 gazelle guitarist
+6A Geiger hamburger
+6B glitter Hamilton
+6C glucose handiwork
+6D goggles hazardous
+6E goldfish headwaters
+6F gremlin hemisphere
+70 guidance hesitate
+71 hamlet hideaway
+72 highchair holiness
+73 hockey hurricane
+74 indoors hydraulic
+75 indulge impartial
+76 inverse impetus
+77 involve inception
+78 island indigo
+79 jawbone inertia
+7A keyboard infancy
+7B kickoff inferno
+7C kiwi informant
+7D klaxon insincere
+7E locale insurgent
+7F lockup integrate
+80 merit intention
+81 minnow inventive
+82 miser Istanbul
+83 Mohawk Jamaica
+84 mural Jupiter
+85 music leprosy
+86 necklace letterhead
+87 Neptune liberty
+88 newborn maritime
+89 nightbird matchmaker
+8A Oakland maverick
+8B obtuse Medusa
+8C offload megaton
+8D optic microscope
+8E orca microwave
+8F payday midsummer
+90 peachy millionaire
+91 pheasant miracle
+92 physique misnomer
+93 playhouse molasses
+94 Pluto molecule
+95 preclude Montana
+96 prefer monument
+97 preshrunk mosquito
+98 printer narrative
+99 prowler nebula
+9A pupil newsletter
+9B puppy Norwegian
+9C python October
+9D quadrant Ohio
+9E quiver onlooker
+9F quota opulent
+A0 ragtime Orlando
+A1 ratchet outfielder
+A2 rebirth Pacific
+A3 reform pandemic
+A4 regain Pandora
+A5 reindeer paperweight
+A6 rematch paragon
+A7 repay paragraph
+A8 retouch paramount
+A9 revenge passenger
+AA reward pedigree
+AB rhythm Pegasus
+AC ribcage penetrate
+AD ringbolt perceptive
+AE robust performance
+AF rocker pharmacy
+B0 ruffled phonetic
+B1 sailboat photograph
+B2 sawdust pioneer
+B3 scallion pocketful
+B4 scenic politeness
+B5 scorecard positive
+B6 Scotland potato
+B7 seabird processor
+B8 select provincial
+B9 sentence proximate
+BA shadow puberty
+BB shamrock publisher
+BC showgirl pyramid
+BD skullcap quantity
+BE skydive racketeer
+BF slingshot rebellion
+C0 slowdown recipe
+C1 snapline recover
+C2 snapshot repellent
+C3 snowcap replica
+C4 snowslide reproduce
+C5 solo resistor
+C6 southward responsive
+C7 soybean retraction
+C8 spaniel retrieval
+C9 spearhead retrospect
+CA spellbind revenue
+CB spheroid revival
+CC spigot revolver
+CD spindle sandalwood
+CE spyglass sardonic
+CF stagehand Saturday
+D0 stagnate savagery
+D1 stairway scavenger
+D2 standard sensation
+D3 stapler sociable
+D4 steamship souvenir
+D5 sterling specialist
+D6 stockman speculate
+D7 stopwatch stethoscope
+D8 stormy stupendous
+D9 sugar supportive
+DA surmount surrender
+DB suspense suspicious
+DC sweatband sympathy
+DD swelter tambourine
+DE tactics telephone
+DF talon therapist
+E0 tapeworm tobacco
+E1 tempest tolerance
+E2 tiger tomorrow
+E3 tissue torpedo
+E4 tonic tradition
+E5 topmost travesty
+E6 tracker trombonist
+E7 transit truncated
+E8 trauma typewriter
+E9 treadmill ultimate
+EA Trojan undaunted
+EB trouble underfoot
+EC tumor unicorn
+ED tunnel unify
+EE tycoon universe
+EF uncut unravel
+F0 unearth upcoming
+F1 unwind vacancy
+F2 uproot vagabond
+F3 upset vertigo
+F4 upshot Virginia
+F5 vapor visitor
+F6 village vocalist
+F7 virus voyager
+F8 Vulcan warranty
+F9 waffle Waterloo
+FA wallet whimsical
+FB watchword Wichita
+FC wayside Wilmington
+FD willow Wyoming
+FE woodlark yesteryear
+FF Zulu Yucatan
diff --git a/src/words.c b/src/words.c
new file mode 100644
index 0000000..387d23b
--- /dev/null
+++ b/src/words.c
@@ -0,0 +1,521 @@
+
+#include "words.h"
+
+const char * const even[256] = {
+ "aardvark", /* 00 */
+ "absurd", /* 01 */
+ "accrue", /* 02 */
+ "acme", /* 03 */
+ "adrift", /* 04 */
+ "adult", /* 05 */
+ "afflict", /* 06 */
+ "ahead", /* 07 */
+ "aimless", /* 08 */
+ "Algol", /* 09 */
+ "allow", /* 0A */
+ "alone", /* 0B */
+ "ammo", /* 0C */
+ "ancient", /* 0D */
+ "apple", /* 0E */
+ "artist", /* 0F */
+ "assume", /* 10 */
+ "Athens", /* 11 */
+ "atlas", /* 12 */
+ "Aztec", /* 13 */
+ "baboon", /* 14 */
+ "backfield", /* 15 */
+ "backward", /* 16 */
+ "banjo", /* 17 */
+ "beaming", /* 18 */
+ "bedlamp", /* 19 */
+ "beehive", /* 1A */
+ "beeswax", /* 1B */
+ "befriend", /* 1C */
+ "Belfast", /* 1D */
+ "berserk", /* 1E */
+ "billiard", /* 1F */
+ "bison", /* 20 */
+ "blackjack", /* 21 */
+ "blockade", /* 22 */
+ "blowtorch", /* 23 */
+ "bluebird", /* 24 */
+ "bombast", /* 25 */
+ "bookshelf", /* 26 */
+ "brackish", /* 27 */
+ "breadline", /* 28 */
+ "breakup", /* 29 */
+ "brickyard", /* 2A */
+ "briefcase", /* 2B */
+ "Burbank", /* 2C */
+ "button", /* 2D */
+ "buzzard", /* 2E */
+ "cement", /* 2F */
+ "chairlift", /* 30 */
+ "chatter", /* 31 */
+ "checkup", /* 32 */
+ "chisel", /* 33 */
+ "choking", /* 34 */
+ "chopper", /* 35 */
+ "Christmas", /* 36 */
+ "clamshell", /* 37 */
+ "classic", /* 38 */
+ "classroom", /* 39 */
+ "cleanup", /* 3A */
+ "clockwork", /* 3B */
+ "cobra", /* 3C */
+ "commence", /* 3D */
+ "concert", /* 3E */
+ "cowbell", /* 3F */
+ "crackdown", /* 40 */
+ "cranky", /* 41 */
+ "crowfoot", /* 42 */
+ "crucial", /* 43 */
+ "crumpled", /* 44 */
+ "crusade", /* 45 */
+ "cubic", /* 46 */
+ "dashboard", /* 47 */
+ "deadbolt", /* 48 */
+ "deckhand", /* 49 */
+ "dogsled", /* 4A */
+ "dragnet", /* 4B */
+ "drainage", /* 4C */
+ "dreadful", /* 4D */
+ "drifter", /* 4E */
+ "dropper", /* 4F */
+ "drumbeat", /* 50 */
+ "drunken", /* 51 */
+ "Dupont", /* 52 */
+ "dwelling", /* 53 */
+ "eating", /* 54 */
+ "edict", /* 55 */
+ "egghead", /* 56 */
+ "eightball", /* 57 */
+ "endorse", /* 58 */
+ "endow", /* 59 */
+ "enlist", /* 5A */
+ "erase", /* 5B */
+ "escape", /* 5C */
+ "exceed", /* 5D */
+ "eyeglass", /* 5E */
+ "eyetooth", /* 5F */
+ "facial", /* 60 */
+ "fallout", /* 61 */
+ "flagpole", /* 62 */
+ "flatfoot", /* 63 */
+ "flytrap", /* 64 */
+ "fracture", /* 65 */
+ "framework", /* 66 */
+ "freedom", /* 67 */
+ "frighten", /* 68 */
+ "gazelle", /* 69 */
+ "Geiger", /* 6A */
+ "glitter", /* 6B */
+ "glucose", /* 6C */
+ "goggles", /* 6D */
+ "goldfish", /* 6E */
+ "gremlin", /* 6F */
+ "guidance", /* 70 */
+ "hamlet", /* 71 */
+ "highchair", /* 72 */
+ "hockey", /* 73 */
+ "indoors", /* 74 */
+ "indulge", /* 75 */
+ "inverse", /* 76 */
+ "involve", /* 77 */
+ "island", /* 78 */
+ "jawbone", /* 79 */
+ "keyboard", /* 7A */
+ "kickoff", /* 7B */
+ "kiwi", /* 7C */
+ "klaxon", /* 7D */
+ "locale", /* 7E */
+ "lockup", /* 7F */
+ "merit", /* 80 */
+ "minnow", /* 81 */
+ "miser", /* 82 */
+ "Mohawk", /* 83 */
+ "mural", /* 84 */
+ "music", /* 85 */
+ "necklace", /* 86 */
+ "Neptune", /* 87 */
+ "newborn", /* 88 */
+ "nightbird", /* 89 */
+ "Oakland", /* 8A */
+ "obtuse", /* 8B */
+ "offload", /* 8C */
+ "optic", /* 8D */
+ "orca", /* 8E */
+ "payday", /* 8F */
+ "peachy", /* 90 */
+ "pheasant", /* 91 */
+ "physique", /* 92 */
+ "playhouse", /* 93 */
+ "Pluto", /* 94 */
+ "preclude", /* 95 */
+ "prefer", /* 96 */
+ "preshrunk", /* 97 */
+ "printer", /* 98 */
+ "prowler", /* 99 */
+ "pupil", /* 9A */
+ "puppy", /* 9B */
+ "python", /* 9C */
+ "quadrant", /* 9D */
+ "quiver", /* 9E */
+ "quota", /* 9F */
+ "ragtime", /* A0 */
+ "ratchet", /* A1 */
+ "rebirth", /* A2 */
+ "reform", /* A3 */
+ "regain", /* A4 */
+ "reindeer", /* A5 */
+ "rematch", /* A6 */
+ "repay", /* A7 */
+ "retouch", /* A8 */
+ "revenge", /* A9 */
+ "reward", /* AA */
+ "rhythm", /* AB */
+ "ribcage", /* AC */
+ "ringbolt", /* AD */
+ "robust", /* AE */
+ "rocker", /* AF */
+ "ruffled", /* B0 */
+ "sailboat", /* B1 */
+ "sawdust", /* B2 */
+ "scallion", /* B3 */
+ "scenic", /* B4 */
+ "scorecard", /* B5 */
+ "Scotland", /* B6 */
+ "seabird", /* B7 */
+ "select", /* B8 */
+ "sentence", /* B9 */
+ "shadow", /* BA */
+ "shamrock", /* BB */
+ "showgirl", /* BC */
+ "skullcap", /* BD */
+ "skydive", /* BE */
+ "slingshot", /* BF */
+ "slowdown", /* C0 */
+ "snapline", /* C1 */
+ "snapshot", /* C2 */
+ "snowcap", /* C3 */
+ "snowslide", /* C4 */
+ "solo", /* C5 */
+ "southward", /* C6 */
+ "soybean", /* C7 */
+ "spaniel", /* C8 */
+ "spearhead", /* C9 */
+ "spellbind", /* CA */
+ "spheroid", /* CB */
+ "spigot", /* CC */
+ "spindle", /* CD */
+ "spyglass", /* CE */
+ "stagehand", /* CF */
+ "stagnate", /* D0 */
+ "stairway", /* D1 */
+ "standard", /* D2 */
+ "stapler", /* D3 */
+ "steamship", /* D4 */
+ "sterling", /* D5 */
+ "stockman", /* D6 */
+ "stopwatch", /* D7 */
+ "stormy", /* D8 */
+ "sugar", /* D9 */
+ "surmount", /* DA */
+ "suspense", /* DB */
+ "sweatband", /* DC */
+ "swelter", /* DD */
+ "tactics", /* DE */
+ "talon", /* DF */
+ "tapeworm", /* E0 */
+ "tempest", /* E1 */
+ "tiger", /* E2 */
+ "tissue", /* E3 */
+ "tonic", /* E4 */
+ "topmost", /* E5 */
+ "tracker", /* E6 */
+ "transit", /* E7 */
+ "trauma", /* E8 */
+ "treadmill", /* E9 */
+ "Trojan", /* EA */
+ "trouble", /* EB */
+ "tumor", /* EC */
+ "tunnel", /* ED */
+ "tycoon", /* EE */
+ "uncut", /* EF */
+ "unearth", /* F0 */
+ "unwind", /* F1 */
+ "uproot", /* F2 */
+ "upset", /* F3 */
+ "upshot", /* F4 */
+ "vapor", /* F5 */
+ "village", /* F6 */
+ "virus", /* F7 */
+ "Vulcan", /* F8 */
+ "waffle", /* F9 */
+ "wallet", /* FA */
+ "watchword", /* FB */
+ "wayside", /* FC */
+ "willow", /* FD */
+ "woodlark", /* FE */
+ "Zulu" /* FF */
+};
+
+const char * const odd[256] = {
+ "aardvark", /* 00 */
+ "absurd", /* 01 */
+ "accrue", /* 02 */
+ "acme", /* 03 */
+ "adrift", /* 04 */
+ "adult", /* 05 */
+ "afflict", /* 06 */
+ "ahead", /* 07 */
+ "aimless", /* 08 */
+ "Algol", /* 09 */
+ "allow", /* 0A */
+ "alone", /* 0B */
+ "ammo", /* 0C */
+ "ancient", /* 0D */
+ "apple", /* 0E */
+ "artist", /* 0F */
+ "assume", /* 10 */
+ "Athens", /* 11 */
+ "atlas", /* 12 */
+ "Aztec", /* 13 */
+ "baboon", /* 14 */
+ "backfield", /* 15 */
+ "backward", /* 16 */
+ "banjo", /* 17 */
+ "beaming", /* 18 */
+ "bedlamp", /* 19 */
+ "beehive", /* 1A */
+ "beeswax", /* 1B */
+ "befriend", /* 1C */
+ "Belfast", /* 1D */
+ "berserk", /* 1E */
+ "billiard", /* 1F */
+ "bison", /* 20 */
+ "blackjack", /* 21 */
+ "blockade", /* 22 */
+ "blowtorch", /* 23 */
+ "bluebird", /* 24 */
+ "bombast", /* 25 */
+ "bookshelf", /* 26 */
+ "brackish", /* 27 */
+ "breadline", /* 28 */
+ "breakup", /* 29 */
+ "brickyard", /* 2A */
+ "briefcase", /* 2B */
+ "Burbank", /* 2C */
+ "button", /* 2D */
+ "buzzard", /* 2E */
+ "cement", /* 2F */
+ "chairlift", /* 30 */
+ "chatter", /* 31 */
+ "checkup", /* 32 */
+ "chisel", /* 33 */
+ "choking", /* 34 */
+ "chopper", /* 35 */
+ "Christmas", /* 36 */
+ "clamshell", /* 37 */
+ "classic", /* 38 */
+ "classroom", /* 39 */
+ "cleanup", /* 3A */
+ "clockwork", /* 3B */
+ "cobra", /* 3C */
+ "commence", /* 3D */
+ "concert", /* 3E */
+ "cowbell", /* 3F */
+ "crackdown", /* 40 */
+ "cranky", /* 41 */
+ "crowfoot", /* 42 */
+ "crucial", /* 43 */
+ "crumpled", /* 44 */
+ "crusade", /* 45 */
+ "cubic", /* 46 */
+ "dashboard", /* 47 */
+ "deadbolt", /* 48 */
+ "deckhand", /* 49 */
+ "dogsled", /* 4A */
+ "dragnet", /* 4B */
+ "drainage", /* 4C */
+ "dreadful", /* 4D */
+ "drifter", /* 4E */
+ "dropper", /* 4F */
+ "drumbeat", /* 50 */
+ "drunken", /* 51 */
+ "Dupont", /* 52 */
+ "dwelling", /* 53 */
+ "eating", /* 54 */
+ "edict", /* 55 */
+ "egghead", /* 56 */
+ "eightball", /* 57 */
+ "endorse", /* 58 */
+ "endow", /* 59 */
+ "enlist", /* 5A */
+ "erase", /* 5B */
+ "escape", /* 5C */
+ "exceed", /* 5D */
+ "eyeglass", /* 5E */
+ "eyetooth", /* 5F */
+ "facial", /* 60 */
+ "fallout", /* 61 */
+ "flagpole", /* 62 */
+ "flatfoot", /* 63 */
+ "flytrap", /* 64 */
+ "fracture", /* 65 */
+ "framework", /* 66 */
+ "freedom", /* 67 */
+ "frighten", /* 68 */
+ "gazelle", /* 69 */
+ "Geiger", /* 6A */
+ "glitter", /* 6B */
+ "glucose", /* 6C */
+ "goggles", /* 6D */
+ "goldfish", /* 6E */
+ "gremlin", /* 6F */
+ "guidance", /* 70 */
+ "hamlet", /* 71 */
+ "highchair", /* 72 */
+ "hockey", /* 73 */
+ "indoors", /* 74 */
+ "indulge", /* 75 */
+ "inverse", /* 76 */
+ "involve", /* 77 */
+ "island", /* 78 */
+ "jawbone", /* 79 */
+ "keyboard", /* 7A */
+ "kickoff", /* 7B */
+ "kiwi", /* 7C */
+ "klaxon", /* 7D */
+ "locale", /* 7E */
+ "lockup", /* 7F */
+ "merit", /* 80 */
+ "minnow", /* 81 */
+ "miser", /* 82 */
+ "Mohawk", /* 83 */
+ "mural", /* 84 */
+ "music", /* 85 */
+ "necklace", /* 86 */
+ "Neptune", /* 87 */
+ "newborn", /* 88 */
+ "nightbird", /* 89 */
+ "Oakland", /* 8A */
+ "obtuse", /* 8B */
+ "offload", /* 8C */
+ "optic", /* 8D */
+ "orca", /* 8E */
+ "payday", /* 8F */
+ "peachy", /* 90 */
+ "pheasant", /* 91 */
+ "physique", /* 92 */
+ "playhouse", /* 93 */
+ "Pluto", /* 94 */
+ "preclude", /* 95 */
+ "prefer", /* 96 */
+ "preshrunk", /* 97 */
+ "printer", /* 98 */
+ "prowler", /* 99 */
+ "pupil", /* 9A */
+ "puppy", /* 9B */
+ "python", /* 9C */
+ "quadrant", /* 9D */
+ "quiver", /* 9E */
+ "quota", /* 9F */
+ "ragtime", /* A0 */
+ "ratchet", /* A1 */
+ "rebirth", /* A2 */
+ "reform", /* A3 */
+ "regain", /* A4 */
+ "reindeer", /* A5 */
+ "rematch", /* A6 */
+ "repay", /* A7 */
+ "retouch", /* A8 */
+ "revenge", /* A9 */
+ "reward", /* AA */
+ "rhythm", /* AB */
+ "ribcage", /* AC */
+ "ringbolt", /* AD */
+ "robust", /* AE */
+ "rocker", /* AF */
+ "ruffled", /* B0 */
+ "sailboat", /* B1 */
+ "sawdust", /* B2 */
+ "scallion", /* B3 */
+ "scenic", /* B4 */
+ "scorecard", /* B5 */
+ "Scotland", /* B6 */
+ "seabird", /* B7 */
+ "select", /* B8 */
+ "sentence", /* B9 */
+ "shadow", /* BA */
+ "shamrock", /* BB */
+ "showgirl", /* BC */
+ "skullcap", /* BD */
+ "skydive", /* BE */
+ "slingshot", /* BF */
+ "slowdown", /* C0 */
+ "snapline", /* C1 */
+ "snapshot", /* C2 */
+ "snowcap", /* C3 */
+ "snowslide", /* C4 */
+ "solo", /* C5 */
+ "southward", /* C6 */
+ "soybean", /* C7 */
+ "spaniel", /* C8 */
+ "spearhead", /* C9 */
+ "spellbind", /* CA */
+ "spheroid", /* CB */
+ "spigot", /* CC */
+ "spindle", /* CD */
+ "spyglass", /* CE */
+ "stagehand", /* CF */
+ "stagnate", /* D0 */
+ "stairway", /* D1 */
+ "standard", /* D2 */
+ "stapler", /* D3 */
+ "steamship", /* D4 */
+ "sterling", /* D5 */
+ "stockman", /* D6 */
+ "stopwatch", /* D7 */
+ "stormy", /* D8 */
+ "sugar", /* D9 */
+ "surmount", /* DA */
+ "suspense", /* DB */
+ "sweatband", /* DC */
+ "swelter", /* DD */
+ "tactics", /* DE */
+ "talon", /* DF */
+ "tapeworm", /* E0 */
+ "tempest", /* E1 */
+ "tiger", /* E2 */
+ "tissue", /* E3 */
+ "tonic", /* E4 */
+ "topmost", /* E5 */
+ "tracker", /* E6 */
+ "transit", /* E7 */
+ "trauma", /* E8 */
+ "treadmill", /* E9 */
+ "Trojan", /* EA */
+ "trouble", /* EB */
+ "tumor", /* EC */
+ "tunnel", /* ED */
+ "tycoon", /* EE */
+ "uncut", /* EF */
+ "unearth", /* F0 */
+ "unwind", /* F1 */
+ "uproot", /* F2 */
+ "upset", /* F3 */
+ "upshot", /* F4 */
+ "vapor", /* F5 */
+ "village", /* F6 */
+ "virus", /* F7 */
+ "Vulcan", /* F8 */
+ "waffle", /* F9 */
+ "wallet", /* FA */
+ "watchword", /* FB */
+ "wayside", /* FC */
+ "willow", /* FD */
+ "woodlark", /* FE */
+ "Zulu", /* FF */
+};
+
diff --git a/src/words.h b/src/words.h
index e8cb628..0bbd3c4 100644
--- a/src/words.h
+++ b/src/words.h
@@ -1,7 +1,7 @@
#ifndef __ADJECTIVES_H__
#define __ADJECTIVES_H__
-extern const char * const adjectives[256];
-extern const char * const nouns[256];
+extern const char * const even[256];
+extern const char * const odd[256];
#endif