Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.IO
- Imports System.Security.Cryptography
- '------------------
- 'Creator: aeonhack
- 'Site: elitevs.net
- 'Created: 4/16/2011
- 'Changed: 4/24/2012
- 'Version: 1.0.0
- '------------------
- Class SecureFile
- Enum Status As Byte
- Success = 0
- Failed = 1
- Progress = 2
- End Enum
- Private Current As Long
- Private Maximum As Long
- Private Data As Byte()
- Private Destination As String
- Private SR, SW As Stream
- Private CS As CryptoStream
- Private FSR, FSW As FileStream
- Private SA As SymmetricAlgorithm
- Private Callback As StatusCB
- Public Delegate Sub StatusCB(status As Status, value As Integer)
- Sub New(_sa As SymmetricAlgorithm, _callback As StatusCB)
- SA = _sa
- Callback = _callback
- Data = New Byte(5242880 - 1) {}
- End Sub
- Public Sub Secure([in] As String, out As String)
- Try
- Initialize([in], out)
- CS = New CryptoStream(FSW, SA.CreateEncryptor(), CryptoStreamMode.Write)
- SR = FSR
- SW = CS
- BeginProcess()
- Catch
- HandleFailure()
- End Try
- End Sub
- Public Sub Unsecure([in] As String, out As String)
- Try
- Initialize([in], out)
- CS = New CryptoStream(FSR, SA.CreateDecryptor(), CryptoStreamMode.Read)
- SR = CS
- SW = FSW
- BeginProcess()
- Catch
- HandleFailure()
- End Try
- End Sub
- Private Sub Initialize([in] As String, out As String)
- Destination = out
- FSW = New FileStream(out, FileMode.Create, FileAccess.Write)
- FSR = New FileStream([in], FileMode.Open, FileAccess.Read)
- End Sub
- Private Sub BeginProcess()
- Current = 0
- Maximum = FSR.Length
- Dim O As IAsyncResult = SR.BeginRead(Data, 0, Data.Length, AddressOf Process, Nothing)
- If O.CompletedSynchronously Then Process(O)
- End Sub
- Private Sub Process(r As IAsyncResult)
- If _Cancel Then
- HandleFailure()
- Return
- End If
- Try
- Dim I As Integer = SR.EndRead(r)
- Current += I
- If Not I = 0 Then
- SW.Write(Data, 0, I)
- Callback(Status.Progress, CInt(Current / Maximum * 100))
- Dim O As IAsyncResult = SR.BeginRead(Data, 0, Data.Length, AddressOf Process, Nothing)
- If O.CompletedSynchronously Then Process(O)
- Else
- CS.Close()
- FSW.Close()
- FSR.Close()
- Callback(Status.Progress, 100)
- Callback(Status.Success, 0)
- End If
- Catch 'CryptoException for pass mismatch
- HandleFailure()
- End Try
- End Sub
- Private Sub HandleFailure()
- Try
- If CS IsNot Nothing Then CS.Close()
- Catch
- 'Do nothing
- End Try
- If FSR IsNot Nothing Then FSR.Close()
- If FSW IsNot Nothing Then FSW.Close()
- Try
- File.Delete(Destination)
- Catch
- 'Do nothing.
- End Try
- Callback(Status.Failed, 0)
- End Sub
- Private _Cancel As Boolean
- Public Sub Cancel()
- _Cancel = True
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement