bitcore-lib-zcash/lib/Armory.js

42 lines
1.1 KiB
JavaScript
Raw Normal View History

var Point = require('./browser/Point'),
twoSha256 = require('../util').twoSha256,
BigInteger = require('../browser/vendor-bundle.js').BigInteger;
// TODO: use native modules instead of browser libraries
/**
* For now, this class can only supports derivation from public key
* It doesn't support private key derivation (TODO).
*
* @example examples/Armory.js
*/
function Armory (chaincode, pubkey) {
this.chaincode = new Buffer(chaincode, 'hex');
this.pubkey = new Buffer(pubkey, 'hex');
}
Armory.prototype.generatePubKey = function () {
var pubKey = this.pubkey;
var chainCode = this.chaincode;
var chainXor = twoSha256(pubKey);
for (var i = 0; i < 32; i++)
chainXor[i] ^= chainCode[i];
var A = new BigInteger(chainXor.toString('hex'), 16);
var pt = Point.fromUncompressedPubKey(pubKey);
pt = Point.multiply(pt, A);
var new_pubkey = pt.toUncompressedPubKey();
return new_pubkey;
};
Armory.prototype.next = function () {
var next_pubkey = this.generatePubKey();
return new Armory(this.chaincode, next_pubkey);
};
module.exports = Armory;