diff --git a/package.json b/package.json index b8e37f0..2d4ba52 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "bs58": "^2.0.1", "cb-http-client": "^0.2.0", "httpify": "^1.0.0", + "minimaldata": "^1.0.0", "mocha": "^2.2.0", "proxyquire": "^1.4.0", "sinon": "^1.12.2", diff --git a/test/script.js b/test/script.js index e1598cd..e3e7f3f 100644 --- a/test/script.js +++ b/test/script.js @@ -3,6 +3,7 @@ var assert = require('assert') var bcrypto = require('../src/crypto') var bscript = require('../src/script') +var minimalData = require('minimaldata') var ops = require('../src/opcodes') var fixtures = require('./fixtures/script.json') @@ -440,4 +441,37 @@ describe('script', function () { }) }) }) + + describe('SCRIPT_VERIFY_MINIMALDATA policy', function () { + fixtures.valid.forEach(function (f) { + if (f.scriptSigHex) { + it('compliant for ' + f.type + ' scriptSig ' + f.scriptSig, function () { + var script = new Buffer(f.scriptSigHex, 'hex') + + assert(minimalData(script)) + }) + } + + if (f.scriptPubKeyHex) { + it('compliant for ' + f.type + ' scriptPubKey ' + f.scriptPubKey, function () { + var script = new Buffer(f.scriptPubKeyHex, 'hex') + + assert(minimalData(script)) + }) + } + }) + + function testEncodingForSize (i) { + it('compliant for data PUSH of length ' + i, function () { + var buffer = new Buffer(i) + var script = bscript.compile([buffer]) + + assert(minimalData(script), 'Failed for ' + i + ' length script') + }) + } + + for (var i = 0; i < 520; ++i) { + testEncodingForSize(i) + } + }) })