summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Warner <warner-github@lothar.com>2014-02-17 17:54:58 -0800
committerBrian Warner <warner-github@lothar.com>2014-02-17 17:54:58 -0800
commit1a9453dbe2f62a4de376dc08278a36eeadc3cb40 (patch)
tree3342ccf21769c854e6879b27869a570297004308
parent0fae35a57bf6aef1ae0187fb94b99188a3f34d97 (diff)
parentd149077543e587d09edac3f94e77365a49fc0b06 (diff)
downloadecdsa-1a9453dbe2f62a4de376dc08278a36eeadc3cb40.tar.gz
Merge pull request #17 from trezor/master
canonical versions of sigencode methods
-rw-r--r--ecdsa/util.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/ecdsa/util.py b/ecdsa/util.py
index 816c62f..06e4629 100644
--- a/ecdsa/util.py
+++ b/ecdsa/util.py
@@ -197,6 +197,24 @@ def sigencode_string(r, s, order):
def sigencode_der(r, s, order):
return der.encode_sequence(der.encode_integer(r), der.encode_integer(s))
+# canonical versions of sigencode methods
+# these enforce low S values, by negating the value (modulo the order) if above order/2
+# see CECKey::Sign() https://github.com/bitcoin/bitcoin/blob/master/src/key.cpp#L214
+def sigencode_strings_canonize(r, s, order):
+ if s > order / 2:
+ s = order - s
+ return sigencode_strings(r, s, order)
+
+def sigencode_string_canonize(r, s, order):
+ if s > order / 2:
+ s = order - s
+ return sigencode_string(r, s, order)
+
+def sigencode_der_canonize(r, s, order):
+ if s > order / 2:
+ s = order - s
+ return sigencode_der(r, s, order)
+
def sigdecode_string(signature, order):
l = orderlen(order)