diff --git a/list_comparing.py b/list_comparing.py deleted file mode 100644 index 0146253..0000000 --- a/list_comparing.py +++ /dev/null @@ -1,26 +0,0 @@ -list_compare0 = lambda A,B: all(A[n] == B[n] for n in range(0, len(A))) - -def list_compare1(A,B): - """ - Compare elementwise two lists. - Args: - Lists: A,B. - Returns: - Boolean - Comment: - Still faster than: return all(A[n] == B[n] for n in range(0, len(A))) - """ - for n in range(0,len(A)): - if A[n] != B[n]: - return False - return True - - -def list_compare2(A,B): - tmp = 0 - n = 0 - lA=len(A) - while tmp == 0 and n < lA: - tmp += abs(A[n]-B[n]) - n += 1 - return n == lA diff --git a/passbolt_api_hibp_test.py b/passbolt_api_hibp_test.py index f85566e..5e10b31 100644 --- a/passbolt_api_hibp_test.py +++ b/passbolt_api_hibp_test.py @@ -5,8 +5,10 @@ import json import pwnedpasswords import sys +from os.path import exists from tqdm import tqdm import urllib3 +from lib.pickling import * urllib3.disable_warnings() passbolt = passboltapi.PassboltAPI(config_path="config.ini", new_keys=True) @@ -20,8 +22,9 @@ def load_dict(passbolt): sys.stderr.write("Gathering resources from passbolt...\n") D = {} for r in tqdm(passbolt.get(url="/resources.json?api-version=v2")['body']): - password = passbolt.get_password(r['id']) - if password != None: + if ((password := passbolt.get_password(r['id'])) != None): + #password = passbolt.get_password(r['id']) + #if password != None: t = (r['id'], r['name'],r['username'],r['uri'],r['description']) if password not in D: D[password] = [t] @@ -37,14 +40,22 @@ def proc_dict(passbolt, D): output: broken_plain_password_list """ sys.stderr.write("Checking passwords hashes against HIBP...\n") - broken=[] - for password in tqdm(D): - rating = pwnedpasswords.check(password, plain_text=True) - if rating > 0: - broken.append(password) - return broken + return [password for password in tqdm(D) if pwnedpasswords.check(password, plain_text=True) > 0] +def proc_pickle(D, key=None): + """ + loads a pickle and a dictinary and returns a list of keys that are not in the pickle + input dictionary + output: broken_plain_password_list + """ + filename = ".%s.pkl" % sys.argv[0] + pkldata = [] + if exists(filename): pkldata = decompress_pickle(filename,key=key) + newdata = [password for password in D if password not in pkldata] + compress_pickle(filename, pkldata + newdata, key=key) + return newdata + def display_broken(broken): """ Display info in the dictionary using elements of broken list as key. @@ -52,15 +63,11 @@ def display_broken(broken): """ sys.stderr.write("Results:\n") for password in broken: - sys.stderr.write("-" * 60 + "\n") sys.stdout.write("-" * 60 + "\n") - sys.stderr.write("broken password: %s\n" % password) sys.stdout.write("broken password: %s\n" % password) for t in D[password]: msg = "id:%s, name:%s, username:%s, uri: %s, description: %s\n" % t - sys.stderr.write(msg) sys.stdout.write(msg) - sys.stderr.flush() sys.stdout.flush() sys.stderr.write("Total broken: %d\n" % len(broken)) sys.stderr.flush() @@ -68,5 +75,6 @@ def display_broken(broken): if __name__ == "__main__": D = load_dict(passbolt) - broken = proc_dict(passbolt, D) + D1 = proc_pickle(D,key=passbolt.config["PASSBOLT"]["PASSPHRASE"]) + broken = proc_dict(passbolt, D1) display_broken(broken)