This project was sleeping for too long. Too many parts are not clean at all. So, here some cleanup: - add more test unit - clean msdos date/time format for zip - add crc32 - add version support - rewrite notes - rewrite the whole interface from scratch. - update github actions - update license (MIT) - create dotzip application - update notes regarding data-structure used - fix date and time ms-dos format (issue with endianess) - fix local file header encoding - update documentation - update with new extra fields and third party support - add extended timestamp third party support - add unix info new third party support
82 lines
2.3 KiB
Markdown
82 lines
2.3 KiB
Markdown
# Dotzip
|
|
|
|
> ZIP is one of the most widely used compressed file formats. It is
|
|
> universally used to aggregate, compress, and encrypt files into a
|
|
> single interoperable container. No specific use or application need
|
|
> is defined by this format and no specific implementation guidance is
|
|
> provided. This document provides details on the storage format for
|
|
> creating ZIP files. Information is provided on the records and
|
|
> fields that describe what a ZIP file is.
|
|
>
|
|
> -- from [official specification
|
|
> file](https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.3.TXT)
|
|
|
|
NOTE: This project is a work in progress. Please don't use it in
|
|
production (even in staging). Things are moving, and nothing is
|
|
stable. Many notes are present in `notes` directory, feel free to
|
|
react.
|
|
|
|
More information can be found in `notes/` directory. This code is
|
|
generated using TDD and literate programming. All function or modules
|
|
added must be documented (with examples at least) and tested before
|
|
commit.
|
|
|
|
## Installation
|
|
|
|
If [available in Hex](https://hex.pm/docs/publish), the package can be
|
|
installed by adding `dotzip` to your list of dependencies in
|
|
`mix.exs`:
|
|
|
|
```elixir
|
|
def deps do
|
|
[
|
|
{:dotzip, "~> 0.1.0"}
|
|
]
|
|
end
|
|
```
|
|
|
|
## Decoding Example
|
|
|
|
create a zip file
|
|
|
|
```sh
|
|
cd /tmp
|
|
echo test > test
|
|
zip test.zip test
|
|
```
|
|
|
|
extract information
|
|
|
|
```elixir
|
|
{:ok, file} = :file.read_file("/tmp/test.zip")
|
|
Dotzip.decode(file)
|
|
```
|
|
|
|
## Resources
|
|
|
|
* https://www.loc.gov/preservation/digital/formats/fdd/fdd000362.shtml
|
|
* https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.3.TXT
|
|
* https://en.wikipedia.org/wiki/ZIP_(file_format)
|
|
|
|
### Other implementation
|
|
|
|
* http://infozip.sourceforge.net/
|
|
* https://github.com/kuba--/zip
|
|
* https://github.com/zip-rs/zip
|
|
* https://github.com/Stuk/jszip
|
|
* https://github.com/srikanth-lingala/zip4j
|
|
|
|
## Trademarks
|
|
|
|
> PKWARE, PKZIP, SecureZIP, and PKSFX are registered trademarks of
|
|
> PKWARE, Inc. in the United States and elsewhere. PKPatchMaker,
|
|
> Deflate64, and ZIP64 are trademarks of PKWARE, Inc. Other marks
|
|
> referenced within this document appear for identification purposes
|
|
> only and are the property of their respective owners.
|
|
|
|
## Notes
|
|
|
|
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
|
|
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
|
|
be found at [https://hexdocs.pm/dotzip](https://hexdocs.pm/dotzip).
|