mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-10-17 05:19:36 +00:00
68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
|
var crypto = require('./trezor-crypto');
|
||
|
|
||
|
/* typedef struct {
|
||
|
uint32_t depth;
|
||
|
uint32_t fingerprint;
|
||
|
uint32_t child_num;
|
||
|
uint8_t chain_code[32];
|
||
|
uint8_t private_key[32];
|
||
|
uint8_t public_key[33];
|
||
|
} HDNode;
|
||
|
*/
|
||
|
|
||
|
var HDNODE_SIZE = 4 + 4 + 4 + 32 + 32 + 33;
|
||
|
var hdnode = crypto._malloc(HDNODE_SIZE);
|
||
|
|
||
|
var ADDRESS_SIZE = 40; // maximum size
|
||
|
var address = crypto._malloc(ADDRESS_SIZE);
|
||
|
|
||
|
function prepareNode(n) {
|
||
|
var b = new ArrayBuffer(HDNODE_SIZE);
|
||
|
var u8 = new Uint8Array(b, 0, HDNODE_SIZE);
|
||
|
var u32 = new Uint32Array(b, 0, 12);
|
||
|
|
||
|
u32[0] = n.depth;
|
||
|
u32[1] = n.parentFingerprint;
|
||
|
u32[2] = n.index;
|
||
|
u8.set(n.chainCode, 12);
|
||
|
u8.set(n.pubKey.toBuffer(), 12 + 32 + 32);
|
||
|
|
||
|
return u8;
|
||
|
}
|
||
|
|
||
|
function deriveAddress(pn, i, version) {
|
||
|
crypto.HEAPU8.set(pn, hdnode);
|
||
|
crypto._hdnode_public_ckd(hdnode, i);
|
||
|
crypto._ecdsa_get_address(hdnode + 12 + 32 + 32, version, address, ADDRESS_SIZE);
|
||
|
return crypto.Pointer_stringify(address);
|
||
|
}
|
||
|
|
||
|
// benching code
|
||
|
|
||
|
var bitcoin = require('bitcoinjs-lib');
|
||
|
|
||
|
var node = bitcoin.HDNode.fromBase58(
|
||
|
'xpub6AHA9hZDN11k2ijHMeS5QqHx2KP9aMBRhTDqANMnwVtdyw2TDYRm' +
|
||
|
'F8PjpvwUFcL1Et8Hj59S3gTSMcUQ5gAqTz3Wd8EsMTmF3DChhqPQBnU'
|
||
|
).derive(0);
|
||
|
|
||
|
timeBitcoinjs(node);
|
||
|
timeTrezorCrypto(node);
|
||
|
|
||
|
function timeBitcoinjs(n) {
|
||
|
console.time('bitcoinjs')
|
||
|
for (var i = 0; i < 1000; i++) {
|
||
|
n.derive(i).getAddress()
|
||
|
}
|
||
|
console.timeEnd('bitcoinjs')
|
||
|
}
|
||
|
|
||
|
function timeTrezorCrypto(n) {
|
||
|
var nP = prepareNode(n);
|
||
|
console.time('trezor-crypto')
|
||
|
for (var i = 0; i < 1000; i++) {
|
||
|
deriveAddress(nP, i, 0);
|
||
|
}
|
||
|
console.timeEnd('trezor-crypto')
|
||
|
}
|