Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13711221
D5236.id16222.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
D5236.id16222.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 11:01 (12 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573348
Default Alt Text
D5236.id16222.diff (9 KB)
Attached To
D5236: remove SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE (aka WITNESS_PUBKEYTYPE)
Event Timeline
Log In to Comment