Update v1.12.py

This commit is contained in:
Evan Su 2021-04-01 11:39:22 -04:00 committed by GitHub
parent 7cbead3149
commit ac31cdcc89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 73 additions and 14 deletions

View File

@ -13,7 +13,7 @@ https://github.com/HACKERALERT/Picocrypt
# Import dependencies # Import dependencies
from threading import Thread from threading import Thread
from datetime import datetime from datetime import datetime,timedelta
from argon2.low_level import hash_secret_raw from argon2.low_level import hash_secret_raw
from argon2.low_level import Type as argonType from argon2.low_level import Type as argonType
from Crypto.Cipher import ChaCha20_Poly1305 from Crypto.Cipher import ChaCha20_Poly1305
@ -478,7 +478,7 @@ startFrame.config(background="#ffffff")
startBtn = tkinter.ttk.Button( startBtn = tkinter.ttk.Button(
startFrame, startFrame,
text="Start", text="Start",
command=lambda:Thread(target=work,daemon=True).start() command=lambda:Thread(target=wrapper,daemon=True).start()
) )
startBtn.grid(row=0,column=0,stick="nesw") startBtn.grid(row=0,column=0,stick="nesw")
startBtn["state"] = "disabled" startBtn["state"] = "disabled"
@ -563,6 +563,33 @@ promptIconVer = tkinter.Frame(
) )
promptIconVer.place(x=238,y=226,height=64) promptIconVer.place(x=238,y=226,height=64)
confirmOverwrite = tkinter.Frame(tk)
confirmOverwrite.config(bg="#f5f6f7")
#confirmOverwrite.pack(expand=1,fill=tkinter.BOTH)
confirmOverwriteString = tkinter.StringVar(tk)
confirmOverwriteString.set(strings[13])
confirmOverwriteLabel = tkinter.ttk.Label(
confirmOverwrite,
textvariable=confirmOverwriteString
)
confirmOverwriteLabel.place(x=100,y=150)
confirmOverwriteNo = tkinter.ttk.Button(
confirmOverwrite,
text="No",
command=lambda:confirmOverwrite.pack_forget()
)
confirmOverwriteNo.place(x=100,y=200)
def overwriteConfirmed():
confirmOverwrite.pack_forget()
Thread(target=wrapper,daemon=True,args=(True,)).start()
confirmOverwriteYes = tkinter.ttk.Button(
confirmOverwrite,
text="Yes",
command=overwriteConfirmed
)
confirmOverwriteYes.place(x=300,y=200)
# Files have been dragged # Files have been dragged
def filesDragged(draggedFiles): def filesDragged(draggedFiles):
global inputFile,rs128,onlyFiles,mode,onlyFolders,allFiles global inputFile,rs128,onlyFiles,mode,onlyFolders,allFiles
@ -934,8 +961,6 @@ def work():
# File is really corrupted # File is really corrupted
if not reedsoloErrors and not shouldKeep: if not reedsoloErrors and not shouldKeep:
statusString.set(strings[8]) statusString.set(strings[8])
if not shouldKeep:
fin.close() fin.close()
fout.close() fout.close()
remove(outputFile) remove(outputFile)
@ -978,7 +1003,6 @@ def work():
else: else:
if not compare_digest(crccs,crc.digest()): if not compare_digest(crccs,crc.digest()):
statusString.set(strings[3]) statusString.set(strings[3])
progress["value"] = 100
fin.close() fin.close()
fout.close() fout.close()
@ -996,7 +1020,6 @@ def work():
if not reedsoloErrors and not headerBroken: if not reedsoloErrors and not headerBroken:
# File is modified # File is modified
statusString.set(modifiedNotice) statusString.set(modifiedNotice)
progress["value"] = 100
fin.close() fin.close()
fout.close() fout.close()
# If keep file not checked... # If keep file not checked...
@ -1060,13 +1083,9 @@ def work():
# Bind the output file # Bind the output file
if platform.system()=="Windows": if platform.system()=="Windows":
status.bind("<Button-1>", status.bind("<Button-1>",lambda e:showOutput(output.replace("/","\\")))
lambda e:showOutput(output.replace("/","\\"))
)
else: else:
status.bind("<Button-1>", status.bind("<Button-1>",lambda e:showOutput(output))
lambda e:showOutput(output)
)
# Reset variables and UI states # Reset variables and UI states
resetUI() resetUI()
@ -1077,6 +1096,32 @@ def work():
onlyFiles = [] onlyFiles = []
working = False working = False
def wrapper(yes=False):
global working,mode,outputFile
if mode=="encrypt":
outputFile = outputInput.get()+".pcv"
else:
outputFile = outputInput.get()
try:
getsize(outputFile)
if not yes:
confirmOverwrite.pack(expand=1,fill=tkinter.BOTH)
return
except:
pass
try:
work()
except:
if mode=="encrypt":
setEncryptionUI()
else:
setDecryptionUI()
statusString.set(strings[17])
finally:
dummy.focus()
working = False
sys.exit(0)
def updateStats(total): def updateStats(total):
global startTime,previousTime,done,stopUpdating,reedsolo,reedsoloFixed,reedsoloErrors,working global startTime,previousTime,done,stopUpdating,reedsolo,reedsoloFixed,reedsoloErrors,working
while True: while True:
@ -1091,9 +1136,10 @@ def updateStats(total):
progress["value"] = percent progress["value"] = percent
speed = (done/sinceStart)/10**6 or 0.0001 speed = (done/sinceStart)/10**6 or 0.0001
eta = round((total-done)/(speed*10**6)) eta = max(round((total-done)/(speed*10**6)),0)
eta = str(timedelta(seconds=min(eta,86399))).zfill(8)
info = f"Working... {min(percent,100):.0f}% at {speed:.2f} MB/s (ETA: {max(eta,0)}s)" info = f"Working... {min(percent,100):.0f}% at {speed:.2f} MB/s (ETA: {eta})"
if reedsolo and mode=="decrypt" and reedsoloFixed: if reedsolo and mode=="decrypt" and reedsoloFixed:
tmp = "s" if reedsoloFixed!=1 else "" tmp = "s" if reedsoloFixed!=1 else ""
@ -1108,6 +1154,7 @@ def updateStats(total):
sys.exit(0) sys.exit(0)
break break
def secureWipe(fin): def secureWipe(fin):
statusString.set(strings[12]) statusString.set(strings[12])
# Check platform, erase accordingly # Check platform, erase accordingly
@ -1269,6 +1316,15 @@ def disableAllInputs():
keepBtn["state"] = "disabled" keepBtn["state"] = "disabled"
rsBtn["state"] = "disabled" rsBtn["state"] = "disabled"
def onClose():
global working
if not working:
tk.destroy()
else:
force = messagebox.askyesno("Confirmation",cancelNotice)
if force:
tk.destroy()
def prepare(): def prepare():
global rs13,rs128 global rs13,rs128
rs13 = RSCodec(13) rs13 = RSCodec(13)
@ -1280,5 +1336,8 @@ def prepare():
# Prepare Reed-Solomon codecs # Prepare Reed-Solomon codecs
Thread(target=prepare,daemon=True).start() Thread(target=prepare,daemon=True).start()
tk.protocol("WM_DELETE_WINDOW",onClose)
# Start tkinter # Start tkinter
tk.mainloop() tk.mainloop()
sys.exit(0)