pull/20/head
quadrismegistus 4 years ago
parent daea7c08a5
commit 091a054ff4

@ -0,0 +1 @@
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDjBmWTrRR0ZzNgkQotZtq19nSTXjZudRkTxRYfx6Zbiq0OyXkXEtZR2lrLzZTsHSevp6AIwxpiacw3Cq7pXCra5AQYgJdcHC4HOVVU1rj2Muea4MbeneUs++QOD19utQNQwMZV2Q8Sp+s6wBzvcdsuEPxt+K8O9/oRMuRUe+i9JoPLd0cHUVd1ep+cYrvwURMYDUraYDjxwymPA8WElugp8Z0SplvSfR4zr7Q+2ON6j1z1kTHz81SbHdpR8A5H6yi2it71qmw2FxDdMovjv0x8FnmpsvZTyJK/3RuMSUX4Wgm16sOFee8ZL4Xo86tnEeh+u8jh4ryuCAcVhsn1s0giX1lgS9qdSSr9xAEFLkR+HnBOq57IM6NBt2A7Xe9aMSmTGZ7hZ4V64Z2h69kkAR++uDGpCd4/WkvwCFlRK4eE26Lpggrq3Z6p/3xQaYTYcqMVD8QMZ6JsUj4Hs7CdGObvqoUSvaWHT69AAi+upATRzW+WnIArMeQQQoGtg8xRM3MI/PQwLWdMPWYQr84Y3Cwejl+dNJUYhDwNbqcbLk2W6K4es2qLRxxHZ5QfsRRTE80knmNbFwKZ0OtMgUCKvIoIa3umKTi2RGlGCB9jhz3gy94gPCjbb+ZRUP4/mA0/14oX+RFVkQ38oQwFupgvsIHPkcVu1rGq6XYxLJBmcKcl7QIDAQABAoICAQCBVauYrgnxJroGUZrSsr323Ckdq5am5t8afDVWdY84p5Bf1DfABWNDznnbkYs92H47e+uYEk59sng9A0ESgQeJHE2ZB+ky+HrgcrFCW/GTkPyRJ20kdh+RuQ77U5ayozz4TFqxna8QmclQ9xGE+AA+Bj9JB1vz0yILmkqqNs0otUBwMcutR5Hjw7Aaj8Ux635NPYVfU2IdmWmbqDJmjvJEsvkhHtVA3TbPi1HMXBN8RyBWZhlnOUEB/cfa1j/MiRPwqrzKiASN7CYXXiyD2v/f0Y4ON35NzP6Nf5GqIjRSgDj4An7RE947Iu/O/sKvPWyOhryys1F6c+hVQyzbZP+6Qohc3Rty6SPGAEm0Cx2Ud5EFfOpNwBCxWsh/mK7SkIhPIcEWdVtpJ+2FiyfTYtBHWFYVmnM+oupcB2QP0N3Wz33x9K8ta6uV+Pb3Ru1TFSD88/zC8xWPM0P2DbHSATf+8sFoY3j+4kpUUJvb7JFz53MCz5oid0PN0biTq7DS7iyoeLYXoaqclD/nJoPj2pOFQctagr+7+4eYcpbdY5UUmcOcvvKcWDn8Ttoy7TWwcWBZsJxVRFE5w+LBmpsGu+s3RxZn+8QVebNKVkAZPQIvzwbUBzL+rEKJdfhfT4EHhLmIOuxBEpV/ciWfydKi1Oec7Wt2ZUNDdv2rDe6meAxyoQKCAQEA9kw9sVhuEnQ3jLcvY/WO4HEqxyeYd6nFKta608/aOtg58XFpLI2HBuuLfdAvY7C9kncuzdnX5j70cOo8VD08FVlMqnqEWNUlMlzCYTfPXwLZZpHw6Tnt+BtsaxeS/SUOwccX9YJ397EoTJTjlTcx2f9KmFHJ1MGllxJ/srYnTMLKdjAMElXdu0OA0WAbt/Jl/JBciUVf5ejMXtyFgja0B/oP+8tgl/vRJvfZLAhE39Bs6YLTbSizsFHCUbeHFgzt95yRKioGmpO3ne+PhjxFnadxYWs1YzkCFw/QaCpShk5DnafNZDlBM+aE206PN7Di1/wAEjxhfycghv21vQh+9wKCAQEA6/fNKNm65LeoZx9ZWaDxZqj8aYp5/UK0seEkKJrXrUnV7xLrUrUKtIbhb9z5JlJ3TAiaQ9r7g8lpLSCzm3YdPUlUFrE+PKX2bQqZZsgOtbB0kIABmqdzC/KZ2JagxPc/5WTER3EZlCiA89ykDeOCDLvCbTDxuleI2xzctuQJi2pe2l9Rhp6w1W0jmXVSqw8Z5ckiZzkhXaD0MoSlniPGhswl9R3a6HW6Q79Qgc54rfmt/a5MhvmP+QUDtCN4xOs6CEPomuwewaKf9Q75fQ+Pixbm7Y/qZtju9JWXOxL8Mqxat4jveMH1WpJDmt53ceNJuOgRyUYbpvf/ui+mZe11OwKCAQBJCDhu4uLYs/9YyWTTBhhUsxnVLgeGzB974WpKrmJuenlL/64JGPpF8ghNyTKUI+9Cg/ar8YGUc2x2Iu66p+GuDumtz2B5GtLJyTmWLD9gU+70/CdscNIAdNlENBxQ1fE3Qnr3QLWkC7MAalHFiDVPB+Utn2rynG0mi8Sz0FF88HGqc/rQYQe7pHuJGi997vGQ35mg1qJmAQ7AvjEUeHYPu3WL2zWMO448ONf7t4P8vcfdwf5BawVFLikpo/r5beIOPy3IS+fjZBPZUBTF4A9gfSsgkPKmtlvJTNYmXQ5VZtWj5QMBSfzsj9krUnMjN188XiwDPEZItuhtPsPqBp/nAoIBAQDpWbMPVNIX4O+umzfXBOv1I+QJ0yF0LQVYa1dAuG/VNJFVzZXdwp+Fi2VhJFtXZHIJRPCZbfMQjptuP0qe0J11wBBiKIFtpIofpz2wgOLbFlcPlyb+89030YAGyl7OqdwMVCwuolAzTiLIBkhOW9B+GyfYp3BFYM88MDysuLIfpt+KgHy07jXdugJcfcN02og3z0IwZjTyzHrxgm/uBV8MatKWpiGXhOTgnk9VLwP0uFcx6a5QRHf2QNk6yWFjC2PmTJG4swxvXQ1mYJqk7EB9wfY4s/uQHbOhOFXH26x/yCYmHksDVnv2R3KHsrzYaXa8XvNH4gbyhYnla73YSo2FAoIBAE1v6jmm+LQdmh6szC5hU1M19ClaOKgL6vOGfiB6BYUEVqHYr3yekOiA2hWGXau6V7tC1EmCOVr3Vn3OziVPV9S7qJEqmL0fuMrOR+CWfNBH1DRMe0us2zVmXztIfPeAzFC2G5uEcsTpj+qhEedLFXPi13WbSiINGNTjTMlurIR5OPSIKlFgzYEDIbSCNqGcjeljj7NzoJv/lJKXttPxKNVaecVb/os7qSPgYkBUojz9SYAglFJIg+BtyqSMvdX2Arb74WnnaU0O/+SeIEDtp1XhITss17vAGVCxREmcfGNKd3ciC9zAtryjeyop0enmXuY7eHS+oF4Z9tC+Sy9AJLc=

