Handle multiple zero-bytes on signatures

This commit is contained in:
nolash
2021-03-03 18:10:15 +01:00
parent c287e1dae7
commit 3fb5745f98
3 changed files with 27 additions and 6 deletions

View File

@@ -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

View File

@@ -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()),