LibZipSharp
LibZipSharp copied to clipboard
Add support for libzip encryption functions
Originally libZipSharp had no use for libzip's encryption functions as Xamarin.Android doesn't use them, but now that the library is shipped in a nuget those functions may come useful. Implement the following:
- [ ] Explicitly open an encrypted archive
- [ ] Automatically detect if the archive is encrypted and, if yes, use a callback to ask user for password (libZipSharp must not do it on its own)
- [ ] Create an encrypted archive with a provided password and a choice of encryption methods
Relevant upstream APIs:
Hi, I want to propose an implementation if it's still relevant. But my Unit tests basically don't pass because it does not find the libzip.dll (System.DllNotFoundException: 'Unable to load DLL 'libzip': The specified module could not be found. (Exception from HRESULT: 0x8007007E)'
How do you run UnitTests ? (On Windows)

@Fniz yes, it's still definitely relevant! We don't use it in Xamarin.Android, but if you need it and can provide an implementation we will happily accept a PR :)
Regarding running tests, I'll let @dellis1972 answer it since I don't use Windows and I don't know the answer
Thanks!
@Fniz the unit tests should work on windows. This line https://github.com/xamarin/LibZipSharp/blob/master/LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj#L27 in the csproj should copy the libzip.dll from the Window build directory over to the unit test output directory.
On my Mac machine LibZipSharp.UnitTest/bin/Debug/net471 contains the libzip.dll. That should be the same on windows.
My guess is build\Windows\64\lib\libzip.dll does not exist so it is not being copied. Have you built the libzip.dll ? It does need to be done as a separate step.
Our current build system uses the following commands https://github.com/xamarin/LibZipSharp/blob/master/azure-pipelines.yml#L30 to build the dll. It makes use of the vcpkg project to handle dependencies and uses cmake to handle the build process. So I suspect you will either need to run all those commands to build the dll yourself, or the easier way just grab the native dll from the latest nuget package and place it in the correct location build\Windows\64\lib\libzip.dll. You can probably find the dll in your nuget package cache which is normally in a .nuget directory in you User AppData folder.
I should probably write a helper batch file which will do all those commands like we have to unix based systems to make this easier for contributors. Both @grendello and I work on unix based systems most of the time these days.
@Fniz we merged that PR, hopefully you can build the native dll's on windows now.