2020-09-21 19:10:20 +02:00
|
|
|
# standard imports
|
|
|
|
import os
|
2021-03-17 15:34:51 +01:00
|
|
|
import json
|
|
|
|
import logging
|
2021-01-09 20:25:47 +01:00
|
|
|
|
2020-09-21 19:10:20 +02:00
|
|
|
# local imports
|
2021-10-10 09:41:56 +02:00
|
|
|
from funga.keystore import Keystore
|
|
|
|
from funga.eth.keystore import keyfile
|
|
|
|
from funga.eth.encoding import private_key_from_bytes
|
2020-09-21 19:10:20 +02:00
|
|
|
|
2021-03-17 15:34:51 +01:00
|
|
|
logg = logging.getLogger(__name__)
|
2020-09-21 19:10:20 +02:00
|
|
|
|
2020-08-06 14:11:43 +02:00
|
|
|
|
2021-10-10 09:41:56 +02:00
|
|
|
def native_keygen(self):
|
|
|
|
return os.urandom(32)
|
2020-08-06 14:11:43 +02:00
|
|
|
|
2020-09-21 19:10:20 +02:00
|
|
|
|
2021-10-10 09:41:56 +02:00
|
|
|
class EthKeystore(Keystore):
|
2021-03-17 15:34:51 +01:00
|
|
|
|
2021-10-10 09:41:56 +02:00
|
|
|
def __init__(self, private_key_generator=native_keygen):
|
|
|
|
super(Keystore, self).__init__(
|
|
|
|
private_key_generator=private_key_generator,
|
|
|
|
private_key_parser=private_key_from_bytes,
|
|
|
|
keystore_parser=keyfile.from_some,
|
|
|
|
)
|
|
|
|
|
2021-03-17 15:34:51 +01:00
|
|
|
|
2020-08-06 14:11:43 +02:00
|
|
|
def new(self, password=None):
|
2020-09-21 19:10:20 +02:00
|
|
|
return self.import_raw_key(b, password)
|
|
|
|
|
|
|
|
|
|
|
|
def import_raw_key(self, b, password=None):
|
2021-07-20 17:46:19 +02:00
|
|
|
pk = private_key_from_bytes(b)
|
2020-09-21 19:10:20 +02:00
|
|
|
return self.import_key(pk, password)
|
|
|
|
|
2020-08-06 14:11:43 +02:00
|
|
|
|
2020-09-20 10:00:59 +02:00
|
|
|
def import_key(self, pk, password=None):
|
|
|
|
raise NotImplementedError
|
|
|
|
|
2020-09-21 19:10:20 +02:00
|
|
|
|
2021-01-09 20:25:47 +01:00
|
|
|
def import_keystore_data(self, keystore_content, password=''):
|
2021-03-17 15:34:51 +01:00
|
|
|
if type(keystore_content).__name__ == 'str':
|
|
|
|
keystore_content = json.loads(keystore_content)
|
|
|
|
elif type(keystore_content).__name__ == 'bytes':
|
|
|
|
logg.debug('bytes {}'.format(keystore_content))
|
|
|
|
keystore_content = json.loads(keystore_content.decode('utf-8'))
|
|
|
|
private_key = keyfile.from_dict(keystore_content, password.encode('utf-8'))
|
2021-01-09 20:25:47 +01:00
|
|
|
return self.import_raw_key(private_key, password)
|
2020-09-21 19:10:20 +02:00
|
|
|
|
2021-10-10 09:41:56 +02:00
|
|
|
|
2021-01-09 20:25:47 +01:00
|
|
|
def import_keystore_file(self, keystore_file, password=''):
|
2021-03-22 18:42:56 +01:00
|
|
|
private_key = keyfile.from_file(keystore_file, password)
|
|
|
|
return self.import_raw_key(private_key)
|