def retrieve_credentials(url, submiturl=None, triggerUnlock=False): if not test_associate(triggerUnlock): return None request = {'RequestType': 'get-logins', 'SortSelection': True, 'TriggerUnlock': triggerUnlock} info = set_verifier(request) if info is None: return None [identifier, key] = info iv64 = request['Nonce'] iv = base64.b64decode(iv64.encode('utf-8')) request['Url'] = base64.b64encode(ch.encrypt(url, key, iv)).decode('utf-8') if submiturl is not None: request['SubmitUrl'] = base64.b64encode( ch.encrypt(submiturl, key, iv)).decode('utf-8') response = send(request) entries = [] if response is not None: # set_current_KeePassHttp_version(response['Version']) if verify_response(response, key, identifier): iv64_r = response['Nonce'] iv_r = base64.b64decode(iv64_r.encode('utf-8')) for e in response['Entries']: decrypt_entry(e, key, iv_r) entries = response['Entries'] return entries
def set_verifier(request, inkey=None): identifier = None key = None if inkey is None: # happens when we don't want to associate info = cfg.get_crypto_key() if info is None: # TODO: proper execption handling return None [identifier, key] = info request['Id'] = identifier else: key = inkey iv = ch.generate_IV() iv64str = base64.b64encode(iv).decode('utf-8') request['Nonce'] = iv64str request['Verifier'] = base64.b64encode( ch.encrypt(iv64str, key, iv)).decode('utf-8') return [identifier, key]