@iov/crypto
Advanced tools
Comparing version 0.6.1 to 0.7.0-alpha.0
@@ -25,4 +25,5 @@ "use strict"; | ||
const words = mnemonic.split(" "); | ||
if (words.length !== 12 && words.length !== 18 && words.length !== 24) { | ||
throw new Error(`Invalid word count in mnemonic (allowed: 12, 18, 24 got: ${words.length})`); | ||
const allowedWordsLengths = [12, 15, 18, 21, 24]; | ||
if (allowedWordsLengths.indexOf(words.length) === -1) { | ||
throw new Error(`Invalid word count in mnemonic (allowed: ${allowedWordsLengths} got: ${words.length})`); | ||
} | ||
@@ -48,3 +49,4 @@ for (const word of words) { | ||
static encode(entropy) { | ||
if (entropy.length !== 16 && entropy.length !== 24 && entropy.length !== 32) { | ||
const allowedEntropyLengths = [16, 20, 24, 28, 32]; | ||
if (allowedEntropyLengths.indexOf(entropy.length) === -1) { | ||
throw new Error("invalid input length"); | ||
@@ -51,0 +53,0 @@ } |
@@ -26,2 +26,6 @@ "use strict"; | ||
expect(bip39_1.Bip39.encode(fromHex("ffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong"); | ||
expect(bip39_1.Bip39.encode(fromHex("0000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon address"); | ||
expect(bip39_1.Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage wise"); | ||
expect(bip39_1.Bip39.encode(fromHex("8080808080808080808080808080808080808080")).asString()).toEqual("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor accident"); | ||
expect(bip39_1.Bip39.encode(fromHex("ffffffffffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrist"); | ||
expect(bip39_1.Bip39.encode(fromHex("000000000000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent"); | ||
@@ -31,2 +35,6 @@ expect(bip39_1.Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will"); | ||
expect(bip39_1.Bip39.encode(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when"); | ||
expect(bip39_1.Bip39.encode(fromHex("00000000000000000000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon admit"); | ||
expect(bip39_1.Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year viable"); | ||
expect(bip39_1.Bip39.encode(fromHex("80808080808080808080808080808080808080808080808080808080")).asString()).toEqual("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd apart"); | ||
expect(bip39_1.Bip39.encode(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo veteran"); | ||
expect(bip39_1.Bip39.encode(fromHex("0000000000000000000000000000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"); | ||
@@ -37,12 +45,20 @@ expect(bip39_1.Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title"); | ||
expect(bip39_1.Bip39.encode(fromHex("9e885d952ad362caeb4efe34a8e91bd2")).asString()).toEqual("ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic"); | ||
expect(bip39_1.Bip39.encode(fromHex("610b25967cdcca9d59875f5cb50b0ea754333118")).asString()).toEqual("genre float grain whale smile exchange gravity typical frequent portion senior exchange drip obtain glow"); | ||
expect(bip39_1.Bip39.encode(fromHex("6610b25967cdcca9d59875f5cb50b0ea75433311869e930b")).asString()).toEqual("gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog"); | ||
expect(bip39_1.Bip39.encode(fromHex("8a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc7")).asString()).toEqual("media soon raw edge embody palm reason pave right danger clay occur modify conduct ethics vessel journey toast cradle stuff laundry"); | ||
expect(bip39_1.Bip39.encode(fromHex("68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c")).asString()).toEqual("hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length"); | ||
expect(bip39_1.Bip39.encode(fromHex("c0ba5a8e914111210f2bd131f3d5e08d")).asString()).toEqual("scheme spot photo card baby mountain device kick cradle pact join borrow"); | ||
expect(bip39_1.Bip39.encode(fromHex("232c38b9a99e10d2253fa1aa2739a8e9c3b112d0")).asString()).toEqual("case gift common farm three harbor neutral vintage pretty degree health squeeze deposit maximum donor"); | ||
expect(bip39_1.Bip39.encode(fromHex("6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3")).asString()).toEqual("horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave"); | ||
expect(bip39_1.Bip39.encode(fromHex("49208c3112119c4770d44d1a9726b44135748bda464954338f3c1d91")).asString()).toEqual("empty afford arrange category border casual select meadow box rice public list firm echo harbor since feature organ someone depth bitter"); | ||
expect(bip39_1.Bip39.encode(fromHex("9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863")).asString()).toEqual("panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside"); | ||
expect(bip39_1.Bip39.encode(fromHex("23db8160a31d3e0dca3688ed941adbf3")).asString()).toEqual("cat swing flag economy stadium alone churn speed unique patch report train"); | ||
expect(bip39_1.Bip39.encode(fromHex("c9a0ed1374180cd8f8c5cc0bc9c719dfb67add59")).asString()).toEqual("situate alter dynamic trial liar hockey toast ridge armed evolve shoe satoshi guilt huge grass"); | ||
expect(bip39_1.Bip39.encode(fromHex("8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0")).asString()).toEqual("light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access"); | ||
expect(bip39_1.Bip39.encode(fromHex("dc8a247c5379f57c24dbfbd6a0699a8282875dd0a3f0f39b8fc020a4")).asString()).toEqual("symptom eye business plunge palm safe nature legal stove addict grit agree chronic puzzle dream lawn vicious symbol useless donor eagle"); | ||
expect(bip39_1.Bip39.encode(fromHex("066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad")).asString()).toEqual("all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform"); | ||
expect(bip39_1.Bip39.encode(fromHex("f30f8c1da665478f49b001d94c5fc452")).asString()).toEqual("vessel ladder alter error federal sibling chat ability sun glass valve picture"); | ||
expect(bip39_1.Bip39.encode(fromHex("ef38bbc81a5fa1756dfd654b0cc1a1759ce1ed94")).asString()).toEqual("upset shift velvet cruise wheel rival retire protect enrich gravity hair twenty sock walnut fat"); | ||
expect(bip39_1.Bip39.encode(fromHex("c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05")).asString()).toEqual("scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump"); | ||
expect(bip39_1.Bip39.encode(fromHex("a66afdf103bf42b5858cd1c23a20f7e5114edb111880d634b53454bf")).asString()).toEqual("please fitness labor alter vintage food bike olive season speed digital sketch belt horn dutch avoid stomach pizza escape practice walnut"); | ||
expect(bip39_1.Bip39.encode(fromHex("f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f")).asString()).toEqual("void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold"); | ||
@@ -80,3 +96,5 @@ // invalid input length | ||
new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"); | ||
new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon address"); | ||
new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent"); | ||
new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon admit"); | ||
new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"); | ||
@@ -125,3 +143,3 @@ }).not.toThrow(); | ||
}); | ||
it("word counts other than 12, 18, 24", () => { | ||
it("word counts other than 12, 15, 18, 21, 24", () => { | ||
// too few and too many words (11, 13, 17, 19, 23, 25) | ||
@@ -148,3 +166,3 @@ expect(() => { | ||
it("rejects invalid checksums", () => { | ||
// 12x, 18x, 24x "zoo" | ||
// 12x, 15x, 18x, 21x, 24x "zoo" | ||
expect(() => { | ||
@@ -154,5 +172,11 @@ new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
expect(() => { | ||
new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
}).toThrowError(/invalid mnemonic checksum/i); | ||
expect(() => { | ||
new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
}).toThrowError(/invalid mnemonic checksum/i); | ||
expect(() => { | ||
new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
}).toThrowError(/invalid mnemonic checksum/i); | ||
expect(() => { | ||
new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
@@ -189,2 +213,6 @@ }).toThrowError(/invalid mnemonic checksum/i); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong"))).toEqual(fromHex("ffffffffffffffffffffffffffffffff")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon address"))).toEqual(fromHex("0000000000000000000000000000000000000000")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage wise"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor accident"))).toEqual(fromHex("8080808080808080808080808080808080808080")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrist"))).toEqual(fromHex("ffffffffffffffffffffffffffffffffffffffff")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent"))).toEqual(fromHex("000000000000000000000000000000000000000000000000")); | ||
@@ -194,2 +222,6 @@ expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when"))).toEqual(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffff")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon admit"))).toEqual(fromHex("00000000000000000000000000000000000000000000000000000000")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year viable"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd apart"))).toEqual(fromHex("80808080808080808080808080808080808080808080808080808080")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo veteran"))).toEqual(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"))).toEqual(fromHex("0000000000000000000000000000000000000000000000000000000000000000")); | ||
@@ -200,12 +232,20 @@ expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic"))).toEqual(fromHex("9e885d952ad362caeb4efe34a8e91bd2")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("genre float grain whale smile exchange gravity typical frequent portion senior exchange drip obtain glow"))).toEqual(fromHex("610b25967cdcca9d59875f5cb50b0ea754333118")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog"))).toEqual(fromHex("6610b25967cdcca9d59875f5cb50b0ea75433311869e930b")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("media soon raw edge embody palm reason pave right danger clay occur modify conduct ethics vessel journey toast cradle stuff laundry"))).toEqual(fromHex("8a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc7")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length"))).toEqual(fromHex("68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("scheme spot photo card baby mountain device kick cradle pact join borrow"))).toEqual(fromHex("c0ba5a8e914111210f2bd131f3d5e08d")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("case gift common farm three harbor neutral vintage pretty degree health squeeze deposit maximum donor"))).toEqual(fromHex("232c38b9a99e10d2253fa1aa2739a8e9c3b112d0")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave"))).toEqual(fromHex("6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("empty afford arrange category border casual select meadow box rice public list firm echo harbor since feature organ someone depth bitter"))).toEqual(fromHex("49208c3112119c4770d44d1a9726b44135748bda464954338f3c1d91")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside"))).toEqual(fromHex("9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("cat swing flag economy stadium alone churn speed unique patch report train"))).toEqual(fromHex("23db8160a31d3e0dca3688ed941adbf3")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("situate alter dynamic trial liar hockey toast ridge armed evolve shoe satoshi guilt huge grass"))).toEqual(fromHex("c9a0ed1374180cd8f8c5cc0bc9c719dfb67add59")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access"))).toEqual(fromHex("8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("symptom eye business plunge palm safe nature legal stove addict grit agree chronic puzzle dream lawn vicious symbol useless donor eagle"))).toEqual(fromHex("dc8a247c5379f57c24dbfbd6a0699a8282875dd0a3f0f39b8fc020a4")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform"))).toEqual(fromHex("066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("vessel ladder alter error federal sibling chat ability sun glass valve picture"))).toEqual(fromHex("f30f8c1da665478f49b001d94c5fc452")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("upset shift velvet cruise wheel rival retire protect enrich gravity hair twenty sock walnut fat"))).toEqual(fromHex("ef38bbc81a5fa1756dfd654b0cc1a1759ce1ed94")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump"))).toEqual(fromHex("c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("please fitness labor alter vintage food bike olive season speed digital sketch belt horn dutch avoid stomach pizza escape practice walnut"))).toEqual(fromHex("a66afdf103bf42b5858cd1c23a20f7e5114edb111880d634b53454bf")); | ||
expect(bip39_1.Bip39.decode(new bip39_1.EnglishMnemonic("void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold"))).toEqual(fromHex("f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f")); | ||
@@ -212,0 +252,0 @@ }); |
{ | ||
"name": "@iov/crypto", | ||
"version": "0.6.1", | ||
"version": "0.7.0-alpha.0", | ||
"description": "Cryptography resources for IOV projects", | ||
@@ -46,3 +46,3 @@ "author": "IOV SAS <admin@iov.one>", | ||
}, | ||
"gitHead": "ffbe666d41aff5d0509defadbf82fb36fa6682c7" | ||
"gitHead": "de4f026f0c41c80dac2fd4ec94b6af653e9a642e" | ||
} |
@@ -20,2 +20,6 @@ import { Encoding } from "@iov/encoding"; | ||
expect(Bip39.encode(fromHex("ffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong"); | ||
expect(Bip39.encode(fromHex("0000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon address"); | ||
expect(Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage wise"); | ||
expect(Bip39.encode(fromHex("8080808080808080808080808080808080808080")).asString()).toEqual("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor accident"); | ||
expect(Bip39.encode(fromHex("ffffffffffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrist"); | ||
expect(Bip39.encode(fromHex("000000000000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent"); | ||
@@ -25,2 +29,6 @@ expect(Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will"); | ||
expect(Bip39.encode(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when"); | ||
expect(Bip39.encode(fromHex("00000000000000000000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon admit"); | ||
expect(Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year viable"); | ||
expect(Bip39.encode(fromHex("80808080808080808080808080808080808080808080808080808080")).asString()).toEqual("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd apart"); | ||
expect(Bip39.encode(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff")).asString()).toEqual("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo veteran"); | ||
expect(Bip39.encode(fromHex("0000000000000000000000000000000000000000000000000000000000000000")).asString()).toEqual("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"); | ||
@@ -31,12 +39,20 @@ expect(Bip39.encode(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")).asString()).toEqual("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title"); | ||
expect(Bip39.encode(fromHex("9e885d952ad362caeb4efe34a8e91bd2")).asString()).toEqual("ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic"); | ||
expect(Bip39.encode(fromHex("610b25967cdcca9d59875f5cb50b0ea754333118")).asString()).toEqual("genre float grain whale smile exchange gravity typical frequent portion senior exchange drip obtain glow"); | ||
expect(Bip39.encode(fromHex("6610b25967cdcca9d59875f5cb50b0ea75433311869e930b")).asString()).toEqual("gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog"); | ||
expect(Bip39.encode(fromHex("8a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc7")).asString()).toEqual("media soon raw edge embody palm reason pave right danger clay occur modify conduct ethics vessel journey toast cradle stuff laundry"); | ||
expect(Bip39.encode(fromHex("68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c")).asString()).toEqual("hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length"); | ||
expect(Bip39.encode(fromHex("c0ba5a8e914111210f2bd131f3d5e08d")).asString()).toEqual("scheme spot photo card baby mountain device kick cradle pact join borrow"); | ||
expect(Bip39.encode(fromHex("232c38b9a99e10d2253fa1aa2739a8e9c3b112d0")).asString()).toEqual("case gift common farm three harbor neutral vintage pretty degree health squeeze deposit maximum donor"); | ||
expect(Bip39.encode(fromHex("6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3")).asString()).toEqual("horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave"); | ||
expect(Bip39.encode(fromHex("49208c3112119c4770d44d1a9726b44135748bda464954338f3c1d91")).asString()).toEqual("empty afford arrange category border casual select meadow box rice public list firm echo harbor since feature organ someone depth bitter"); | ||
expect(Bip39.encode(fromHex("9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863")).asString()).toEqual("panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside"); | ||
expect(Bip39.encode(fromHex("23db8160a31d3e0dca3688ed941adbf3")).asString()).toEqual("cat swing flag economy stadium alone churn speed unique patch report train"); | ||
expect(Bip39.encode(fromHex("c9a0ed1374180cd8f8c5cc0bc9c719dfb67add59")).asString()).toEqual("situate alter dynamic trial liar hockey toast ridge armed evolve shoe satoshi guilt huge grass"); | ||
expect(Bip39.encode(fromHex("8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0")).asString()).toEqual("light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access"); | ||
expect(Bip39.encode(fromHex("dc8a247c5379f57c24dbfbd6a0699a8282875dd0a3f0f39b8fc020a4")).asString()).toEqual("symptom eye business plunge palm safe nature legal stove addict grit agree chronic puzzle dream lawn vicious symbol useless donor eagle"); | ||
expect(Bip39.encode(fromHex("066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad")).asString()).toEqual("all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform"); | ||
expect(Bip39.encode(fromHex("f30f8c1da665478f49b001d94c5fc452")).asString()).toEqual("vessel ladder alter error federal sibling chat ability sun glass valve picture"); | ||
expect(Bip39.encode(fromHex("ef38bbc81a5fa1756dfd654b0cc1a1759ce1ed94")).asString()).toEqual("upset shift velvet cruise wheel rival retire protect enrich gravity hair twenty sock walnut fat"); | ||
expect(Bip39.encode(fromHex("c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05")).asString()).toEqual("scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump"); | ||
expect(Bip39.encode(fromHex("a66afdf103bf42b5858cd1c23a20f7e5114edb111880d634b53454bf")).asString()).toEqual("please fitness labor alter vintage food bike olive season speed digital sketch belt horn dutch avoid stomach pizza escape practice walnut"); | ||
expect(Bip39.encode(fromHex("f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f")).asString()).toEqual("void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold"); | ||
@@ -77,3 +93,5 @@ | ||
new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"); | ||
new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon address"); | ||
new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent"); | ||
new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon admit"); | ||
new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"); | ||
@@ -126,3 +144,3 @@ }).not.toThrow(); | ||
it("word counts other than 12, 18, 24", () => { | ||
it("word counts other than 12, 15, 18, 21, 24", () => { | ||
// too few and too many words (11, 13, 17, 19, 23, 25) | ||
@@ -150,3 +168,3 @@ expect(() => { | ||
it("rejects invalid checksums", () => { | ||
// 12x, 18x, 24x "zoo" | ||
// 12x, 15x, 18x, 21x, 24x "zoo" | ||
expect(() => { | ||
@@ -156,5 +174,11 @@ new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
expect(() => { | ||
new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
}).toThrowError(/invalid mnemonic checksum/i); | ||
expect(() => { | ||
new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
}).toThrowError(/invalid mnemonic checksum/i); | ||
expect(() => { | ||
new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
}).toThrowError(/invalid mnemonic checksum/i); | ||
expect(() => { | ||
new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo"); | ||
@@ -194,2 +218,6 @@ }).toThrowError(/invalid mnemonic checksum/i); | ||
expect(Bip39.decode(new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong"))).toEqual(fromHex("ffffffffffffffffffffffffffffffff")); | ||
expect(Bip39.decode(new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon address"))).toEqual(fromHex("0000000000000000000000000000000000000000")); | ||
expect(Bip39.decode(new EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage wise"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(Bip39.decode(new EnglishMnemonic("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor accident"))).toEqual(fromHex("8080808080808080808080808080808080808080")); | ||
expect(Bip39.decode(new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrist"))).toEqual(fromHex("ffffffffffffffffffffffffffffffffffffffff")); | ||
expect(Bip39.decode(new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent"))).toEqual(fromHex("000000000000000000000000000000000000000000000000")); | ||
@@ -199,2 +227,8 @@ expect(Bip39.decode(new EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(Bip39.decode(new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when"))).toEqual(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffff")); | ||
expect(Bip39.decode(new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon admit"))).toEqual(fromHex("00000000000000000000000000000000000000000000000000000000")); | ||
expect(Bip39.decode(new EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year viable"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(Bip39.decode(new EnglishMnemonic("letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd apart"))).toEqual(fromHex("80808080808080808080808080808080808080808080808080808080")); | ||
expect(Bip39.decode(new EnglishMnemonic("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo veteran"))).toEqual(fromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); | ||
expect(Bip39.decode(new EnglishMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"))).toEqual(fromHex("0000000000000000000000000000000000000000000000000000000000000000")); | ||
@@ -205,12 +239,20 @@ expect(Bip39.decode(new EnglishMnemonic("legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title"))).toEqual(fromHex("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f")); | ||
expect(Bip39.decode(new EnglishMnemonic("ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic"))).toEqual(fromHex("9e885d952ad362caeb4efe34a8e91bd2")); | ||
expect(Bip39.decode(new EnglishMnemonic("genre float grain whale smile exchange gravity typical frequent portion senior exchange drip obtain glow"))).toEqual(fromHex("610b25967cdcca9d59875f5cb50b0ea754333118")); | ||
expect(Bip39.decode(new EnglishMnemonic("gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog"))).toEqual(fromHex("6610b25967cdcca9d59875f5cb50b0ea75433311869e930b")); | ||
expect(Bip39.decode(new EnglishMnemonic("media soon raw edge embody palm reason pave right danger clay occur modify conduct ethics vessel journey toast cradle stuff laundry"))).toEqual(fromHex("8a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc7")); | ||
expect(Bip39.decode(new EnglishMnemonic("hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length"))).toEqual(fromHex("68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c")); | ||
expect(Bip39.decode(new EnglishMnemonic("scheme spot photo card baby mountain device kick cradle pact join borrow"))).toEqual(fromHex("c0ba5a8e914111210f2bd131f3d5e08d")); | ||
expect(Bip39.decode(new EnglishMnemonic("case gift common farm three harbor neutral vintage pretty degree health squeeze deposit maximum donor"))).toEqual(fromHex("232c38b9a99e10d2253fa1aa2739a8e9c3b112d0")); | ||
expect(Bip39.decode(new EnglishMnemonic("horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave"))).toEqual(fromHex("6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3")); | ||
expect(Bip39.decode(new EnglishMnemonic("empty afford arrange category border casual select meadow box rice public list firm echo harbor since feature organ someone depth bitter"))).toEqual(fromHex("49208c3112119c4770d44d1a9726b44135748bda464954338f3c1d91")); | ||
expect(Bip39.decode(new EnglishMnemonic("panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside"))).toEqual(fromHex("9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863")); | ||
expect(Bip39.decode(new EnglishMnemonic("cat swing flag economy stadium alone churn speed unique patch report train"))).toEqual(fromHex("23db8160a31d3e0dca3688ed941adbf3")); | ||
expect(Bip39.decode(new EnglishMnemonic("situate alter dynamic trial liar hockey toast ridge armed evolve shoe satoshi guilt huge grass"))).toEqual(fromHex("c9a0ed1374180cd8f8c5cc0bc9c719dfb67add59")); | ||
expect(Bip39.decode(new EnglishMnemonic("light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access"))).toEqual(fromHex("8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0")); | ||
expect(Bip39.decode(new EnglishMnemonic("symptom eye business plunge palm safe nature legal stove addict grit agree chronic puzzle dream lawn vicious symbol useless donor eagle"))).toEqual(fromHex("dc8a247c5379f57c24dbfbd6a0699a8282875dd0a3f0f39b8fc020a4")); | ||
expect(Bip39.decode(new EnglishMnemonic("all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform"))).toEqual(fromHex("066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad")); | ||
expect(Bip39.decode(new EnglishMnemonic("vessel ladder alter error federal sibling chat ability sun glass valve picture"))).toEqual(fromHex("f30f8c1da665478f49b001d94c5fc452")); | ||
expect(Bip39.decode(new EnglishMnemonic("upset shift velvet cruise wheel rival retire protect enrich gravity hair twenty sock walnut fat"))).toEqual(fromHex("ef38bbc81a5fa1756dfd654b0cc1a1759ce1ed94")); | ||
expect(Bip39.decode(new EnglishMnemonic("scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump"))).toEqual(fromHex("c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05")); | ||
expect(Bip39.decode(new EnglishMnemonic("please fitness labor alter vintage food bike olive season speed digital sketch belt horn dutch avoid stomach pizza escape practice walnut"))).toEqual(fromHex("a66afdf103bf42b5858cd1c23a20f7e5114edb111880d634b53454bf")); | ||
expect(Bip39.decode(new EnglishMnemonic("void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold"))).toEqual(fromHex("f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f")); | ||
@@ -217,0 +259,0 @@ }); |
@@ -21,4 +21,7 @@ import * as bip39 from "bip39"; | ||
const words = mnemonic.split(" "); | ||
if (words.length !== 12 && words.length !== 18 && words.length !== 24) { | ||
throw new Error(`Invalid word count in mnemonic (allowed: 12, 18, 24 got: ${words.length})`); | ||
const allowedWordsLengths: ReadonlyArray<number> = [12, 15, 18, 21, 24]; | ||
if (allowedWordsLengths.indexOf(words.length) === -1) { | ||
throw new Error( | ||
`Invalid word count in mnemonic (allowed: ${allowedWordsLengths} got: ${words.length})`, | ||
); | ||
} | ||
@@ -46,3 +49,5 @@ | ||
public static encode(entropy: Uint8Array): EnglishMnemonic { | ||
if (entropy.length !== 16 && entropy.length !== 24 && entropy.length !== 32) { | ||
const allowedEntropyLengths: ReadonlyArray<number> = [16, 20, 24, 28, 32]; | ||
if (allowedEntropyLengths.indexOf(entropy.length) === -1) { | ||
throw new Error("invalid input length"); | ||
@@ -49,0 +54,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
733777
5648
69