File tree 2 files changed +24
-11
lines changed
src/ICSharpCode.SharpZipLib/Zip
2 files changed +24
-11
lines changed Original file line number Diff line number Diff line change @@ -655,7 +655,7 @@ public bool LocalHeaderRequiresZip64
655
655
656
656
if ( ( versionToExtract == 0 ) && IsCrypted )
657
657
{
658
- trueCompressedSize += ZipConstants . CryptoHeaderSize ;
658
+ trueCompressedSize += ( ulong ) this . EncryptionOverheadSize ;
659
659
}
660
660
661
661
// TODO: A better estimation of the true limit based on compression overhead should be used
@@ -1013,6 +1013,26 @@ internal int AESOverheadSize
1013
1013
}
1014
1014
}
1015
1015
1016
+ /// <summary>
1017
+ /// Number of extra bytes required to hold the encryption header fields.
1018
+ /// </summary>
1019
+ internal int EncryptionOverheadSize
1020
+ {
1021
+ get
1022
+ {
1023
+ // Entry is not encrypted - no overhead
1024
+ if ( ! this . IsCrypted )
1025
+ return 0 ;
1026
+
1027
+ // Entry is encrypted using ZipCrypto
1028
+ if ( _aesEncryptionStrength == 0 )
1029
+ return ZipConstants . CryptoHeaderSize ;
1030
+
1031
+ // Entry is encrypted using AES
1032
+ return this . AESOverheadSize ;
1033
+ }
1034
+ }
1035
+
1016
1036
/// <summary>
1017
1037
/// Process extra data fields updating the entry based on the contents.
1018
1038
/// </summary>
Original file line number Diff line number Diff line change @@ -337,7 +337,7 @@ public void PutNextEntry(ZipEntry entry)
337
337
}
338
338
else
339
339
{
340
- WriteLeInt ( entry . IsCrypted ? ( int ) entry . CompressedSize + ZipConstants . CryptoHeaderSize : ( int ) entry . CompressedSize ) ;
340
+ WriteLeInt ( ( int ) entry . CompressedSize + entry . EncryptionOverheadSize ) ;
341
341
WriteLeInt ( ( int ) entry . Size ) ;
342
342
}
343
343
}
@@ -382,7 +382,7 @@ public void PutNextEntry(ZipEntry entry)
382
382
if ( headerInfoAvailable )
383
383
{
384
384
ed . AddLeLong ( entry . Size ) ;
385
- ed . AddLeLong ( entry . CompressedSize ) ;
385
+ ed . AddLeLong ( entry . CompressedSize + entry . EncryptionOverheadSize ) ;
386
386
}
387
387
else
388
388
{
@@ -540,14 +540,7 @@ public void CloseEntry()
540
540
541
541
if ( curEntry . IsCrypted )
542
542
{
543
- if ( curEntry . AESKeySize > 0 )
544
- {
545
- curEntry . CompressedSize += curEntry . AESOverheadSize ;
546
- }
547
- else
548
- {
549
- curEntry . CompressedSize += ZipConstants . CryptoHeaderSize ;
550
- }
543
+ curEntry . CompressedSize += curEntry . EncryptionOverheadSize ;
551
544
}
552
545
553
546
// Patch the header if possible
You can’t perform that action at this time.
0 commit comments