Browse Source

Use Dart's file handling APIs correctly to append to a file

Vishnu Mohandas 4 years ago
parent
commit
e574a0d8d2
1 changed files with 2 additions and 8 deletions
  1. 2 8
      lib/utils/crypto_util.dart

+ 2 - 8
lib/utils/crypto_util.dart

@@ -61,8 +61,6 @@ class CryptoUtil {
     _logger.info("Encrypting file of size " + sourceFileLength.toString());
 
     final inputFile = await (sourceFile.open(mode: io.FileMode.read));
-    final outputFile =
-        await (destinationFile.open(mode: io.FileMode.writeOnlyAppend));
 
     final key = Sodium.cryptoSecretstreamXchacha20poly1305Keygen();
     final initPushResult =
@@ -80,10 +78,9 @@ class CryptoUtil {
       bytesRead += chunkSize;
       final encryptedData = Sodium.cryptoSecretstreamXchacha20poly1305Push(
           initPushResult.state, buffer, null, tag);
-      outputFile.writeFromSync(encryptedData);
+      destinationFile.writeAsBytesSync(encryptedData, mode: io.FileMode.append);
     }
     await inputFile.close();
-    await outputFile.close();
 
     _logger.info("ChaCha20 Encryption time: " +
         (DateTime.now().millisecondsSinceEpoch - encryptionStartTime)
@@ -104,8 +101,6 @@ class CryptoUtil {
     _logger.info("Decrypting file of size " + sourceFileLength.toString());
 
     final inputFile = await (sourceFile.open(mode: io.FileMode.read));
-    final outputFile =
-        await (destinationFile.open(mode: io.FileMode.writeOnlyAppend));
     final pullState = Sodium.cryptoSecretstreamXchacha20poly1305InitPull(
         attributes.header.bytes, attributes.key.bytes);
 
@@ -120,11 +115,10 @@ class CryptoUtil {
       bytesRead += chunkSize;
       final pullResult = Sodium.cryptoSecretstreamXchacha20poly1305Pull(
           pullState, buffer, null);
-      outputFile.writeFromSync(pullResult.m);
+      destinationFile.writeAsBytesSync(pullResult.m, mode: io.FileMode.append);
       tag = pullResult.tag;
     }
     await inputFile.close();
-    await outputFile.close();
 
     _logger.info("ChaCha20 Decryption time: " +
         (DateTime.now().millisecondsSinceEpoch - decryptionStartTime)