BlueWallet/tests/unit/hd-aezeed.test.js

146 lines
6.7 KiB
JavaScript
Raw Normal View History

import { HDAezeedWallet, WatchOnlyWallet } from '../../class';
const assert = require('assert');
describe('HDAezeedWallet', () => {
it('can import mnemonics and generate addresses and WIFs', async function () {
const aezeed = new HDAezeedWallet();
aezeed.setSecret('bs');
assert.ok(!(await aezeed.validateMnemonicAsync()));
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
// correct pass:
aezeed.setSecret(
'able mix price funny host express lawsuit congress antique float pig exchange vapor drip wide cup style apple tumble verb fix blush tongue market',
);
aezeed.setPassphrase('strongPassword');
assert.ok(await aezeed.validateMnemonicAsync());
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
// no pass but its required:
aezeed.setSecret(
'able mix price funny host express lawsuit congress antique float pig exchange vapor drip wide cup style apple tumble verb fix blush tongue market',
);
aezeed.setPassphrase();
assert.ok(!(await aezeed.validateMnemonicAsync()));
assert.ok(await aezeed.mnemonicInvalidPassword());
// wrong pass:
aezeed.setSecret(
'able mix price funny host express lawsuit congress antique float pig exchange vapor drip wide cup style apple tumble verb fix blush tongue market',
);
aezeed.setPassphrase('badpassword');
assert.ok(!(await aezeed.validateMnemonicAsync()));
assert.ok(await aezeed.mnemonicInvalidPassword());
aezeed.setSecret(
'able concert slush lend olive cost wagon dawn board robot park snap dignity churn fiction quote shrimp hammer wing jump immune skill sunset west',
);
aezeed.setPassphrase();
assert.ok(await aezeed.validateMnemonicAsync());
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
2021-03-25 15:28:25 +00:00
aezeed.setSecret(
'able concert slush lend olive cost wagon dawn board robot park snap dignity churn fiction quote shrimp hammer wing jump immune skill sunset west',
2021-03-25 15:28:25 +00:00
);
aezeed.setPassphrase('aezeed');
2021-03-25 15:28:25 +00:00
assert.ok(await aezeed.validateMnemonicAsync());
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
aezeed.setSecret(
'abstract rhythm weird food attract treat mosquito sight royal actor surround ride strike remove guilt catch filter summer mushroom protect poverty cruel chaos pattern',
);
aezeed.setPassphrase();
assert.ok(await aezeed.validateMnemonicAsync());
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
assert.strictEqual(
aezeed.getXpub(),
'zpub6rkAmx9z6PmK7tBpGQatqpRweZvRw7uqiEMRS9KuZA9VFKUSoz3GQeJFtRQsQwduWugh5mGHro1tGnt78ci9AiB8qEH4hCRBWxdMaxadGVy',
);
let address = aezeed._getExternalAddressByIndex(0);
assert.strictEqual(address, 'bc1qdjj7lhj9lnjye7xq3dzv3r4z0cta294xy78txn');
assert.ok(aezeed.getAllExternalAddresses().includes('bc1qdjj7lhj9lnjye7xq3dzv3r4z0cta294xy78txn'));
address = aezeed._getExternalAddressByIndex(1);
assert.strictEqual(address, 'bc1qswr3s4fylskqn9vemef8l28qukshuagsjz3wpe');
assert.ok(aezeed.getAllExternalAddresses().includes('bc1qswr3s4fylskqn9vemef8l28qukshuagsjz3wpe'));
address = aezeed._getInternalAddressByIndex(0);
assert.strictEqual(address, 'bc1qzyjq8sjj56n8v9fgw5klsc8sq8yuy0jx03hzzp');
let wif = aezeed._getExternalWIFByIndex(0);
assert.strictEqual(wif, 'KxtkgprHVXCcgzRetDt3JnNuRApgzQyRrvAuwiE1yFPjmYnWh6rH');
wif = aezeed._getInternalWIFByIndex(0);
assert.strictEqual(wif, 'L1dewhNXkVMB3JdoXYRikbz6g4CbaMGfSqSXSrmTkk5PvzmEgpdT');
assert.strictEqual(aezeed.getIdentityPubkey(), '0384b9a7158320e828280075224af324931ca9d6de4334f724dbb553ffee447164');
2021-01-30 12:11:30 +00:00
// we should not really test private methods, but oh well
assert.strictEqual(
aezeed._getNodePubkeyByIndex(0, 0).toString('hex'),
'03ed28668d446c6e2ac11e4848f7afd894761ad26569baa8a16adff723699f2c07',
);
assert.strictEqual(
aezeed._getNodePubkeyByIndex(1, 0).toString('hex'),
'0210791263114fe72ab5a2131ca1986b84c62a93e30ee9d509266f1eadf4febaf2',
);
assert.strictEqual(
aezeed._getPubkeyByAddress(aezeed._getExternalAddressByIndex(1)).toString('hex'),
aezeed._getNodePubkeyByIndex(0, 1).toString('hex'),
);
assert.strictEqual(
aezeed._getPubkeyByAddress(aezeed._getInternalAddressByIndex(1)).toString('hex'),
aezeed._getNodePubkeyByIndex(1, 1).toString('hex'),
);
});
2021-03-09 14:26:56 +03:00
it('watch-only from zpub produces correct addresses', async () => {
const aezeed = new HDAezeedWallet();
aezeed.setSecret(
'abstract rhythm weird food attract treat mosquito sight royal actor surround ride strike remove guilt catch filter summer mushroom protect poverty cruel chaos pattern',
);
assert.ok(await aezeed.validateMnemonicAsync());
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
assert.strictEqual(
aezeed.getXpub(),
'zpub6rkAmx9z6PmK7tBpGQatqpRweZvRw7uqiEMRS9KuZA9VFKUSoz3GQeJFtRQsQwduWugh5mGHro1tGnt78ci9AiB8qEH4hCRBWxdMaxadGVy',
);
const address = aezeed._getExternalAddressByIndex(0);
assert.strictEqual(address, 'bc1qdjj7lhj9lnjye7xq3dzv3r4z0cta294xy78txn');
assert.ok(aezeed.getAllExternalAddresses().includes('bc1qdjj7lhj9lnjye7xq3dzv3r4z0cta294xy78txn'));
const watchOnly = new WatchOnlyWallet();
watchOnly.setSecret(aezeed.getXpub());
watchOnly.init();
assert.strictEqual(watchOnly._getExternalAddressByIndex(0), aezeed._getExternalAddressByIndex(0));
assert.ok(watchOnly.weOwnAddress('bc1qdjj7lhj9lnjye7xq3dzv3r4z0cta294xy78txn'));
2021-05-20 09:49:40 +01:00
assert.ok(!watchOnly.weOwnAddress('garbage'));
assert.ok(!watchOnly.weOwnAddress(false));
});
2021-03-09 14:26:56 +03:00
it('can sign and verify messages', async () => {
const aezeed = new HDAezeedWallet();
aezeed.setSecret(
'abstract rhythm weird food attract treat mosquito sight royal actor surround ride strike remove guilt catch filter summer mushroom protect poverty cruel chaos pattern',
);
assert.ok(await aezeed.validateMnemonicAsync());
assert.ok(!(await aezeed.mnemonicInvalidPassword()));
let signature;
// external address
2021-03-11 13:45:49 +03:00
signature = aezeed.signMessage('vires is numeris', aezeed._getExternalAddressByIndex(0));
2021-03-09 14:26:56 +03:00
assert.strictEqual(signature, 'J9zF7mdGGdc/9HMlvor6Zl7ap1qseQpiBDJ4oaSpkzbQGGhdfkM6LHo6m9BV8o/BlqiQI1vuODaNlBFyeyIWgfE=');
2021-03-11 13:45:49 +03:00
assert.strictEqual(aezeed.verifyMessage('vires is numeris', aezeed._getExternalAddressByIndex(0), signature), true);
2021-03-09 14:26:56 +03:00
// internal address
2021-03-11 13:45:49 +03:00
signature = aezeed.signMessage('vires is numeris', aezeed._getInternalAddressByIndex(0));
2021-03-09 14:26:56 +03:00
assert.strictEqual(signature, 'KIda06aSswmo9NiAYNUBRADA9q1v39raSmHHVg56+thtah5xL7hVw/x+cZgydFNyel2bXfyGluJRaP1uRQfJtzo=');
2021-03-11 13:45:49 +03:00
assert.strictEqual(aezeed.verifyMessage('vires is numeris', aezeed._getInternalAddressByIndex(0), signature), true);
2021-03-09 14:26:56 +03:00
});
});