diff --git a/src/SharpCompress/Archives/AbstractArchive.cs b/src/SharpCompress/Archives/AbstractArchive.cs index 712db4de1..01ed5b907 100644 --- a/src/SharpCompress/Archives/AbstractArchive.cs +++ b/src/SharpCompress/Archives/AbstractArchive.cs @@ -161,6 +161,11 @@ public IReader ExtractAllEntries() /// public virtual bool IsSolid => false; + /// + /// Archive is ENCRYPTED (this means the Archive has password-protected files). + /// + public virtual bool IsEncrypted => false; + /// /// The archive can find all the parts of the archive needed to fully extract the archive. This forces the parsing of the entire archive. /// diff --git a/src/SharpCompress/Archives/Rar/RarArchive.cs b/src/SharpCompress/Archives/Rar/RarArchive.cs index b3689a9f5..9acfdccc5 100644 --- a/src/SharpCompress/Archives/Rar/RarArchive.cs +++ b/src/SharpCompress/Archives/Rar/RarArchive.cs @@ -84,6 +84,8 @@ protected override IReader CreateReaderForSolidExtraction() public override bool IsSolid => Volumes.First().IsSolidArchive; + public override bool IsEncrypted => Entries.First(x => !x.IsDirectory).IsEncrypted; + public virtual int MinVersion => Volumes.First().MinVersion; public virtual int MaxVersion => Volumes.First().MaxVersion; diff --git a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs index ea763409d..27d47d233 100644 --- a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs +++ b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs @@ -205,6 +205,8 @@ protected override IReader CreateReaderForSolidExtraction() => .GroupBy(x => x.FilePart.Folder) .Any(folder => folder.Count() > 1); + public override bool IsEncrypted => Entries.First(x => !x.IsDirectory).IsEncrypted; + public override long TotalSize => _database?._packSizes.Aggregate(0L, (total, packSize) => total + packSize) ?? 0; diff --git a/tests/SharpCompress.Test/Rar/RarArchiveTests.cs b/tests/SharpCompress.Test/Rar/RarArchiveTests.cs index 1aca13ddc..991f18e59 100644 --- a/tests/SharpCompress.Test/Rar/RarArchiveTests.cs +++ b/tests/SharpCompress.Test/Rar/RarArchiveTests.cs @@ -633,4 +633,13 @@ public void Rar5_Encrypted_Iterate_Archive() => "Rar5.encrypted_filesOnly.rar", "Failure jpg exe Empty ั‚ะตัั‚.txt jpg\\test.jpg exe\\test.exe" ); + + [Fact] + public void Rar_TestEncryptedDetection() + { + using var passwordProtectedFilesArchive = RarArchive.Open( + Path.Combine(TEST_ARCHIVES_PATH, "Rar.encrypted_filesOnly.rar") + ); + Assert.True(passwordProtectedFilesArchive.IsEncrypted); + } } diff --git a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs index 829195864..af21ff94e 100644 --- a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs +++ b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs @@ -224,6 +224,15 @@ public void SevenZipArchive_Tar_PathRead() ); } + [Fact] + public void SevenZipArchive_TestEncryptedDetection() + { + using var passwordProtectedFilesArchive = SevenZipArchive.Open( + Path.Combine(TEST_ARCHIVES_PATH, "7Zip.encryptedFiles.7z") + ); + Assert.True(passwordProtectedFilesArchive.IsEncrypted); + } + [Fact] public void SevenZipArchive_TestSolidDetection() { diff --git a/tests/TestArchives/Archives/7Zip.encryptedFiles.7z b/tests/TestArchives/Archives/7Zip.encryptedFiles.7z new file mode 100644 index 000000000..4c15bb2cf Binary files /dev/null and b/tests/TestArchives/Archives/7Zip.encryptedFiles.7z differ