Update to v1.12.1 with bug fixes

This commit is contained in:
Evan Su 2021-04-11 22:26:06 -04:00 committed by GitHub
parent 8a8e9c046c
commit 3dbb0622fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 24 deletions

View File

@ -3,7 +3,7 @@
"""
Picocrypt v1.12
Picocrypt v1.12.1
Copyright (c) Evan Su (https://evansu.cc)
Released under a GNU GPL v3 License
https://github.com/HACKERALERT/Picocrypt
@ -28,6 +28,7 @@ from os.path import basename,dirname,abspath,realpath
from os.path import join as pathJoin,split as pathSplit
from pathlib import Path
from zipfile import ZipFile
from shutil import rmtree
from tkinterdnd2 import TkinterDnD,DND_FILES
from tkinter.filedialog import asksaveasfilename
from ttkthemes import ThemedStyle
@ -523,6 +524,7 @@ startBtn["state"] = "disabled"
def cancel():
global working
working = False
dummy.focus()
# Cancel button
cancelBtn = tkinter.ttk.Button(
@ -571,7 +573,7 @@ creditsLabel["state"] = "disabled"
# Version
versionString = tkinter.StringVar(tk)
versionString.set("v1.12")
versionString.set("v1.12.1")
version = tkinter.ttk.Label(
tk,
textvariable=versionString
@ -1143,10 +1145,14 @@ def work():
if shouldErase:
if onlyFolders:
for i in onlyFolders:
if not working:
break
secureWipe(i)
if onlyFiles:
for i in range(len(onlyFiles)):
statusString.set(strings[12]+f" ({i}/{len(onlyFiles)}")
if not working:
break
statusString.set(strings[12]+f" ({i}/{len(onlyFiles)})")
progress["value"] = i/len(onlyFiles)
secureWipe(onlyFiles[i])
secureWipe(inputFile)
@ -1156,25 +1162,35 @@ def work():
# Remove temporary zip file if created
if allFiles or onlyFiles:
remove(inputFile)
# Show appropriate notice if file corrupted or modified
# Prevent Unicode nonsense on MacOS
arrow = "" if platform.system()=="Darwin" else "🡪"
if not kept:
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:
if kept=="modified":
statusString.set(strings[7])
elif kept=="corrupted":
statusString.set(strings[6])
# If user hit 'Cancel' during secure wiping...
if not working:
fin.close()
fout.close()
resetUI()
statusString.set(f"Secure wipe canceled, but encryption was successful. (Output {arrow})")
else:
# Show appropriate notice if file corrupted or modified
if not kept:
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:
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")
@ -1262,8 +1278,9 @@ def updateStats(total):
# Securely wipe file(s) via system internals
def secureWipe(fin):
global working
statusString.set(strings[12])
progress["value"] = 100
# Check platform, erase accordingly
if platform.system()=="Windows":
# Recursively delete folders
@ -1273,14 +1290,14 @@ def secureWipe(fin):
if dirname(i) not in paths:
paths.append(dirname(i))
for i in range(len(paths)):
if not working:
return
statusString.set(strings[12]+f" ({i}/{len(paths)})")
progress["value"] = 100*i/len(paths)
system(f'cd "{paths[i]}" && "{rootDir}/sdelete64.exe" * -p 4 -s -nobanner')
system(f'cd "{paths[i]}" && "{rootDir}/sdelete64.exe" * -p 4 -nobanner')
system(f'cd "{rootDir}"')
rmtree(fin)
else:
statusString.set(strings[12])
progress["value"] = 100
system(f'sdelete64.exe "{fin}" -p 4 -nobanner')
# MacOS