Merge pull request #617 from bitcoinjs/buffix
bufferutils: fix pushDataInt output, BIP62 compliance
This commit is contained in:
commit
b5d9a7dfa0
5 changed files with 44 additions and 4 deletions
|
@ -82,6 +82,7 @@
|
||||||
"bs58": "^2.0.1",
|
"bs58": "^2.0.1",
|
||||||
"cb-http-client": "^0.2.0",
|
"cb-http-client": "^0.2.0",
|
||||||
"httpify": "^1.0.0",
|
"httpify": "^1.0.0",
|
||||||
|
"minimaldata": "^1.0.0",
|
||||||
"mocha": "^2.2.0",
|
"mocha": "^2.2.0",
|
||||||
"proxyquire": "^1.4.0",
|
"proxyquire": "^1.4.0",
|
||||||
"sinon": "^1.12.2",
|
"sinon": "^1.12.2",
|
||||||
|
|
|
@ -10,8 +10,8 @@ function verifuint (value, max) {
|
||||||
|
|
||||||
function pushDataSize (i) {
|
function pushDataSize (i) {
|
||||||
return i < opcodes.OP_PUSHDATA1 ? 1
|
return i < opcodes.OP_PUSHDATA1 ? 1
|
||||||
: i < 0xff ? 2
|
: i <= 0xff ? 2
|
||||||
: i < 0xffff ? 3
|
: i <= 0xffff ? 3
|
||||||
: 5
|
: 5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
test/fixtures/bufferutils.json
vendored
4
test/fixtures/bufferutils.json
vendored
|
@ -34,7 +34,7 @@
|
||||||
"dec": 255,
|
"dec": 255,
|
||||||
"hex64": "ff00000000000000",
|
"hex64": "ff00000000000000",
|
||||||
"hexVI": "fdff00",
|
"hexVI": "fdff00",
|
||||||
"hexPD": "4dff00"
|
"hexPD": "4cff"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"dec": 65534,
|
"dec": 65534,
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
"dec": 65535,
|
"dec": 65535,
|
||||||
"hex64": "ffff000000000000",
|
"hex64": "ffff000000000000",
|
||||||
"hexVI": "fdffff",
|
"hexVI": "fdffff",
|
||||||
"hexPD": "4effff0000"
|
"hexPD": "4dffff"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"dec": 65536,
|
"dec": 65536,
|
||||||
|
|
5
test/fixtures/script.json
vendored
5
test/fixtures/script.json
vendored
|
@ -149,6 +149,11 @@
|
||||||
"redeemScriptSig": "OP_0",
|
"redeemScriptSig": "OP_0",
|
||||||
"scriptSig": "OP_0 00",
|
"scriptSig": "OP_0 00",
|
||||||
"scriptSigHex": "000100"
|
"scriptSigHex": "000100"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "nonstandard",
|
||||||
|
"scriptSig": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"scriptSigHex": "4cff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"invalid": {
|
"invalid": {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var bcrypto = require('../src/crypto')
|
var bcrypto = require('../src/crypto')
|
||||||
var bscript = require('../src/script')
|
var bscript = require('../src/script')
|
||||||
|
var minimalData = require('minimaldata')
|
||||||
var ops = require('../src/opcodes')
|
var ops = require('../src/opcodes')
|
||||||
|
|
||||||
var fixtures = require('./fixtures/script.json')
|
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)
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Reference in a new issue