diff --git a/docs/cryptosystems.drawio b/docs/cryptosystems.drawio index e41007a..3e2ebad 100644 --- a/docs/cryptosystems.drawio +++ b/docs/cryptosystems.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/operator/caller.py b/operator/caller.py new file mode 100644 index 0000000..e69de29 diff --git a/operator/operator.py b/operator/operator.py new file mode 100644 index 0000000..c524c6a --- /dev/null +++ b/operator/operator.py @@ -0,0 +1,84 @@ +""" +There is only one operator! +Running on node prime. +""" +import os +from flask import Flask +from flask import request +import asyncio +from pythemis.skeygen import KEY_PAIR_TYPE, GenerateKeyPair +from pythemis.smessage import SMessage, ssign, sverify +from pythemis.exception import ThemisError +from base64 import b64encode,b64decode +BSEP=b'||||||||||' +BSEP2=b'@@@@@@@@@@' +BSEP3=b'##########' + +HOME_OPERATOR = os.path.abspath(__file__) +PATH_DB_KEYS = os.path.join(HOME_OPERATOR, '.keydb') + +keyhome = os.path.join(os.path.expanduser('~'),'.komrade','.keyserver') +if not os.path.exists(keyhome): os.makedirs(keyhome) + +keyserver = 'komrade.app' +keyserver_port = 5566 + +app = Flask(__name__) + +async def init(): + from api import Api + api = Api() + # keyserver = await api.personate('keyserver') + + keypair = GenerateKeyPair(KEY_PAIR_TYPE.EC) + privkey = keypair.export_private_key() + pubkey = keypair.export_public_key() + + print('pubkey:',pubkey) + with open('.keyserver.loc','wb') as of: of.write(b64encode(pubkey)) + with open(os.path.join(keyhome,'.keyserver.key'),'wb') as of: of.write(b64encode(privkey)) + +## load pubkey +PATH_PUBKEY = os.path.join(os.path.dirname(__file__),'.keyserver.loc') +PATH_PRIVKEY = os.path.join(keyhome,'.keyserver.key') +if not os.path.exists(PATH_PRIVKEY) or not os.path.exists(PATH_PUBKEY): + asyncio.run(init()) + +with open(PATH_PUBKEY) as f: + PUBKEY_b64 = f.read() + PUBKEY = b64decode(PUBKEY_b64) +with open(PATH_PRIVKEY) as f: + PRIVKEY_b64 = f.read() + PRIVKEY = b64decode(PRIVKEY_b64) + +@app.route('/pub') +def pubkey(): + return PUBKEY_b64 + +@app.route('/add/',methods=['POST']) +def add(name): + key_fn = os.path.join(keyhome,name+'.loc') + if not os.path.exists(key_fn): + with open(key_fn,'wb') as of: + pubkey,signed_pubkey=request.data.split(BSEP) + server_signed_pubkey = b64encode(ssign(PRIVKEY,pubkey)) + package = pubkey + BSEP + signed_pubkey + BSEP + server_signed_pubkey + package_b64 = b64encode(package) + print('add package -->',package) + print('add package_b64 -->',package_b64) + of.write(package_b64) + return package_b64 + return None + +@app.route('/get/') +def get(name): + key_fn = os.path.join(keyhome,name+'.loc') + if os.path.exists(key_fn): + with open(key_fn,'rb') as f: + signed_key=f.read() + return signed_key + return b'' + +if __name__ == '__main__': + app.run(host='0.0.0.0',port=keyserver_port) + # asyncio.run(init()) \ No newline at end of file