This commit is contained in:
Christian Zangl 2023-12-20 00:09:50 +01:00
parent ce914ff1d9
commit 806ceb1706
No known key found for this signature in database
GPG Key ID: 6D468AC36E2A4B3D
7 changed files with 83 additions and 7 deletions

12
Pipfile Normal file
View File

@ -0,0 +1,12 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
blake3 = ">=0.3.4"
[dev-packages]
[requires]
python_version = "3.11"

57
Pipfile.lock generated Normal file
View File

@ -0,0 +1,57 @@
{
"_meta": {
"hash": {
"sha256": "7d9212dcb9d58ac73c0d12a14a5102e0d3df649c4e95913e5bc8846bdb8d710a"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.11"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"blake3": {
"hashes": [
"sha256:01787135e4003c41e9a07f6d83396a54bb1ace07758f0a4a8d446699ab18c489",
"sha256:0d53c8f129e4f76dba7c255633403c3fa8d390f61fa09ea7a530c987e2c62de6",
"sha256:13d4830e3c0d178784588594cb6f15b1c905efbb848db0f6be2519f87f2407ac",
"sha256:1a2671602aad7d2078ccb1c2d9b670dd7b4733a452898d77dc63472dea7b6933",
"sha256:22ae74485e0148be2a751e0689e74c345d209a12a8bc6332067f887cc46148c8",
"sha256:24868e2cb41feeb37286981afcc214242adfeba6a40ba773daf45168e80f76e0",
"sha256:25fce3f5f8b69c8655864cbc2a210c4df4779c8bedcc71ef0e45823c510b26ba",
"sha256:269e1f20c412c5cc28db3461f24dcc6f5915cdf1335538a7146d92af8f001bb3",
"sha256:29ae9df9b7f2a08935cf24a9b6637327ac988f1f26e54e6b1b137a00ec57a35e",
"sha256:42136484a1df1a8ba7efc901b44b8ff78b7d3c99f59fe109dad1c23d15c7e9a5",
"sha256:448bc6b96139c9061c6882c66d0dabf1bba354e01ac865f38bff1e5a9ad11748",
"sha256:4b7ef354144a2a19d7dbbfebce11735f68154e5190f9cc53825237bdb1bb78af",
"sha256:4e0c86416cb05bfbb90c6dcbe3d670bc3280791746374456b342114adb43253b",
"sha256:4ee1b49badfcddabe9f0c557105c0efa003043efea5573873f764d9726526c26",
"sha256:4fee299071879a2983bd7e5c560e303ef063238c557d6b11c5d59b03cad847ad",
"sha256:56f2bd6893139c468cf6f700ef34b16f33ed58b036d0f3d5aeb35c4a9a00fb98",
"sha256:5cedb4b5c69e5c35d96b6f567152358977f906b822b097c2113f8c355ce7885a",
"sha256:6628f15a8d6fe39c729f4924c44248f9caf3aecdaa110b69b1c09db5d42be5b1",
"sha256:772899b8cc1af8703956d9c4c175318fca64edede7f0a7379db3b515925e0f34",
"sha256:a1affb1fad469bc453e9e73f7335ece80c90bd4ef533f07ea643a91a89f71d0c",
"sha256:a3b3c3d596bc35bd6a56ea8554d3bc9ba3bdbc1edfa0a889a7cffd3925eaf18a",
"sha256:a871b60ffbc61b9b487ff7e8f9f918cc1da24cb5b87a58c983b3b242e665dedc",
"sha256:ae1b8e6d584231ad32fb39920e4044f38f6f2d85ce64c433fadd8baf6981b772",
"sha256:b59d62e3cb2d68b2318b53b5d08443e6693f428ddc6a1d7b423a266f9774a4f0",
"sha256:b9072cfa473ff3b659179bd6a600b6d07259221029d2d8d0595a576958e8bf16",
"sha256:bf2fa57a752364586739c2dcff4c604e745cee603ee43b24faa0d1369f8e7a81",
"sha256:c29a31f0e8eb5e34503296be966a54c0fe5ab34d57f9594bc761ffc549fc4d39",
"sha256:c8ea8fd94e0ee879ca623258b751f9427b3f20da228e55f1b491fedbdeb57ab8",
"sha256:d4626e6f0af151d157c1c9a03bb0bd65b5661c745c6cccef212f28c7ce7fc07b",
"sha256:e140c339873479bbc114456760ed1a7a28062c3ca7c54575a2a3ecc661efdb0e"
],
"index": "pypi",
"version": "==0.3.4"
}
},
"develop": {}
}

