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:
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",