diff options
author | Pavol Rusnak <stick@gk2.sk> | 2014-02-09 00:55:38 +0100 |
---|---|---|
committer | Pavol Rusnak <stick@gk2.sk> | 2014-02-09 00:55:38 +0100 |
commit | d149077543e587d09edac3f94e77365a49fc0b06 (patch) | |
tree | b272b0c358507f648144a6b806721364a2ffee90 | |
parent | 3a15318fd9c2ab6bb558cbddb67fbf1757bd3766 (diff) | |
download | ecdsa-d149077543e587d09edac3f94e77365a49fc0b06.tar.gz |
canonical versions of sigencode methods
these enforce low S values, by negating the value (modulo the order) if above order/2
-rw-r--r-- | ecdsa/util.py | 18 |
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) |