operator-time
quadrismegistus 4 years ago
parent 06c10ad36e
commit e6610f3f4b

@ -564,13 +564,12 @@ class Keymaker(Logger):
def keychain(self,passphrase=None,force=False,allow_builtin=True,extra_keys={},keys_to_gen=KEYMAKER_DEFAULT_KEYS_TO_GEN,**kwargs):
# assemble as many keys as we can!
if not force and hasattr(self,'_keychain') and self._keychain: return self._keychain
# if not force and hasattr(self,'_keychain') and self._keychain: return self._keychain
if passphrase: self.passphrase=passphrase
self._keychain = _keychain = {**extra_keys}
_keychain = {**extra_keys, **self._keychain}
self.log('_keychain at start of keychain() =',_keychain)
for keyname in keys_to_gen:
if keyname in _keychain and _keychain[keyname]: continue
# self.log('??',keyname,'...')
if hasattr(self,keyname):
method=getattr(self,keyname)
@ -578,6 +577,7 @@ class Keymaker(Logger):
# self.log('res <--',res)
if res:
_keychain[keyname]=res
self._keychain = _keychain
return _keychain

@ -30,28 +30,20 @@ class Operator(Keymaker):
@property
def phone(self):
if hasattr(self,'_phone'): return self._phone
global TELEPHONE,TELEPHONE_KEYCHAIN
if TELEPHONE: return TELEPHONE
self.log('!! getting telephone !!')
if not TELEPHONE_KEYCHAIN:
self.log('!! getting telephone keychain !!')
connect_phonelines()
from komrade.backend.the_telephone import TheTelephone
TELEPHONE=TheTelephone(keychain=TELEPHONE_KEYCHAIN)
self._phone=TELEPHONE=TheTelephone()
return TELEPHONE
@property
def op(self):
if hasattr(self,'_phone'): return self._phone
global OPERATOR,OPERATOR_KEYCHAIN
if OPERATOR: return OPERATOR
self.log('!! getting operator !!')
if not OPERATOR_KEYCHAIN:
self.log('!! getting operator keychain !!')
connect_phonelines()
from komrade.backend.the_operator import TheOperator
OPERATOR=TheOperator(keychain=OPERATOR_KEYCHAIN)
OPERATOR=TheOperator()
return OPERATOR
def encrypt_to_send(self,msg_json,from_privkey,to_pubkey):
@ -167,15 +159,20 @@ class Operator(Keymaker):
def create_phonelines():
## CREATE OPERATOR
op = Operator(name=OPERATOR_NAME)
op_keys_to_keep_on_client = ['pubkey_encr']
op_keys_to_keep_on_3rdparty = ['pubkey_decr','privkey_decr']
op_keys_to_keep_on_server = ['adminkey_encr','privkey_decr_encr','privkey_decr_decr','adminkey_decr_encr','adminkey_decr_decr']
op_keys_to_keep_on_client = ['pubkey_decr'] # sent TO operator
op_keys_to_keep_on_3rdparty = ['pubkey_encr'] # dl by op
op_keys_to_keep_on_server = [
'privkey_encr','privkey_decr_encr','privkey_decr_decr',
'adminkey_encr','adminkey_decr_encr','adminkey_decr_decr']
## create phone
phone = Operator(name=TELEPHONE_NAME)
phone_keys_to_keep_on_client = ['privkey_encr']
phone_keys_to_keep_on_3rdparty = ['privkey_decr','pubkey_decr']
phone_keys_to_keep_on_server = ['pubkey_encr']
phone_keys_to_keep_on_client = [
'privkey_encr', 'privkey_decr_encr','privkey_decr_decr',
'adminkey_encr', 'adminkey_decr_encr','adminkey_decr_decr']
phone_keys_to_keep_on_3rdparty = ['pubkey_encr'] # dl by phone
phone_keys_to_keep_on_server = ['pubkey_decr'] # sent to phone
# create keys for Op
op_decr_keys = op.forge_new_keys(
@ -233,6 +230,8 @@ def connect_phonelines():
if OMEGA_KEY and OPERATOR_KEYCHAIN and TELEPHONE_KEYCHAIN:
return (OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN)
print('\n\n\n\nCONNECTING PHONELINES!\n\n\n\n')
# import
from komrade.backend.mazes import tor_request
from komrade.backend import PATH_OPERATOR_WEB_KEYS_URL

@ -32,13 +32,14 @@ class TheOperator(Operator):
global OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN
if not TELEPHONE_KEYCHAIN or not OPERATOR_KEYCHAIN:
OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN = connect_phonelines()
if not passphrase: passphrase=getpass.getpass('Hello, this is the Operator speaking. What is the passphrase?\n> ')
if not passphrase: self.passphrase=passphrase=getpass.getpass('Hello, this is the Operator speaking. What is the passphrase?\n> ')
super().__init__(
name,
passphrase,
keychain=OPERATOR_KEYCHAIN,
path_crypt_keys=PATH_CRYPT_OP_KEYS,
path_crypt_data=PATH_CRYPT_OP_DATA)
self._keychain = OPERATOR_KEYCHAIN
def decrypt_incoming(self,data):
# step 1 split:

@ -10,15 +10,25 @@ class TheTelephone(Operator):
"""
def __init__(self, caller=None):
global OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN
if not TELEPHONE_KEYCHAIN or not OPERATOR_KEYCHAIN:
OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN = connect_phonelines()
print('OP???',OPERATOR_KEYCHAIN)
print('PH???',TELEPHONE_KEYCHAIN)
super().__init__(
name=TELEPHONE_NAME,
keychain=TELEPHONE_KEYCHAIN,
path_crypt_keys=PATH_CRYPT_CA_KEYS,
path_crypt_data=PATH_CRYPT_CA_KEYS
)
if not TELEPHONE_KEYCHAIN or not OPERATOR_KEYCHAIN:
OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN = connect_phonelines()
print('OP2???',OPERATOR_KEYCHAIN)
print('PH2???',TELEPHONE_KEYCHAIN)
self.caller=caller
self._keychain = TELEPHONE_KEYCHAIN
print(type(self._keychain), self._keychain)
def dial_operator(self,msg):
msg=msg.replace('/','_')
@ -51,14 +61,16 @@ class TheTelephone(Operator):
json_phone = {json_phone}
json_caller = {json_caller}""")
print(type(self),self._keychain,self.keychain())
print('XXXXX',type(self),self._keychain)
print('YYYYY',self.keychain())
# stop
self.log('op_keychain',op_keychain)
self.log('op_keychain',self.op.keychain())
# 1) unencr header
# telephone_pubkey_decr | op_pubkey_decr | op_privkey_decr
unencr_header = phone_keychain['pubkey_decr'] + BSEP2 + op_keychain['pubkey_encr']
unencr_header = self.pubkey_decr_ + BSEP2 + self.op.pubkey_encr_
# 2) caller privkey?
from_caller_privkey=caller.privkey_ if caller and json_caller else None

Loading…
Cancel
Save