You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

76 lines
3.0 KiB

import test from 'ava';
import bip39v from '..';
const fixtures = {
versionBytes: {
P2PKH: 0x00,
P2WPKHP2SH: 0x01,
P2WPKH: 0x02
},
mnemonics: {
P2PKH: 'seed version abandon bus rebuild logic connect wise illegal traffic transfer olympic royal style equal',
P2WPKHP2SH: 'seed version about math twice crater force critic grace panic party label flag draft sketch',
P2WPKH: 'seed version absent reward pipe sketch clarify sight spread addict divorce idle burst alarm tide',
UNKNOWN: 'seed version divide rural field error snack clump gather shift globe mask trend october ten'
},
nonVersionedMnemonic: 'much bottom such hurt hunt welcome cushion erosion pulse admit name deer'
};
test('bip39v is exported', t => {
t.not(bip39v, undefined);
});
test('bip39v.generateMnemonic() defaults to 24 words', t => {
t.is(bip39v.generateMnemonic().split(' ').length, 24);
});
test('bip39v.generateMnemonic(length) generates different length mnemonics', t => {
t.is(bip39v.generateMnemonic(128).split(' ').length, 15);
t.is(bip39v.generateMnemonic(160).split(' ').length, 18);
t.is(bip39v.generateMnemonic(192).split(' ').length, 21);
t.is(bip39v.generateMnemonic(224).split(' ').length, 24);
});
test('bip39v.generateMnemonic() defaults to P2PKH version byte', t => {
const mnemonic = bip39v.generateMnemonic();
const versionByte = bip39v.mnemonicToVersionByte(mnemonic);
t.is(versionByte, bip39v.versions.P2PKH);
t.is(versionByte, fixtures.versionBytes.P2PKH);
});
test('bip39v.generateMnemonic(length, version) adds correct version', t => {
Object.entries(fixtures.versionBytes).forEach(([version, byte]) => {
const mnemonic = bip39v.generateMnemonic(128, bip39v.versions[version]);
const versionByte = bip39v.mnemonicToVersionByte(mnemonic);
const versionString = bip39v.mnemonicToVersion(mnemonic);
t.is(versionByte, bip39v.versions[version]);
t.is(versionByte, byte);
t.is(versionString, version);
});
});
test('bip39v.isVersionedMnemonic(mnemonic) against fixture data', t => {
Object.values(fixtures.mnemonics).forEach(mnemonic => {
const isVersionedMnemonic = bip39v.isVersionedMnemonic(mnemonic);
t.true(isVersionedMnemonic);
});
const isVersionedMnemonic = bip39v.isVersionedMnemonic(fixtures.nonVersionedMnemonic);
t.false(isVersionedMnemonic);
});
test('bip39v.mnemonicToVersionByte(mnemonic) against fixture data', t => {
Object.entries(fixtures.mnemonics).forEach(([version, mnemonic]) => {
const versionByte = bip39v.mnemonicToVersionByte(mnemonic);
const expectedVersionByte = version === 'UNKNOWN' ? 0xFF : fixtures.versionBytes[version];
t.is(versionByte, expectedVersionByte);
});
t.throws(() => bip39v.mnemonicToVersionByte(fixtures.nonVersionedMnemonic));
});
test('bip39v.mnemonicToVersion(mnemonic) against fixture data', t => {
Object.entries(fixtures.mnemonics).forEach(([version, mnemonic]) => {
const versionString = bip39v.mnemonicToVersion(mnemonic);
t.is(versionString, version);
});
t.throws(() => bip39v.mnemonicToVersion(fixtures.nonVersionedMnemonic));
});