keys-on-cli
quadrismegistus 4 years ago
parent c51d79f01f
commit ffada66b8b

@ -91,7 +91,7 @@ class Crypt(Logger):
def set(self,k,v,prefix=''):
if self.has(k,prefix=prefix):
self.log("I'm afraid I can't let you do that, overwrite someone's data!")
return False
return (False,None,None)
k_b=self.package_key(k,prefix=prefix)
k_b_hash = self.hash(k_b)
@ -111,11 +111,18 @@ Crypt.set(
''')
# store
self.store.put(k_b_hash,v_b)
return True
return (True,k_b_hash,v_b)
def exists(self,k,prefix=''):
return self.has(k,prefix=prefix)
def key2hash(self,k,prefix=''):
return self.hash(
self.package_key(
prefix + k
)
)
def get(self,k,prefix=''):
k_b=self.package_key(k,prefix=prefix)
k_b_hash = self.hash(k_b)

@ -328,7 +328,9 @@ Keymaker ({self}) is forging new keys for {name}
return fnfn
@property
def qr(self,data=None):
def qr(self): return self.qr_str(data=self.uri_id)
def qr_str(self,data=None):
import qrcode
qr=qrcode.QRCode()
qr.add_data(self.uri_id if not data else data)

@ -75,64 +75,6 @@ class Persona(Caller):
resp_msg_obj = self.phone.ring_ring(data)
self.log('register got back from op:',resp_msg_obj)
# phone_res = msg_obj.msg
# # URI id
# uri_id = phone_res.get('uri_id')
# returned_keys = phone_res.get('_keychain')
# self.log('got URI from Op:',uri_id)
# self.log('got returnd keys from Op:',returned_keys)
# # better have the right keys
# assert set(KEYMAKER_DEFAULT_KEYS_TO_SAVE_ON_CLIENT) == set(returned_keys.keys())
# # now save these keys!
# saved_keys = self.save_keychain(name,returned_keys,uri_id=uri_id)
# self.log('saved keys!',saved_keys)
# # success!
# self.log('yay!!!!')
# return saved_keys
# def register(self, name = None, passphrase = DEBUG_DEFAULT_PASSPHRASE, is_group=None):
# # get needed metadata
# if not name: name=self.name
# if name is None:
# name = input('\nWhat is the name for this account? ')
# if passphrase is None:
# passphrase = getpass.getpass('\nEnter a memborable password: ')
# # if is_group is None:
# # is_group = input('\nIs this a group account? [y/N]').strip().lower() == 'y'
# # form request
# msg_to_op = {
# '_route':'forge_new_keys',
# 'name':name,
# 'passphrase':hashish(passphrase.encode())
# }
# # get message back
# msg_obj = self.phone.ring_ring(msg_to_op)
# phone_res = msg_obj.msg
# # URI id
# uri_id = phone_res.get('uri_id')
# returned_keys = phone_res.get('_keychain')
# self.log('got URI from Op:',uri_id)
# self.log('got returnd keys from Op:',returned_keys)
# # better have the right keys
# assert set(KEYMAKER_DEFAULT_KEYS_TO_SAVE_ON_CLIENT) == set(returned_keys.keys())
# # now save these keys!
# saved_keys = self.save_keychain(name,returned_keys,uri_id=uri_id)
# self.log('saved keys!',saved_keys)
# # success!
# self.log('yay!!!!')
# return saved_keys
def ring_ring(self,msg):

@ -95,9 +95,34 @@ class TheOperator(Operator):
return bool(pubkey)
def register_new_user(self,name,pubkey,**data):
self.log('setting pubkey under name')
res = self.crypt_keys.set(name,pubkey,prefix='/pubkey/')
# self.log('setting pubkey under name')
success,ck,cv = self.crypt_keys.set(name,pubkey,prefix='/pubkey/')
self.log('got result from crypt:',res)
# check input back from crypt
assert cv==pubkey
assert name==self.crypt_keys.key2hash(name) #(self.crypt_keys.prepare_key()
res = {
'success':success,
'pubkey':cv,
'name':name,
}
## success msg
if success:
res['status'] = f'''
{OPERATOR_INTRO} I have managed to register user {name}.
I've stored their public key ({b64encode(cv).decode()}) under their name,
in a disguished (hashed with salt) form: {ck}.
'''
else:
res['status']= f'''
{OPERATOR_INTRO}. I'm sorry, but I can'tregister username {name}.
Someone has already registered under that name.'''
self.log('Operator returning result:',res)
return res

@ -166,4 +166,6 @@ OPERATOR_ROUTES = [
'does_username_exist',
'hello_world',
'register_new_user'
]
]
OPERATOR_INTRO = 'Hello, this is the Operator speaking. '
Loading…
Cancel
Save