1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-03-25 20:45:43 +00:00

move emscripten build to separate repository (hd-wallet/fastxpub)

This commit is contained in:
Pavol Rusnak 2017-07-24 23:43:30 +02:00
parent c950342063
commit 8d0852403c
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
13 changed files with 0 additions and 2731 deletions

View File

@ -27,21 +27,6 @@ script:
- ITERS=10 py.test
- mkdir _build && cd _build && cmake .. && make && cd ..
matrix:
include:
- env: BUILD=emscripten
script:
- cd emscripten && rm trezor-crypto.js && make docker-build && make test-correctness && cd ..
services:
- docker
sudo: required
install: true
compiler: true
addons:
apt:
packages:
- nodejs
notifications:
webhooks:
urls:

View File

@ -1,2 +0,0 @@
node_modules/
benchmark-browserify.js

View File

@ -1,37 +0,0 @@
EMFLAGS = \
-Os --closure 1 \
--memory-init-file 0 \
--pre-js pre.js --post-js post.js \
-I ../ed25519-donna \
-s EXPORTED_FUNCTIONS='["_hdnode_public_ckd_address_optimized", "_ecdsa_read_pubkey"]'
SRC = ../bignum.c ../ecdsa.c ../secp256k1.c ../hmac.c ../bip32.c \
../base58.c ../ripemd160.c ../sha2.c ../rand.c ../address.c
all: trezor-crypto.js benchmark-browserify.js
trezor-crypto.js: $(SRC)
emcc $(EMFLAGS) -o $@ $^
benchmark-browserify.js: node_modules trezor-crypto.js benchmark.js
$(shell npm bin)/browserify benchmark.js -o $@ --noparse=`pwd`/trezor-crypto.js
@echo "open benchmark.html in your favourite browser"
benchmark-node: node_modules trezor-crypto.js benchmark.js
node benchmark.js
node_modules:
npm install
npm install browserify
clean:
rm -f trezor-crypto.js benchmark-browserify.js
docker:
docker run --rm -i -v $(shell pwd)/..:/src -t apiaryio/emcc /bin/bash
docker-build:
docker run --rm -v $(shell pwd)/..:/src apiaryio/emcc /bin/bash -c 'cd emscripten && make'
test-correctness: node_modules
node test-correctness.js test-correctness-segwit-p2sh.js

View File

@ -1,8 +0,0 @@
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script async src="benchmark-browserify.js"></script>
</body>
</html>

View File

@ -1,98 +0,0 @@
var crypto = require('./trezor-crypto');
var bitcoin = require('bitcoinjs-lib');
var XPUB =
'xpub6AHA9hZDN11k2ijHMeS5QqHx2KP9aMBRhTDqANMnwVtdyw2TDYRm' +
'F8PjpvwUFcL1Et8Hj59S3gTSMcUQ5gAqTz3Wd8EsMTmF3DChhqPQBnU';
var node = bitcoin.HDNode.fromBase58(XPUB).derive(0);
var nodeStruct = {
depth: node.depth,
child_num: node.index,
fingerprint: node.parentFingerprint,
chain_code: node.chainCode,
public_key: node.keyPair.getPublicKeyBuffer()
};
var suite;
var worker;
if (typeof Worker !== 'undefined') {
console.log('enabling web worker benchmark');
worker = new Worker('./trezor-crypto.js');
worker.onerror = function (error) {
console.error('worker:', error);
};
suite = [
// benchBitcoinJS,
// benchBrowserify,
benchWorker
];
} else {
suite = [
benchBitcoinJS,
benchBrowserify
];
}
benchmark(suite, 1000, 1000);
function benchmark(suite, delay, ops) {
(function cycle(i) {
setTimeout(function () {
var benchmark = suite[i];
runBenchmark(benchmark, ops, function (runtime) {
printResult(benchmark, ops, runtime);
cycle(i+1 < suite.length ? i+1 : 0);
});
}, delay);
}(0));
}
function benchBitcoinJS(ops, fn) {
var i;
for (i = 0; i < ops; i++) {
node.derive(i).getAddress();
}
fn();
}
function benchBrowserify(ops, fn) {
var i;
crypto.serializeNode(nodeStruct);
for (i = 0; i < ops; i++) {
crypto.deriveAddress(i, 0);
}
fn();
}
function benchWorker(ops, fn) {
worker.onmessage = function (event) {
fn();
};
worker.postMessage({
type: 'deriveAddressRange',
node: nodeStruct,
from: 0,
to: ops - 1,
version: 0
});
}
function runBenchmark(benchmark, ops, fn) {
var start = new Date();
benchmark(ops, function () {
var end = new Date();
fn(end - start);
});
}
function printResult(benchmark, ops, runtime) {
var opssec = (ops / runtime) * 1000;
console.log(
benchmark.name,
'ops #', ops,
'runtime', runtime / 1000,
'sec, ops/sec', opssec
);
}

View File

@ -1,8 +0,0 @@
{
"name": "trezor-crypto-test",
"version": "1.0.0",
"description": "",
"dependencies": {
"bitcoinjs-lib": "^2.1.1"
}
}

View File

