aboutsummaryrefslogtreecommitdiff
path: root/src/test/canonical_tests.cpp
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2014-02-07 02:19:48 +0100
committerPieter Wuille <sipa@ulyssis.org>2014-03-10 20:38:32 +0100
commit6fd7ef2bbf1f941c8dee302ffdeb44e603148723 (patch)
tree76cebc090b484368a68781cb393b1e1be7ad1717 /src/test/canonical_tests.cpp
parenta63f8b7b36e39722024a0ba061ca214f00a8f1bd (diff)
downloadbitcoin-6fd7ef2bbf1f941c8dee302ffdeb44e603148723.tar.xz
Also switch the (unused) verification code to low-s instead of even-s.
a81cd968 introduced a malleability breaker for signatures (using an even value for S). In e0e14e43 this was changed to the lower of two potential values, rather than the even one. Only the signing code was changed though, the (for now unused) verification code wasn't adapted.
Diffstat (limited to 'src/test/canonical_tests.cpp')
-rw-r--r--src/test/canonical_tests.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/test/canonical_tests.cpp b/src/test/canonical_tests.cpp
index c521f2cf9c..c38d9db57a 100644
--- a/src/test/canonical_tests.cpp
+++ b/src/test/canonical_tests.cpp
@@ -89,4 +89,21 @@ BOOST_AUTO_TEST_CASE(script_noncanon)
}
}
+BOOST_AUTO_TEST_CASE(script_signstrict)
+{
+ for (int i=0; i<100; i++) {
+ CKey key;
+ key.MakeNewKey(i & 1);
+ std::vector<unsigned char> sig;
+ uint256 hash = GetRandHash();
+
+ BOOST_CHECK(key.Sign(hash, sig)); // Generate a random signature.
+ BOOST_CHECK(key.GetPubKey().Verify(hash, sig)); // Check it.
+ sig.push_back(0x01); // Append a sighash type.
+
+ BOOST_CHECK(IsCanonicalSignature(sig, SCRIPT_VERIFY_STRICTENC | SCRIPT_VERIFY_LOW_S));
+ BOOST_CHECK(IsCanonicalSignature_OpenSSL(sig));
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END()