operator-time
quadrismegistus 4 years ago
parent 4ec7b6c20a
commit 3ab76509bc

@ -1 +1 @@
648sA9XkCfwfseJxne4RKoKUP4NXq3lJGOGaaXEhHVM=
uuWONFjyBAXGAP1TKADQGfwje3VuM/j4R9PzSSy2oWg=

@ -1 +1 @@
AAEBQAwAAAAQAAAA/QAAAItivzIfJmVv3HejcBpGpZN4TgZ6z+q1n/2RDbPVTE4qa85EFyMvC6KoeLbLztpWf0Gv4lgVvl8GNqlsbG5WlwUui39mbLyw06OD8pEs63ABKfP+sP24x9xYchI7X7anDrmq7/TcUZKKsgp2Tb74mC8bS9PrarbDKtK5sJGT59EU1jkZQyfjUivXYQjDqjcokqdPaHWP3S67lNiAEF9lB9nZUKNEFcqG/ad8fnHgzlBmSqssJsj5dkkEOSlo+ainVQ4kVSstPRgyR6oZRat1lxd6z1uBf1THf6c/giINmM24nXTPMlBmu4E2zBzGdIU78TAJLswoLm6A3uizXY0/ignUn16VAC2SdVfL4y0sVMZeB9wIniq18s41
AAEBQAwAAAAQAAAA/QAAAML6YG29r/eORBo8pwq07XHI8CxKpifHvBRnSi+lNEBlu/CNjwnx93Nl42QBATdhK6gtn+wXLUSZD4wSN7sjQmKdHZFlVP1Os/hIm86FaZtFr5K26rT6Rq2dvPu2gDUBvEjn0nK94QbbwlDRpZHUE6rbDBmaTkulsPZolIc5NXB8Pcznj6LcXY87DSNQcafR+m8NKgL5OphAP6NTAqabF/sT8EBERaS6uo6jss1IZIXXthMWlcFIATlYxPlwtdspD1oU/iiTMubl2zCc+Fqrmqh3RuGwoQuWTqZ7Lgxeo6wzayCGMmUhRoTojOvjE8+w4ha12dU2KTW6yU8MfFIcJO5Vuf453IT6fI7LGMCUFwaGW+E9TywI65cG

@ -80,9 +80,6 @@ class Keymaker(Logger):
self.path_crypt_keys=path_crypt_keys
self.path_crypt_data=path_crypt_data
for k in KEYNAMES:
func = lambda: self.keychain().get(k)
setattr(self,'_'+k,func)
### BASE STORAGE
@property

@ -13,6 +13,7 @@ class Operator(Keymaker):
def __init__(self, name, passphrase=None, path_crypt_keys=PATH_CRYPT_CA_KEYS, path_crypt_data=PATH_CRYPT_CA_DATA):
super().__init__(name=name,passphrase=passphrase, path_crypt_keys=path_crypt_keys, path_crypt_data=path_crypt_data)
self.boot(create=False)
def boot(self,create=False):
# Do I have my keys?

@ -11,6 +11,7 @@ from flask_classful import FlaskView
OPERATOR = None
TELEPHONE = None
from flask_classful import FlaskView, route
class TheSwitchboard(FlaskView, Logger):
@ -50,8 +51,7 @@ class TheSwitchboard(FlaskView, Logger):
# then try to unwrap top level encryption
try:
tele_pubkey = b64decode(TELEPHONE_PUBKEY)
data = SMessage(OPERATOR.privkey_, tele_pubkey).unwrap(data)
data = SMessage(OPERATOR.privkey_, TELEPHONE.pubkey_).unwrap(data)
self.log('decrypted data:',data)
except ThemisError:
self.log('not really from the telephone?')
@ -70,8 +70,9 @@ class TheSwitchboard(FlaskView, Logger):
return OPERATOR_INTERCEPT_MESSAGE
def run_forever(port='8080'):
global OPERATOR
global OPERATOR,TELEPHONE
OPERATOR = TheOperator()
TELEPHONE = TheTelephone()
app = Flask(__name__)
TheSwitchboard.register(app, route_base='/op/', route_prefix=None)
app.run(debug=True, port=port, host='0.0.0.0')