@ -1,115 +0,0 @@
/*
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 HEAPU8 = Module['HEAPU8'];
var _malloc = Module['_malloc'];
var _hdnode_public_ckd_address_optimized = Module['_hdnode_public_ckd_address_optimized'];
var _ecdsa_read_pubkey = Module['_ecdsa_read_pubkey'];
var Pointer_stringify = Module['Pointer_stringify'];
// HDNode structs global
var PUBPOINT_SIZE = 2 * 9 * 4; // (2 * bignum256 (= 9 * uint32_t))
var _pubpoint = _malloc(PUBPOINT_SIZE);
var PUBKEY_SIZE = 33;
var _pubkey = _malloc(PUBKEY_SIZE);
var CHAINCODE_SIZE = 32;
var _chaincode = _malloc(CHAINCODE_SIZE);
// address string global
var ADDRESS_SIZE = 60; // maximum size
var _address = _malloc(ADDRESS_SIZE);
/*
* public library interface
*/
/**
* @param {HDNode} node HDNode struct, see the definition above
*/
function serializeNode(node) {
var u8_pubkey = new Uint8Array(33);
u8_pubkey.set(node['public_key'], 0);
HEAPU8.set(u8_pubkey, _pubkey);
var u8_chaincode = new Uint8Array(32);
u8_chaincode.set(node['chain_code'], 0);
HEAPU8.set(u8_chaincode, _chaincode);
_ecdsa_read_pubkey(0, _pubkey, _pubpoint);
}
/**
* @param {Number} index BIP32 index of the address
* @param {Number} version address version byte
* @return {String}
*/
function deriveAddress(index, version, segwit) {
_hdnode_public_ckd_address_optimized(_pubpoint, _chaincode, index, version, _address, ADDRESS_SIZE, segwit);
return Pointer_stringify(_address);
}
/**
* @param {HDNode} node HDNode struct, see the definition above
* @param {Number} firstIndex index of the first address
* @param {Number} lastIndex index of the last address
* @param {Number} version address version byte
* @return {Array<String>}
*/
function deriveAddressRange(node, firstIndex, lastIndex, version, segwit) {
var addresses = [];
serializeNode(node);
var i;
for (i = firstIndex; i <= lastIndex; i++) {
addresses.push(deriveAddress(i, version, segwit));
}
return addresses;
}
if (typeof module !== 'undefined') {
module['exports'] = {
'serializeNode': serializeNode,
'deriveAddress': deriveAddress,
'deriveAddressRange': deriveAddressRange
};
}
/*
* Web worker processing
*/
function processMessage(event) {
var data = event['data'];
var type = data['type'];
switch (type) {
case 'deriveAddressRange':
var addresses = deriveAddressRange(
data['node'],
data['firstIndex'],
data['lastIndex'],
data['version'],
!!data['segwit']
);
self.postMessage({
'addresses': addresses,
'firstIndex': data['firstIndex'],
'lastIndex': data['lastIndex']
});
break;
default:
throw new Error('Unknown message type: ' + type);
}
}
if (ENVIRONMENT_IS_WORKER) {
self.onmessage = processMessage;
}

View File

@ -1,9 +0,0 @@
// stub importScripts for the faulty detection of web worker env
if (typeof importScripts === 'undefined'
&& typeof WorkerGlobalScope !== 'undefined'
&& this instanceof WorkerGlobalScope
) {
this.importScripts = function () {
throw new Error('importScripts is a stub');
};
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,30 +0,0 @@
var crypto = require('./trezor-crypto');
var bitcoin = require('bitcoinjs-lib');
var XPUB =
'xpub6CVKsQYXc9awxgV1tWbG4foDvdcnieK2JkbpPEBKB5WwAPKBZ1mstLbKVB4ov7QzxzjaxNK6EfmNY5Jsk2cG26EVcEkycGW4tchT2dyUhrx';
var node = bitcoin.HDNode.fromBase58(XPUB).derive(0);
var nodeStruct = {
depth: node.depth,
child_num: node.index,
fingerprint: node.parentFingerprint,
chain_code: node.chainCode,
public_key: node.keyPair.getPublicKeyBuffer()
};
var addresses = crypto.deriveAddressRange(nodeStruct, 0, 999, 5, true);
var fs = require('fs');
var loaded = fs.readFileSync('test-addresses-segwit-p2sh.txt').toString().split("\n");
for (var i = 0; i < 1000; i++) {
if (loaded[i] !== addresses[i]) {
console.log("bad address", i);
process.exit(1)
}
}
console.log("Testing address ended correctly");
process.exit(0)

View File

@ -1,30 +0,0 @@
var crypto = require('./trezor-crypto');
var bitcoin = require('bitcoinjs-lib');
var XPUB =
'xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJGrWBJZ5H6qTAHdPQ7pQhtpjiYZVZARo14qHiay2fvrX996oEP42u8wZy';
var node = bitcoin.HDNode.fromBase58(XPUB).derive(0);
var nodeStruct = {
depth: node.depth,
child_num: node.index,
fingerprint: node.parentFingerprint,
chain_code: node.chainCode,
public_key: node.keyPair.getPublicKeyBuffer()
};
var addresses = crypto.deriveAddressRange(nodeStruct, 0, 999, 0, false);
var fs = require('fs');
var loaded = fs.readFileSync('test-addresses.txt').toString().split("\n");
for (var i = 0; i < 1000; i++) {
if (loaded[i] !== addresses[i]) {
console.log("bad address", i);
process.exit(1)
}
}
console.log("Testing address ended correctly");
process.exit(0)

File diff suppressed because one or more lines are too long