Platforms to show: All Mac Windows Linux Cross-Platform

/Encryption/Threaded Encryption and Hashes
Function:
Required plugins for this example: MBS Encryption Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Encryption/Threaded Encryption and Hashes
This example is the version from Mon, 16th Jul 2017.
Project "Threaded Encryption and Hashes.rbp"
Class App Inherits Application
Const kEditClear = "&Löschen"
Const kFileQuit = "Beenden"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits Window
Control BevelButton1 Inherits BevelButton
ControlInstance BevelButton1 Inherits BevelButton
EventHandler Sub Action() dim f as FolderItem = GetOpenFolderItem("") if f = nil then Return file = f RunThreadedButton.Enabled = true RunWithoutThreads.Enabled = true End EventHandler
End Control
Control list Inherits Listbox
ControlInstance list Inherits Listbox
EventHandler Function CellClick(row as Integer, column as Integer, x as Integer, y as Integer) As Boolean dim c as new Clipboard c.SetText me.Cell(row, column) End EventHandler
End Control
Control RunThreadedButton Inherits PushButton
ControlInstance RunThreadedButton Inherits PushButton
EventHandler Sub Action() prepare // run each on a new thread Runthreaded AddressOf TestCipherAES Runthreaded AddressOf TestCipherBlowfish Runthreaded AddressOf TestDigestMD5 Runthreaded AddressOf TestDigestSHA512 Runthreaded AddressOf TestMD5 Runthreaded AddressOf TestSHA1 Runthreaded AddressOf TestSHA256 Runthreaded AddressOf TestSHA512 End EventHandler
End Control
Control RunWithoutThreads Inherits PushButton
ControlInstance RunWithoutThreads Inherits PushButton
EventHandler Sub Action() Prepare TestCipherAES TestCipherBlowfish TestDigestMD5 TestDigestSHA512 TestMD5 TestSHA1 TestSHA256 TestSHA512 End EventHandler
End Control
Control Timer1 Inherits Timer
ControlInstance Timer1 Inherits Timer
EventHandler Sub Action() while ForList.Ubound>=0 dim v as Variant = ForList(0) ForList.Remove 0 // get array back from variant dim s() as string = v list.AddRow s wend if running and isDone then dim t as integer = ticks - LaunchTicks list.AddRow "All done", FormatTicks(t), "" running = false ProgressWheel1.Visible = false RunThreadedButton.Enabled = true RunWithoutThreads.Enabled = true redim Threads(-1) end if End EventHandler
End Control
Control ProgressWheel1 Inherits ProgressWheel
ControlInstance ProgressWheel1 Inherits ProgressWheel
End Control
Control Label1 Inherits Label
ControlInstance Label1 Inherits Label
End Control
EventHandler Sub Close() for each f as FolderItem in filesToDelete f.Delete next End EventHandler
Sub Add(paramArray s as string) // add new array of string to array of variants if app.CurrentThread = nil then // main thread list.AddRow s else // add later with timer ForList.Append s end if End Sub
Sub CheckNextThread() // launch more threads for each t as myThread in threads if not t.Started then t.Started = true t.run end if next End Sub
Function FormatTicks(t as integer) As string Return Format(t / 60.0, "0.0")+"s" End Function
Sub Prepare() LaunchTicks = ticks Running = true ProgressWheel1.Visible = true End Sub
Sub Runthreaded(t as ThreadFunc) dim thread as new myThread(T) if UBound(threads) < 4 then thread.Started = true thread.run end if threads.Append thread End Sub
Sub TestCipherAES() dim t as integer = ticks dim d as CipherMBS = CipherMBS.aes_256_cfb128 dim outfile as FolderItem = GetTemporaryFolderItem filesToDelete.append outfile dim CKey as MemoryBlock = "1234567812345678" dim CIV as MemoryBlock call d.EncryptInit Ckey, CIV if d.ProcessFile(file, outfile) then t = ticks - t Add "Cipher AES 256 CFB 128 encrypt", FormatTicks(t) else Add "Cipher AES 256 CFB 128 encrypt", "", "Failed." Return end if t = ticks d = CipherMBS.aes_256_cfb128 dim defile as FolderItem = GetTemporaryFolderItem filesToDelete.append defile call d.DecryptInit Ckey, CIV if d.ProcessFile(outfile, defile) then t = ticks - t Add "Cipher AES 256 CFB 128 decrypt", FormatTicks(t) else Add "Cipher AES 256 CFB 128 decrypt", "", "Failed." end if End Sub
Sub TestCipherBlowfish() dim t as integer = ticks dim d as CipherMBS = CipherMBS.bf_cfb64 dim outfile as FolderItem = GetTemporaryFolderItem filesToDelete.append outfile dim CKey as MemoryBlock = "1234567812345678" dim CIV as MemoryBlock call d.EncryptInit Ckey, CIV if d.ProcessFile(file, outfile) then t = ticks - t Add "Cipher Blowfish encrypt", FormatTicks(t) else Add "Cipher Blowfish encrypt", "", "Failed." Return end if t = ticks d = CipherMBS.bf_cfb64 dim defile as FolderItem = GetTemporaryFolderItem filesToDelete.append defile call d.DecryptInit Ckey, CIV if d.ProcessFile(outfile, defile) then t = ticks - t Add "Cipher Blowfish decrypt", FormatTicks(t) else Add "Cipher Blowfish decrypt", "", "Failed." end if End Sub
Sub TestDigestMD5() dim t as integer = ticks dim d as DigestMBS = DigestMBS.MD5 if d.Process(file) then dim h as string = d.FinalText t = ticks - t Add "Digest MD5", FormatTicks(t), h else Add "Digest MD5", "", "Failed." end if End Sub
Sub TestDigestSHA512() dim t as integer = ticks dim d as DigestMBS = DigestMBS.SHA512 if d.Process(file) then dim h as string = d.FinalText t = ticks - t Add "Digest SHA512", FormatTicks(t), h else Add "Digest SHA512", "", "Failed." end if End Sub
Sub TestMD5() dim h as string dim t as integer = ticks h = MD5DigestMBS.HashFile(file, true) t = ticks - t Add "MD5 HashFile", FormatTicks(t), h End Sub
Sub TestSHA1() dim h as string dim t as integer = ticks h = SHA1MBS.HashFile(file, true) t = ticks - t Add "SHA1 HashFile", FormatTicks(t), h End Sub
Sub TestSHA256() dim h as string dim t as integer = ticks h = SHA256MBS.HashFile(file, true) t = ticks - t Add "SHA256 HashFile", FormatTicks(t), h End Sub
Sub TestSHA512() dim h as string dim t as integer = ticks h = SHA512MBS.HashFile(file, true) t = ticks - t Add "SHA512 HashFile", FormatTicks(t), h End Sub
Function isDone() As Boolean if UBound(threads) = -1 then Return true end if for each t as myThread in threads if not t.started then Return false end if if t.state = t.Running then Return false end if next Return true End Function
Property ForList() As Variant
array of variants which will contain string arrays
Property LaunchTicks As Integer
Property Running As Boolean
Property file As FolderItem
Property filesToDelete() As FolderItem
Property threads() As myThread
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&Ablage"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Bearbeiten"
MenuItem EditUndo = "&Rückgängig"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "&Ausschneiden"
MenuItem EditCopy = "&Kopieren"
MenuItem EditPaste = "&Einfügen"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "&Alles auswählen"
End MenuBar
Class myThread Inherits thread
EventHandler Sub Run() // run a function threaded t.Invoke t = nil MainWindow.CheckNextThread End EventHandler
Sub Constructor(f as ThreadFunc) t = f End Sub
Property Started As Boolean
Property t As ThreadFunc
End Class
Module Module1
Delegate Sub ThreadFunc()
End Module
End Project

Feedback, Comments & Corrections

The items on this page are in the following plugins: MBS Encryption Plugin.

The biggest plugin in space...




Links
MBS FileMaker blog