@ -25,7 +25,7 @@ class TheOperator(Operator):
# if not os.path.exists(PATH_OPERATOR): os.makedirs(PATH_OPERATOR)
if not passphrase:
passphrase=getpass.getpass('Hello, this is the Operator speaking. What is the passphrase?\n> ')
super().__init__(name,passphrase)
super().__init__(name,passphrase,path_crypt_keys=PATH_CRYPT_OP_KEYS,path_crypt_data=PATH_CRYPT_OP_DATA)
def decrypt_incoming(self,data):
# step 1 split:
@ -144,23 +144,17 @@ def init_operators():
def test_op():
op = Operator(
name=OPERATOR_NAME,
path_crypt_keys=PATH_CRYPT_OP_KEYS,
path_crypt_data=PATH_CRYPT_OP_DATA
)
op.boot()
# print(op.crypt_keys.get('TheOperator',))
#pubkey = op.keychain()['pubkey']
#pubkey_b64 = b64encode(pubkey)
#print(pubkey_b64)
from komrade.backend.the_telephone import TheTelephone
op = TheOperator()
# op.boot()
keychain_op = op.keychain(force=True)
phone = Operator(
name=TELEPHONE_NAME,
path_crypt_keys=PATH_CRYPT_OP_KEYS,
path_crypt_data=PATH_CRYPT_OP_KEYS
)
phone = TheTelephone()
# phone.boot()
keychain_ph = phone.keychain(force=True)

@ -10,26 +10,15 @@ class TheTelephone(Operator):
"""
API client class for Caller to interact with The Operator.
"""
def __init__(self, caller):
self.caller = caller
def __init__(self):
self.op = TheOperator()
super().__init__(
name=TELEPHONE_NAME,
path_crypt_keys=PATH_CRYPT_CA_KEYS,
path_crypt_data=PATH_CRYPT_CA_KEYS
)
@property
def op_pubkey(self):
return b64decode(OPERATOR_PUBKEY)
# def dial_operator(self,msg):
# msg=msg.replace('/','_')
# URL = OPERATOR_API_URL + msg + '/'
# self.log("DIALING THE OPERATOR:",URL)
# r=tor_request(URL)
# print(r)
# print(r.text)
# return r
async def dial_operator(self,msg):
msg=msg.replace('/','_')
URL = OPERATOR_API_URL + msg + '/'
@ -40,7 +29,7 @@ class TheTelephone(Operator):
return r
return r
async def req(self,json_coming_from_phone={},json_coming_from_caller={}):
async def req(self,json_coming_from_phone={},json_coming_from_caller={},caller=None):
# Two parts of every request:
# 1) only overall encryption layer E2EE Telephone -> Operator:
@ -54,20 +43,17 @@ class TheTelephone(Operator):
json_coming_from_phone_b=b''
# 2) (optional) extra E2EE encrypted layer Caller -> Operator
if json_coming_from_caller:
if json_coming_from_caller and caller:
json_coming_from_caller_s = json.dumps(json_coming_from_caller)
json_coming_from_caller_b = json_coming_from_caller_s.encode()
op_pubkey
json_coming_from_caller_b_encr = SMessage(self.caller.privkey_,self.op_pubkey).wrap(json_coming_from_caller_b)
json_coming_from_caller_b_encr = SMessage(self.privkey_,self.op.pubkey_).wrap(json_coming_from_caller_b)
else:
json_coming_from_caller_b_encr = b''
# encrypt whole package E2EE, Telephone to Operator
req_data = json_coming_from_phone_b + BSEP + json_coming_from_caller_b_encr
req_data_encr = SMessage(
b64decode(TELEPHONE_PRIVKEY),
b64decode(OPERATOR_PUBKEY)
).wrap(req_data)
req_data_encr = SMessage(self.privkey_,self.op.pubkey_).wrap(req_data)
req_data_encr_b64 = b64encode(req_data_encr)
self.log('req_data_encr_b64 <--',req_data_encr_b64)

Loading…
Cancel
Save