Update Picocrypt.py

This commit is contained in:
Evan Su 2021-04-11 20:08:43 -04:00 committed by GitHub
parent 3d394ad80b
commit a27937cd45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 18 deletions

View File

@ -524,6 +524,7 @@ startBtn["state"] = "disabled"
def cancel(): def cancel():
global working global working
working = False working = False
dummy.focus()
# Cancel button # Cancel button
cancelBtn = tkinter.ttk.Button( cancelBtn = tkinter.ttk.Button(
@ -572,7 +573,7 @@ creditsLabel["state"] = "disabled"
# Version # Version
versionString = tkinter.StringVar(tk) versionString = tkinter.StringVar(tk)
versionString.set("v1.12") versionString.set("v1.12.1")
version = tkinter.ttk.Label( version = tkinter.ttk.Label(
tk, tk,
textvariable=versionString textvariable=versionString
@ -1144,9 +1145,13 @@ def work():
if shouldErase: if shouldErase:
if onlyFolders: if onlyFolders:
for i in onlyFolders: for i in onlyFolders:
if not working:
break
secureWipe(i) secureWipe(i)
if onlyFiles: if onlyFiles:
for i in range(len(onlyFiles)): for i in range(len(onlyFiles)):
if not working:
break
statusString.set(strings[12]+f" ({i}/{len(onlyFiles)})") statusString.set(strings[12]+f" ({i}/{len(onlyFiles)})")
progress["value"] = i/len(onlyFiles) progress["value"] = i/len(onlyFiles)
secureWipe(onlyFiles[i]) secureWipe(onlyFiles[i])
@ -1158,24 +1163,34 @@ def work():
if allFiles or onlyFiles: if allFiles or onlyFiles:
remove(inputFile) remove(inputFile)
# Show appropriate notice if file corrupted or modified # Prevent Unicode nonsense on MacOS
arrow = "" if platform.system()=="Darwin" else "🡪" arrow = "" if platform.system()=="Darwin" else "🡪"
if not kept:
statusString.set(f"Completed. (Click here to show output {arrow})") # If user hit 'Cancel' during secure wiping...
# Show Reed-Solomon stats if it fixed corrupted bytes if not working:
if mode=="decrypt" and reedsoloFixed: fin.close()
tmp = "s" if reedsoloFixed!=1 else "" fout.close()
statusString.set( resetUI()
f"Completed with {reedsoloFixed} byte{tmp}"+ statusString.set(f"Secure wipe canceled, but encryption was successful. (Output {arrow})")
f" fixed. (Click here to show output {arrow})"
)
else: else:
if kept=="modified": # Show appropriate notice if file corrupted or modified
statusString.set(strings[7])
elif kept=="corrupted": if not kept:
statusString.set(strings[6]) statusString.set(f"Completed. (Click here to show output {arrow})")
# Show Reed-Solomon stats if it fixed corrupted bytes
if mode=="decrypt" and reedsoloFixed:
tmp = "s" if reedsoloFixed!=1 else ""
statusString.set(
f"Completed with {reedsoloFixed} byte{tmp}"+
f" fixed. (Click here to show output {arrow})"
)
else: else:
statusString.set(strings[8]) if kept=="modified":
statusString.set(strings[7])
elif kept=="corrupted":
statusString.set(strings[6])
else:
statusString.set(strings[8])
status.config(cursor="hand2") status.config(cursor="hand2")
@ -1263,6 +1278,7 @@ def updateStats(total):
# Securely wipe file(s) via system internals # Securely wipe file(s) via system internals
def secureWipe(fin): def secureWipe(fin):
global working
statusString.set(strings[12]) statusString.set(strings[12])
progress["value"] = 100 progress["value"] = 100
# Check platform, erase accordingly # Check platform, erase accordingly
@ -1274,6 +1290,8 @@ def secureWipe(fin):
if dirname(i) not in paths: if dirname(i) not in paths:
paths.append(dirname(i)) paths.append(dirname(i))
for i in range(len(paths)): for i in range(len(paths)):
if not working:
return
statusString.set(strings[12]+f" ({i}/{len(paths)})") statusString.set(strings[12]+f" ({i}/{len(paths)})")
progress["value"] = 100*i/len(paths) progress["value"] = 100*i/len(paths)
system(f'cd "{paths[i]}" && "{rootDir}/sdelete64.exe" * -p 4 -nobanner') system(f'cd "{paths[i]}" && "{rootDir}/sdelete64.exe" * -p 4 -nobanner')