From 09c20a624ffcc82b016b2dafbdcddc5135ba9ebb Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Wed, 4 Mar 2015 12:44:28 -0300 Subject: [PATCH 1/3] replace with github repo --- lib/model/copayer.js | 4 +- lib/model/wallet.js | 2 +- lib/server.js | 2 +- lib/walletutils.js | 178 ------------------------------------- package.json | 1 + test/integration/server.js | 2 +- 6 files changed, 6 insertions(+), 183 deletions(-) delete mode 100644 lib/walletutils.js diff --git a/lib/model/copayer.js b/lib/model/copayer.js index 04a84cb..2ab2287 100644 --- a/lib/model/copayer.js +++ b/lib/model/copayer.js @@ -8,7 +8,7 @@ var Bitcore = require('bitcore'); var HDPublicKey = Bitcore.HDPublicKey; var Uuid = require('uuid'); var AddressManager = require('./addressmanager'); -var Utils = require('../walletutils'); +var WalletUtils = require('bitcore-wallet-utils'); function Copayer() { @@ -25,7 +25,7 @@ Copayer.create = function(opts) { x.xPubKey = opts.xPubKey; - x.id = Utils.xPubToCopayerId(x.xPubKey); + x.id = WalletUtils.xPubToCopayerId(x.xPubKey); x.name = opts.name; x.xPubKeySignature = opts.xPubKeySignature; // So third parties can check independently x.requestPubKey = x.getRequestPubKey(); diff --git a/lib/model/wallet.js b/lib/model/wallet.js index a4604a9..eed1d9e 100644 --- a/lib/model/wallet.js +++ b/lib/model/wallet.js @@ -8,7 +8,7 @@ var Uuid = require('uuid'); var Address = require('./address'); var Copayer = require('./copayer'); var AddressManager = require('./addressmanager'); -var WalletUtils = require('../walletutils'); +var WalletUtils = require('bitcore-wallet-utils'); function Wallet() { this.version = '1.0.0'; diff --git a/lib/server.js b/lib/server.js index 8b19e00..30d7003 100644 --- a/lib/server.js +++ b/lib/server.js @@ -17,7 +17,7 @@ var Explorers = require('bitcore-explorers'); var ClientError = require('./clienterror'); var Utils = require('./utils'); var Storage = require('./storage'); -var WalletUtils = require('./walletutils'); +var WalletUtils = require('bitcore-wallet-utils'); var Wallet = require('./model/wallet'); var Copayer = require('./model/copayer'); diff --git a/lib/walletutils.js b/lib/walletutils.js deleted file mode 100644 index 4958b9d..0000000 --- a/lib/walletutils.js +++ /dev/null @@ -1,178 +0,0 @@ -'use strict'; - -var _ = require('lodash'); -var $ = require('preconditions').singleton(); -var sjcl = require('sjcl'); - -var Bitcore = require('bitcore'); -var Address = Bitcore.Address; -var PrivateKey = Bitcore.PrivateKey; -var PublicKey = Bitcore.PublicKey; -var crypto = Bitcore.crypto; -var encoding = Bitcore.encoding; -var Utils = require('./utils'); - -function WalletUtils() {}; - -/* TODO: It would be nice to be compatible with bitcoind signmessage. How - * the hash is calculated there? */ -WalletUtils.hashMessage = function(text) { - $.checkArgument(text); - var buf = new Buffer(text); - var ret = crypto.Hash.sha256sha256(buf); - ret = new Bitcore.encoding.BufferReader(ret).readReverse(); - return ret; -}; - - -WalletUtils.signMessage = function(text, privKey) { - $.checkArgument(text); - var priv = new PrivateKey(privKey); - var hash = WalletUtils.hashMessage(text); - return crypto.ECDSA.sign(hash, priv, 'little').toString(); -}; - - -WalletUtils.verifyMessage = function(text, signature, pubKey) { - $.checkArgument(text); - $.checkArgument(pubKey); - - if (!signature) - return false; - - var pub = new PublicKey(pubKey); - var hash = WalletUtils.hashMessage(text); - - try { - var sig = new crypto.Signature.fromString(signature); - return crypto.ECDSA.verify(hash, sig, pub, 'little'); - } catch (e) { - return false; - } -}; - -WalletUtils.deriveAddress = function(publicKeyRing, path, m, network) { - var publicKeys = _.map(publicKeyRing, function(xPubKey) { - var xpub = new Bitcore.HDPublicKey(xPubKey); - return xpub.derive(path).publicKey; - }); - - var bitcoreAddress = Address.createMultisig(publicKeys, m, network); - - return { - address: bitcoreAddress.toString(), - path: path, - publicKeys: _.invoke(publicKeys, 'toString'), - }; -}; - -WalletUtils.getProposalHash = function(toAddress, amount, message) { - return toAddress + '|' + amount + '|' + (message || ''); -}; - -WalletUtils.xPubToCopayerId = function(xpub) { - var hash = sjcl.hash.sha256.hash(xpub); - return sjcl.codec.hex.fromBits(hash); -}; - -WalletUtils.toSecret = function(walletId, walletPrivKey, network) { - var widHex = new Buffer(walletId.replace(/-/g, ''), 'hex'); - var widBase58 = new encoding.Base58(widHex).toString(); - return _.padRight(widBase58, 22, '0') + walletPrivKey.toWIF() + (network == 'testnet' ? 'T' : 'L'); -}; - -WalletUtils.fromSecret = function(secret) { - $.checkArgument(secret); - - function split(str, indexes) { - var parts = []; - indexes.push(str.length); - var i = 0; - while (i < indexes.length) { - parts.push(str.substring(i == 0 ? 0 : indexes[i - 1], indexes[i])); - i++; - }; - return parts; - }; - - try { - var secretSplit = split(secret, [22, 74]); - var widBase58 = secretSplit[0].replace(/0/g, ''); - var widHex = encoding.Base58.decode(widBase58).toString('hex'); - var walletId = split(widHex, [8, 12, 16, 20]).join('-'); - - var walletPrivKey = Bitcore.PrivateKey.fromString(secretSplit[1]); - var networkChar = secretSplit[2]; - - return { - walletId: walletId, - walletPrivKey: walletPrivKey, - network: networkChar == 'T' ? 'testnet' : 'livenet', - }; - } catch (ex) { - throw new Error('Invalid secret'); - } -}; - - -WalletUtils.encryptMessage = function(message, encryptingKey) { - var key = sjcl.codec.base64.toBits(encryptingKey); - return sjcl.encrypt(key, message, { - ks: 128, - iter: 1 - }); -}; - -WalletUtils.decryptMessage = function(cyphertextJson, encryptingKey) { - var key = sjcl.codec.base64.toBits(encryptingKey); - return sjcl.decrypt(key, cyphertextJson); -}; - -WalletUtils.privateKeyToAESKey = function(privKey) { - var pk = Bitcore.PrivateKey.fromString(privKey); - return Bitcore.crypto.Hash.sha256(pk.toBuffer()).slice(0, 16).toString('base64'); -}; - - -WalletUtils.signTxp = function(txp, xPrivKey) { - var self = this; - - //Derive proper key to sign, for each input - var privs = [], - derived = {}; - - var network = new Bitcore.Address(txp.toAddress).network.name; - var xpriv = new Bitcore.HDPrivateKey(xPrivKey, network); - - _.each(txp.inputs, function(i) { - if (!derived[i.path]) { - derived[i.path] = xpriv.derive(i.path).privateKey; - privs.push(derived[i.path]); - } - }); - - var t = new Bitcore.Transaction(); - - _.each(txp.inputs, function(i) { - t.from(i, i.publicKeys, txp.requiredSignatures); - }); - - t.to(txp.toAddress, txp.amount) - .change(txp.changeAddress.address); - - var signatures = _.map(privs, function(priv, i) { - return t.getSignatures(priv); - }); - - signatures = _.map(_.sortBy(_.flatten(signatures), 'inputIndex'), function(s) { - return s.signature.toDER().toString('hex'); - }); - - return signatures; -}; - -WalletUtils.getNetworkFromXPubKey = function(xPubKey) { - return xPubKey.substr(0, 4) == 'tpub' ? 'testnet' : 'livenet'; -}; - -module.exports = WalletUtils; diff --git a/package.json b/package.json index e281a2e..78004ae 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "dependencies": { "async": "^0.9.0", "bitcore": "git+https://github.com/eordano/bitcore.git#7e88167891811163071ae35dc3dbb705ab6ccff8", + "bitcore-wallet-utils": "git+https://github.com/bitpay/bitcore-wallet-utils.git", "bitcore-explorers": "^0.9.1", "body-parser": "^1.11.0", "commander": "^2.6.0", diff --git a/test/integration/server.js b/test/integration/server.js index 820ffb4..4b348c2 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -14,7 +14,7 @@ log.debug = log.verbose; var Bitcore = require('bitcore'); var Utils = require('../../lib/utils'); -var WalletUtils = require('../../lib/walletutils'); +var WalletUtils = require('bitcore-wallet-utils'); var Storage = require('../../lib/storage'); var Wallet = require('../../lib/model/wallet'); From 041c5e680474f27c89191507203c3e3b88f7ed27 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Wed, 4 Mar 2015 12:56:09 -0300 Subject: [PATCH 2/3] change bitcore version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78004ae..dca3663 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "dependencies": { "async": "^0.9.0", - "bitcore": "git+https://github.com/eordano/bitcore.git#7e88167891811163071ae35dc3dbb705ab6ccff8", + "bitcore": "^0.11.2", "bitcore-wallet-utils": "git+https://github.com/bitpay/bitcore-wallet-utils.git", "bitcore-explorers": "^0.9.1", "body-parser": "^1.11.0", From cfd9061cc44be8942e1c03ecfb704af170dd4152 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Wed, 4 Mar 2015 13:37:00 -0300 Subject: [PATCH 3/3] remove unused packages --- lib/model/txproposal.js | 2 +- package.json | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/model/txproposal.js b/lib/model/txproposal.js index ce7de15..bc6e0a1 100644 --- a/lib/model/txproposal.js +++ b/lib/model/txproposal.js @@ -115,7 +115,7 @@ TxProposal.prototype.getNetworkName = function() { TxProposal.prototype.getRawTx = function() { var t = this._getBitcoreTx(); - return t.serialize(); + return t.uncheckedSerialize(); }; diff --git a/package.json b/package.json index dca3663..3fbe0eb 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "bitcore-wallet-utils": "git+https://github.com/bitpay/bitcore-wallet-utils.git", "bitcore-explorers": "^0.9.1", "body-parser": "^1.11.0", - "commander": "^2.6.0", "coveralls": "^2.11.2", "express": "^4.10.0", "inherits": "^2.0.1", @@ -30,11 +29,9 @@ "levelup": "^0.19.0", "lodash": "^3.3.1", "mocha-lcov-reporter": "0.0.1", - "moment": "^2.9.0", "morgan": "*", "npmlog": "^0.1.1", "preconditions": "^1.0.7", - "qr-image": "*", "read": "^1.0.5", "request": "^2.53.0", "sjcl": "^1.0.2",