View File

@ -39,7 +39,7 @@ Run `chkbit -u PATH` to create/update the chkbit index.
chkbit will chkbit will
- create a `.chkbit` index in every subdirectory of the path it was given. - create a `.chkbit` index in every subdirectory of the path it was given.
- update the index with md5/sha512 hashes for every file. - update the index with md5/sha512/blake3 hashes for every file.
- report damage for files that failed the integrity check since the last run (check the exit status). - report damage for files that failed the integrity check since the last run (check the exit status).
Run `chkbit PATH` to verify only. Run `chkbit PATH` to verify only.
@ -55,7 +55,7 @@ positional arguments:
options: options:
-h, --help show this help message and exit -h, --help show this help message and exit
-u, --update update indices (without this chkbit will only verify files) -u, --update update indices (without this chkbit will only verify files)
--algo ALGO hash algorithm: md5, sha512 --algo ALGO hash algorithm: md5, sha512, blake3
-f, --force force update of damaged items -f, --force force update of damaged items
-i, --verify-index verify files in the index only (will not report new files) -i, --verify-index verify files in the index only (will not report new files)
-s, --skip-symlinks do not follow symlinks -s, --skip-symlinks do not follow symlinks
@ -123,7 +123,7 @@ When you run it again it first checks the modification time,
### I wish to use a stronger hash algorithm ### I wish to use a stronger hash algorithm
chkbit now supports sha512. You can specify it with `--algo sha512`. chkbit now supports sha512 and blake3. You can specify it with `--algo sha512` or `--algo blake3`.
Note that existing index files will use the hash that they were created with. If you wish to update all hashes you need to delete your existing indexes first. Note that existing index files will use the hash that they were created with. If you wish to update all hashes you need to delete your existing indexes first.

View File

@ -6,5 +6,5 @@ class Context:
self.hash_algo = hash_algo self.hash_algo = hash_algo
self.skip_symlinks = skip_symlinks self.skip_symlinks = skip_symlinks
if hash_algo not in ["md5", "sha512"]: if hash_algo not in ["md5", "sha512", "blake3"]:
raise Exception(f"{hash_algo} is unknown.") raise Exception(f"{hash_algo} is unknown.")

View File

@ -9,6 +9,10 @@ def hashfile(path, hash_algo=None):
h = hashlib.md5() h = hashlib.md5()
elif hash_algo == "sha512": elif hash_algo == "sha512":
h = hashlib.sha512() h = hashlib.sha512()
elif hash_algo == "blake3":
from blake3 import blake3
h = blake3()
else: else:
raise Exception(f"{hash_algo} is unknown.") raise Exception(f"{hash_algo} is unknown.")

View File

@ -46,6 +46,7 @@ class Main:
def _parse_args(self): def _parse_args(self):
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
prog="chkbit",
description="Checks the data integrity of your files. See https://github.com/laktak/chkbit-py", description="Checks the data integrity of your files. See https://github.com/laktak/chkbit-py",
epilog=STATUS_CODES, epilog=STATUS_CODES,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
@ -66,7 +67,7 @@ class Main:
"--algo", "--algo",
type=str, type=str,
default="md5", default="md5",
help="hash algorithm: md5, sha512", help="hash algorithm: md5, sha512, blake3",
) )
parser.add_argument( parser.add_argument(

View File

@ -1,11 +1,13 @@
[project] [project]
name = "chkbit" name = "chkbit"
version = "2.3.0" version = "2.4.0"
description = "chkbit checks the data integrity of your files" description = "chkbit checks the data integrity of your files"
authors = [ authors = [
{name = "Christian Zangl", email = "laktak@cdak.net"}, {name = "Christian Zangl", email = "laktak@cdak.net"},
] ]
dependencies = [] dependencies = [
"blake3>=0.3.4",
]
requires-python = ">=3.6.0" requires-python = ">=3.6.0"
readme = "README.md" readme = "README.md"
license = {file = "LICENSE"} license = {file = "LICENSE"}