From 655e6c3f832fd019f03bb4caa0a57c7fcb3bdb43 Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Thu, 17 Sep 2020 15:11:28 +0100 Subject: [PATCH] komrade update! --- komrade/backend/operators.py | 22 +++++++++++++--------- komrade/backend/phonelines.py | 12 +++++------- komrade/backend/the_operator.py | 26 ++++++++------------------ 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/komrade/backend/operators.py b/komrade/backend/operators.py index 0d4036d..5181d71 100644 --- a/komrade/backend/operators.py +++ b/komrade/backend/operators.py @@ -304,15 +304,19 @@ class Operator(Keymaker): if not uri: uri=self.uri if not encryptor_func or not decryptor_func: - if not privkey_b: privkey_b=self.privkey.data - if not pubkey_b: pubkey_b=self.op.pubkey.data - - smsg=SMessage( - privkey_b, - pubkey_b - ) - encryptor_func=smsg.wrap - decryptor_func=smsg.unwrap + encryptor_func=self.privkey_decr.encrypt + decryptor_func=self.privkey_decr.decrypt + + # if not encryptor_func or not decryptor_func: + # if not privkey_b: privkey_b=self.privkey.data + # if not pubkey_b: pubkey_b=self.op.pubkey.data + + # smsg=SMessage( + # privkey_b, + # pubkey_b + # ) + # encryptor_func=smsg.wrap + # decryptor_func=smsg.unwrap inbox_crypt = CryptList( crypt=self.crypt_data, diff --git a/komrade/backend/phonelines.py b/komrade/backend/phonelines.py index f69fdff..35e5cbe 100644 --- a/komrade/backend/phonelines.py +++ b/komrade/backend/phonelines.py @@ -14,16 +14,14 @@ def create_phonelines(): op_keypair = KomradeAsymmetricKey() op_pubkey,op_privkey = op_keypair.pubkey_obj,op_keypair.privkey_obj op_uri = op_pubkey.data_b64 + op_privkey_decr = KomradeSymmetricKeyWithoutPassphrase() + op_privkey_encr = KomradeEncryptedAsymmetricPrivateKey( + data=op_privkey_decr.encrypt(op_privkey.data) + ) keycrypt.set(OPERATOR_NAME,op_pubkey.data,prefix='/pubkey/') keycrypt.set(op_uri,OPERATOR_NAME,prefix='/name/') - # keycrypt.set(op_uri,op_privkey.data,prefix='/privkey/') - # pass_encr = KomradeSymmetricKeyWithPassphrase().encrypt(op_privkey.data) - # print('pass_encr',pass_encr) with open(PATH_SUPER_SECRET_OP_KEY,'wb') as of: - #of.write(pass_encr) - # for now only!!! --> - of.write(op_privkey.data_b64) - + of.write(b64enc(op_privkey_decr.data + BSEP + op_privkey_encr.data)) with open(PATH_OPERATOR_WEB_KEYS_FILE,'w') as of: of.write(op_pubkey.data_b64_s) diff --git a/komrade/backend/the_operator.py b/komrade/backend/the_operator.py index d86cc43..87494f5 100644 --- a/komrade/backend/the_operator.py +++ b/komrade/backend/the_operator.py @@ -13,7 +13,6 @@ from komrade.backend.messages import Message # def TheOperator(*x,**y): # from komrade.backend.operators import Komrade # return Komrade(OPERATOR_NAME,*x,**y) -OP_PRIVKEY = None class TheOperator(Operator): """ @@ -31,7 +30,6 @@ class TheOperator(Operator): """ Boot up the operator. Requires knowing or setting a password of memory. """ - global OP_PRIVKEY super().__init__( name, @@ -59,26 +57,18 @@ class TheOperator(Operator): else: raise KomradeException('Public key for Operator on app and one at {PATH_OPERATOR_WEB_KEYS_URL} do not match. Shutting down.') - privkey=None - if os.path.exists(PATH_SUPER_SECRET_OP_KEY): - - if OP_PRIVKEY: - privkey=OP_PRIVKEY - else: + if os.path.exists(PATH_SUPER_SECRET_OP_KEY): print('Dare I claim to be the one true Operator?') with open(PATH_SUPER_SECRET_OP_KEY,'rb') as f: #pass_encr=f.read() - privkey = f.read() - # try: - # privkey=KomradeSymmetricKeyWithPassphrase().decrypt(pass_encr) - # if privkey: OP_PRIVKEY = privkey - # except ThemisError: - # exit('invalid password. operator shutting down.') - if privkey: - self._keychain['privkey']=KomradeAsymmetricPrivateKey(b64dec(privkey)) - # print(self._keychain['privkey'],'??') + privkey_decr,privkey_encr = b64dec(f.read()).split(BSEP) + privkey_decr_obj = KomradeSymmetricKeyWithoutPassphrase(privkey_decr) + privkey_encr_obj = KomradeEncryptedAsymmetricPrivateKey(privkey_encr) + self._keychain['privkey_decr']=privkey_decr_obj + self._keychain['privkey_encr']=privkey_encr_obj + self._keychain = {**self.keychain()} - # self.log('@Operator booted with keychain:',dict_format(self._keychain),'and passphrase',self.passphrase) + self.log('@Operator booted with keychain:',dict_format(self._keychain)) # clear_screen()