@ -0,0 +1 @@
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4wZlk60UdGczYJEKLWbatfZ0k142bnUZE8UWH8emW4qtDsl5FxLWUdpay82U7B0nr6egCMMaYmnMNwqu6Vwq2uQEGICXXBwuBzlVVNa49jLnmuDG3p3lLPvkDg9fbrUDUMDGVdkPEqfrOsAc73HbLhD8bfivDvf6ETLkVHvovSaDy3dHB1FXdXqfnGK78FETGA1K2mA48cMpjwPFhJboKfGdEqZb0n0eM6+0Ptjjeo9c9ZEx8/NUmx3aUfAOR+sotore9apsNhcQ3TKL479MfBZ5qbL2U8iSv90bjElF+FoJterDhXnvGS+F6POrZxHofrvI4eK8rggHFYbJ9bNIIl9ZYEvanUkq/cQBBS5Efh5wTqueyDOjQbdgO13vWjEpkxme4WeFeuGdoevZJAEfvrgxqQneP1pL8AhZUSuHhNui6YIK6t2eqf98UGmE2HKjFQ/EDGeibFI+B7OwnRjm76qFEr2lh0+vQAIvrqQE0c1vlpyAKzHkEEKBrYPMUTNzCPz0MC1nTD1mEK/OGNwsHo5fnTSVGIQ8DW6nGy5NluiuHrNqi0ccR2eUH7EUUxPNJJ5jWxcCmdDrTIFAiryKCGt7pik4tkRpRggfY4c94MveIDwo22/mUVD+P5gNP9eKF/kRVZEN/KEMBbqYL7CBz5HFbtaxqul2MSyQZnCnJe0CAwEAAQ==

