{"id":15559334,"url":"https://github.com/gabrielfalcao/rustic-toolz","last_synced_at":"2025-07-17T22:36:27.216Z","repository":{"id":66789352,"uuid":"437475402","full_name":"gabrielfalcao/rustic-toolz","owner":"gabrielfalcao","description":"crabby command-line tools","archived":false,"fork":false,"pushed_at":"2023-01-24T05:56:16.000Z","size":63,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-01T14:23:22.982Z","etag":null,"topics":["aes","aes-256","aes-cbc-encryption","aes-encryption","ansi","command-line","command-line-tools","rust","rust-lang"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabrielfalcao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-12-12T06:58:20.000Z","updated_at":"2023-03-04T18:01:09.000Z","dependencies_parsed_at":"2023-03-25T23:34:08.178Z","dependency_job_id":null,"html_url":"https://github.com/gabrielfalcao/rustic-toolz","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gabrielfalcao/rustic-toolz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Frustic-toolz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Frustic-toolz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Frustic-toolz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Frustic-toolz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrielfalcao","download_url":"https://codeload.github.com/gabrielfalcao/rustic-toolz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Frustic-toolz/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265672372,"owners_count":23808845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["aes","aes-256","aes-cbc-encryption","aes-encryption","ansi","command-line","command-line-tools","rust","rust-lang"],"created_at":"2024-10-02T15:45:23.185Z","updated_at":"2025-07-17T22:36:27.007Z","avatar_url":"https://github.com/gabrielfalcao.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rustic-toolz 🦀 🛠  🔐 ⚡️ ✨\n\n[![CI](https://github.com/gabrielfalcao/rustic-toolz/actions/workflows/rust.yml/badge.svg)](https://github.com/gabrielfalcao/rustic-toolz/actions/workflows/rust.yml)\n\n\n## Developing\n\n### \"Unit\" Testing\n\n```bash\ncargo test\n```\n\n### \"End-to-end\" Testing\n\n```bash\nmake test\n```\n\n\n### Building\n\n```bash\ncargo build --release\n```\n\n\n## Installing\n\n```\ncargo build --release\ncp target/release/slugify-filenames /usr/local/bin/\ncp target/release/aes-256-cbc /usr/local/bin/\n```\n\n\n## Command-line tools\n\n\n### `slugify-filenames`\n\nSlugifies a list of files or glob.\n\n```man\nUSAGE:\n    slugify-filenames [FLAGS] [target]...\n\nFLAGS:\n    -i, --case-insensitive    match glob case insensitive\n    -n, --dry-run\n    -h, --help                Prints help information\n    -D, --include-hidden      include hidden files\n    -r, --recursive           recurse directories\n    -s, --silent\n    -V, --version             Prints version information\n    -v, --verbose\n\nARGS:\n    \u003ctarget\u003e...    a glob pattern [default: *]\n```\n\n### `aes-256-cbc`\n\n\n- Performs aes-256-cbc encryption and decryption.\n- PBKDF2 HMAC 256 for password-based key derivation with configurable number of cycles.\n\n\n\n#### Example YAML configuration\n\n**~/.rustic-toolz.yaml**\n\nConfigure PBKDF2 iteration count for each key material type to custom numbers.\nHigher numbers means that keys will take longer to generate and are safer.\n\n```yaml\ncycles:\n  key: 500\n  salt: 300\n  iv: 1200\n```\n\u003e NOTE: Keys created with a different combination of cycles cannot be derived again.\n\n#### Generating a key file based on password\n\nThis step is optional if you want to provide a password in every encryption/decryption process.\n\n**`-k` or `--key-filename`**\n\u003e Path to the key file where the key file will be stored.\n\n**`-p` or `--ask-password`**\n\u003e Input the password safely with confirmation\n\n**`-P` or `--password`** `\u003cpassword\u003e`\n\u003e Input the password as command-line argument.\n\n##### Example\n\n```bash\naes-256-cbc generate \\\n    --key-filename ~/.personal-aes-key.yml \\\n    --ask-password\n```\n\n[![asciicast](https://asciinema.org/a/ogEf12HY2ngDb0CzoelLhlOBt.svg)](https://asciinema.org/a/ogEf12HY2ngDb0CzoelLhlOBt)\n\n\n#### `aes-256-cbc encrypt`\n\n\n**`-k` or `--key-filename`**\n\u003e Path to the key file where the key file used for encryption. Required unless `--ask-password` is used.\n\n**`-p` or `--ask-password`**\n\u003e Input the encryption password safely with confirmation. Required unless `--password` is used.\n\n**`-P` or `--password`** `\u003cpassword\u003e`\n\u003e Input the encryption password as command-line argument. Required unless `--key-filename` is used.\n\n**`-i` or `--input-filename`** `\u003cfilename\u003e`\n\u003e The plaintext file\n\n**`-o` or `--output-filename`** `\u003cfilename\u003e`\n\u003e The file where the encrypted (cyphertext) will be stored. (pass the same as the input filename to replace the file)\n\n\n##### Example: Encrypting file using password\n\n```bash\naes-256-cbc encrypt \\\n    --password 'I \u003c3 Nickelback XOXO' \\\n    --input-filename=Cargo.toml --output-filename=Cargo.toml.aes\n```\n\n[![asciicast](https://asciinema.org/a/lIZWbm1SIvNjdl5ZI0DeYlo4T.svg)](https://asciinema.org/a/lIZWbm1SIvNjdl5ZI0DeYlo4T)\n\n\n##### Example: Decrypting file using password\n\n```bash\naes-256-cbc decrypt \\\n    --password 'I \u003c3 Nickelback XOXO'  \\\n    --input-filename=Cargo.toml.aes --output-filename=Cargo.toml\n```\n\n[![asciicast](https://asciinema.org/a/zr6wKh4psf25bYhzlqDcJfppe.svg)](https://asciinema.org/a/zr6wKh4psf25bYhzlqDcJfppe)\n\n##### Example: encrypt file using pre-generated key\n\n```bash\naes-256-cbc encrypt \\\n    --key-filename ~/.personal-aes-key.yml \\\n    --input-filename=Cargo.toml --output-filename=Cargo.toml.aes\n```\n\n[![asciicast](https://asciinema.org/a/rCPLPZrGHwUQYTbFR8tDZPCRn.svg)](https://asciinema.org/a/rCPLPZrGHwUQYTbFR8tDZPCRn)\n\n\n##### Example: Decrypting file using a key file\n\n\n**`-k` or `--key-filename`**\n\u003e Path to the key file where the key file used for decryption. Required unless `--ask-password` is used.\n\n**`-p` or `--ask-password`**\n\u003e Input the decryption password safely with confirmation. Required unless `--password` is used.\n\n**`-P` or `--password`** `\u003cpassword\u003e`\n\u003e Input the decryption password as command-line argument. Required unless `--key-filename` is used.\n\n**`-i` or `--input-filename`** `\u003cfilename\u003e`\n\u003e The encrypted (cyphertext) file to be decrypted\n\n**`-o` or `--output-filename`** `\u003cfilename\u003e`\n\u003e The file where the decrypted (plaintext) will be stored. (pass the same as the input filename to replace the file)\n\n\n```bash\naes-256-cbc decrypt \\\n    --key-filename ~/.personal-aes-key.yml \\\n    --input-filename=Cargo.toml.aes --output-filename=Cargo.toml\n```\n\n[![asciicast](https://asciinema.org/a/Wp4Q5PTDbFHDptYiYW9dRwGxd.svg)](https://asciinema.org/a/Wp4Q5PTDbFHDptYiYW9dRwGxd)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielfalcao%2Frustic-toolz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrielfalcao%2Frustic-toolz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielfalcao%2Frustic-toolz/lists"}