Skip to content

Commit 1a9453d

Browse files
author
Brian Warner
committed
Merge pull request #17 from trezor/master
canonical versions of sigencode methods
2 parents 0fae35a + d149077 commit 1a9453d

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

ecdsa/util.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,24 @@ def sigencode_string(r, s, order):
197197
def sigencode_der(r, s, order):
198198
return der.encode_sequence(der.encode_integer(r), der.encode_integer(s))
199199

200+
# canonical versions of sigencode methods
201+
# these enforce low S values, by negating the value (modulo the order) if above order/2
202+
# see CECKey::Sign() https://github.com/bitcoin/bitcoin/blob/master/src/key.cpp#L214
203+
def sigencode_strings_canonize(r, s, order):
204+
if s > order / 2:
205+
s = order - s
206+
return sigencode_strings(r, s, order)
207+
208+
def sigencode_string_canonize(r, s, order):
209+
if s > order / 2:
210+
s = order - s
211+
return sigencode_string(r, s, order)
212+
213+
def sigencode_der_canonize(r, s, order):
214+
if s > order / 2:
215+
s = order - s
216+
return sigencode_der(r, s, order)
217+
200218

201219
def sigdecode_string(signature, order):
202220
l = orderlen(order)

0 commit comments

Comments
 (0)