@@ -80,7 +80,8 @@ func (encryptor *DesEncryptor) writeEncryptionBufferToFile(encryptionBuffer *[][
80
80
if os .IsNotExist (err ) {
81
81
_ , ferr := os .Create (filename )
82
82
if ferr != nil {
83
- log .Fatalln ("Problem encrypting file" , ferr )
83
+ log .Println ("Problem encrypting file" , ferr , "File not found in the system" )
84
+ return
84
85
}
85
86
}
86
87
// write byte array to buffer
@@ -122,15 +123,16 @@ func (encryptor *DesEncryptor) runEncryption(filename string) {
122
123
123
124
file , err := os .Open (filename )
124
125
if err != nil {
125
- log .Fatalln ("Problem encrypting file" , err )
126
+ log .Println ("Problem encrypting file" , err )
126
127
return
127
128
}
128
129
defer file .Close ()
129
130
130
131
// Create encryption file
131
132
_ , err = os .Create (encryptor .encryptionFilename )
132
133
if err != nil {
133
- log .Fatalln ("Problem encrypting file" , err )
134
+ log .Println ("Problem encrypting file" , err )
135
+ return
134
136
}
135
137
136
138
var buffer []byte
@@ -190,26 +192,58 @@ func (engine *DesEncryptor) runDecryption(filename string) {
190
192
}
191
193
192
194
/**
193
- public File-encryption API
195
+ public File-encryption API.
196
+ @return: boolean value. True if encryption is successful and encrypted file
197
+ is created successfully on the disk. Otherwise false is returned.
194
198
*/
195
- func (encryptor * DesEncryptor ) EncryptFile (filename string ) {
199
+ func (encryptor * DesEncryptor ) EncryptFile (filename string ) bool {
200
+ log .Println ("file for encryption:" , filename )
196
201
log .Println ("File-Encryption procedure started..." )
197
202
198
203
encryptor .filename = filename
199
204
encryptor .encryptionFilename = filename + ".enc"
200
- // encryptor.cipher.Init("des_input.txt")
201
205
encryptor .runEncryption (filename )
202
206
207
+ // Check whether a file of same size is created as the original
208
+ // file on the disk.
209
+ primaryFileStat , err := os .Stat (filename )
210
+ if err != nil {
211
+ log .Println ("Encryption failure for file:" , filename )
212
+ return false
213
+ }
214
+ primaryFileSize := primaryFileStat .Size ()
215
+
216
+ encryptedFileStat , err := os .Stat (encryptor .encryptionFilename )
217
+ if err != nil {
218
+ log .Println ("Encryption failure for file:" , encryptor .encryptionFilename )
219
+ return false
220
+ }
221
+ encryptedFileSize := encryptedFileStat .Size ()
222
+ if encryptedFileSize != primaryFileSize {
223
+ log .Println ("Encryption Failure. Try again..." )
224
+ return false
225
+ }
226
+
227
+ // File encryption is successful. Delete the primary file from disk.
228
+ err = os .Remove (filename )
229
+ if err != nil {
230
+ log .Println ("Encryption failure for file:" , encryptor .encryptionFilename , err )
231
+ return false
232
+ }
233
+
203
234
log .Println ("File-Encryption procedure complete..." )
235
+ return true
204
236
}
205
237
206
238
/**
207
- Public Decryption API
239
+ Public Decryption API.
240
+ @return: boolean value. True if decryption is successful and decrypted file
241
+ is created successfully on the disk. Otherwise false is returned.
208
242
*/
209
- func (engine * DesEncryptor ) DecryptFile (filename string ) {
243
+ func (engine * DesEncryptor ) DecryptFile (filename string ) bool {
210
244
log .Println ("Decryption procedure started..." )
211
245
212
- engine .decryptionFilename = "dec." + filename
246
+ engine .decryptionFilename = filename
213
247
engine .encryptionFilename = filename + ".enc"
214
248
var err error
215
249
engine .decryptionFileConnector , err = os .Create (engine .decryptionFilename )
@@ -224,7 +258,27 @@ func (engine *DesEncryptor) DecryptFile(filename string) {
224
258
engine .runDecryption (filename )
225
259
engine .decryptionFileConnector .Close ()
226
260
261
+ // Delete the encrypted file and keep the decrypted(which is the primary file) file
262
+ encryptedFileStat , err := os .Stat (engine .encryptionFilename )
263
+ if err != nil {
264
+ log .Println ("decryption failure for file:" , engine .decryptionFilename )
265
+ return false
266
+ }
267
+ encryptedFileSize := encryptedFileStat .Size ()
268
+
269
+ decryptedFileStat , err := os .Stat (engine .decryptionFilename )
270
+ if err != nil {
271
+ log .Println ("decryption failure for file:" , engine .decryptionFilename )
272
+ return false
273
+ }
274
+ decryptedFileSize := decryptedFileStat .Size ()
275
+ if encryptedFileSize != decryptedFileSize {
276
+ log .Println ("Decryption failed! Try again" )
277
+ return false
278
+ }
279
+
227
280
log .Println ("Decryption procedure complete..." )
281
+ return true
228
282
}
229
283
230
284
func (engine * DesEncryptor ) Init (filename string ) {
0 commit comments