Преглед на файлове

Install FinalizingModeWorker for StreamDecryptor

Marcin Krzyzanowski преди 6 години
родител
ревизия
b4754f0fe3
променени са 1 файла, в които са добавени 13 реда и са изтрити 2 реда
  1. 13 2
      Sources/CryptoSwift/StreamDecryptor.swift

+ 13 - 2
Sources/CryptoSwift/StreamDecryptor.swift

@@ -32,8 +32,19 @@ final class StreamDecryptor: Cryptor, Updatable {
         accumulated = Array(bytes)
         accumulated = Array(bytes)
         
         
         var plaintext = Array<UInt8>(reserveCapacity: bytes.count)
         var plaintext = Array<UInt8>(reserveCapacity: bytes.count)
-        for chunk in accumulated.batched(by: blockSize) {
-            plaintext += worker.decrypt(block: chunk)
+        for var chunk in accumulated.batched(by: blockSize) {
+
+            if isLast, var finalizingWorker = worker as? FinalizingModeWorker {
+                chunk = try finalizingWorker.willDecryptLast(block: chunk + accumulated.suffix(worker.additionalBufferSize)) // tag size
+            }
+
+            if !chunk.isEmpty {
+                plaintext += worker.decrypt(block: chunk)
+            }
+
+            if var finalizingWorker = worker as? FinalizingModeWorker, isLast == true {
+                plaintext = try finalizingWorker.didDecryptLast(block: plaintext.slice)
+            }
         }
         }
 
 
         // omit unecessary calculation if not needed
         // omit unecessary calculation if not needed