@ -48,9 +48,11 @@ NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
from pathlib import Path
home = str(Path.home())
KEYDIR = os.path.join(home,'.komrade','.keys')
if not os.path.exists(KEYDIR): os.makedirs(KEYDIR)
KEYDIR_BUILTIN = '.'
async def _getdb(self=None,port=PORT_LISTEN):
@ -84,12 +86,12 @@ class Api(object):
if self.username:
pass
async def connect_forever(self,port=PORT_LISTEN,save_every=10):
async def connect_forever(self,port=PORT_LISTEN,save_every=60):
try:
i = 0
self._node = await self.connect(port=port)
while True:
if not i%60: self.log(f'Node status (tick {i}): {self._node}')
if not i%30: self.log(f'Node status (tick {i}): {self._node}')
if i and not i%save_every: await self.flush()
i += 1
await asyncio.sleep(NODE_SLEEP_FOR)
@ -506,19 +508,21 @@ class Api(object):
## Register
async def register(self,name,passkey=None):
async def register(self,name,passkey=None,just_return_keys=False):
# if not (name and passkey): return {'error':'Name and password needed'}
person = await self.get_person(name)
keys = await self.get_keys()
if person is not None:
self.log('register() person <-',person)
# try to log in
self.log('my keys',self.keys.keys())
if not name in self.keys:
self.log('my keys',keys)
if not name in keys:
self.log('!! person already exists')
return {'error':'Person already exists'}
# test 3 conditions
privkey=self.keys[name]
privkey=keys[name]
pubkey=load_pubkey(person)
if simple_lock_test(privkey,pubkey):
@ -531,6 +535,9 @@ class Api(object):
pem_private_key = serialize_privkey(private_key, password=passkey)# save_private_key(private_key,password=passkey,return_instead=True)
pem_public_key = serialize_pubkey(public_key)
if just_return_keys:
return (pem_private_key,pem_public_key)
# save pub key in db
await self.set_person(name,pem_public_key)
# save priv key on hardware
@ -553,7 +560,7 @@ class Api(object):
self.log('!!',e)
return {'error':'Incorrect password'}
def add_world_key(self,fn=PATH_WORLD_KEY):
async def add_world_key(self,fn=PATH_WORLD_KEY):
import shutil
name='.'.join(os.path.basename(PATH_WORLD_KEY).split('.')[1:-1])
@ -561,18 +568,18 @@ class Api(object):
pub_key=priv_key.public_key()
pub_key_b=serialize_pubkey(pub_key)
if self.set_person(name,pub_key_b):
if await self.set_person(name,pub_key_b):
ofn=os.path.join(KEYDIR,f'.{name}.key')
shutil.copyfile(fn,ofn)
#@property
def get_keys(self):
async def get_keys(self):
res={}
key_files = os.listdir(KEYDIR)
world_key_fn = os.path.basename(PATH_WORLD_KEY)
if not world_key_fn in key_files:
self.log('[first time?] adding world key')
self.add_world_key()
await self.add_world_key()
for priv_key_fn in key_files:
if (not priv_key_fn.startswith('.') or not priv_key_fn.endswith('.key')): continue
@ -587,10 +594,10 @@ class Api(object):
@property
def keys(self):
async def keys(self):
#if not hasattr(self,'_keys'): self._keys = self.get_keys()
#return self._keys
return self.get_keys()
return await self.get_keys()
@ -934,8 +941,21 @@ def init_entities(usernames = ['world']):
async def register(username):
API = Api()
#await API.connect_forever()
await API.register(username)
print(API.keys)
#privkey,pubkey = await API.register(username,just_return_keys=True)
private_key = generate_rsa_key()
public_key = private_key.public_key()
pem_private_key = serialize_privkey(private_key)
pem_public_key = serialize_pubkey(public_key)
privkey_fn = os.path.join(KEYDIR_BUILTIN,f'.{username}.key.priv')
pubkey_fn = os.path.join(KEYDIR_BUILTIN,f'.{username}.key.pub')
with open(privkey_fn,'wb') as of: of.write(pem_private_key)
with open(pubkey_fn,'wb') as of: of.write(pem_public_key)
# print(API.keys)
await API.set_person(username,pem_public_key)
print('done')

@ -231,7 +231,7 @@ class Server:
nearest = self.protocol.router.find_neighbors(node)
self.log('set_digest() nearest -->',nearest)
if not nearest:
self.log.warning("There are no known neighbors to set key %s",
self.log("There are no known neighbors to set key %s",
dkey.hex())
return False
@ -271,7 +271,7 @@ class Server:
'neighbors': self.bootstrappable_neighbors()
}
if not data['neighbors']:
self.log.warning("No known neighbors, so not writing to cache.")
self.log("No known neighbors, so not writing to cache.")
return
with open(fname, 'wb') as file:
pickle.dump(data, file)

Loading…
Cancel
Save