Page MenuHomePhabricator

D5236.id16222.diff
No OneTemporary

D5236.id16222.diff

diff --git a/src/script/ismine.h b/src/script/ismine.h
--- a/src/script/ismine.h
+++ b/src/script/ismine.h
@@ -28,9 +28,8 @@
* isInvalid becomes true when the script is found invalid by consensus or
* policy. This will terminate the recursion and return ISMINE_NO immediately,
* as an invalid script should never be considered as "mine". Currently the only
- * use of isInvalid is indicate uncompressed keys when
- * SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE is specified, but could also be used in
- * similar cases in the future.
+ * use of isInvalid is for P2SH-inside-P2SH scripts (as a technicality, to
+ * prevent infinite recursion).
*/
isminetype IsMine(const CKeyStore &keystore, const CScript &scriptPubKey,
bool &isInvalid);
diff --git a/src/script/script_error.h b/src/script/script_error.h
--- a/src/script/script_error.h
+++ b/src/script/script_error.h
@@ -73,9 +73,6 @@
/* softfork safeness */
DISCOURAGE_UPGRADABLE_NOPS,
- /* misc */
- NONCOMPRESSED_PUBKEY,
-
/* anti replay */
ILLEGAL_FORKID,
MUST_USE_FORKID,
diff --git a/src/script/script_error.cpp b/src/script/script_error.cpp
--- a/src/script/script_error.cpp
+++ b/src/script/script_error.cpp
@@ -98,8 +98,6 @@
return "Public key is neither compressed or uncompressed";
case ScriptError::CLEANSTACK:
return "Script did not clean its stack";
- case ScriptError::NONCOMPRESSED_PUBKEY:
- return "Using non-compressed public key";
case ScriptError::ILLEGAL_FORKID:
return "Illegal use of SIGHASH_FORKID";
case ScriptError::MUST_USE_FORKID:
diff --git a/src/script/script_flags.h b/src/script/script_flags.h
--- a/src/script/script_flags.h
+++ b/src/script/script_flags.h
@@ -80,10 +80,6 @@
//
SCRIPT_VERIFY_NULLFAIL = (1U << 14),
- // Public keys in scripts must be compressed
- //
- SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE = (1U << 15),
-
// Do we accept signature using SIGHASH_FORKID
//
SCRIPT_ENABLE_SIGHASH_FORKID = (1U << 16),
diff --git a/src/script/sigencoding.cpp b/src/script/sigencoding.cpp
--- a/src/script/sigencoding.cpp
+++ b/src/script/sigencoding.cpp
@@ -302,29 +302,11 @@
}
}
-static bool IsCompressedPubKey(const valtype &vchPubKey) {
- if (vchPubKey.size() != CPubKey::COMPRESSED_PUBLIC_KEY_SIZE) {
- // Non-canonical public key: invalid length for compressed key
- return false;
- }
- if (vchPubKey[0] != 0x02 && vchPubKey[0] != 0x03) {
- // Non-canonical public key: invalid prefix for compressed key
- return false;
- }
- return true;
-}
-
bool CheckPubKeyEncoding(const valtype &vchPubKey, uint32_t flags,
ScriptError *serror) {
if ((flags & SCRIPT_VERIFY_STRICTENC) &&
!IsCompressedOrUncompressedPubKey(vchPubKey)) {
return set_error(serror, ScriptError::PUBKEYTYPE);
}
- // Only compressed keys are accepted when
- // SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE is enabled.
- if ((flags & SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE) &&
- !IsCompressedPubKey(vchPubKey)) {
- return set_error(serror, ScriptError::NONCOMPRESSED_PUBKEY);
- }
return true;
}
diff --git a/src/test/checkdatasig_tests.cpp b/src/test/checkdatasig_tests.cpp
--- a/src/test/checkdatasig_tests.cpp
+++ b/src/test/checkdatasig_tests.cpp
@@ -157,12 +157,6 @@
ScriptError::PUBKEYTYPE);
CheckError(flags, {{}, message, pubkeyH}, scriptverify,
ScriptError::PUBKEYTYPE);
- } else if (flags & SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE) {
- // When compressed-only is enforced, hybrid keys are invalid.
- CheckError(flags, {{}, message, pubkeyH}, script,
- ScriptError::NONCOMPRESSED_PUBKEY);
- CheckError(flags, {{}, message, pubkeyH}, scriptverify,
- ScriptError::NONCOMPRESSED_PUBKEY);
} else {
// Otherwise, hybrid keys are valid.
CheckPass(flags, {{}, message, pubkeyH}, script, {});
@@ -170,18 +164,10 @@
ScriptError::CHECKDATASIGVERIFY);
}
- if (flags & SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE) {
- // When compressed-only is enforced, uncompressed keys are invalid.
- CheckError(flags, {{}, message, pubkey}, script,
- ScriptError::NONCOMPRESSED_PUBKEY);
- CheckError(flags, {{}, message, pubkey}, scriptverify,
- ScriptError::NONCOMPRESSED_PUBKEY);
- } else {
- // Otherwise, uncompressed keys are valid.
- CheckPass(flags, {{}, message, pubkey}, script, {});
- CheckError(flags, {{}, message, pubkey}, scriptverify,
- ScriptError::CHECKDATASIGVERIFY);
- }
+ // Uncompressed keys are valid.
+ CheckPass(flags, {{}, message, pubkey}, script, {});
+ CheckError(flags, {{}, message, pubkey}, scriptverify,
+ ScriptError::CHECKDATASIGVERIFY);
if (flags & SCRIPT_VERIFY_NULLFAIL) {
// Invalid signature causes checkdatasig to fail.
diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json
--- a/src/test/data/script_tests.json
+++ b/src/test/data/script_tests.json
@@ -2928,13 +2928,6 @@
"OK",
"Schnorr P2PK with uncompressed pubkey"
],
-[
- "0x41 0x0df4be7f5fe74b2855b92082720e889038e15d8d747334fa3f300ef4ab1db1eea56aa83d1d60809ff6703791736be87cfb6cbc5c4036aeed3b4ea4e6dab3509001",
- "0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
- "COMPRESSED_PUBKEYTYPE,STRICTENC",
- "NONCOMPRESSED_PUBKEY",
- "Schnorr P2PK with uncompressed pubkey but COMPRESSED_PUBKEYTYPE set"
-],
[
"0x41 0xd211631fdebf4c8376b3d169ef65a1987460eda43c3312e561b0226fa3069f68a68bac0dbf780f77dd60ff602c66186f1da2bb0a31f10187796242f48295ddbe01",
"0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp
--- a/src/test/script_tests.cpp
+++ b/src/test/script_tests.cpp
@@ -87,7 +87,6 @@
{ScriptError::SIG_BADLENGTH, "SIG_BADLENGTH"},
{ScriptError::SIG_NONSCHNORR, "SIG_NONSCHNORR"},
{ScriptError::DISCOURAGE_UPGRADABLE_NOPS, "DISCOURAGE_UPGRADABLE_NOPS"},
- {ScriptError::NONCOMPRESSED_PUBKEY, "NONCOMPRESSED_PUBKEY"},
{ScriptError::ILLEGAL_FORKID, "ILLEGAL_FORKID"},
{ScriptError::MUST_USE_FORKID, "MISSING_FORKID"},
{ScriptError::DIV_BY_ZERO, "DIV_BY_ZERO"},
@@ -1624,14 +1623,6 @@
"Schnorr P2PK with uncompressed pubkey",
SCRIPT_VERIFY_STRICTENC)
.PushSigSchnorr(keys.key0, SigHashType()));
- tests.push_back(
- TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,
- "Schnorr P2PK with uncompressed pubkey but "
- "COMPRESSED_PUBKEYTYPE set",
- SCRIPT_VERIFY_STRICTENC |
- SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE)
- .PushSigSchnorr(keys.key0, SigHashType())
- .SetScriptError(ScriptError::NONCOMPRESSED_PUBKEY));
tests.push_back(
TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG,
"Schnorr P2PK with hybrid pubkey", SCRIPT_VERIFY_STRICTENC)
diff --git a/src/test/scriptflags.cpp b/src/test/scriptflags.cpp
--- a/src/test/scriptflags.cpp
+++ b/src/test/scriptflags.cpp
@@ -27,7 +27,6 @@
{"NULLFAIL", SCRIPT_VERIFY_NULLFAIL},
{"CHECKLOCKTIMEVERIFY", SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY},
{"CHECKSEQUENCEVERIFY", SCRIPT_VERIFY_CHECKSEQUENCEVERIFY},
- {"COMPRESSED_PUBKEYTYPE", SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE},
{"SIGHASH_FORKID", SCRIPT_ENABLE_SIGHASH_FORKID},
{"REPLAY_PROTECTION", SCRIPT_ENABLE_REPLAY_PROTECTION},
{"CHECKDATASIG", SCRIPT_VERIFY_CHECKDATASIG_SIGOPS},
diff --git a/src/test/sigencoding_tests.cpp b/src/test/sigencoding_tests.cpp
--- a/src/test/sigencoding_tests.cpp
+++ b/src/test/sigencoding_tests.cpp
@@ -374,31 +374,19 @@
ScriptError err = ScriptError::OK;
- // Compressed pubkeys are always valid.
+ // Compressed and uncompressed pubkeys are always valid.
BOOST_CHECK(CheckPubKeyEncoding(compressedKey0, flags, &err));
BOOST_CHECK(CheckPubKeyEncoding(compressedKey1, flags, &err));
+ BOOST_CHECK(CheckPubKeyEncoding(fullKey, flags, &err));
- // If SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE is specified, full key are
- // disabled.
- const bool allowFullKey =
- (flags & SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE) == 0;
- BOOST_CHECK_EQUAL(CheckPubKeyEncoding(fullKey, flags, &err),
- allowFullKey);
- if (!allowFullKey) {
- BOOST_CHECK(err == ScriptError::NONCOMPRESSED_PUBKEY);
- }
-
- // If SCRIPT_VERIFY_STRICTENC or SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE is
- // specified, we rule out invalid keys.
+ // If SCRIPT_VERIFY_STRICTENC is specified, we rule out invalid keys.
const bool hasStrictEnc = (flags & SCRIPT_VERIFY_STRICTENC) != 0;
- const bool allowInvalidKeys = allowFullKey && !hasStrictEnc;
+ const bool allowInvalidKeys = !hasStrictEnc;
for (const valtype &key : invalidKeys) {
BOOST_CHECK_EQUAL(CheckPubKeyEncoding(key, flags, &err),
allowInvalidKeys);
if (!allowInvalidKeys) {
- BOOST_CHECK(err == (hasStrictEnc
- ? ScriptError::PUBKEYTYPE
- : ScriptError::NONCOMPRESSED_PUBKEY));
+ BOOST_CHECK(err == ScriptError::PUBKEYTYPE);
}
}
}

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 11:01 (5 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573348
Default Alt Text
D5236.id16222.diff (9 KB)

Event Timeline