The encryption can be either PKZIP 2.0 (weak) encryption, or WinZip-compatible AES encryption, which is considered to be strong and for that reason is preferred. In the WinZip AES option, there are two different keystrengths supported: 128 bits and 256 bits. The extra field, which I mentioned previously, specifies additional metadata about the entry, which is strictly-speaking, optional. These data are things like high-resolution timestamps, data sizes that exceed 2^^32, and other encryption possibilities. In each case the library that reads a zip file needs to be able to correctly deal with the various fields, validating the values within them. Now, cross all that with the variety of usage patterns - creating a zip, or reading, or extracting, or updating, or updating several times. And also, remember that the metadata may change during updates: an application can apply a password where none was used previously, or it may wish to remove an entry from the zip entirely. The huge variety of combinations of possibilities is what makes testing a zip library so challenging.