From 5fb16d29e6598d0c7032990ff660fb6e705b6392 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 15 Mar 2016 13:31:54 -0700 Subject: [PATCH] refactor. --- lib/bcoin/script.js | 31 ++++++++++++--------------- lib/bcoin/utils.js | 52 ++++++--------------------------------------- test/utils-test.js | 21 ------------------ 3 files changed, 21 insertions(+), 83 deletions(-) diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index 9afe2018..8f4cc690 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -23,7 +23,7 @@ function Witness(items) { } Witness.prototype.inspect = function inspect() { - return bcoin.script.format(this.items); + return Script.format(this.items); }; Witness.prototype.encode = function encode() { @@ -130,7 +130,7 @@ function Stack(items) { } Stack.prototype.inspect = function inspect() { - return bcoin.script.format(this.items); + return Script.format(this.items); }; Stack.prototype.__defineGetter__('length', function() { @@ -1193,7 +1193,7 @@ Script.prototype.removeData = function removeData(data) { }; Script.checkPush = function checkPush(value, flags) { - var op; + var pushdata = value.pushdata; if (flags == null) flags = constants.flags.STANDARD_VERIFY_FLAGS; @@ -1201,14 +1201,9 @@ Script.checkPush = function checkPush(value, flags) { if (!(flags & constants.flags.VERIFY_MINIMALDATA)) return true; - if (!value.pushdata) + if (!pushdata) return true; - op = value.pushdata.opcode; - - if (!op) - op = value.pushdata.len; - if (value.length === 1 && value[0] === 0) return false; @@ -1219,13 +1214,13 @@ Script.checkPush = function checkPush(value, flags) { return false; if (value.length <= 75) - return op === value.length; + return pushdata.opcode == null && pushdata.len === value.length; if (value.length <= 255) - return op === 'pushdata1'; + return pushdata.opcode === 'pushdata1'; if (value.length <= 65535) - return op === 'pushdata2'; + return pushdata.opcode === 'pushdata2'; return true; }; @@ -2471,22 +2466,22 @@ Script.decode = function decode(buf) { var off = 0; var b, opcode, len; - if (!buf) - return []; + assert(Buffer.isBuffer(buf)); // NOTE: We can't use a BufferReader here since - // script parsing was originally non-strict. + // script parsing was originally non-strict/ridiculous. + // Something could do a direct push of 30 bytes with + // only 20 bytes after it. while (off < buf.length) { b = buf[off++]; // OP_0, OP_FALSE - // Special case: this is an empty array - // because it can be seen as an empty pushdata. if (b === 0x00) { code.push(0); continue; } + // Direct Push // Next `b` bytes should be pushed to stack if (b >= 0x01 && b <= 0x4b) { code.push(utils.slice(buf, off, off + b)); @@ -2554,6 +2549,8 @@ Script.encode = function encode(code) { var i = 0; var op; + assert(Array.isArray(code)); + for (i = 0; i < code.length; i++) { op = code[i]; diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 6b90097d..15ec54a3 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -200,25 +200,17 @@ utils.isBase58 = function isBase58(msg) { }; utils.ripemd160 = function ripemd160(data, enc) { - var result; - if (!crypto) return new Buffer(hash.ripemd160().update(data, enc).digest()); - result = crypto.createHash('ripemd160').update(data, enc).digest(); - - return result; + return crypto.createHash('ripemd160').update(data, enc).digest(); }; utils.sha1 = function sha1(data, enc) { - var result; - if (!crypto) return new Buffer(hash.sha1().update(data, enc).digest()); - result = crypto.createHash('sha1').update(data, enc).digest(); - - return result; + return crypto.createHash('sha1').update(data, enc).digest(); }; utils.ripesha = function ripesha(data, enc) { @@ -230,14 +222,10 @@ utils.checksum = function checksum(data, enc) { }; utils.sha256 = function sha256(data, enc) { - var result; - if (!crypto) return new Buffer(hash.sha256().update(data, enc).digest()); - result = crypto.createHash('sha256').update(data, enc).digest(); - - return result; + return crypto.createHash('sha256').update(data, enc).digest(); }; utils.dsha256 = function dsha256(data, enc) { @@ -284,8 +272,11 @@ utils.encrypt = function encrypt(data, passphrase) { utils.decrypt = function decrypt(data, passphrase) { var decipher, out; - if (!crypto) + if (!crypto) { + if (data[0] === ':') + throw new Error('Cannot decrypt.'); return data; + } if (data[0] !== ':') return data; @@ -873,10 +864,6 @@ utils.fromCompact = function fromCompact(compact) { if (negative) num.ineg(); - // var overflow = mantissa !== 0 && ((exponent > 34) - // || (mantissa > 0xff && exponent > 33) - // || (mantissa > 0xffff && exponent > 32)); - return num; }; @@ -925,28 +912,6 @@ utils.host = function host(addr) { return addr.split(':')[0]; }; -utils.hash = function hash(obj, enc) { - if (obj == null) - throw new Error('Cannot get hash of null'); - - if (typeof obj === 'string') - return enc === 'hex' ? obj : new Buffer(obj, 'hex'); - - if (Buffer.isBuffer(obj)) - return enc === 'hex' ? utils.toHex(obj) : obj; - - if (typeof obj.hash === 'function') - return obj.hash(enc); - - if (obj.hash) - return hash(obj.hash, enc); - - if (obj._hash) - return hash(obj._hash, enc); - - throw new Error('Cannot get hash of object'); -}; - utils.U64 = new bn('ffffffffffffffff', 'hex'); utils.nonce = function nonce() { @@ -1441,9 +1406,6 @@ utils.ccmp = function(a, b) { assert(Buffer.isBuffer(a)); assert(Buffer.isBuffer(b)); - if (a.length !== b.length) - return false; - for (i = 0; i < a.length; i++) res |= a[i] ^ b[i]; diff --git a/test/utils-test.js b/test/utils-test.js index 472a54a6..32ee66d5 100644 --- a/test/utils-test.js +++ b/test/utils-test.js @@ -42,25 +42,4 @@ describe('Utils', function() { btc = utils.fromBTC('546.0'); assert(btc.cmp(new bn(5460).mul(new bn(10000000))) === 0); }); - - it('should convert objects to hashes', function() { - var b1 = '00'; - var b2 = new Buffer([0]); - var b3 = { hash: function(enc) { return enc === 'hex' ? '00' : new Buffer([0]); } }; - var b4 = { hash: '00' }; - var b5 = { _hash: '00' }; - var b6 = { hash: new Buffer([0]) }; - var b7 = { _hash: new Buffer([0]) }; - [b1, b2, b3, b4, b5, b6, b7].forEach(function(b, i) { - utils.assert.equal(utils.hash(b, 'hex'), '00'); - utils.assert(utils.isEqual(utils.hash(b), [0])); - }); - var thrown = true; - try { - utils.hash(1, 'hex'); - } catch (e) { - thrown = true; - } - assert.equal(thrown, true); - }); });