{"id":15712403,"url":"https://github.com/ovk/serp","last_synced_at":"2026-04-30T10:37:42.412Z","repository":{"id":87140231,"uuid":"220869759","full_name":"ovk/serp","owner":"ovk","description":"Command line tool to simplify creation of encrypted, compressed archives with parity information","archived":false,"fork":false,"pushed_at":"2019-11-12T01:50:31.000Z","size":9,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T18:27:20.050Z","etag":null,"topics":["archive","cli","encryption","linux","shell"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ovk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-11T00:19:02.000Z","updated_at":"2023-02-15T23:08:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"a5149c02-ab68-4169-8c86-26f2506f0275","html_url":"https://github.com/ovk/serp","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ovk/serp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovk%2Fserp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovk%2Fserp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovk%2Fserp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovk%2Fserp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ovk","download_url":"https://codeload.github.com/ovk/serp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovk%2Fserp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32462304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive","cli","encryption","linux","shell"],"created_at":"2024-10-03T21:16:01.074Z","updated_at":"2026-04-30T10:37:42.397Z","avatar_url":"https://github.com/ovk.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overview\n\n`serp` is a simple command line tool to help with creation of (se)cure (r)edundant (p)ackages.\n\nIt can package a directory full of files into encrypted and compressed archive file,\nwhile also producing checksum and parity (data redundancy) information\nthat can be used to detect data corruption and repair the file.\n\n`serp` also provides a convenient way to extract such archive into a directory.\n\n## Example\n\nLet's say there is a directory `~/taxes` full of files with some very sensitive information.\n\nTo create an archive with `serp` run:\n\n```\nserp -p ~/taxes\n```\n\nThis will create the following files in the current working directory:\n\n- `taxes.tar.gpg` - encrypted archive of the `~/taxes` directory.\n- `taxes.tar.gpg.sha1` - SHA1 checksum of the `taxes.tar.gpg` file.\n- `taxes.par.gpg.par2` and `taxes.par.gpg.vol00+XX.par2` (where `XX` is some number) -\nfiles with parity information that can be used to restore `taxes.tar.gpg`.\n\nTo extract `taxes.tar.gpg` into new `~/extracted_taxes` directory run:\n\n```\nserp -u ~/extracted_taxes -n taxes\n```\n\nThis will first check SHA1 sum of the `taxes.tar.gpg` and if its correct - extract the files.\nIf not, `serp` will print instructions on how to repair `taxes.tar.gpg` with PAR2 utility.\n\n\n## Rationale\n\nEncryption is essential for storing files containing sensitive information.\nHowever, encrypted files are very difficult (if not impossible) to restore in case of data corruption\nthat may happen during long term storage (bit rot) or storage on unreliable media.\n\nBackups won't protect against this scenario, as corrupted data will be backed up and thus\noriginal data could be eventually lost (unless there are backups available prior to data corruption).\n\nOne way to solve this issue is to produce parity information that can be used to\nrepair the files in case of data corruption.\n\n## Implementation\n\n`serp` is implemented as a POSIX compliant shell script that provides simple interface to\npack/unpack data to/from encrypted archive with parity information.\n\n`serp` doesn't really have any logic on its own and is merely a convenient wrapper around the following tools:\n\n- `TAR`: used to package contents of a given directory into a single file.\n- `GPG`: used to encrypt and compress tar file.\n- `sha1sum`: used to calculate and verify SHA1 sum of the encrypted archive.\n- `PAR2`: used to generate parity information for the encrypted archive.\n\n### Compression\n\nThe default GPG compression is applied, which is ZIP at compression level 6.\n\n### Encryption\n\nArchive is symmetrically encrypted using AES256 algorithm.\nYou will be prompted for a password for encryption/decryption.\n\n# Installation\n\nDownload latest release, extract and run:\n\n```\nmake install\n```\n\nTo uninstall, run:\n\n```\nmake uninstall\n```\n\n## Dependencies\n\nThe following dependencies needs to be installed manually: `TAR`, `GPG`, `sha1sum` and `PAR2`.\n\n### Debian and Ubuntu\n\nRun:\n\n```\nsudo apt install coreutils tar gpg par2\n```\n\n### Archlinux\n\nRun:\n\n```\nsudo pacman -S coreutils tar gnupg par2cmdline\n```\n\n### CentOS, Fedora, RHEL\n\nRun:\n\n```\nsudo yum install coreutils tar gnupg par2cmdline\n```\n\n# Usage\n\nAfter installation run `man 1 serp` for the full manual.\n\nAlternatively, run `serp -h`.\n\n# License\n\nMIT License (see LICENSE file).\n\nThe software is provided \"AS IS\", WITHOUT WARRANTY of any kind.\nAuthors and contributors of the software are not responsible in any way for any data corruption or loss that may occur.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovk%2Fserp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovk%2Fserp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovk%2Fserp/lists"}