enforce strict ordering with checkmultisig.

This commit is contained in:
Christopher Jeffrey 2015-12-08 11:46:14 -08:00
parent 3c0bf360e2
commit fd7d20be9c
2 changed files with 14 additions and 7 deletions

View File

@ -220,7 +220,8 @@ script.execute = function execute(s, stack, tx, index) {
// Get signatures
var succ = 0;
for (var i = 0, j = 0; i < m && j < n; i++) {
// for (var i = 0, j = 0; i < m && j < n; i++) {
for (var i = 0; i < m; i++) {
var sig = stack.pop();
var type = sig[sig.length - 1];
if (!constants.rhashType[type & 0x7f])
@ -232,9 +233,12 @@ script.execute = function execute(s, stack, tx, index) {
if (!script.isValidSig(sig))
return false;
var res = false;
for (; !res && j < n; j++)
res = script.verify(hash, sig.slice(0, -1), keys[j]);
// var res = false;
// for (; !res && j < n; j++)
// res = script.verify(hash, sig.slice(0, -1), keys[j]);
// Strict order:
var res = script.verify(hash, sig.slice(0, -1), keys.pop());
if (res)
succ++;
}
@ -284,6 +288,9 @@ script.execute = function execute(s, stack, tx, index) {
}
}
if (stack.length > 1000)
return false;
return true;
};

View File

@ -289,12 +289,12 @@ describe('Wallet', function() {
w2.sign(send);
// XXX Still verifies for some reason.
send.inputs[0].script[1] = [];
// send.inputs[0].script[1] = [];
// send.inputs[0].script[2] = [];
assert(send.verify());
console.log(utx.outputs[0].script);
console.log(send.inputs[0].script);
// console.log(utx.outputs[0].script);
// console.log(send.inputs[0].script);
cb();
});