{"id":21898330,"url":"https://github.com/aetherinox/xsum-hash-utility","last_synced_at":"2026-01-21T09:32:32.301Z","repository":{"id":218296596,"uuid":"746085021","full_name":"Aetherinox/xsum-hash-utility","owner":"Aetherinox","description":"Program for Windows which helps you generate, verify, and sign hash digests for your project using GPG integration. Supports algorithms such as SHA-2, SHA-3, CRC, Blake2b, Blake2s, etc.","archived":false,"fork":false,"pushed_at":"2024-10-26T00:08:24.000Z","size":5822,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-09T13:03:00.516Z","etag":null,"topics":["argon2","blake2b","blake2s","checksum","checksum-calculation","checksum-generator","checksum-validator","crc","crc-algorithms","crc16","crc32","hash","hash-digest","hashing","sha-2","sha-256","sha-512","sha256","sha3","sha512"],"latest_commit_sha":null,"homepage":"https://sourceforge.net/projects/xsum-hash-utility/","language":"C#","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/Aetherinox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["https://buymeacoffee.com/aetherinox"],"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null}},"created_at":"2024-01-21T02:07:19.000Z","updated_at":"2024-10-26T00:08:28.000Z","dependencies_parsed_at":"2024-01-21T03:22:14.199Z","dependency_job_id":"ae246166-62c4-479f-8641-192e98132ab1","html_url":"https://github.com/Aetherinox/xsum-hash-utility","commit_stats":null,"previous_names":["aetherinox/xsum","aetherinox/xsum-shahash-utility","aetherinox/xsum-hash-utility","aetherinaux/xsum-hash-utility"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Aetherinox/xsum-hash-utility","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aetherinox%2Fxsum-hash-utility","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aetherinox%2Fxsum-hash-utility/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aetherinox%2Fxsum-hash-utility/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aetherinox%2Fxsum-hash-utility/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aetherinox","download_url":"https://codeload.github.com/Aetherinox/xsum-hash-utility/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aetherinox%2Fxsum-hash-utility/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28631146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["argon2","blake2b","blake2s","checksum","checksum-calculation","checksum-generator","checksum-validator","crc","crc-algorithms","crc16","crc32","hash","hash-digest","hashing","sha-2","sha-256","sha-512","sha256","sha3","sha512"],"created_at":"2024-11-28T14:25:59.985Z","updated_at":"2026-01-21T09:32:32.274Z","avatar_url":"https://github.com/Aetherinox.png","language":"C#","funding_links":["https://buymeacoffee.com/aetherinox"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Aetherinox/xsum-hash-utility/main/Docs/images/banner.png\" width=\"860\"\u003e\u003c/p\u003e\n\u003ch1 align=\"center\"\u003e\u003cb\u003exSum Hash Utility\u003c/b\u003e\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Version](https://img.shields.io/github/v/tag/Aetherinox/xsum-shahash-utility?logo=GitHub\u0026label=version\u0026color=ba5225) ![Downloads](https://img.shields.io/github/downloads/Aetherinox/xsum-shahash-utility/total) ![Repo Size](https://img.shields.io/github/repo-size/Aetherinox/xsum-shahash-utility?label=size\u0026color=59702a) ![Last Commit)](https://img.shields.io/github/last-commit/Aetherinox/xsum-shahash-utility?color=b43bcc) [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FAetherinox%2Fxsum-hash-utility\u0026count_bg=%2379C83D\u0026title_bg=%23555555\u0026icon=\u0026icon_color=%23E7E7E7\u0026title=views\u0026edge_flat=false)](https://hits.seeyoufarm.com)\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n\n- [About](#about)\n  - [Supported Algorithms](#supported-algorithms)\n  - [What Is A Hash Digest](#what-is-a-hash-digest)\n- [Arguments](#arguments)\n  - [Main Arguments](#main-arguments)\n  - [Sub Arguments](#sub-arguments)\n  - [Other Arguments](#other-arguments)\n- [Syntax](#syntax)\n    - [`--generate`](#--generate)\n    - [`--verify`](#--verify)\n    - [`--sign`](#--sign)\n    - [`--target`](#--target)\n    - [`--digest`](#--digest)\n    - [`--algorithm`](#--algorithm)\n    - [`--output`](#--output)\n    - [`--overwrite`](#--overwrite)\n    - [`--progress`](#--progress)\n    - [`--lowercase`](#--lowercase)\n    - [`--clipboard`](#--clipboard)\n    - [`--exclude`](#--exclude)\n    - [`--key`](#--key)\n    - [`--clearsign`](#--clearsign)\n    - [`--detachsign`](#--detachsign)\n- [Features](#features)\n  - [Help Menu](#help-menu)\n  - [Target Types](#target-types)\n  - [Automatic Checking](#automatic-checking)\n  - [Benchmark](#benchmark)\n    - [Standard Benchmark](#standard-benchmark)\n    - [Algorithm Stress Test Benchmark](#algorithm-stress-test-benchmark)\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n\u003e [!NOTE]\n\u003e This utility is currently in development. Not all features are complete. If you see some aspect of the code that could be improved, you're more than welcome to commit. All code will be reviewed before it is accepted.\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n# About\n\nThis utility allows you to generate, sign, and validate checksums.\n\nWhile there are numerous apps available for doing things such as this; I need a tool that was very specific, and allowed for this to all be done very easily without complicated excessive options.\n\n\u003cbr /\u003e\n\n## Supported Algorithms\nCurrently, the following algorithms are suppported. More are planned for later.\n\n| Algorithm | Family | Notes | \n| --- | --- | --- |\n| `CRC` | 8, 16, 32 | |\n| `MD5` | MD5 | |\n| `SHA-1` | SHA-1 | |\n| `SHA-2` | 256, 384, 512 | |\n| `SHA-3` | 128, 224, 256, 384, 512 | |\n| `Blake2b` | 128, 160, 256, 384, 512 | |\n| `Blake2s` | 128, 160, 256, 384, 512 | |\n| `Argon2` | argon2i, argon2d | Strings Only |\n\n\u003cbr /\u003e\n\nFor a list of supported algorithms, type\n\n```shell\nxsum\n```\n\n\u003cbr /\u003e\n\nSupports specifying algorithms with and without hyphens:\n\n```shell\nxsum --generate \"MyFolder\" --algo sha3-256\nxsum --generate \"MyFolder\" --algo sha3256\n```\n\n\u003cbr /\u003e\n\n## What Is A Hash Digest\nWhen using `--generate`, a hash digest will be created which contains a list of all the files you have targeted.  When that digest is generated, it will be created as a file named depending on what hash algorithm you specified.\n\nYou may either specify your own name for the hash digest, or let the utility pick a name.\n\nIf you generated a hash digest using `SHA512` and did not specify  `--digest \u003cFILE\u003e`, your hash digest will be generated as `SHA512.txt`.\n\nWhen you open the hash digest in a text editor, you will see something similar to the following:\n\n```\nd63ba16a664619c2dc4eb2aeef2a2e64cbc7931b831e0adf1c2275ee08e8fd47  example_file_1.txt\ndfb8dacbd53eac730814ef2e9f74a47efabe5cb2a5e458bcad6380ae4c1f1f59  example_file_2.txt\n9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  sample_zip_1.zip\n60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752  README.md\n```\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n# Arguments\nThe following is a description of all the arguments associated with this utility.\n\n\u003cbr /\u003e\n\n## Main Arguments\nThe following arguments are considered the **primary** arguments of this utility.\n\n\u003cbr /\u003e\n\n| Argument | Description |\n| --- | --- |\n| ![Generate](https://img.shields.io/badge/Generate-%7F--g%2C%20%20%20----generate%7F-%2349649c?style=for-the-badge\u0026labelColor=%23354b77\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=27) | Generate a new hash digest from the `--target \u003cFILE\u003e` |\n| ![Verify](https://img.shields.io/badge/Verify-%7F%E2%A0%80%20--v%2C%20%20%20----verify%E2%A0%80%7F-%2349649c?style=for-the-badge\u0026labelColor=%23354b77\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=48) | Verify existing digest and compare folder with `--target \u003cFILE\u003e` |\n| ![Sign](https://img.shields.io/badge/Sign-%7F%E2%A0%80%E2%A0%80%20%20--s%2C%20%20----sign%E2%A0%80%7F%E2%A0%80-%2349649c?style=for-the-badge\u0026labelColor=%23354b77\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=60) | Signs an existing hash digest using GPG |\n\n\u003cbr /\u003e\n\n## Sub Arguments\nAlong with the main features listed above, the following sub-arguments can be used to configure out xsum works for you:\n\n\u003cbr /\u003e\n\n| Argument | Description |\n| --- | --- |\n| ![Help](https://img.shields.io/badge/Help-%7F%E2%A0%80%E2%A0%80%E2%A0%80%20--h%2C%20----help%E2%A0%80%E2%A0%80%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=59) | Display help information |\n| ![Target](https://img.shields.io/badge/Target-%E2%A0%80%E2%A0%80--t%2C%20----target%20%E2%A0%80%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=42) | Target folder or file to generate / verify hash for |\n| ![Digest](https://img.shields.io/badge/Digest-%E2%A0%80%E2%A0%80--d%2C%20----digest%20%E2%A0%80%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=44) | Hash digest which contains list of generated hashes |\n| ![Algo](https://img.shields.io/badge/Algorithm-%7F%7F--a%2C%20----algorithm%7F%7F-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=18) | Algorithm used to generate or verify hash |\n| ![Output](https://img.shields.io/badge/Output-%E2%A0%80%E2%A0%80--o%2C%20----output%E2%A0%80%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=42) | Output log file for tasks |\n| ![Overwrite](https://img.shields.io/badge/Overwrite-%7F%7F--w%2C%20----overwrite-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=17) | Overwrite results to `--output` instead of append |\n| ![Progress](https://img.shields.io/badge/Progress-%E2%A0%80--p%2C%20----progress%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=25) | Displays progress info for each task step |\n| ![Lowercase](https://img.shields.io/badge/Lowercase---l%2C%20----lowercase%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=15) | Match and output hash value(s) in lower case instead of upper case |\n| ![Clipboard](https://img.shields.io/badge/Clipboard-%E2%A0%80--c%2C%20----clipboard-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=20) | Copies the output hash value to clipboard. |\n| ![Clear](https://img.shields.io/badge/Clear-%7F%E2%A0%80%E2%A0%80--CL%2C%20----clear%E2%A0%80%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=54) | Clear console before each command executes |\n| ![Exclude](https://img.shields.io/badge/Exclude-%E2%A0%80%E2%A0%80%7F--e%2C%20----exclude%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=34) | Exclude files not hashed with `-g` and `-v` |\n| ![GPG Key](https://img.shields.io/badge/GPG%20Key-%E2%A0%80%E2%A0%80%20%E2%A0%80--k%2C%20----key%E2%A0%80%E2%A0%80%E2%A0%80%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=37) | GPG key to use signing digests with --sign |\n| ![Clearsign](https://img.shields.io/badge/Clearsign-%7F--r%2C%20----clearsign%E2%A0%80-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=21) | Sign the hash digest using GPG with a clear signature |\n| ![DetachSign](https://img.shields.io/badge/DetachSign---n%2C%20----detachsign-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=10) | Sign the hash digest using GPG with a detached signature |\n| ![Benchmark](https://img.shields.io/badge/Benchmark-%7F--b%2C%20----benchmark%7F-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=15) | Perform benchmarks on a specific algorithm or all. |\n| ![Iterations](https://img.shields.io/badge/Iterations-%20%20%7F%7F--i%2C%20----iterations%7F%7F%20%20-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=14) | Number of iterations to perform for `--benchmark` |\n| ![Buffer](https://img.shields.io/badge/Buffer-%7F%E2%A0%80%E2%A0%80--f%2C%20----buffer%E2%A0%80%E2%A0%80%7F-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=44) | Buffer size to use for `--benchmark` |\n| ![Debug](https://img.shields.io/badge/Debug-%7F%E2%A0%80%E2%A0%80--z%2C%20%20----debug%E2%A0%80%E2%A0%80%7F-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=48) | Debugging information |\n\n\u003cbr /\u003e\n\n## Other Arguments\nThe following are a list of extra functionality:\n\n\u003cbr /\u003e\n\n| Argument | Description |\n| --- | --- |\n| ![Excludes](https://img.shields.io/badge/Excludes---x%2C%20----excludes-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=28) | Print list of out-of-box excluded files |\n| ![List Keys](https://img.shields.io/badge/List%20Keys---y%2C%20----list--keys-%23fc0352?style=for-the-badge\u0026labelColor=%23990836\u0026logo=data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\u0026logoWidth=28) | Prints all of the GPG keys in your keyring |\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n# Syntax\nThis utility attempts to be semi \"smart\" in the aspect that you can execute commands in various different ways. The reason for this is because out of the other hashing tools out there, we try to use a similar syntax for this utilities' commands so that there's very little in means of transitioning, and to make it more comfortable.\n\n\u003cbr /\u003e\n\n### `--generate`\nCompute hash for folder, files, or strings and generate new hash digest\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe `--generate` argument allows you to create a new hash digest from the target folder. This argument requires you to specify a target file or folder using one of the following ways:\n\n\u003cbr /\u003e\n\n| Expects | Description |\n| --- | --- |\n| `--generate Path\\To\\Folder` | Folder to generate hash digest for |\n| `--generate --target Path\\To\\Folder` | Same as above\n| `--generate Path\\To\\File.xxx` | File to generate hash digest for |\n| `--generate --target Path\\To\\File.xxx` | Same as above\n\n\u003cbr /\u003e\n\nThe following commands all do the same action:\n\n```C#\nxsum --generate --target \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\nxsum --generate \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\n```\n\n```C#\nxsum --verify --target \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\nxsum --verify \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\n```\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--verify`\nThe `--verify` argument allows you to verify an existing hash digest with the source files as they are on your system.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nTo verify a hash digest, you need:\n- Files for the project with the hash digest\n- Hash digest\n\n\u003cbr /\u003e\n\nA **hash digest** is usually one of the following files:\n- CRC*.txt\n- MD5.txt\n- SHA*.txt\n- SHA3*.txt\n- BLAKE*.txt\n\n\u003cbr /\u003e\n\nInside the hash digest is a list of every file associated with the project, as well as the hash for that file, such as the following:\n\n```shell\nd63ba16a664619c2dc4eb2aeef2a2e64cbc7931b831e0adf1c2275ee08e8fd47  Project Folder 1/myfile.txt\ndfb8dacbd53eac730814ef2e9f74a47efabe5cb2a5e458bcad6380ae4c1f1f59  Project Folder 2/example_file_2.txt\n9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  Project File 1.xxx\n5FD924625F6AB16A19CC9807C7C506AE1813490E4BA675F843D5A10E0BAACDB8  Project File 2.xxx\n```\n\n\u003cbr /\u003e\n\nTo verify a hash digest against the actual files, execute the following:\n\n```shell\nxsum --verify --target \"Project Folder Name\" --digest SHA256.txt\n```\n\n\u003cbr /\u003e\n\nIf you have `xsum.exe` in the root project folder where the project files and hash digest exist, then you can execute:\n\n```shell\nxsum --verify --digest SHA256.txt\n```\n\n\u003cbr /\u003e\n\nIf you do not specify `--target`, xSum will automatically use the directory you are executing xsum.exe from.\n\n\u003cbr /\u003e\n\n```\n📁 Project Folder 1\n📁 Project Folder 2\n📄 Project File 1.xxx\n📄 Project File 2.xxx\n📄 SHA256.txt\n🗔 xsum.exe\n```\n\n\u003cbr /\u003e\n\nThe aboe file structure will allow you to verify all project folders and files.\n\n\u003cbr /\u003e\n\nThen a project is successfully verified, you will receive the following:\n\n```\n\u003e xsum --verify --digest SHA256.txt\n\n Lowercase:     Disabled\n Clipboard:     Disabled\n\n Using \"sha256\" to verify hash of Folder \"H:\\xSum\"\n Successfully verified Folder H:\\xSum in digest SHA256.txt\n```\n\n\u003cbr /\u003e\n\nIf you are not using SHA256, then you will need to specify the hash algorithm:\n\n```shell\nxsum --verify --digest MD5.txt --algo md5\n```\n\n\u003cbr /\u003e\n\n**Remember**: xSum verifies a hash digest using UPPER CASE characters. If your hash digest contains hashes in lower case, you must use:\n\n```shell\nxsum --verify --digest SHA256.txt --lowercase\n```\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--sign`\nThe `--sign` argument allows you to sign a hash digest using a specified GPG key.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThis feature requires that you have [GPG](https://gnupg.org/download/) installed on your device, and added to your Windows Environment Variables. You can also install [Gpg4Win](https://www.gpg4win.org/).\n\n\u003cbr /\u003e\n\nTo sign a hash digest with your GPG key, open command prompt and use `--generate` to generate your hash digest.\n\n\u003cbr /\u003e\n\nIf you navigate to the folder where the project files are, you do not need to specify a `--target`. It will automatically use the current directory as the target path.\n\n```shell\nxsum --generate --algo SHA256 --lowercase\n```\n\n\u003cbr /\u003e\n\nThe command above will generate a new file named `SHA256.txt` and all hashes will be **lowercase**. After the new file is created, you can now sign it with GPG by running:\n\n```shell\nxsum --sign --key ABCD1234 --clearsign\n```\n\n\u003cbr /\u003e\n\nThe above command will sign **SHA256.txt** using the GPG key **ABCD1234** with a **Clear Signature**. A new file will then be created which is named `SHA256.txt.asc`.\n\nIf you do not specify a signature type ( `--clearsign` or `--detachsign` ), then it will default to generating a **Clear signature**.\n\n\u003cbr /\u003e\n\nIf you wish to sign with a detached signature, execute:\n\n```shell\nxsum --sign --key ABCD1234 --detachsign\n```\n\n\u003cbr /\u003e\n\nTo specify a target location to sign, execute:\n\n```shell\nxsum --sign --target \"X:\\Path\\To\\Folder\\\" --key ABCD1234 --detachsign\n```\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--target`\nTarget folder or file to generate / verify hash for\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe **Target** is the file or folder you wish to either generate a hash for, or verify an existing hash.\n\nThis can be defined either by specifying the file or folder directly after using `--target`, or directly after the main command.\n\n\u003cbr /\u003e\n\n| Expects | Description |\n| --- | --- |\n| `--target Path\\To\\FILE.xxx` | File to create / verify a digest for |\n| `--target Path\\To\\FOLDER` | Folder to create / verify a digest for. All files in folder will be added to digest. |\n| `--target STRING` | Creates an SHA hash for a string and prints to console. |\n\n\u003cbr /\u003e\n\nThe following commands all do the same action:\n\n```C#\nxsum --verify --target \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\nxsum --generate --target \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\n```\n\n```C#\nxsum --verify \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\nxsum --generate \"X:\\Path\\To\\ExampleFile.zip\" --algo sha256 --digest SHA256.sig\n```\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--digest`\nHash digest which contains list of generated hashes\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe `--digest \u003cFILE\u003e` argument tells xsum either where your current digest is if you're using `-verify`, or where you want a new digest to be created if you are using `--generate`.\n\n\u003cbr /\u003e\n\n| Expects | Description |\n| --- | --- |\n| `--digest Path\\To\\FILE.xxx` | The file to use as the hash digest for verifying |\n\n\u003cbr /\u003e\n\nIf you use `--generate` and do not define a hash digest, one will be generated and placed in the folder where the hashes were made, using the structure `[AlgorithmName].txt`\n\nIf you execute:\n```C#\nxsum --generate \"X:\\Path\\To\\ExampleFile.zip\" --algo SHA512\n```\n\nThe hash digest will be saved as `SHA512.txt`.\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--algorithm`\nAlgorithm used to verify `--digest`\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe `--algorithm \u003cHASH\u003e` argument specifies which algorithm to use for generation or verification.\n\n\u003cbr /\u003e\n\nAvailable Algorithms:\n\n| Algorithm | Command |\n| --- | --- |\n| `--algorithm md5` | MD5 |\n| `--algorithm sha1` | SHA-1 |\n| `--algorithm sha256` | SHA-256 |\n| `--algorithm sha384` | SHA-384 |\n| `--algorithm sha512` | SHA-512 |\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--output`\nOutput file which displays detailed information about each task.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe `--output` argument is an optional parameter which allows you to define a file where the results of your generated or verified results will be placed.\n\nThe information provided by `--output` is different than the output to the hash digest using `--digest`.\n\nThe hash digest contains a list of each target file and its corresponding hash. However, the output file will display step-by-step of what is going on when the hashes are generated.\n\n\u003cbr /\u003e\n\n| Expects | Description |\n| --- | --- |\n| `--output Path\\To\\Output.txt` | The file to output results to |\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--overwrite`\nOverwrite results to `--output` instead of append\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nWhen used in combination with `--output`, this argument will force the utility to overwrite any existing output files. If you do not specify `--overwrite`, then your current task's results will be appended to any existing result files that may have been generated from previous tasks.\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--progress`\nDisplays in-depth information about the utility's progress during a task, as well as the checksum for each file being processed.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe `--progress` argument allows you to see a more detailed report about what xSum is doing.\n\nWithout this argument, you will see a simple message stating whether or not your hash digest was successfully verified, or that your new digest has been created.\n\nHowever, when using this argument, you will see a larger collection of messages.\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003csub\u003e--progress enabled\u003c/sub\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/3.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003csub\u003e--progress disabled\u003c/sub\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/4.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--lowercase`\nMatch and output hash value(s) in lower case instead of upper case.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nDuring normal operation when this utility is processing files, the hash that this utility generates is in upper-case characters. If your hash matches the one in the digest but has different casing, then the verification will fail. The casing of your digest hash, and the hash that the utility generates must be the exact same.\n\nWithout the argument `--lowercase`, the following verification will **fail**:\n\n```\nd63ba16a664619c2dc4eb2aeef2a2e64cbc7931b831e0adf1c2275ee08e8fd47  filename.zip\n```\n\n```\nD63BA16A664619C2DC4EB2AEEF2A2E64CBC7931B831E0ADF1C2275EE08E8FD47\n```\n\n\u003cbr /\u003e\n\nThis argument will transform all hashes to lowercase, both the hash produced by the utility, and the hashes in your digest, which will allow them to match as long as the hash characters are the same.\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--clipboard`\nCopies the output hash value to clipboard.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nWhen the argument `--clipboard` is specified, the results of a task will be copied to your clipboard.\n\n\u003cbr /\u003e\n\n\u003e [!NOTE]\n\u003e When targeting a folder to generate a hash, the hash of the folder itself will be copied to your clipboard, not the individual files.\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--exclude`\nThe `--exclude` argument gives you the ability to filter out files that should not be included when your dash digest is created.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nIt allows for wildcard patterns so that you can match multiple files with one rule.\n\n\u003cbr /\u003e\n\n```\nd63ba16a664619c2dc4eb2aeef2a2e64cbc7931b831e0adf1c2275ee08e8fd47  example_file_1.txt\ndfb8dacbd53eac730814ef2e9f74a47efabe5cb2a5e458bcad6380ae4c1f1f59  example_file_2.txt\n9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  sample_zip_1.zip\n60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752  README.md\n```\n\n\u003cbr /\u003e\n\nAs an example, you could exclude the files `example_file_1.txt` and `example_file_2.txt` from being hashed by utilizing the `*` wildcard:\n\n\u003cbr /\u003e\n\n```shell\n--exclude *.txt\n```\n\n\u003cbr /\u003e\n\nFor multiple exclusions, append additional `--exclude` to the end of your command:\n\n```shell\n--exclude *.txt --exclude *D*\n```\n\n\u003cbr /\u003e\n\nWith the above rules in place, any file ending with `.txt` will be excluded, and the rule `*D*` will exclude the file `README.md` since it has a `D` in the name.\n\n```\n9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  sample_zip_1.zip\n```\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--key`\nThis argument defines which GPG key to use signing digests with `--sign`.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nxSum gives the ability to sign your hash digest using a **GPG Key**. This command does require that you have GPG installed on your system and added to your Windows Environment Variables.\n\n\u003cbr /\u003e\n\n```\nxsum --sign --target SHA256.txt --key ABCD1234\n```\n\n\u003cbr /\u003e\n\nThe above command will use GPG key `ABCD1234` to sigh the hash digest file in the current directory with a **Detached Signature**. In return, you will see a new file:\n\n- **SHA256.txt.asc**\n\n\u003cbr /\u003e\n\nYou can specify either `--detachsign` or `--clearsign`. If you want to sign your hash digest with a detached signature, execute:\n\n```shell\nxsum --sign --target SHA256.txt --key ABCD1234 --detachsign\n```\n\n\u003cbr /\u003e\n\nIn return, you will see a new file:\n\n- **SHA256.txt.sig**\n\n\u003cbr /\u003e\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--clearsign`\nThe `--clearsign` argument creates a clearsign signature using GPG.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nA clearsign signature wraps both the data and the signature into an ASCII-armored signature.\n\n\u003cbr /\u003e\n\nA digital signature certifies and timestamps a document. If the document is subsequently modified in any way, a verification of the signature will fail. A digital signature can serve the same purpose as a hand-written signature with the additional benefit of being tamper-resistant. The GnuPG source distribution, for example, is signed so that users can verify that the source code has not been modified since it was packaged.\n\n\u003cbr /\u003e\n\nWhen trying to clearsign a document using the GPG command-line, you could execute the following:\n\n```\ngpg -default-key \u003cXXXXXXXX\u003e --armor --clearsign \u003cFILE\u003e\n```\n\n\u003cbr /\u003e\n\nxSum does this automatically without the need of using GPG. But you must have GPG installed on your system.\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### `--detachsign`\nThe `--detachsign` argument creates a detached signature file using GPG.\n\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003csub\u003eRead More\u003c/sub\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThis creates a separate signature file that is used to verify the original message if desired. In its simplest form, this file contains a hash of the original file data and is encrypted with the private key. Anyone with the public key can open the detached signature and then compare hashes to verify the integrity of the signed file.\n\n\u003cbr /\u003e\n\nWhen trying to create a detached signature for a document using the GPG command-line, you could execute the following:\n\n```\ngpg --default-key \u003cXXXXXXXX\u003e --armor --detach-sign \u003cFILE\u003e\n```\n\n\u003cbr /\u003e\n\nxSum does this automatically without the need of using GPG. But you must have GPG installed on your system.\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n# Features\nThe following features are highlighted to explain them in better detail:\n\n\u003cbr /\u003e\n\n## Help Menu\nWe've attempted to give the user as much info as possible to make using the program easier. You can access the main help / commands menu by typing:\n\n```shell\nxsum\nxsum /?\nxsum ?\n```\n\n\u003cbr /\u003e\n\nIf you need help on a specific command, type the argument like you normally would, but append a question mark `?` at the end, such as:\n```shell\nxsum --benchmark ?\n```\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003csub\u003eHelp menu for the command `benchmark`)\u003c/sub\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/7.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n## Target Types\nThis utility handles various different types of input:\n- Files\n- Folder\n- Strings\n\nIf your specified input is not detected as a valid file or folder, the utility will switch over to **String Mode**, which means that it will take the string you have provided, and return a hash for that string.\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003csub\u003eStandard string hashing (sha256)\u003c/sub\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/5.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003csub\u003eStandard string hashing (sha1)\u003c/sub\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/6.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n## Automatic Checking\nxSum will be typically launched using **Command Prompt** or **Powershell** and executing all xSum commands through one of those methods.\n\n\u003cbr /\u003e\n\nHowever, xSum has the ability to be launched as a regular executable. When you click on the xsum.exe executable, the utility will automatically go into **Verify Mode**. In order to utilize this mode, xsum.exe must be in the same folder as a hash digest file, which can be any of the following:\n\n- CRC.*.asc\n- MD5.*.asc\n- SHA1.*.asc\n- SHA256.*.asc\n- SHA384.*.asc\n- SHA512.*.asc\n- BLAKE.*.asc\n\n\u003cbr /\u003e\n\nOnce xSum finds the hash digest file, all of the files will be automatically checked.\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/8.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\nIf you attempt to run xsum.exe in a folder where a hash digest is not present, you will see the following screen:\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/9.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n## Benchmark\nxSum includes a **Benchmark** feature, which allows you to test the performance of the various different hashes.\n\n\u003cbr /\u003e\n\nThe benchmark functionality includes a few different modes:\n\n| Mode | Description | Example Command |\n| --- | --- | --- |\n| **Standard Benchmark** | Run each algorithm through a series of performance tests | `xsum.exe --benchmark --buffer 32000000 --iterations 50` |\n| **Algo Stress Test** | Stress the processing speeds of one particular algorithm. | `xsum --benchmark --algo md5 --iterations 100000` |\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### Standard Benchmark\nThis will test each algorithm by throwing a series of hashing tasks at it. The test will perform `2 Rounds` for each algorithm in order to ensure everything is properly warmed up.\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\nEach algorithm will be assessed using 4 methods:\n\n| Name | Method | Notes |\n| --- | --- | --- |\n| Unmanaged | `SHA*Cng` | |\n| Managed | `SHA*Managed` | Not available for `MD5` |\n| Crypto Service Provider (CSP) | `SHA*CryptoServiceProvider` | |\n| Create | `SHA*.Create` | |\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\nThis benchmark accepts two arguments:\n| Argument | Default | Min Value | Max Value | Description |\n| --- | --- | --- | --- | --- |\n| `--buffer` | `32000000` | `5242880` (5MB) | `512000000` (512MB) | Size of bytes to use in test |\n| `--iterations` | `50` | `1` | `500000` | Number of iterations for iteration test |\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n```C#\nxsum.exe --benchmark --buffer 32000000 --iterations 50\n```\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/1.png\"\u003e\u003c/p\u003e\n\n\u003cbr /\u003e\n\n### Algorithm Stress Test Benchmark\nThis test focuses on one specified algorithm when performing a series of tasks. The test will generate a large group of text and then hash that text in groups; progressively sampling larger sizes.\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\nThis benchmark accepts two arguments:\n| Argument | Default | Min Value | Max Value | Description |\n| --- | --- | --- | --- | --- |\n| `--algo` | `sha1` | - | - | The algorithm to perform the test for. |\n| `--iterations` | `100000` | `1` | `500000` | Number of characters to use in sample. |\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n```C#\nxsum.exe --benchmark --algo sha256 --iterations 100000\n```\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg style=\"width: 85%;text-align: center;border: 1px solid #353535;\" src=\"Docs/images/2.png\"\u003e\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faetherinox%2Fxsum-hash-utility","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faetherinox%2Fxsum-hash-utility","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faetherinox%2Fxsum-hash-utility/lists"}