Clearly separate PUSHDATA and numeric argument MINIMALDATA tests

This commit is contained in:
Peter Todd 2014-10-14 15:08:48 -04:00 committed by Pieter Wuille
parent dfeec18b85
commit 2b62e1796b
2 changed files with 114 additions and 30 deletions

View File

@ -384,22 +384,51 @@ nSequences are max.
["0x00", "'00' EQUAL", "P2SH,STRICTENC", "Basic OP_0 execution"],
["0x01 0x81", "DROP 1", "MINIMALDATA", "direct push of 0x81 equals 1NEGATE"],
["0x01 0x05", "DROP 1", "MINIMALDATA", "direct push of 0x05 equals 5"],
["0x4c 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", "PUSHDATA1 of 72 bytes equals direct push of it"],
["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", "PUSHDATA2 of 255 bytes equals PUSHDATA1 of it"],
["0x01 0x00", "NOT DROP 1", "MINIMALDATA", "0x00 numequals 0"],
["0x01 0x80", "NOT DROP 1", "MINIMALDATA", "0x80 (negative zero) numequals 0"],
["0x02 0x0080", "NOT DROP 1", "MINIMALDATA", "0x0080 numequals 0"],
["0x02 0x0500", "NOT DROP 1", "MINIMALDATA", "0x0500 numequals 5"],
["0x03 0xff7f80", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is ffff"],
["0x03 0xff7f00", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is ff7f"],
["0x04 0xffff7f80", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is ffffff"],
["0x04 0xffff7f00", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is ffff7f"],
["1 IF 0x01 0x81 ENDIF 1", "", "MINIMALDATA", "evaluated non-minimal data"],
["1 IF 0x01 0x05 ENDIF 1", "", "MINIMALDATA", "evaluated non-minimal data"],
["1 IF 0x4c 0x03 0x222222 ENDIF 1", "", "MINIMALDATA", "evaluated non-minimal data"],
["MINIMALDATA enforcement for PUSHDATAs"],
["0x4c 0x00", "DROP 1", "MINIMALDATA", "Empty vector minimally represented by OP_0"],
["0x01 0x81", "DROP 1", "MINIMALDATA", "-1 minimally represented by OP_1NEGATE"],
["0x01 0x01", "DROP 1", "MINIMALDATA", "1 to 16 minimally represented by OP_1 to OP_16"],
["0x01 0x02", "DROP 1", "MINIMALDATA"],
["0x01 0x03", "DROP 1", "MINIMALDATA"],
["0x01 0x04", "DROP 1", "MINIMALDATA"],
["0x01 0x05", "DROP 1", "MINIMALDATA"],
["0x01 0x06", "DROP 1", "MINIMALDATA"],
["0x01 0x07", "DROP 1", "MINIMALDATA"],
["0x01 0x08", "DROP 1", "MINIMALDATA"],
["0x01 0x09", "DROP 1", "MINIMALDATA"],
["0x01 0x0a", "DROP 1", "MINIMALDATA"],
["0x01 0x0b", "DROP 1", "MINIMALDATA"],
["0x01 0x0c", "DROP 1", "MINIMALDATA"],
["0x01 0x0d", "DROP 1", "MINIMALDATA"],
["0x01 0x0e", "DROP 1", "MINIMALDATA"],
["0x01 0x0f", "DROP 1", "MINIMALDATA"],
["0x01 0x10", "DROP 1", "MINIMALDATA"],
["0x4c 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
"PUSHDATA1 of 72 bytes minimally represented by direct push"],
["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
"PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1"],
["0x4f 0x00100000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
"PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2"],
["MINIMALDATA enforcement for numeric arguments"],
["0x01 0x00", "NOT DROP 1", "MINIMALDATA", "numequals 0"],
["0x02 0x0000", "NOT DROP 1", "MINIMALDATA", "numequals 0"],
["0x01 0x80", "NOT DROP 1", "MINIMALDATA", "0x80 (negative zero) numequals 0"],
["0x02 0x0080", "NOT DROP 1", "MINIMALDATA", "numequals 0"],
["0x02 0x0500", "NOT DROP 1", "MINIMALDATA", "numequals 5"],
["0x03 0x050000", "NOT DROP 1", "MINIMALDATA", "numequals 5"],
["0x02 0x0580", "NOT DROP 1", "MINIMALDATA", "numequals -5"],
["0x03 0x050080", "NOT DROP 1", "MINIMALDATA", "numequals -5"],
["0x03 0xff7f80", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xffff"],
["0x03 0xff7f00", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xff7f"],
["0x04 0xffff7f80", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xffffff"],
["0x04 0xffff7f00", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xffff7f"],
["Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule"],

View File

@ -527,12 +527,35 @@ nSequences are max.
"P2SH,STRICTENC",
"Basic PUSHDATA1 signedness check"],
["0x00", "SIZE 0 EQUAL", "P2SH,STRICTENC", "Basic OP_0 execution"],
["all PUSHDATA forms are equivalent"],
["0x01 0x81", "0x4f EQUAL", "", "direct push of 0x81 equals 1NEGATE"],
["0x01 0x05", "5 EQUAL", "", "direct push of 0x05 equals 5"],
["0x4c 0x4b 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "0x4b 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 EQUAL", "", "PUSHDATA1 of 75 bytes equals direct push of it"],
["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "0x4c 0xFF 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 EQUAL", "", "PUSHDATA2 of 255 bytes equals PUSHDATA1 of it"],
["0x00", "SIZE 0 EQUAL", "P2SH,STRICTENC", "Basic OP_0 execution"],
["Numeric pushes"],
["0x01 0x81", "0x4f EQUAL", "", "OP1_NEGATE pushes 0x81"],
["0x01 0x01", "0x51 EQUAL", "", "OP_1 pushes 0x01"],
["0x01 0x02", "0x52 EQUAL", "", "OP_2 pushes 0x02"],
["0x01 0x03", "0x53 EQUAL", "", "OP_3 pushes 0x03"],
["0x01 0x04", "0x54 EQUAL", "", "OP_4 pushes 0x04"],
["0x01 0x05", "0x55 EQUAL", "", "OP_5 pushes 0x05"],
["0x01 0x06", "0x56 EQUAL", "", "OP_6 pushes 0x06"],
["0x01 0x07", "0x57 EQUAL", "", "OP_7 pushes 0x07"],
["0x01 0x08", "0x58 EQUAL", "", "OP_8 pushes 0x08"],
["0x01 0x09", "0x59 EQUAL", "", "OP_9 pushes 0x09"],
["0x01 0x0a", "0x5a EQUAL", "", "OP_10 pushes 0x0a"],
["0x01 0x0b", "0x5b EQUAL", "", "OP_11 pushes 0x0b"],
["0x01 0x0c", "0x5c EQUAL", "", "OP_12 pushes 0x0c"],
["0x01 0x0d", "0x5d EQUAL", "", "OP_13 pushes 0x0d"],
["0x01 0x0e", "0x5e EQUAL", "", "OP_14 pushes 0x0e"],
["0x01 0x0f", "0x5f EQUAL", "", "OP_15 pushes 0x0f"],
["0x01 0x10", "0x60 EQUAL", "", "OP_16 pushes 0x10"],
["Equivalency of different numeric encodings"],
["0x02 0x8000", "128 NUMEQUAL", "", "0x8000 equals 128"],
["0x01 0x00", "0 NUMEQUAL", "", "0x00 numequals 0"],
["0x01 0x80", "0 NUMEQUAL", "", "0x80 (negative zero) numequals 0"],
@ -542,19 +565,51 @@ nSequences are max.
["0x03 0xff7f00", "0x02 0xff7f NUMEQUAL", "", ""],
["0x04 0xffff7f80", "0x03 0xffffff NUMEQUAL", "", ""],
["0x04 0xffff7f00", "0x03 0xffff7f NUMEQUAL", "", ""],
["0 IF 0x01 0x81 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x01 0x05 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x02 0x8000 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x01 0x00 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x01 0x80 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x02 0x0080 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x02 0x0400 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x03 0xff7f80 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x03 0xff7f00 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x04 0xffff7f80 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x04 0xffff7f00 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["0 IF 0x4c 0x03 0x222222 ENDIF 1", "", "MINIMALDATA", "unevaluated non-minimal data"],
["Unevaluated non-minimal pushes are ignored"],
["0 IF 0x4c 0x00 ENDIF 1", "", "MINIMALDATA", "non-minimal PUSHDATA1 ignored"],
["0 IF 0x4d 0x0000 ENDIF 1", "", "MINIMALDATA", "non-minimal PUSHDATA2 ignored"],
["0 IF 0x4c 0x00000000 ENDIF 1", "", "MINIMALDATA", "non-minimal PUSHDATA4 ignored"],
["0 IF 0x01 0x81 ENDIF 1", "", "MINIMALDATA", "1NEGATE equiv"],
["0 IF 0x01 0x01 ENDIF 1", "", "MINIMALDATA", "OP_1 equiv"],
["0 IF 0x01 0x02 ENDIF 1", "", "MINIMALDATA", "OP_2 equiv"],
["0 IF 0x01 0x03 ENDIF 1", "", "MINIMALDATA", "OP_3 equiv"],
["0 IF 0x01 0x04 ENDIF 1", "", "MINIMALDATA", "OP_4 equiv"],
["0 IF 0x01 0x05 ENDIF 1", "", "MINIMALDATA", "OP_5 equiv"],
["0 IF 0x01 0x06 ENDIF 1", "", "MINIMALDATA", "OP_6 equiv"],
["0 IF 0x01 0x07 ENDIF 1", "", "MINIMALDATA", "OP_7 equiv"],
["0 IF 0x01 0x08 ENDIF 1", "", "MINIMALDATA", "OP_8 equiv"],
["0 IF 0x01 0x09 ENDIF 1", "", "MINIMALDATA", "OP_9 equiv"],
["0 IF 0x01 0x0a ENDIF 1", "", "MINIMALDATA", "OP_10 equiv"],
["0 IF 0x01 0x0b ENDIF 1", "", "MINIMALDATA", "OP_11 equiv"],
["0 IF 0x01 0x0c ENDIF 1", "", "MINIMALDATA", "OP_12 equiv"],
["0 IF 0x01 0x0d ENDIF 1", "", "MINIMALDATA", "OP_13 equiv"],
["0 IF 0x01 0x0e ENDIF 1", "", "MINIMALDATA", "OP_14 equiv"],
["0 IF 0x01 0x0f ENDIF 1", "", "MINIMALDATA", "OP_15 equiv"],
["0 IF 0x01 0x10 ENDIF 1", "", "MINIMALDATA", "OP_16 equiv"],
["Numeric minimaldata rules are only applied when a stack item is numerically evaluated; the push itself is allowed"],
["0x01 0x00", "1", "MINIMALDATA"],
["0x01 0x80", "1", "MINIMALDATA"],
["0x02 0x0180", "1", "MINIMALDATA"],
["0x02 0x0100", "1", "MINIMALDATA"],
["0x02 0x0200", "1", "MINIMALDATA"],
["0x02 0x0300", "1", "MINIMALDATA"],
["0x02 0x0400", "1", "MINIMALDATA"],
["0x02 0x0500", "1", "MINIMALDATA"],
["0x02 0x0600", "1", "MINIMALDATA"],
["0x02 0x0700", "1", "MINIMALDATA"],
["0x02 0x0800", "1", "MINIMALDATA"],
["0x02 0x0900", "1", "MINIMALDATA"],
["0x02 0x0a00", "1", "MINIMALDATA"],
["0x02 0x0b00", "1", "MINIMALDATA"],
["0x02 0x0c00", "1", "MINIMALDATA"],
["0x02 0x0d00", "1", "MINIMALDATA"],
["0x02 0x0e00", "1", "MINIMALDATA"],
["0x02 0x0f00", "1", "MINIMALDATA"],
["0x02 0x1000", "1", "MINIMALDATA"],
[
"0x47 0x3044022007415aa37ce7eaa6146001ac8bdefca0ddcba0e37c5dc08c4ac99392124ebac802207d382307fd53f65778b07b9c63b6e196edeadf0be719130c5db21ff1e700d67501",