An archiving tool that xz-compresses and bundles files together into an archive. Archives can be encrypted and decrypted for maximum privacy.
Make sure you’ve correctly installed Go v1.23 or greater and that the Go binaries are in your PATH (you want to append $GOPATH/bin to your PATH to access installed Go binaries).
Then:
$ go install https://github.com/angelsolaorbaiceta/angel-archives@latestYou should have the aar utility in your path:
$ which aar
/Users/yourusername/go/bin/aarWhere in the example above, /Users/yourusername/go is the value of the $GOPATH variable.
Alternatively, you can clone the repository:
$ git clone https://github.com/angelsolaorbaiceta/angel-archivesAnd install the binary in your $GOPATH/bin by simply doing:
$ make installYou should have the aar utility in your path:
$ which aar
/Users/yourusername/go/bin/aarCreating an archive:
$ aar create -f archive.aarch file1.txt file2.txt file3.txtExtracting all files an archive:
$ aar extract -f archive.aarchExtracting a single file by name from an archive:
$ aar extract -f archive.aarch -n file2.txtListing the contents of an archive:
$ aar list -f archive.aarchEncrypting an archive:
$ aar encrypt -f archive.aarch
Password: <password>
Confirm password: <password>Where <password> is the password you want to use to encrypt the archive, with a minimum length of 8 characters.
It removes the original .aarch file and creates a new one with the encrypted data, with extension .aarch.enc.
Note
The encryption is done using the AES-256-GCM algorithm, and it only works for angel archives.
Decrypting an archive:
$ aar decrypt -f archive.aarch.enc
Password: <password>
Confirm password: <password>Where <password> is the password you used to encrypt the archive.
It removes the encrypted .aarch.enc file and creates a new one with the decrypted data, with extension .aarch.
Note
The decryption is done using the AES-256-GCM algorithm, and it only works for encrypted angel archives.
The archive file starts with a header that contains the following:
- Magic: A 4-byte sequence that identifies the file as an Angel Archive. The sequence is "AAR?" (0x41 0x41 0x52 0x3F)."
- Header length: A 4-byte integer that specifies the length of the header in bytes.
- Files: A list of files that are included in the archive. Each file entry contains the following:
- Name length: A 2-byte integer that specifies the length of the file name in bytes.
- Name: The name of the file.
- Offset: A 4-byte integer that specifies the offset of the file data in the archive.
- Length: A 4-byte integer that specifies the length of the file data in bytes.
Example:
0x41 0x41 0x52 0x3F // Magic
0x1A 0x00 0x00 0x00 // Header length (26 bytes)
0x08 0x00 // Name length (8 bytes)
"test.txt" // File name
0x00 0x00 0x00 0x1B // Offset (27 bytes)
0x0B 0x00 0x00 0x00 // Length (11 bytes)
... // Next go the file bytes
The files are stored sequentially after the header. Their raw bytes are xz-compressed before being saved to disk.