Merge pull request #617 from bitcoinjs/buffix

bufferutils: fix pushDataInt output, BIP62 compliance
This commit is contained in:
Daniel Cousens 2016-08-31 16:10:45 +10:00 committed by GitHub
commit b5d9a7dfa0
5 changed files with 44 additions and 4 deletions

View file

@ -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",

View file

@ -10,8 +10,8 @@ function verifuint (value, max) {
function pushDataSize (i) {
return i < opcodes.OP_PUSHDATA1 ? 1
: i < 0xff ? 2
: i < 0xffff ? 3
: i <= 0xff ? 2
: i <= 0xffff ? 3
: 5
}

View file

@ -34,7 +34,7 @@
"dec": 255,
"hex64": "ff00000000000000",
"hexVI": "fdff00",
"hexPD": "4dff00"
"hexPD": "4cff"
},
{
"dec": 65534,
@ -46,7 +46,7 @@
"dec": 65535,
"hex64": "ffff000000000000",
"hexVI": "fdffff",
"hexPD": "4effff0000"
"hexPD": "4dffff"
},
{
"dec": 65536,

View file

@ -149,6 +149,11 @@
"redeemScriptSig": "OP_0",
"scriptSig": "OP_0 00",
"scriptSigHex": "000100"
},
{
"type": "nonstandard",
"scriptSig": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"scriptSigHex": "4cff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
],
"invalid": {

View file

@ -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)
}
})
})