From 9215e4fe48a6e862abfd8a916e6a4c3932901baf Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 6 Dec 2016 14:24:00 -0800 Subject: [PATCH] address: better network validation. --- lib/http/server.js | 6 ++---- lib/primitives/address.js | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/http/server.js b/lib/http/server.js index 6b856707..83583cea 100644 --- a/lib/http/server.js +++ b/lib/http/server.js @@ -378,10 +378,8 @@ HTTPServer.prototype._init = function _init() { enforce(typeof output.address === 'string', 'Address must be a string.'); output.address = Address.fromBase58(output.address); - if (this.network.type === 'main') { - enforce(output.address.network === this.network, - 'Wrong network for address.'); - } + enforce(output.address.verifyNetwork(this.network), + 'Wrong network for address.'); } else if (output.script) { enforce(typeof output.script === 'string', 'Script must be a string.'); diff --git a/lib/primitives/address.js b/lib/primitives/address.js index f052caf8..c5354ff5 100644 --- a/lib/primitives/address.js +++ b/lib/primitives/address.js @@ -90,6 +90,30 @@ Address.prototype.getHash = function getHash(enc) { return this.hash; }; +/** + * Get a network address prefix for the address. + * @param {Network?} network + * @returns {Number} + */ + +Address.prototype.getPrefix = function getPrefix(network) { + if (!network) + network = this.network; + network = Network.get(network); + return Address.getPrefix(this.type, network); +}; + +/** + * Verify an address network (compares prefixes). + * @param {Network} network + * @returns {Boolean} + */ + +Address.prototype.verifyNetwork = function verifyNetwork(network) { + assert(network); + return this.getPrefix() === this.getPrefix(network); +}; + /** * Get the address type as a string. * @returns {AddressType}