Fix Address#ripe/Address#getShortRipe API

This commit is contained in:
Kagami Hiiragi 2015-01-28 17:24:31 +03:00
parent ceceaee721
commit 4610701a3e
3 changed files with 12 additions and 20 deletions

View File

@ -90,26 +90,19 @@ function getaddrchecksum(data) {
}
/**
* Calculate the ripe hash of the address.
* @param {?Object} opts - Options
* @return {Buffer} Resulting ripe hash.
* Get the ripe hash of the address without prefix zeroes.
* @return {Buffer} A short ripe hash.
*/
Address.prototype.getRipe = function(opts) {
opts = opts || {};
Address.prototype.getShortRipe = function() {
var ripe = this.ripe;
if (opts.short) {
return ripe.slice(20 - getripelen(ripe));
} else {
return ripe;
}
};
function getdoublehash(addr) {
var ripe = addr.getRipe();
var dataToHash = Buffer.concat([
var_int.encode(addr.version),
var_int.encode(addr.stream),
ripe,
addr.ripe,
]);
return bmcrypto.sha512(bmcrypto.sha512(dataToHash));
}
@ -187,11 +180,10 @@ function checkripelen(ripelen, version) {
* @return {string} Address string.
*/
Address.prototype.encode = function() {
var ripe = this.getRipe({short: true});
var data = Buffer.concat([
var_int.encode(this.version),
var_int.encode(this.stream),
ripe,
this.getShortRipe(),
]);
var addr = Buffer.concat([data, getaddrchecksum(data)]);
return "BM-" + bs58.encode(addr);

View File

@ -139,7 +139,7 @@ var getpubkey = exports.getpubkey = {
assert(to.version <= 4, "Address version is too high");
opts.version = to.version;
opts.stream = to.stream;
opts.objectPayload = to.version < 4 ? to.getRipe() : to.getTag();
opts.objectPayload = to.version < 4 ? to.ripe : to.getTag();
// POW calculation here.
var nonce = new Buffer(8);
opts.nonce = nonce;

10
test.js
View File

@ -743,7 +743,7 @@ describe("High-level classes", function() {
expect(addr.stream).to.equal(1);
expect(bufferEqual(addr.signPrivateKey, WIF.decode("5JY1CFeeyN4eyfL35guWAuUqu5VLmd7LojtkNP6wmt5msZxxZ57"))).to.be.true;
expect(bufferEqual(addr.encPrivateKey, WIF.decode("5J1oDgZDicNhUgbfzBDQqi2m5jUPnDrfZinnTqEEEaLv63jVFTM"))).to.be.true;
expect(addr.getRipe().toString("hex")).to.equal("00ac14944b00decea5628eb40d0ff4b0f9ee9eca");
expect(addr.ripe.toString("hex")).to.equal("00ac14944b00decea5628eb40d0ff4b0f9ee9eca");
expect(addr.encode()).to.equal("BM-2cWFkyuXXFw6d393RGnin2RpSXj8wxtt6F");
});
@ -754,7 +754,7 @@ describe("High-level classes", function() {
expect(addr.stream).to.equal(1);
expect(bufferEqual(addr.signPrivateKey, WIF.decode("5JY1CFeeyN4eyfL35guWAuUqu5VLmd7LojtkNP6wmt5msZxxZ57"))).to.be.true;
expect(bufferEqual(addr.encPrivateKey, WIF.decode("5J1oDgZDicNhUgbfzBDQqi2m5jUPnDrfZinnTqEEEaLv63jVFTM"))).to.be.true;
expect(addr.getRipe().toString("hex")).to.equal("00ac14944b00decea5628eb40d0ff4b0f9ee9eca");
expect(addr.ripe.toString("hex")).to.equal("00ac14944b00decea5628eb40d0ff4b0f9ee9eca");
expect(addr.encode()).to.equal("BM-2cWFkyuXXFw6d393RGnin2RpSXj8wxtt6F");
});
@ -788,9 +788,9 @@ describe("High-level classes", function() {
addr.encPrivateKey = Buffer("9f9969c93c2d186787a7653f70e49be34c03c4a853e6ad0c867db0946bc433c6", "hex");
expect(addr.encPublicKey.toString("hex")).to.equal("04c6ed1b56f2da97fec1b762d43364566faf082c1e4918ae1dbb41757cad41b03b2cc5087f341414e63f6eee72a1fbf0b5f346a1bb3ba944cad204ca597db2bfc8");
expect(addr.ripe.toString("hex")).to.equal("003ab6655de4bd8c603eba9b00dd5970725fdd56");
expect(addr.getRipe({short: true}).toString("hex")).to.equal("3ab6655de4bd8c603eba9b00dd5970725fdd56");
expect(addr.getShortRipe().toString("hex")).to.equal("3ab6655de4bd8c603eba9b00dd5970725fdd56");
addr.encPrivateKey = Buffer("009969c93c2d186787a7653f70e49be34c03c4a853e6ad0c867db0946bc433c6", "hex");
expect(addr.getRipe({short: true}).toString("hex")).to.equal("69617ddb1946dc327cadffcf33889fed587fc1e7");
expect(addr.getShortRipe().toString("hex")).to.equal("69617ddb1946dc327cadffcf33889fed587fc1e7");
});
it("should implement isAddress method", function() {
@ -806,7 +806,7 @@ describe("High-level classes", function() {
it("should allow to generate shorter address", function() {
this.timeout(300000);
var addr = Address.fromRandom({ripeLength: 18});
var ripe = addr.getRipe({short: true});
var ripe = addr.getShortRipe();
expect(ripe.length).to.be.at.most(18);
});
}