@@ -166,15 +166,11 @@ func (encryptor *DesEncryptor) fastEncrypt(file *os.File) {
166
166
chunkMap [i ] = bytesread
167
167
}
168
168
waitGroup .Wait ()
169
- // if chunkCount == len(dataBuffer) {
170
- // fmt.Println("chunkCount and len(dataBuffer) are same")
171
- // }
172
- // Write encryption buffer into the file
169
+
173
170
for i := 0 ; i < chunkCount ; i ++ {
174
171
encryptor .writeEncryptionBufferToFile (& encryptionBuffer [i ], chunkMap [i ], encryptor .encryptionFilename )
175
172
}
176
173
cnt += 1
177
- // fmt.Println("End of a loop, cnt:", cnt)
178
174
}
179
175
}
180
176
@@ -227,42 +223,102 @@ func (encryptor *DesEncryptor) runEncryption(filename string) {
227
223
encryptor .encryptChunk (& buffer , bytesread , & encryptionBuffer )
228
224
// Write encryptionBuffer into file.
229
225
encryptor .writeEncryptionBufferToFile (& encryptionBuffer , bytesread , encryptor .encryptionFilename )
230
- // fmt.Println("bytesread:", bytesread, "bytes to string:", string(buffer[:bytesread]))
231
226
}
232
227
normalElapsed := time .Since (normalStart )
233
228
log .Println ("The total time for normal mode: " , normalElapsed )
234
229
}
235
230
}
236
231
232
+ func (engine * DesEncryptor ) concurrentChunkDecryption (waitGroup * sync.WaitGroup , buffer * []byte , bufferDataSize int , decryptionBuffer * [][]byte ) {
233
+ defer waitGroup .Done ()
234
+ engine .decryptChunk (buffer , bufferDataSize , decryptionBuffer )
235
+ }
236
+
237
+ func (engine * DesEncryptor ) fastDecrypt (file * os.File ) {
238
+ dataBuffer := make ([][]byte , engine .ConcurrentPaths ) // holds the primary data to be decrypted.
239
+ for i := 0 ; i < len (dataBuffer ); i ++ {
240
+ dataBuffer [i ] = make ([]byte , engine .Chunksize )
241
+ }
242
+ decryptionBuffer := make ([][][]byte , engine .ConcurrentPaths )
243
+ for i := 0 ; i < len (decryptionBuffer ); i ++ {
244
+ decryptionBuffer [i ] = make ([][]byte , engine .Chunksize )
245
+ for j := 0 ; j < len (decryptionBuffer [i ][j ]); j ++ {
246
+ decryptionBuffer [i ][j ] = make ([]byte , 8 )
247
+ }
248
+ }
249
+ waitGroup := new (sync.WaitGroup )
250
+ chunkMap := make ([]int , len (dataBuffer ))
251
+ var err error
252
+ cnt := 0
253
+ for err != io .EOF {
254
+ err = nil
255
+ bytesread := 0
256
+ chunkCount := 0
257
+ for i := 0 ; i < len (dataBuffer ); i ++ {
258
+ bytesread , err = file .Read (dataBuffer [i ])
259
+ if err != nil {
260
+ if err != io .EOF {
261
+ log .Println ("Problem reading from primary file" , err )
262
+ }
263
+ break
264
+ }
265
+ waitGroup .Add (1 )
266
+ go engine .concurrentChunkDecryption (waitGroup , & dataBuffer [i ], bytesread , & decryptionBuffer [i ])
267
+ chunkCount += 1
268
+ chunkMap [i ] = bytesread
269
+ }
270
+ waitGroup .Wait ()
271
+
272
+ for i := 0 ; i < chunkCount ; i ++ {
273
+ // write decryption buffer to file
274
+ engine .writeDecryptionBufferToFile (& decryptionBuffer [i ], chunkMap [i ], engine .decryptionFilename )
275
+ }
276
+ cnt += 1
277
+ }
278
+ }
279
+
237
280
/**
238
281
Decrypt the bytes of the encrypted file
239
282
*/
240
283
func (engine * DesEncryptor ) runDecryption (filename string ) {
241
- var buffer []byte = make ([]byte , bufferSize )
242
- var decryptionBuffer [][]byte = make ([][]byte , bufferSize )
243
- for i := 0 ; i < bufferSize ; i ++ {
244
- decryptionBuffer [i ] = make ([]byte , 8 )
245
- }
246
-
247
- // fmt.Println("Encryption filename:", engine.encryptionFilename)
248
284
file , ferr := os .Open (engine .encryptionFilename )
285
+ defer file .Close ()
249
286
if ferr != nil {
250
287
log .Fatalln ("Problem opening encrypted file...Filename:" , engine .encryptionFilename , ferr )
288
+ return
251
289
}
252
- for {
253
- bytesread , err := file .Read (buffer )
254
- if err != nil {
255
- if err != io .EOF {
256
- log .Fatalln ("Problem reading encrypted file" , err )
290
+
291
+ if engine .Fastmode == true {
292
+ log .Println ("Fastmode enabled decryption..." )
293
+ concurrentStart := time .Now ()
294
+ engine .fastDecrypt (file )
295
+ concurrentElapsed := time .Since (concurrentStart )
296
+ log .Println ("The total decryption time for fast mode: " , concurrentElapsed )
297
+ } else {
298
+ log .Println ("Decryption in normal mode..." )
299
+ var buffer []byte = make ([]byte , engine .Chunksize )
300
+ var decryptionBuffer [][]byte = make ([][]byte , engine .Chunksize )
301
+ for i := 0 ; i < engine .Chunksize ; i ++ {
302
+ decryptionBuffer [i ] = make ([]byte , 8 )
303
+ }
304
+ normalStart := time .Now ()
305
+ for {
306
+ bytesread , err := file .Read (buffer )
307
+ if err != nil {
308
+ if err != io .EOF {
309
+ log .Fatalln ("Problem reading encrypted file" , err )
310
+ }
311
+ break
257
312
}
258
- break
313
+ engine .decryptChunk (& buffer , bytesread , & decryptionBuffer )
314
+ // Write decryptionBuffer into file
315
+ engine .writeDecryptionBufferToFile (& decryptionBuffer , bytesread , engine .decryptionFilename )
259
316
}
260
- engine .decryptChunk (& buffer , bytesread , & decryptionBuffer )
261
- // Write decryptionBuffer into file
262
- engine .writeDecryptionBufferToFile (& decryptionBuffer , bytesread , engine .decryptionFilename )
263
-
264
- // fmt.Println("Decryption, bytesread:", bytesread, " bytes to string:", string(buffer[:bytesread]))
317
+ normalElapsed := time .Since (normalStart )
318
+ log .Println ("Total decryption time in normal mode: " , normalElapsed )
265
319
}
320
+
321
+ // fmt.Println("Encryption filename:", engine.encryptionFilename)
266
322
}
267
323
268
324
/**
0 commit comments