adds genkey

This commit is contained in:
Matias Alejo Garcia 2015-02-23 02:33:43 -03:00
parent 6c123f5c2d
commit 53ca9b00fc
3 changed files with 55 additions and 8 deletions

View File

@ -19,6 +19,8 @@ program
.command('import', 'import wallet critical data')
.command('confirm', 'show copayer\'s data for confirmation')
.command('recreate', 'recreate a wallet on a remove server given local infomation')
.command('txproposals', 'list transactions proposals')
.command('genkey', 'generates extended private key for later wallet usage')
.parse(process.argv);

20
bit-wallet/bit-genkey Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env node
var _ = require('lodash');
var program = require('commander');
var Client = require('../lib/client');
var utils = require('./cli-utils');
program = utils.configureCommander(program);
program
.option('-t, --testnet', 'Create a Testnet Extended Private Key')
.parse(process.argv);
var args = program.args;
var client = utils.getClient(program);
var network = program.testnet ? 'testnet' : 'livenet';
client.generateKey(network, function(err) {
utils.die(err);
console.log(' * ' + _.capitalize(network) + ' Extended Private Key Created.');
});

View File

@ -228,21 +228,27 @@ API.prototype._initData = function(network, walletPrivKey, m, n) {
var xPubKey = (new Bitcore.HDPublicKey(xPrivKey)).toString();
var roPrivKey = xPrivKey.derive('m/1/0').privateKey;
var rwPrivKey = xPrivKey.derive('m/1/1').privateKey;
var sharedEncryptingKey = WalletUtils.privateKeyToAESKey(walletPrivKey);
var copayerId = WalletUtils.xPubToCopayerId(xPubKey);
var data = {
copayerId: copayerId,
xPrivKey: xPrivKey.toString(),
publicKeyRing: [xPubKey],
network: network,
m: m,
n: n,
roPrivKey: roPrivKey.toWIF(),
rwPrivKey: rwPrivKey.toWIF(),
walletPrivKey: walletPrivKey.toWIF(),
sharedEncryptingKey: sharedEncryptingKey,
};
if (walletPrivKey) {
var sharedEncryptingKey = WalletUtils.privateKeyToAESKey(walletPrivKey);
data.walletPrivKey = walletPrivKey.toWIF();
data.sharedEncryptingKey = sharedEncryptingKey;
}
if (m) data.m = m;
if (n) data.n = n;
return data;
};
@ -260,6 +266,22 @@ API.prototype._doJoinWallet = function(walletId, walletPrivKey, xPubKey, copayer
});
};
API.prototype.generateKey = function(network, cb) {
var self = this;
network = network || 'livenet';
if (!_.contains(['testnet', 'livenet'], network))
return cb('Invalid network');
this.storage.load(function(err, data) {
if (data)
return cb(self.storage.getName() + ' already contains a wallet');
var data = self._initData(network);
self.storage.save(data, function(err) {
return cb(err, null);
});
});
};
API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb) {
var self = this;
@ -471,7 +493,7 @@ API.prototype.export = function(opts, cb) {
opts = opts || {};
var access = opts.access || 'full';
this._loadAndCheck({}, function(err, data) {
this._load(function(err, data) {
if (err) return cb(err);
var v = [];
@ -532,9 +554,12 @@ API.prototype.import = function(str, cb) {
data.rwPrivKey = xpriv.derive('m/1/1').privateKey.toWIF();
}
data.n = data.publicKeyRing.length;
var dataIsComplete = !!data.m;
if (!data.copayerId || !data.n || !data.m)
if (dataIsComplete)
data.n = data.publicKeyRing.length;
if (!data.publicKeyRing)
return cb('Invalid source data');
data.network = data.publicKeyRing[0].substr(0, 4) == 'tpub' ? 'testnet' : 'livenet';