Remove eth_keys, web3 dependencies
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
# standard imports
|
||||
import logging
|
||||
|
||||
# external imports
|
||||
import sha3
|
||||
import coincurve
|
||||
#from eth_keys import KeyAPI
|
||||
#from eth_keys.backends import NativeECCBackend
|
||||
|
||||
from eth_keys import KeyAPI
|
||||
from eth_keys.backends import NativeECCBackend
|
||||
|
||||
keys = KeyAPI(NativeECCBackend)
|
||||
logg = logging.getLogger(__name__)
|
||||
#keys = KeyAPI(NativeECCBackend)
|
||||
#logg = logging.getLogger(__name__)
|
||||
logg = logging.getLogger()
|
||||
|
||||
|
||||
class Signer:
|
||||
@@ -31,9 +35,9 @@ class ReferenceSigner(Signer):
|
||||
s = tx.rlp_serialize()
|
||||
h = sha3.keccak_256()
|
||||
h.update(s)
|
||||
g = h.digest()
|
||||
k = keys.PrivateKey(self.keyGetter.get(tx.sender, password))
|
||||
z = keys.ecdsa_sign(message_hash=g, private_key=k)
|
||||
message_to_sign = h.digest()
|
||||
z = self.sign(tx.sender, message_to_sign, password)
|
||||
|
||||
vnum = int.from_bytes(tx.v, 'big')
|
||||
v = (vnum * 2) + 35 + z[64]
|
||||
byts = ((v.bit_length()-1)/8)+1
|
||||
@@ -55,17 +59,30 @@ class ReferenceSigner(Signer):
|
||||
|
||||
|
||||
def signEthereumMessage(self, address, message, password=None):
|
||||
#msg = b'\x19Ethereum Signed Message:\n{}{}'.format(len(message), message)
|
||||
k = keys.PrivateKey(self.keyGetter.get(address, password))
|
||||
|
||||
#k = keys.PrivateKey(self.keyGetter.get(address, password))
|
||||
#z = keys.ecdsa_sign(message_hash=g, private_key=k)
|
||||
z = None
|
||||
if type(message).__name__ == 'str':
|
||||
logg.debug('signing message in "str" format: {}'.format(message))
|
||||
z = k.sign_msg(bytes.fromhex(message))
|
||||
#z = k.sign_msg(bytes.fromhex(message))
|
||||
message = bytes.fromhex(message)
|
||||
elif type(message).__name__ == 'bytes':
|
||||
logg.debug('signing message in "bytes" format: {}'.format(message.hex()))
|
||||
z = k.sign_msg(message)
|
||||
#z = k.sign_msg(message)
|
||||
else:
|
||||
logg.debug('unhandled format {}'.format(type(message).__name__))
|
||||
raise ValueError('message must be type str or bytes, received {}'.format(type(message).__name__))
|
||||
|
||||
ethereumed_message_header = b'\x19' + 'Ethereum Signed Message:\n{}'.format(len(message)).encode('utf-8')
|
||||
h = sha3.keccak_256()
|
||||
h.update(ethereumed_message_header + message)
|
||||
message_to_sign = h.digest()
|
||||
|
||||
z = self.sign(address, message_to_sign, password)
|
||||
return z
|
||||
|
||||
|
||||
def sign(self, address, message, password=None):
|
||||
pk = coincurve.PrivateKey(secret=self.keyGetter.get(address, password))
|
||||
z = pk.sign(hasher=None, message=message)
|
||||
return z
|
||||
|
||||
Reference in New Issue
Block a user