funga

Signer and keystore daemon and library for cryptocurrency software development
Log | Files | Refs | README | LICENSE

commit 3fb5745f9800be47211c7a7f4e1cfb0ce5cf72d2
parent c287e1dae7c1f3609a75209fb0cffe1be9490431
Author: nolash <dev@holbrook.no>
Date:   Wed,  3 Mar 2021 18:10:15 +0100

Handle multiple zero-bytes on signatures

Diffstat:
Mcrypto_dev_signer/eth/signer/defaultsigner.py | 15+++++++++++----
Mcrypto_dev_signer/eth/transaction.py | 16+++++++++++++++-
Msetup.py | 2+-
3 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/crypto_dev_signer/eth/signer/defaultsigner.py b/crypto_dev_signer/eth/signer/defaultsigner.py @@ -40,10 +40,17 @@ class ReferenceSigner(Signer): tx.v = v.to_bytes(int(byts), 'big') tx.r = z[:32] tx.s = z[32:64] - if tx.r[0] == 0: - tx.r = tx.r[1:] - if tx.s[0] == 0: - tx.s = tx.s[1:] + + for i in range(len(tx.r)): + if tx.r[i] > 0: + tx.r = tx.r[i:] + break + + for i in range(len(tx.s)): + if tx.s[i] > 0: + tx.s = tx.s[i:] + break + return z diff --git a/crypto_dev_signer/eth/transaction.py b/crypto_dev_signer/eth/transaction.py @@ -78,7 +78,7 @@ class EIP155Transaction: self.sender = strip_hex_prefix(tx['from']) - def rlp_serialize(self): + def __canonical_order(self): s = [ self.nonce, self.gas_price, @@ -90,8 +90,22 @@ class EIP155Transaction: self.r, self.s, ] + + return s + + def bytes_serialize(self): + s = self.__canonical_order() + b = b'' + for e in s: + b += e + return b + + + def rlp_serialize(self): + s = self.__canonical_order() return rlp_encode(s) + def serialize(self): tx = { 'nonce': add_hex_prefix(self.nonce.hex()), diff --git a/setup.py b/setup.py @@ -24,7 +24,7 @@ f.close() setup( name="crypto-dev-signer", - version="0.4.13rc3", + version="0.4.13rc4", description="A signer and keystore daemon and library for cryptocurrency software development", author="Louis Holbrook", author_email="dev@holbrook.no",