@theqrl/wallet.js 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +30 -0
- package/src/dilithium.js +176 -0
- package/src/index.js +1 -0
- package/src/qrl/index.js +1 -0
- package/src/qrl/wordlist.js +374 -0
- package/src/utils/mnemonic.js +32 -0
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@theqrl/wallet.js",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "mocha",
|
|
8
|
+
"lint-check": "eslint 'src/**/*.js' 'test/**/*.js'",
|
|
9
|
+
"lint": "eslint --fix 'src/**/*.js' 'test/**/*.js'"
|
|
10
|
+
},
|
|
11
|
+
"author": "QRL contributors <info@theqrl.org> (https://theqrl.org)",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@theqrl/dilithium5": "0.0.6",
|
|
15
|
+
"randombytes": "^2.1.0",
|
|
16
|
+
"sha3": "^2.1.4"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"directories": {
|
|
20
|
+
"lib": "src",
|
|
21
|
+
"test": "test"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"src"
|
|
25
|
+
],
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"chai": "^4.3.7",
|
|
28
|
+
"mocha": "^10.2.0"
|
|
29
|
+
}
|
|
30
|
+
}
|
package/src/dilithium.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import pkg from 'randombytes'; // eslint-disable-line import/no-extraneous-dependencies
|
|
2
|
+
import { SHAKE } from 'sha3'; // eslint-disable-line import/no-extraneous-dependencies
|
|
3
|
+
import { cryptoSign, cryptoSignKeypair, cryptoSignOpen, cryptoSignVerify, cryptoSignSignature, CryptoPublicKeyBytes, CryptoSecretKeyBytes, SeedBytes, CryptoBytes } from '@theqrl/dilithium5';
|
|
4
|
+
import { SeedBinToMnemonic } from './utils/mnemonic.js';
|
|
5
|
+
const randomBytes = pkg;
|
|
6
|
+
|
|
7
|
+
function New() {
|
|
8
|
+
var pk = new Uint8Array(CryptoPublicKeyBytes);
|
|
9
|
+
var sk = new Uint8Array(CryptoSecretKeyBytes);
|
|
10
|
+
|
|
11
|
+
var seed = randomBytes(48)
|
|
12
|
+
const hashedSeed = new SHAKE(256);
|
|
13
|
+
hashedSeed.update(seed);
|
|
14
|
+
let seedBuf = hashedSeed.digest({ buffer: Buffer.alloc(32) })
|
|
15
|
+
|
|
16
|
+
cryptoSignKeypair(seedBuf, pk, sk);
|
|
17
|
+
let dilithium = {
|
|
18
|
+
pk: pk,
|
|
19
|
+
sk: sk,
|
|
20
|
+
seed: seed,
|
|
21
|
+
randomizedSigning: false,
|
|
22
|
+
GetPK: new Function,
|
|
23
|
+
GetSK: new Function,
|
|
24
|
+
GetSeed: new Function,
|
|
25
|
+
GetAddress: new Function,
|
|
26
|
+
GetMnemonic: new Function,
|
|
27
|
+
GetHexSeed: new Function,
|
|
28
|
+
Seal: new Function,
|
|
29
|
+
Sign: new Function,
|
|
30
|
+
}
|
|
31
|
+
dilithium.GetPK = GetPK.bind(dilithium)
|
|
32
|
+
dilithium.GetSK = GetSK.bind(dilithium)
|
|
33
|
+
dilithium.GetSeed = GetSeed.bind(dilithium)
|
|
34
|
+
dilithium.GetHexSeed = GetHexSeed.bind(dilithium)
|
|
35
|
+
dilithium.GetMnemonic = GetMnemonic.bind(dilithium)
|
|
36
|
+
dilithium.Seal = Seal.bind(dilithium)
|
|
37
|
+
dilithium.Sign = Sign.bind(dilithium)
|
|
38
|
+
dilithium.GetAddress = GetAddress.bind(dilithium)
|
|
39
|
+
|
|
40
|
+
return dilithium
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function NewDilithiumFromSeed(seed) {
|
|
44
|
+
var pk = new Uint8Array(CryptoPublicKeyBytes);
|
|
45
|
+
var sk = new Uint8Array(CryptoSecretKeyBytes);
|
|
46
|
+
|
|
47
|
+
const hashedSeed = new SHAKE(256);
|
|
48
|
+
hashedSeed.update(seed);
|
|
49
|
+
let seedBuf = hashedSeed.digest({ buffer: Buffer.alloc(32) })
|
|
50
|
+
cryptoSignKeypair(seedBuf, pk, sk);
|
|
51
|
+
let dilithium = {
|
|
52
|
+
pk: pk,
|
|
53
|
+
sk: sk,
|
|
54
|
+
seed: seed,
|
|
55
|
+
randomizedSigning: false,
|
|
56
|
+
GetPK: new Function,
|
|
57
|
+
GetSK: new Function,
|
|
58
|
+
GetSeed: new Function,
|
|
59
|
+
GetAddress: new Function,
|
|
60
|
+
GetMnemonic: new Function,
|
|
61
|
+
GetHexSeed: new Function,
|
|
62
|
+
Seal: new Function,
|
|
63
|
+
Sign: new Function,
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
dilithium.GetPK = GetPK.bind(dilithium)
|
|
67
|
+
dilithium.GetSK = GetSK.bind(dilithium)
|
|
68
|
+
dilithium.GetSeed = GetSeed.bind(dilithium)
|
|
69
|
+
dilithium.GetHexSeed = GetHexSeed.bind(dilithium)
|
|
70
|
+
dilithium.GetMnemonic = GetMnemonic.bind(dilithium)
|
|
71
|
+
dilithium.Seal = Seal.bind(dilithium)
|
|
72
|
+
dilithium.Sign = Sign.bind(dilithium)
|
|
73
|
+
dilithium.GetAddress = GetAddress.bind(dilithium)
|
|
74
|
+
|
|
75
|
+
return dilithium
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function GetPK() {
|
|
79
|
+
return this.pk
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function GetSK() {
|
|
83
|
+
return this.sk
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function GetSeed() {
|
|
87
|
+
return this.seed
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function GetHexSeed() {
|
|
91
|
+
return '0x' + this.seed.toString('hex')
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function GetMnemonic() {
|
|
95
|
+
return SeedBinToMnemonic(this.seed)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Seal the message, returns signature attached with message.
|
|
99
|
+
function Seal(message) {
|
|
100
|
+
return cryptoSign(message, this.sk, this.randomizedSigning)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Sign the message, and return a detached signature. Detached signatures are
|
|
104
|
+
// variable sized, but never larger than SIG_SIZE_PACKED.
|
|
105
|
+
function Sign(message) {
|
|
106
|
+
let sm = cryptoSign(message, this.sk)
|
|
107
|
+
var signature = new Uint8Array(CryptoBytes)
|
|
108
|
+
signature = sm.slice(0, CryptoBytes)
|
|
109
|
+
return signature
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function GetAddress() {
|
|
113
|
+
return GetDilithiumAddressFromPK(this.pk)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Open the sealed message m. Returns the original message sealed with signature.
|
|
117
|
+
// In case the signature is invalid, nil is returned.
|
|
118
|
+
function Open(signatureMessage, pk) {
|
|
119
|
+
return cryptoSignOpen(signatureMessage, pk)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function Verify(message, signature, pk) {
|
|
123
|
+
return cryptoSignVerify(signature, message, pk)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ExtractMessage extracts message from Signature attached with message.
|
|
127
|
+
function ExtractMessage(signatureMessage) {
|
|
128
|
+
return signatureMessage.slice(CryptoBytes, signatureMessage.length)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// ExtractSignature extracts signature from Signature attached with message.
|
|
132
|
+
function ExtractSignature(signatureMessage) {
|
|
133
|
+
return signatureMessage.slice(0, CryptoBytes)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function GetDilithiumDescriptor() {
|
|
137
|
+
/*
|
|
138
|
+
In case of Dilithium address, it doesn't have any choice of hashFunction,
|
|
139
|
+
height, addrFormatType. Thus keeping all those values to 0 and assigning
|
|
140
|
+
only signatureType in the descriptor.
|
|
141
|
+
*/
|
|
142
|
+
return 2 << 4
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function GetDilithiumAddressFromPK(pk) {
|
|
146
|
+
let addressSize = 20
|
|
147
|
+
var address = new Uint8Array(addressSize)
|
|
148
|
+
let descBytes = GetDilithiumDescriptor()
|
|
149
|
+
address[0] = descBytes
|
|
150
|
+
|
|
151
|
+
var hashedKey = new SHAKE(256)
|
|
152
|
+
hashedKey.update(Buffer.from(pk))
|
|
153
|
+
let hashedKeyDigest = hashedKey.digest({ buffer: Buffer.alloc(32), encoding: 'hex' })
|
|
154
|
+
hashedKeyDigest = hashedKeyDigest.slice(hashedKeyDigest.length - addressSize + 1)
|
|
155
|
+
for (let i = 0; i < hashedKeyDigest.length; i++) {
|
|
156
|
+
address[i + 1] = hashedKeyDigest[i]
|
|
157
|
+
}
|
|
158
|
+
return address
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function IsValidDilithiumAddress(address) {
|
|
162
|
+
let d = GetDilithiumDescriptor()
|
|
163
|
+
if (address[0] != d) {
|
|
164
|
+
return false
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// TODO: Add checksum
|
|
168
|
+
return true
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
let DilithiumWallet;
|
|
172
|
+
|
|
173
|
+
export default DilithiumWallet = {
|
|
174
|
+
New, NewDilithiumFromSeed, Open, Verify, ExtractMessage, ExtractSignature, GetDilithiumDescriptor, GetDilithiumAddressFromPK, IsValidDilithiumAddress
|
|
175
|
+
}
|
|
176
|
+
|
package/src/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default './dilithium.js'
|
package/src/qrl/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './wordlist.js'
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
export const WordList = [
|
|
2
|
+
"aback", "abbey", "abbot", "abide", "ablaze", "able", "aboard", "abode", "abort", "abound", "about", "above",
|
|
3
|
+
"abra", "abroad", "abrupt", "absent", "absorb", "absurd", "accent", "accept", "access", "accord", "accuse",
|
|
4
|
+
"ace",
|
|
5
|
+
"ache", "aching", "acid", "acidic", "acorn", "acre", "across", "act", "action", "active", "actor", "actual",
|
|
6
|
+
"acute", "adam", "adapt", "add", "added", "adept", "adhere", "adjust", "admire", "admit", "adobe", "adopt",
|
|
7
|
+
"adrift", "adverb", "advert", "aedes", "aerial", "afar", "affair", "affect", "afford", "afghan", "afield",
|
|
8
|
+
"afloat",
|
|
9
|
+
"afraid", "afresh", "after", "again", "age", "agency", "agenda", "agent", "aghast", "agile", "ago", "agony",
|
|
10
|
+
"agree", "agreed", "aha", "ahead", "aid", "aide", "aim", "air", "airman", "airy", "akin", "alarm",
|
|
11
|
+
"alaska", "albeit", "album", "alert", "alibi", "alice", "alien", "alight", "align", "alike", "alive", "alkali",
|
|
12
|
+
"all", "allars", "allay", "alley", "allied", "allot", "allow", "alloy", "ally", "almond", "almost", "aloft",
|
|
13
|
+
"alone", "along", "aloof", "aloud", "alpha", "alpine", "also", "altar", "alter", "always", "amaze", "amazon",
|
|
14
|
+
"amber", "ambush", "amen", "amend", "amid", "amidst", "amiss", "among", "amount", "ample", "amuse", "anchor",
|
|
15
|
+
"and", "andrew", "anew", "angel", "anger", "angle", "anglo", "angola", "animal", "ankle", "annoy", "annual",
|
|
16
|
+
"answer", "anthem", "anti", "antony", "anubis", "any", "anyhow", "anyway", "apart", "apathy", "apex", "apiece",
|
|
17
|
+
"appeal", "appear", "apple", "apply", "april", "apron", "arcade", "arcane", "arch", "arctic", "ardent", "are",
|
|
18
|
+
"area", "argue", "arid", "arise", "arm", "armful", "armpit", "army", "aroma", "around", "arouse", "array",
|
|
19
|
+
"arrest", "arrive", "arrow", "arson", "art", "artery", "artful", "artist", "ascent", "ashen", "ashore", "aside",
|
|
20
|
+
"ask", "asleep", "aspect", "assay", "assent", "assert", "assess", "asset", "assign", "assist", "assume",
|
|
21
|
+
"assure",
|
|
22
|
+
"asthma", "astute", "asylum", "ate", "athens", "atlas", "atom", "atomic", "atop", "attach", "attain", "attend",
|
|
23
|
+
"attic", "auburn", "audio", "audit", "augite", "august", "aunt", "auntie", "aura", "austin", "auteur", "author",
|
|
24
|
+
"auto", "autumn", "avail", "avenge", "avenue", "avert", "avid", "avoid", "await", "awake", "awaken", "award",
|
|
25
|
+
"aware", "awash", "away", "awful", "awhile", "axes", "axiom", "axis", "axle", "aye", "baby", "bach",
|
|
26
|
+
"back", "backup", "bacon", "bad", "badge", "badly", "bag", "baggy", "bail", "bait", "bake", "baker",
|
|
27
|
+
"bakery", "bald", "ball", "ballad", "ballet", "ballot", "baltic", "bamboo", "ban", "banal", "banana", "band",
|
|
28
|
+
"banjo", "bank", "bar", "barber", "bare", "barely", "barge", "baric", "bark", "barley", "barn", "baron",
|
|
29
|
+
"barrel", "barren", "basalt", "base", "basic", "basil", "basin", "basis", "basket", "basque", "bass", "bat",
|
|
30
|
+
"batch", "bath", "bathe", "baton", "battle", "bay", "beach", "beacon", "beak", "beam", "bean", "bear",
|
|
31
|
+
"beard", "beat", "beauty", "become", "bed", "beech", "beef", "beefy", "beep", "beer", "beet", "beetle",
|
|
32
|
+
"before", "beggar", "begin", "behalf", "behave", "behind", "beige", "being", "belfry", "belief", "bell",
|
|
33
|
+
"belly",
|
|
34
|
+
"belong", "below", "belt", "bench", "bend", "bended", "benign", "bent", "berlin", "berry", "berth", "beset",
|
|
35
|
+
"beside", "best", "bestow", "bet", "beta", "betray", "better", "betty", "beware", "beyond", "bias", "biceps",
|
|
36
|
+
"bicker", "bid", "big", "bike", "bile", "bill", "binary", "bind", "biopsy", "birch", "bird", "birdie",
|
|
37
|
+
"birth", "bishop", "bit", "bite", "bitter", "blade", "blame", "bland", "blaser", "blast", "blaze", "bleak",
|
|
38
|
+
"blend", "bless", "blew", "blink", "blip", "bliss", "blitz", "block", "blond", "blood", "bloom", "blot",
|
|
39
|
+
"blouse", "blue", "bluff", "blunt", "blur", "blush", "boar", "board", "boast", "boat", "bocage", "bodily",
|
|
40
|
+
"body", "bogus", "boil", "bold", "bolt", "bombay", "bond", "bone", "bonn", "bonnet", "bonus", "bony",
|
|
41
|
+
"book", "boost", "boot", "booth", "booze", "bop", "border", "bore", "borrow", "bosom", "boss", "boston",
|
|
42
|
+
"both", "bother", "bottle", "bottom", "bought", "bounce", "bound", "bounty", "bout", "bovine", "bow", "bowel",
|
|
43
|
+
"bowl", "box", "boy", "boyish", "brace", "brain", "brainy", "brake", "bran", "branch", "brand", "brandy",
|
|
44
|
+
"brass", "brave", "bravo", "brazil", "breach", "bread", "break", "breath", "bred", "breed", "breeze", "brew",
|
|
45
|
+
"brick", "bride", "bridge", "brief", "bright", "brim", "brine", "bring", "brink", "brisk", "briton", "broad",
|
|
46
|
+
"broke", "broken", "bronze", "brook", "broom", "brown", "bruise", "brush", "brutal", "brute", "bubble", "buck",
|
|
47
|
+
"bucket", "buckle", "buddha", "budget", "buen", "buffet", "buggy", "build", "bulb", "bulge", "bulk", "bulky",
|
|
48
|
+
"bull", "bullet", "bully", "bump", "bumpy", "bunch", "bundle", "bunk", "bunny", "burden", "bureau", "burial",
|
|
49
|
+
"burly", "burma", "burned", "burnt", "burrow", "burst", "bury", "bus", "bush", "bust", "bustle", "busy",
|
|
50
|
+
"but", "butler", "butter", "button", "buy", "buyer", "buzz", "bye", "byte", "byways", "cab", "cabin",
|
|
51
|
+
"cable", "cache", "cactus", "caesar", "cage", "cagey", "cahot", "cain", "cairo", "cake", "cakile", "calf",
|
|
52
|
+
"call", "caller", "calm", "calmly", "came", "camel", "camera", "camp", "campus", "can", "canada", "canary",
|
|
53
|
+
"cancel", "candid", "candle", "candy", "cane", "canine", "canna", "canoe", "canopy", "canvas", "canyon", "cap",
|
|
54
|
+
"cape", "car", "carbon", "card", "care", "career", "caress", "cargo", "carl", "carnal", "carol", "carp",
|
|
55
|
+
"carpet", "carrot", "carry", "cart", "cartel", "case", "cash", "cask", "cast", "castle", "casual", "cat",
|
|
56
|
+
"catch", "cater", "cattle", "caught", "causal", "cause", "cave", "cease", "celery", "cell", "cellar", "celtic",
|
|
57
|
+
"cement", "censor", "census", "cereal", "cervix", "chain", "chair", "chalet", "chalk", "chalky", "champ",
|
|
58
|
+
"chance",
|
|
59
|
+
"change", "chant", "chaos", "chap", "chapel", "charge", "charm", "chart", "chase", "chat", "cheap", "cheat",
|
|
60
|
+
"check", "cheek", "cheeky", "cheer", "cheery", "cheese", "chef", "cherry", "chess", "chest", "chew", "chic",
|
|
61
|
+
"chick", "chief", "child", "chile", "chill", "chilly", "china", "chip", "choice", "choir", "choose", "chop",
|
|
62
|
+
"choppy", "chord", "chorus", "chose", "chosen", "choux", "chrome", "chunk", "chunky", "cider", "cigar",
|
|
63
|
+
"cinema",
|
|
64
|
+
"circa", "circle", "circus", "cite", "city", "civic", "civil", "clad", "claim", "clammy", "clan", "clap",
|
|
65
|
+
"clash", "clasp", "class", "clause", "claw", "clay", "clean", "clear", "clergy", "clerk", "clever", "click",
|
|
66
|
+
"client", "cliff", "climax", "climb", "clinch", "cling", "clinic", "clip", "cloak", "clock", "clone", "close",
|
|
67
|
+
"closer", "closet", "cloth", "cloud", "cloudy", "clout", "clown", "club", "clue", "clumsy", "clung", "clutch",
|
|
68
|
+
"coach", "coal", "coast", "coat", "coax", "cobalt", "cobble", "cobra", "coca", "cocoa", "code", "coffee",
|
|
69
|
+
"coffin", "cohort", "coil", "coin", "coke", "cold", "collar", "colon", "colony", "colt", "column", "comb",
|
|
70
|
+
"combat", "come", "comedy", "comes", "comic", "commit", "common", "compel", "comply", "concur", "cone",
|
|
71
|
+
"confer",
|
|
72
|
+
"congo", "consul", "convex", "convey", "convoy", "cook", "cool", "cope", "copper", "copy", "coral", "cord",
|
|
73
|
+
"core", "cork", "corn", "corner", "corps", "corpse", "corpus", "cortex", "cosmic", "cosmos", "cost", "costia",
|
|
74
|
+
"costly", "cosy", "cotton", "couch", "cough", "could", "count", "county", "coup", "couple", "coupon", "course",
|
|
75
|
+
"court", "cousin", "cove", "cover", "covert", "cow", "coward", "cowboy", "crab", "cradle", "craft", "crafty",
|
|
76
|
+
"crag", "crane", "crate", "crater", "crawl", "crazy", "creak", "cream", "create", "credit", "creed", "creek",
|
|
77
|
+
"creep", "creepy", "creole", "crept", "crest", "crew", "cried", "crisis", "crisp", "critic", "croft", "crook",
|
|
78
|
+
"crop", "cross", "crow", "crowd", "crown", "crude", "cruel", "cruise", "crunch", "crush", "crust", "crux",
|
|
79
|
+
"cry", "crypt", "cuba", "cube", "cubic", "cuckoo", "cuff", "cult", "cup", "curb", "cure", "curfew",
|
|
80
|
+
"curl", "curlew", "curry", "curse", "cursor", "curve", "custom", "cut", "cute", "cycle", "cyclic", "cynic",
|
|
81
|
+
"cyprus", "czech", "dad", "daddy", "dagger", "daily", "dairy", "daisy", "dale", "dallas", "damage", "damp",
|
|
82
|
+
"dampen", "dance", "danger", "daniel", "danish", "dare", "dark", "darken", "darwin", "dash", "data", "date",
|
|
83
|
+
"david", "dawn", "day", "deadly", "deaf", "deal", "dealer", "dean", "dear", "debar", "debate", "debit",
|
|
84
|
+
"debris", "debt", "debtor", "decade", "decay", "decent", "decide", "deck", "decor", "decree", "deduce", "deed",
|
|
85
|
+
"deep", "deeply", "deer", "defeat", "defect", "defend", "defer", "define", "defy", "degree", "deity", "delay",
|
|
86
|
+
"delete", "delhi", "delphi", "delta", "demand", "demise", "demo", "demure", "denial", "denote", "dense",
|
|
87
|
+
"dental",
|
|
88
|
+
"deny", "depart", "depend", "depict", "deploy", "depot", "depth", "deputy", "derby", "derive", "desert",
|
|
89
|
+
"design",
|
|
90
|
+
"desist", "desk", "detail", "detect", "deter", "detest", "detour", "device", "devise", "devoid", "devote",
|
|
91
|
+
"devour",
|
|
92
|
+
"dial", "diana", "diary", "dice", "dictum", "did", "diesel", "diet", "differ", "digest", "digit", "dine",
|
|
93
|
+
"dinghy", "dingus", "dinner", "diode", "dire", "direct", "dirt", "disc", "disco", "dish", "disk", "dismal",
|
|
94
|
+
"dispel", "ditch", "divert", "divide", "divine", "dizzy", "docile", "dock", "doctor", "dog", "dogger", "dogma",
|
|
95
|
+
"dole", "doll", "dollar", "dolly", "domain", "dome", "domino", "donate", "done", "donkey", "donor", "door",
|
|
96
|
+
"dorsal", "dose", "dote", "double", "doubt", "dough", "dour", "dove", "dower", "down", "dozen", "draft",
|
|
97
|
+
"drag", "dragon", "drain", "drama", "drank", "draper", "draw", "drawer", "dread", "dream", "dreamy", "dreary",
|
|
98
|
+
"dress", "drew", "dried", "drift", "drill", "drink", "drip", "drive", "driver", "drool", "drop", "drove",
|
|
99
|
+
"drown", "drum", "dry", "dual", "dublin", "duck", "duct", "due", "duel", "duet", "duke", "dull",
|
|
100
|
+
"duly", "dummy", "dump", "dune", "dung", "duress", "during", "dusk", "dust", "dusty", "dutch", "duty",
|
|
101
|
+
"dwarf", "dwell", "dyer", "dying", "dynamo", "each", "eager", "eagle", "ear", "earl", "early", "earn",
|
|
102
|
+
"earth", "ease", "easel", "easily", "east", "easter", "easy", "eat", "eaten", "eater", "echo", "eddy",
|
|
103
|
+
"eden", "edge", "edible", "edict", "edit", "editor", "edward", "eerie", "eerily", "effect", "effort", "egg",
|
|
104
|
+
"ego", "egypt", "eight", "eighth", "eighty", "either", "elbow", "elder", "eldest", "elect", "eleven", "elicit",
|
|
105
|
+
"elite", "eloge", "else", "elude", "elves", "embark", "emblem", "embryo", "emerge", "emit", "empire", "employ",
|
|
106
|
+
"empty", "enable", "enamel", "end", "endure", "energy", "engage", "engine", "enjoy", "enlist", "enough",
|
|
107
|
+
"ensure",
|
|
108
|
+
"entail", "enter", "entire", "entre", "entry", "envoy", "envy", "enzyme", "epic", "epoch", "equal", "equate",
|
|
109
|
+
"equip", "equity", "era", "erase", "eric", "erode", "erotic", "errant", "error", "escape", "essay", "essex",
|
|
110
|
+
"estate", "esteem", "ethic", "etoile", "eundo", "europe", "evade", "eve", "even", "event", "ever", "every",
|
|
111
|
+
"evict", "evil", "evoke", "evolve", "exact", "exam", "exceed", "excel", "except", "excess", "excise", "excite",
|
|
112
|
+
"excuse", "exempt", "exert", "exile", "exist", "exit", "exodus", "exotic", "expand", "expect", "expert",
|
|
113
|
+
"expire",
|
|
114
|
+
"export", "expose", "extend", "extra", "exulat", "eye", "eyed", "fabric", "face", "facer", "facial", "fact",
|
|
115
|
+
"factor", "fade", "fail", "faint", "fair", "fairly", "fake", "falcon", "fall", "false", "falter", "fame",
|
|
116
|
+
"family", "famine", "famous", "fan", "fancy", "far", "farce", "fare", "farm", "farmer", "fast", "fasten",
|
|
117
|
+
"faster", "fatal", "fate", "father", "fatty", "fault", "faulty", "fauna", "feast", "feat", "fed", "fee",
|
|
118
|
+
"feeble", "feed", "feel", "feels", "feet", "fell", "fellow", "felt", "female", "femur", "fence", "fend",
|
|
119
|
+
"ferry", "fetal", "fetch", "feudal", "fever", "few", "fewer", "fiance", "fiasco", "fiddle", "field", "fiend",
|
|
120
|
+
"fierce", "fiery", "fifth", "fifty", "fig", "figure", "file", "fill", "filled", "filler", "film", "filter",
|
|
121
|
+
"filth", "filthy", "final", "finale", "find", "fine", "finish", "finite", "firm", "firmly", "first", "fiscal",
|
|
122
|
+
"fish", "fisher", "fit", "fitful", "five", "fix", "flag", "flair", "flak", "flame", "flank", "flare",
|
|
123
|
+
"flash", "flask", "flat", "flaw", "fled", "flee", "fleece", "fleet", "flesh", "fleshy", "flew", "flick",
|
|
124
|
+
"flight", "flimsy", "flint", "flirt", "float", "flock", "floe", "flood", "floor", "floppy", "flora", "floral",
|
|
125
|
+
"flour", "flow", "flower", "fluent", "fluffy", "fluid", "flung", "flurry", "flush", "flute", "flux", "fly",
|
|
126
|
+
"flyer", "foal", "foam", "foamy", "focal", "focus", "fog", "foil", "foin", "fold", "folk", "follow",
|
|
127
|
+
"folly", "fond", "fondly", "font", "food", "fool", "foot", "for", "forbid", "force", "ford", "forest",
|
|
128
|
+
"forge", "forget", "fork", "form", "formal", "format", "former", "fort", "forth", "forty", "forum", "fossil",
|
|
129
|
+
"foster", "foul", "found", "four", "fourth", "fox", "foyer", "frail", "frame", "franc", "france", "frank",
|
|
130
|
+
"free", "freed", "freely", "freer", "freeze", "french", "frenzy", "fresh", "friar", "friday", "fridge", "fried",
|
|
131
|
+
"friend", "fright", "fringe", "frock", "frog", "from", "front", "frost", "frosty", "frown", "frozen", "frugal",
|
|
132
|
+
"fruit", "fruity", "fudge", "fuel", "fulfil", "full", "fully", "fun", "fund", "funny", "fur", "furry",
|
|
133
|
+
"fury", "fuse", "fusion", "fuss", "fussy", "futile", "future", "fuzzy", "gadget", "gag", "gain", "gala",
|
|
134
|
+
"galaxy", "gale", "gall", "galley", "gallon", "gallop", "gamble", "game", "gamma", "gandhi", "gap", "garage",
|
|
135
|
+
"garden", "garlic", "gas", "gasp", "gate", "gather", "gaucho", "gauge", "gaul", "gaunt", "gave", "gaze",
|
|
136
|
+
"gear", "geese", "gemini", "gender", "gene", "geneva", "genial", "genius", "genre", "gentle", "gently",
|
|
137
|
+
"gentry",
|
|
138
|
+
"genus", "george", "get", "ghetto", "ghost", "giant", "gift", "giggle", "gill", "gilt", "ginger", "girl",
|
|
139
|
+
"give", "given", "glad", "glade", "glance", "gland", "glare", "glass", "glassy", "gleam", "glee", "glib",
|
|
140
|
+
"glide", "global", "globe", "gloom", "gloomy", "gloria", "glory", "gloss", "glossy", "glove", "glow", "glue",
|
|
141
|
+
"goal", "goat", "gold", "golden", "golf", "gone", "gong", "good", "goose", "gorge", "gory", "gosh",
|
|
142
|
+
"gospel", "gossip", "got", "gothic", "govern", "gown", "grab", "grace", "grade", "grain", "grand", "grant",
|
|
143
|
+
"grape", "graph", "grasp", "grass", "grassy", "grate", "grave", "gravel", "gravy", "gray", "grease", "greasy",
|
|
144
|
+
"great", "greece", "greed", "greedy", "greek", "green", "greet", "grew", "grey", "grid", "grief", "grill",
|
|
145
|
+
"grim", "grin", "grind", "grip", "grit", "gritty", "groan", "groin", "groom", "groove", "ground", "group",
|
|
146
|
+
"grove", "grow", "grown", "growth", "grudge", "grunt", "guard", "guess", "guest", "guide", "guild", "guilt",
|
|
147
|
+
"guilty", "guise", "guitar", "gulf", "gully", "gunman", "guru", "gut", "guy", "gypsy", "habit", "hack",
|
|
148
|
+
"had", "hague", "hail", "hair", "hairy", "haiti", "hale", "half", "hall", "halt", "hamlet", "hammer",
|
|
149
|
+
"hand", "handle", "handy", "hang", "hangar", "hanoi", "happen", "happy", "hard", "hardly", "hare", "harm",
|
|
150
|
+
"harp", "harry", "harsh", "has", "hash", "hassle", "hasta", "haste", "hasten", "hasty", "hat", "hatch",
|
|
151
|
+
"hate", "haul", "haunt", "havana", "have", "haven", "havoc", "hawaii", "hawk", "hawse", "hazard", "haze",
|
|
152
|
+
"hazel", "hazy", "heal", "health", "heap", "hear", "heard", "heart", "hearth", "hearty", "heat", "heater",
|
|
153
|
+
"heaven", "heavy", "hebrew", "heck", "hectic", "hedge", "heel", "hefty", "height", "heil", "heir", "held",
|
|
154
|
+
"helium", "helix", "hello", "helm", "helmet", "help", "hemp", "hence", "henry", "her", "herald", "herb",
|
|
155
|
+
"herd", "here", "hereby", "hermes", "hernia", "hero", "heroic", "hest", "hey", "heyday", "hick", "hidden",
|
|
156
|
+
"hide", "high", "higher", "highly", "hill", "him", "hind", "hindu", "hint", "hippy", "hire", "his",
|
|
157
|
+
"hiss", "hit", "hive", "hoard", "hoarse", "hobby", "hockey", "hold", "holder", "hollow", "holly", "holy",
|
|
158
|
+
"home", "honest", "honey", "hood", "hope", "hopple", "horrid", "horror", "horse", "hose", "host", "hotbox",
|
|
159
|
+
"hotel", "hound", "hour", "house", "hover", "how", "huck", "huge", "hull", "human", "humane", "humble",
|
|
160
|
+
"humid", "hung", "hunger", "hungry", "hunt", "hurdle", "hurl", "hurry", "hurt", "hush", "hut", "hybrid",
|
|
161
|
+
"hymn", "hyphen", "ice", "icing", "icon", "idaho", "idea", "ideal", "idiom", "idle", "idly", "idol",
|
|
162
|
+
"ignite", "ignore", "ill", "image", "immune", "impact", "imply", "import", "impose", "inca", "inch", "income",
|
|
163
|
+
"incur", "indeed", "index", "india", "indian", "indoor", "induce", "inept", "inert", "infant", "infect",
|
|
164
|
+
"infer",
|
|
165
|
+
"influx", "inform", "inhere", "inject", "injure", "injury", "ink", "inlaid", "inland", "inlet", "inmate", "inn",
|
|
166
|
+
"innate", "inner", "input", "insane", "insect", "insert", "inset", "inside", "insist", "insult", "insure",
|
|
167
|
+
"intact",
|
|
168
|
+
"intake", "intend", "inter", "into", "invade", "invent", "invest", "invite", "invoke", "inward", "iowa", "iran",
|
|
169
|
+
"iraq", "irish", "iron", "ironic", "irony", "isaac", "isabel", "islam", "island", "isle", "issue", "italy",
|
|
170
|
+
"item", "itself", "ivan", "ivory", "ivy", "jacket", "jacob", "jaguar", "jail", "james", "japan", "jargon",
|
|
171
|
+
"java", "jaw", "jazz", "jeep", "jelly", "jerky", "jersey", "jest", "jet", "jewel", "jim", "jive",
|
|
172
|
+
"job", "jock", "jockey", "john", "join", "joke", "jolly", "jolt", "jordan", "joseph", "joy", "joyful",
|
|
173
|
+
"joyous", "judas", "judge", "judy", "juice", "juicy", "july", "jumble", "jumbo", "jump", "june", "jungle",
|
|
174
|
+
"junior", "junk", "junta", "jury", "just", "kami", "kansas", "karate", "karl", "karma", "kedge", "keel",
|
|
175
|
+
"keen", "keep", "keeper", "kenya", "kept", "kernel", "kettle", "key", "khaki", "khaya", "khowar", "kick",
|
|
176
|
+
"kidnap", "kidney", "kin", "kind", "kindly", "king", "kiss", "kite", "kitten", "knack", "knaggy", "knee",
|
|
177
|
+
"knew", "knight", "knit", "knock", "knot", "know", "known", "koran", "korea", "kusan", "kuwait", "label",
|
|
178
|
+
"lace", "lack", "lad", "ladder", "laden", "lady", "lagoon", "laity", "lake", "lamb", "lame", "lamp",
|
|
179
|
+
"lance", "land", "lane", "laos", "lap", "lapse", "large", "larval", "laser", "last", "latch", "late",
|
|
180
|
+
"lately", "latent", "later", "latest", "latter", "laugh", "launch", "lava", "lavish", "law", "lawful", "lawn",
|
|
181
|
+
"laws", "lawyer", "lay", "layer", "layman", "lazy", "lead", "leader", "leaf", "leafy", "league", "leak",
|
|
182
|
+
"leaky", "lean", "leap", "learn", "lease", "leash", "least", "leave", "led", "ledge", "left", "leg",
|
|
183
|
+
"legacy", "legal", "legend", "legion", "lemon", "lend", "length", "lens", "lent", "leo", "leper", "lese",
|
|
184
|
+
"lesion", "less", "lessen", "lesser", "lesson", "lest", "let", "lethal", "letter", "letup", "level", "lever",
|
|
185
|
+
"levy", "lewis", "liable", "liar", "libel", "libya", "lice", "lick", "lid", "lie", "lied", "life",
|
|
186
|
+
"lift", "light", "like", "likely", "lima", "limb", "lime", "limit", "limp", "line", "linear", "linen",
|
|
187
|
+
"lineup", "linger", "link", "lion", "lip", "liquid", "lisbon", "list", "listen", "lit", "live", "lively",
|
|
188
|
+
"liver", "livy", "liz", "lizard", "load", "loaf", "loan", "lobby", "lobe", "local", "locate", "lock",
|
|
189
|
+
"locus", "lodge", "loft", "lofty", "log", "logic", "logo", "london", "lone", "lonely", "long", "longer",
|
|
190
|
+
"look", "loop", "loose", "loosen", "loot", "lord", "lorry", "lose", "loss", "lost", "lot", "lotus",
|
|
191
|
+
"loud", "loudly", "lounge", "lousy", "louvre", "love", "lovely", "lover", "low", "lower", "lowest", "loyal",
|
|
192
|
+
"lucid", "luck", "lucky", "lucy", "lukes", "lull", "lump", "lumpy", "lunacy", "lunar", "lunch", "lung",
|
|
193
|
+
"lure", "lurid", "lush", "lusory", "lute", "luther", "luxury", "lying", "lymph", "lyric", "macho", "macro",
|
|
194
|
+
"macte", "madam", "madame", "made", "madrid", "magic", "magma", "magnet", "magnum", "maid", "maiden", "mail",
|
|
195
|
+
"main", "mainly", "major", "make", "maker", "male", "malice", "mall", "malt", "malta", "mammal", "manage",
|
|
196
|
+
"mane", "mania", "manic", "manila", "manner", "manor", "mantle", "manual", "manure", "many", "map", "maple",
|
|
197
|
+
"marble", "march", "mare", "margin", "maria", "marina", "mark", "market", "marry", "mars", "marsh", "martin",
|
|
198
|
+
"martyr", "mary", "mask", "mason", "mass", "mast", "match", "mate", "matrix", "matter", "mature", "maxim",
|
|
199
|
+
"may", "maya", "maybe", "mayor", "maze", "mead", "meadow", "meal", "mean", "meant", "meat", "mecca",
|
|
200
|
+
"medal", "media", "median", "medic", "medium", "meet", "mellow", "melody", "melon", "melt", "member", "memo",
|
|
201
|
+
"memory", "menace", "mend", "mental", "mentor", "menu", "mercy", "mere", "merely", "merge", "merger", "merit",
|
|
202
|
+
"merry", "mesh", "mess", "messy", "met", "metal", "meter", "method", "methyl", "metric", "metro", "mexico",
|
|
203
|
+
"miami", "mickey", "mid", "midas", "midday", "middle", "midst", "midway", "might", "mighty", "milan", "mild",
|
|
204
|
+
"mildew", "mile", "milk", "milky", "mill", "mimic", "mince", "mind", "mine", "mini", "mink", "minor",
|
|
205
|
+
"mint", "minus", "minute", "mirror", "mirth", "misery", "miss", "mist", "misty", "mite", "mix", "mizzle",
|
|
206
|
+
"moan", "moat", "mobile", "mock", "mode", "model", "modem", "modern", "modest", "modify", "module", "moist",
|
|
207
|
+
"molar", "mole", "molten", "moment", "monaco", "monday", "money", "monies", "monk", "monkey", "month", "mood",
|
|
208
|
+
"moody", "moon", "moor", "moral", "morale", "morbid", "more", "morgue", "mortal", "mortar", "mosaic", "moscow",
|
|
209
|
+
"moses", "mosque", "moss", "most", "mostly", "moth", "mother", "motion", "motive", "motor", "mould", "mount",
|
|
210
|
+
"mourn", "mouse", "mouth", "move", "movie", "mrs", "much", "muck", "mucky", "mucus", "mud", "muddle",
|
|
211
|
+
"muddy", "mule", "mummy", "munich", "murky", "murmur", "muscle", "museum", "music", "mussel", "must", "mutant",
|
|
212
|
+
"mute", "mutiny", "mutter", "mutton", "mutual", "muzzle", "myopic", "myriad", "myself", "mystic", "myth",
|
|
213
|
+
"nadir",
|
|
214
|
+
"nail", "name", "namely", "nape", "napkin", "naples", "narrow", "nasal", "nation", "native", "nature", "nausea",
|
|
215
|
+
"naval", "nave", "navy", "near", "nearer", "nearly", "neat", "neatly", "neck", "need", "needle", "needy",
|
|
216
|
+
"negate", "nemo", "neon", "nepal", "nephew", "nerve", "nest", "neural", "never", "newark", "newly", "next",
|
|
217
|
+
"nice", "nicely", "niche", "nickel", "nidor", "niece", "night", "nile", "nimble", "nine", "ninety", "ninth",
|
|
218
|
+
"nobel", "noble", "nobody", "node", "noise", "noisy", "non", "none", "noon", "nor", "norm", "normal",
|
|
219
|
+
"north", "norway", "nose", "nostoc", "nosy", "not", "note", "notice", "notify", "notion", "nought", "noun",
|
|
220
|
+
"novel", "novice", "now", "nozzle", "nubere", "null", "numb", "number", "nurse", "nylon", "oak", "oasis",
|
|
221
|
+
"oath", "obese", "obey", "object", "oblige", "oboe", "obtain", "occult", "occupy", "occur", "ocean", "octave",
|
|
222
|
+
"odd", "off", "offend", "offer", "office", "offset", "often", "ohio", "oil", "oily", "okay", "old",
|
|
223
|
+
"older", "oldest", "olive", "omega", "omen", "omit", "once", "one", "onion", "only", "onset", "onto",
|
|
224
|
+
"onus", "onward", "opaque", "open", "openly", "opera", "opium", "oppose", "optic", "option", "oracle", "orange",
|
|
225
|
+
"orbit", "orchid", "orchil", "ordeal", "order", "organ", "orient", "origin", "ornate", "orphan", "oscar",
|
|
226
|
+
"oslo",
|
|
227
|
+
"other", "otter", "ought", "ounce", "our", "out", "outer", "output", "outset", "oval", "oven", "over",
|
|
228
|
+
"overt", "owe", "owing", "owl", "own", "owner", "oxford", "oxide", "oxygen", "oyster", "ozone", "pace",
|
|
229
|
+
"pack", "packet", "pact", "paddle", "paddy", "pagan", "page", "paid", "pain", "paint", "pair", "palace",
|
|
230
|
+
"pale", "palm", "panama", "panel", "panic", "papa", "papal", "paper", "parade", "parcel", "pardon", "parent",
|
|
231
|
+
"paris", "parish", "park", "parody", "parrot", "part", "partly", "party", "pascal", "pass", "past", "paste",
|
|
232
|
+
"pastel", "pastor", "pastry", "pat", "patch", "patent", "path", "patio", "patrol", "patron", "paul", "pause",
|
|
233
|
+
"pave", "pay", "peace", "peach", "peak", "pear", "pearl", "pedal", "peel", "peer", "peking", "pelvic",
|
|
234
|
+
"pelvis", "pen", "penal", "pence", "pencil", "pennon", "penny", "people", "pepper", "per", "perch", "peril",
|
|
235
|
+
"perish", "permit", "person", "peru", "pest", "peter", "petrol", "petty", "phage", "phase", "philip", "phone",
|
|
236
|
+
"photo", "phrase", "piano", "pick", "picket", "picnic", "pie", "piece", "pier", "pierce", "piety", "pig",
|
|
237
|
+
"pigeon", "piggy", "pigsty", "pike", "pile", "pill", "pillar", "pillow", "pilot", "pin", "pinch", "pine",
|
|
238
|
+
"pink", "pint", "pious", "pipe", "pirate", "piston", "pit", "pitch", "pity", "pivot", "pixel", "pizza",
|
|
239
|
+
"place", "placid", "plague", "plaguy", "plain", "plan", "plane", "planet", "plank", "plant", "plasma", "plate",
|
|
240
|
+
"play", "playa", "player", "plea", "plead", "please", "pledge", "plenty", "plenum", "plight", "plot", "ploy",
|
|
241
|
+
"plum", "plump", "plunge", "plural", "plus", "plush", "pocket", "pod", "poem", "poet", "poetic", "poetry",
|
|
242
|
+
"point", "poison", "poland", "polar", "pole", "police", "policy", "polish", "polite", "poll", "pollen", "polo",
|
|
243
|
+
"pond", "ponder", "pony", "pool", "poor", "poorly", "pop", "pope", "popery", "poppy", "pore", "pork",
|
|
244
|
+
"port", "portal", "pose", "posh", "post", "postal", "potato", "potent", "pouch", "pound", "pour", "powder",
|
|
245
|
+
"power", "prague", "praise", "prate", "pray", "prayer", "preach", "prefer", "prefix", "press", "pretty",
|
|
246
|
+
"price",
|
|
247
|
+
"pride", "priest", "primal", "prime", "prince", "print", "prior", "prism", "prison", "privy", "prize", "probe",
|
|
248
|
+
"profit", "prompt", "prone", "proof", "propel", "proper", "prose", "proton", "proud", "prove", "proven",
|
|
249
|
+
"proxy",
|
|
250
|
+
"prune", "psalm", "pseudo", "psyche", "pub", "public", "puff", "pull", "pulp", "pulpit", "pulsar", "pulse",
|
|
251
|
+
"pump", "punch", "pung", "punish", "punk", "pupil", "puppet", "puppy", "pure", "purely", "purge", "purify",
|
|
252
|
+
"purple", "purse", "pursue", "push", "pushy", "put", "putt", "puzzle", "quaint", "quake", "quarry", "quartz",
|
|
253
|
+
"quay", "quebec", "queen", "query", "quest", "queue", "quick", "quid", "quiet", "quilt", "quirk", "quit",
|
|
254
|
+
"quite", "quiver", "quiz", "quota", "quote", "rabato", "rabbit", "race", "racism", "rack", "racket", "radar",
|
|
255
|
+
"radio", "radish", "radius", "raffle", "raft", "rage", "raid", "rail", "rain", "rainy", "raise", "rally",
|
|
256
|
+
"ramp", "random", "range", "rank", "ransom", "rapid", "rare", "rarely", "rarity", "rash", "rat", "rate",
|
|
257
|
+
"rather", "ratify", "ratio", "rattle", "rave", "raven", "raw", "ray", "razor", "reach", "react", "read",
|
|
258
|
+
"reader", "ready", "real", "really", "realm", "reap", "rear", "reason", "rebel", "recall", "recent", "recess",
|
|
259
|
+
"recipe", "reckon", "record", "recoup", "rector", "red", "redeem", "reduce", "reed", "reef", "reefy", "refer",
|
|
260
|
+
"reform", "refuge", "refuse", "regal", "regard", "regent", "regime", "region", "regret", "reign", "relate",
|
|
261
|
+
"relax",
|
|
262
|
+
"relay", "relic", "relief", "relish", "rely", "remain", "remark", "remedy", "remind", "remit", "remote",
|
|
263
|
+
"remove",
|
|
264
|
+
"renal", "render", "rent", "rental", "repair", "repeal", "repeat", "repent", "repine", "reply", "report",
|
|
265
|
+
"rescue",
|
|
266
|
+
"resent", "reside", "resign", "resin", "resist", "resort", "rest", "result", "resume", "retail", "retain",
|
|
267
|
+
"retina",
|
|
268
|
+
"retire", "return", "reveal", "revest", "review", "revise", "revive", "revolt", "reward", "rex", "rhexia",
|
|
269
|
+
"rhine",
|
|
270
|
+
"rhino", "rho", "rhyme", "rhythm", "ribbon", "rice", "rich", "rick", "rid", "ride", "rider", "ridge",
|
|
271
|
+
"rife", "rifle", "rift", "right", "rigid", "ring", "rinse", "riot", "ripe", "ripen", "ripple", "rise",
|
|
272
|
+
"risk", "risky", "rite", "ritual", "ritz", "rival", "river", "road", "roar", "roast", "rob", "robe",
|
|
273
|
+
"robert", "robin", "robot", "robust", "rock", "rocket", "rocks", "rocky", "rod", "rode", "rodent", "rogue",
|
|
274
|
+
"role", "roll", "roman", "rome", "roof", "room", "root", "rope", "rosa", "rose", "roseau", "rosy",
|
|
275
|
+
"rotate", "rotor", "rotten", "rouge", "rough", "round", "route", "rover", "row", "royal", "rubble", "ruby",
|
|
276
|
+
"rudder", "rude", "rugby", "ruin", "rule", "ruler", "rumble", "run", "rune", "rung", "runway", "rural",
|
|
277
|
+
"rush", "russia", "rust", "rustic", "rusty", "ruta", "sabe", "saber", "sack", "sacred", "sad", "saddle",
|
|
278
|
+
"sadism", "sadly", "safari", "safe", "safely", "safer", "safety", "saga", "sage", "sahara", "said", "sail",
|
|
279
|
+
"sailor", "saint", "sake", "salad", "salary", "sale", "saline", "saliva", "salmon", "saloon", "salt", "salty",
|
|
280
|
+
"salute", "sam", "same", "sample", "sand", "sandy", "sane", "sarong", "sash", "satin", "satire", "saturn",
|
|
281
|
+
"sauce", "saudi", "sauna", "savage", "save", "saxon", "say", "scale", "scalp", "scan", "scant", "scar",
|
|
282
|
+
"scarce", "scare", "scarf", "scary", "scene", "scenic", "scent", "school", "scope", "score", "scorn", "scot",
|
|
283
|
+
"scotch", "scout", "scrap", "scream", "screen", "script", "scroll", "scrub", "scute", "sea", "seal", "seam",
|
|
284
|
+
"seaman", "search", "season", "seat", "second", "secret", "sect", "sector", "secure", "see", "seed", "seeing",
|
|
285
|
+
"seek", "seem", "seize", "seldom", "select", "self", "sell", "seller", "semi", "senate", "send", "senile",
|
|
286
|
+
"senior", "sense", "sensor", "sent", "sentry", "seoul", "sequel", "serene", "serial", "series", "sermon",
|
|
287
|
+
"serum",
|
|
288
|
+
"serve", "server", "set", "settle", "seven", "severe", "sewage", "shabby", "shade", "shadow", "shady", "shaft",
|
|
289
|
+
"shaggy", "shah", "shake", "shaky", "shall", "sham", "shame", "shanks", "shape", "share", "shark", "sharp",
|
|
290
|
+
"shawl", "she", "shear", "sheen", "sheep", "sheer", "sheet", "shelf", "shell", "sherry", "shield", "shift",
|
|
291
|
+
"shine", "shiny", "ship", "shire", "shirt", "shiver", "shock", "shoe", "shook", "shop", "shore", "short",
|
|
292
|
+
"shot", "should", "shout", "show", "shower", "shrank", "shrewd", "shrill", "shrimp", "shrine", "shrink",
|
|
293
|
+
"shrub",
|
|
294
|
+
"shrug", "shuha", "shut", "shy", "shyly", "side", "sided", "siege", "sigh", "sight", "sigma", "sign",
|
|
295
|
+
"signal", "silent", "silk", "silken", "silky", "sill", "silly", "silver", "simian", "simple", "simply", "since",
|
|
296
|
+
"sinful", "sing", "singer", "single", "sink", "sir", "siren", "sirius", "sister", "sit", "site", "six",
|
|
297
|
+
"sixth", "sixty", "size", "sketch", "skill", "skin", "skinny", "skip", "skirt", "skull", "sky", "slab",
|
|
298
|
+
"slabby", "slack", "slain", "slam", "slang", "slap", "slate", "slater", "sleek", "sleep", "sleepy", "sleeve",
|
|
299
|
+
"slice", "slick", "slid", "slide", "slight", "slim", "slimy", "sling", "slip", "slit", "slogan", "slope",
|
|
300
|
+
"sloppy", "slot", "slow", "slowly", "slug", "slum", "slump", "small", "smart", "smash", "smear", "smell",
|
|
301
|
+
"smelly", "smelt", "smile", "smite", "smoke", "smoky", "smooth", "smug", "snack", "snail", "snake", "snap",
|
|
302
|
+
"sneak", "snow", "snowy", "snug", "soak", "soap", "sober", "soccer", "social", "sock", "socket", "soda",
|
|
303
|
+
"sodden", "sodium", "sofa", "soft", "soften", "softly", "soggy", "soil", "solar", "sold", "sole", "solely",
|
|
304
|
+
"solemn", "solid", "solo", "solve", "somali", "some", "son", "sonar", "sonata", "song", "sonic", "sony",
|
|
305
|
+
"soon", "sooner", "soot", "soothe", "sordid", "sore", "sorrow", "sorry", "sort", "soul", "sound", "soup",
|
|
306
|
+
"sour", "source", "space", "spade", "spain", "span", "spare", "spark", "sparse", "spasm", "spat", "spate",
|
|
307
|
+
"speak", "spear", "speech", "speed", "speedy", "spell", "spend", "sphere", "spice", "spicy", "spider", "spiky",
|
|
308
|
+
"spill", "spin", "spinal", "spine", "spinus", "spiral", "spirit", "spite", "splash", "split", "spoil", "spoke",
|
|
309
|
+
"sponge", "spoon", "sport", "spot", "spouse", "spout", "spray", "spread", "spree", "spring", "sprint", "spur",
|
|
310
|
+
"squad", "square", "squash", "squat", "squid", "stab", "stable", "stack", "staff", "stage", "stain", "stair",
|
|
311
|
+
"stake", "stale", "stalin", "stall", "stamp", "stance", "stand", "staple", "star", "starch", "stare", "stark",
|
|
312
|
+
"start", "starve", "state", "static", "statue", "status", "stay", "stead", "steady", "steak", "steal", "steam",
|
|
313
|
+
"steel", "steep", "steer", "stem", "stench", "step", "steppe", "stereo", "stern", "stew", "stick", "sticky",
|
|
314
|
+
"stiff", "stifle", "stigma", "still", "sting", "stint", "stir", "stitch", "stock", "stocky", "stone", "stony",
|
|
315
|
+
"stool", "stop", "store", "storm", "stormy", "story", "stot", "stout", "stove", "strain", "strait", "strand",
|
|
316
|
+
"strap", "strata", "straw", "stray", "streak", "stream", "street", "stress", "strict", "stride", "strife",
|
|
317
|
+
"strike",
|
|
318
|
+
"string", "strip", "strive", "stroll", "strong", "stud", "studio", "study", "stuff", "stuffy", "stunt",
|
|
319
|
+
"sturdy",
|
|
320
|
+
"style", "submit", "subset", "subtle", "subtly", "suburb", "such", "sudan", "sudden", "sue", "suez", "suffer",
|
|
321
|
+
"sugar", "suit", "suite", "suitor", "sullen", "sultan", "sum", "summer", "summit", "summon", "sun", "sunday",
|
|
322
|
+
"sunny", "sunset", "super", "superb", "supper", "supple", "supply", "sure", "surely", "surf", "surge", "survey",
|
|
323
|
+
"suture", "swamp", "swan", "swap", "swarm", "sway", "swear", "sweat", "sweaty", "sweden", "sweep", "sweet",
|
|
324
|
+
"swell", "swift", "swim", "swine", "swing", "swirl", "swiss", "switch", "sword", "swore", "sydney", "symbol",
|
|
325
|
+
"synod", "syntax", "syria", "syrup", "system", "table", "tablet", "tace", "tacit", "tackle", "tact", "tactic",
|
|
326
|
+
"tail", "tailor", "taiwan", "take", "tale", "talent", "talk", "tall", "tally", "tame", "tandem", "tangle",
|
|
327
|
+
"tank", "tap", "tape", "target", "tariff", "tart", "tarzan", "task", "tasset", "taste", "tasty", "tattoo",
|
|
328
|
+
"taurus", "taut", "tavern", "tax", "taxi", "tea", "teach", "teak", "team", "tear", "tease", "tech",
|
|
329
|
+
"tecum", "teeth", "tehran", "tel", "tell", "temper", "temple", "tempo", "tempt", "ten", "tenant", "tend",
|
|
330
|
+
"tender", "tendon", "tenet", "tennis", "tenor", "tense", "tensor", "tent", "tenth", "tenure", "tera", "teresa",
|
|
331
|
+
"term", "test", "texas", "text", "than", "thank", "that", "the", "their", "them", "theme", "then",
|
|
332
|
+
"thence", "theory", "there", "these", "thesis", "they", "thick", "thief", "thigh", "thin", "thing", "think",
|
|
333
|
+
"third", "thirst", "thirty", "this", "thomas", "thorn", "those", "though", "thread", "threat", "three",
|
|
334
|
+
"thrill",
|
|
335
|
+
"thrive", "throat", "throne", "throng", "throw", "thrust", "thud", "thug", "thumb", "thump", "thus", "thyme",
|
|
336
|
+
"tibet", "tick", "ticket", "tidal", "tide", "tidy", "tie", "tier", "tiger", "tight", "tile", "tiling",
|
|
337
|
+
"till", "tilt", "timber", "time", "timid", "tin", "tiny", "tip", "tissue", "title", "toad", "toast",
|
|
338
|
+
"today", "token", "tokyo", "told", "toll", "tom", "tomato", "tomb", "tonal", "tone", "tonic", "too",
|
|
339
|
+
"took", "tool", "tooth", "top", "topaz", "tophet", "topic", "torch", "torque", "torso", "tort", "toss",
|
|
340
|
+
"total", "totem", "touch", "tough", "tour", "toward", "towel", "tower", "town", "toxic", "toxin", "trace",
|
|
341
|
+
"track", "tract", "trade", "tragic", "trail", "train", "trait", "tram", "trance", "trap", "trauma", "travel",
|
|
342
|
+
"tray", "tread", "treat", "treaty", "treble", "tree", "trek", "tremor", "trench", "trend", "trendy", "trial",
|
|
343
|
+
"tribal", "tribe", "trick", "tricky", "tried", "trifle", "trim", "trio", "trip", "triple", "troop", "trophy",
|
|
344
|
+
"trot", "trough", "trout", "truce", "truck", "true", "truly", "trunk", "trust", "truth", "try", "tsar",
|
|
345
|
+
"tube", "tulle", "tumble", "tuna", "tundra", "tune", "tung", "tunic", "tunis", "tunnel", "turban", "turf",
|
|
346
|
+
"turk", "turkey", "turn", "turtle", "tutor", "tweed", "twelve", "twenty", "twice", "twin", "twist", "two",
|
|
347
|
+
"tycoon", "tying", "type", "tyrant", "uganda", "ugly", "ulcer", "ultra", "umpire", "unable", "uncle", "under",
|
|
348
|
+
"uneasy", "unfair", "unify", "union", "unique", "unit", "unite", "unity", "unkind", "unlike", "unrest",
|
|
349
|
+
"unruly",
|
|
350
|
+
"unship", "until", "unwary", "update", "upheld", "uphill", "uphold", "upon", "uproar", "upset", "upshot",
|
|
351
|
+
"uptake",
|
|
352
|
+
"upturn", "upward", "urban", "urge", "urgent", "urging", "usable", "usage", "use", "useful", "user", "usual",
|
|
353
|
+
"utmost", "utter", "vacant", "vacuum", "vague", "vain", "valet", "valid", "valley", "value", "valve", "van",
|
|
354
|
+
"vanish", "vanity", "vary", "vase", "vast", "vat", "vault", "vector", "vedic", "veil", "vein", "velvet",
|
|
355
|
+
"vendor", "veneer", "venice", "venom", "vent", "venue", "venus", "verb", "verbal", "verge", "verify", "verity",
|
|
356
|
+
"verse", "versus", "very", "vessel", "vest", "veto", "vex", "via", "viable", "vicar", "vice", "victim",
|
|
357
|
+
"victor", "video", "vienna", "view", "vigil", "vigor", "viking", "vile", "villa", "vine", "vinyl", "viola",
|
|
358
|
+
"violet", "violin", "viral", "virgo", "virtue", "virus", "visa", "vision", "visit", "visual", "vitae", "vital",
|
|
359
|
+
"vivid", "vocal", "vodka", "vogue", "voice", "void", "volley", "volume", "vote", "vowel", "voyage", "vulgar",
|
|
360
|
+
"wade", "wage", "waist", "wait", "waiter", "wake", "walk", "walker", "wall", "wallet", "walnut", "wander",
|
|
361
|
+
"want", "war", "warden", "warm", "warmth", "warn", "warp", "warsaw", "wary", "was", "wash", "wasp",
|
|
362
|
+
"waste", "watch", "water", "watery", "wave", "way", "weak", "weaken", "wealth", "wear", "weary", "wedge",
|
|
363
|
+
"wee", "weed", "week", "weekly", "weep", "weight", "weird", "well", "were", "west", "wet", "whale",
|
|
364
|
+
"wharf", "what", "wheat", "wheel", "wheeze", "wheezy", "when", "whence", "where", "which", "whiff", "whig",
|
|
365
|
+
"while", "whim", "whip", "whisky", "white", "who", "whole", "wholly", "whom", "whose", "why", "wide",
|
|
366
|
+
"widely", "widen", "wider", "widow", "width", "wife", "wild", "wildly", "wilful", "will", "willow", "win",
|
|
367
|
+
"wind", "window", "windy", "wine", "winery", "wing", "wink", "winner", "winter", "wipe", "wire", "wisdom",
|
|
368
|
+
"wise", "wish", "wit", "witch", "with", "within", "witty", "wizard", "woke", "wolf", "wolves", "woman",
|
|
369
|
+
"womb", "won", "wonder", "wood", "wooden", "woods", "woody", "wool", "word", "work", "worker", "world",
|
|
370
|
+
"worm", "worry", "worse", "worst", "worth", "worthy", "would", "wound", "wrap", "wrath", "wreath", "wreck",
|
|
371
|
+
"wren", "wright", "wrist", "writ", "write", "writer", "wrong", "xerox", "yacht", "yager", "yale", "yard",
|
|
372
|
+
"yarn", "yeah", "year", "yeast", "yellow", "yemen", "yet", "yield", "yogurt", "yokel", "yolk", "york",
|
|
373
|
+
"you", "young", "your", "youth", "zaire", "zeal", "zebra", "zenith", "zero", "zigzag", "zinc", "zing",
|
|
374
|
+
"zipper", "zombie", "zone", "zurich"]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { WordList } from "../qrl/wordlist.js";
|
|
2
|
+
|
|
3
|
+
export function SeedBinToMnemonic(input) {
|
|
4
|
+
return binToMnemonic(input);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function binToMnemonic(input) {
|
|
8
|
+
if (String(input).length % 3 != 0) {
|
|
9
|
+
console.error("byte count needs to be a multiple of 3");
|
|
10
|
+
}
|
|
11
|
+
let mnemonic = ''
|
|
12
|
+
var separator = "";
|
|
13
|
+
let buf = Buffer.alloc(input.length * 4);
|
|
14
|
+
for (let nibble = 0; nibble < input.length * 2; nibble += 3) {
|
|
15
|
+
let p = nibble >> 1;
|
|
16
|
+
let b1 = input[p];
|
|
17
|
+
let b2 = 0;
|
|
18
|
+
if ((p + 1) < input.length) {
|
|
19
|
+
b2 = input[p + 1]
|
|
20
|
+
}
|
|
21
|
+
let idx = 0;
|
|
22
|
+
if (nibble % 2 == 0) {
|
|
23
|
+
idx = (b1 << 4) + (b2 >> 4);
|
|
24
|
+
} else {
|
|
25
|
+
idx = ((b1 & 0x0F) << 8) + b2;
|
|
26
|
+
}
|
|
27
|
+
mnemonic += separator + WordList[idx];
|
|
28
|
+
separator = " ";
|
|
29
|
+
}
|
|
30
|
+
// return buf.toString()
|
|
31
|
+
return mnemonic;
|
|
32
|
+
}
|