Mercurial > hgrepos > Python > apps > py-cutils
annotate cutils/util/__init__.py @ 188:2784fdcc99e5
Implement basic parsing of treesum output.
Including CRC32 checks.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Wed, 15 Jan 2025 14:41:36 +0100 |
| parents | f04d4b1c14b3 |
| children | 0f4febf646f5 |
| rev | line source |
|---|---|
|
115
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
|
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 # :- |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
3 # :Copyright: (c) 2020-2025 Franz Glasner |
|
115
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
4 # :License: BSD-3-Clause |
|
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
5 # :- |
|
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
6 r"""Utility package. |
|
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
7 |
|
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
8 """ |
|
e15b3d1ff0d9
New subpackage with a "contextlib.nullcontext" for older Python versions
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
9 |
|
164
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
10 __all__ = ["PY2", |
|
173
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
11 "PY35", |
|
188
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
12 "n", "b", "u", |
|
164
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
13 "normalize_filename", |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
14 "argv2algo", |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
15 "algotag2algotype", |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
16 "get_blake2b", |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
17 "get_blake2b_256", |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
18 "get_blake2s", |
|
172
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
19 "default_algotag", |
|
163
fa7dd54e9715
FIX: Add "fsencode" to public functions in cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
124
diff
changeset
|
20 "fsencode", |
|
188
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
21 "interpolate_bytes", |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
22 ] |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
23 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
24 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
25 import argparse |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
26 import hashlib |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
27 import os |
|
164
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
28 import sys |
|
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
29 |
|
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
30 |
|
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
31 PY2 = sys.version_info[0] < 3 |
|
173
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
32 PY35 = sys.version_info[:2] >= (3, 5) |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
33 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
34 |
|
188
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
35 if PY2: |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
36 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
37 def n(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
38 """Convert `s` to the native string implementation""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
39 if isinstance(s, unicode): # noqa: F821 undefined name 'unicode' |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
40 return s.encode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
41 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
42 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
43 def b(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
44 """Convert `s` to bytes""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
45 if isinstance(s, unicode): # noqa: F821 undefined name 'unicode' |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
46 return s.encode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
47 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
48 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
49 def u(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
50 """Convert `s` to a unicode string""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
51 if isinstance(s, str): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
52 return s.decode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
53 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
54 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
55 else: |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
56 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
57 def n(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
58 """Convert `s` to the native string implementation""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
59 if isinstance(s, (bytes, bytearray)): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
60 return s.decode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
61 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
62 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
63 def b(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
64 """Convert `s` to bytes""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
65 if isinstance(s, str): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
66 return s.encode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
67 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
68 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
69 u = n |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
70 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
71 |
|
172
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
72 def default_algotag(): |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
73 """Determine the "best" default algorithm. |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
74 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
75 Depend on availability in :mod:`hashlib`. |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
76 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
77 Prefer BLAKE2b-256, SHA256 or SHA1 -- in this order. |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
78 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
79 Does not consider :mod:`pyblake2` if it is available eventually. |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
80 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
81 """ |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
82 if "blake2b" in hashlib.algorithms_available: |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
83 return "BLAKE2b-256" |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
84 if "sha256" in hashlib.algorithms_available: |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
85 return "SHA256" |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
86 return "SHA1" |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
87 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
88 |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
89 def get_blake2b(): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
90 """Get the factory for blake2b""" |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
91 try: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
92 return hashlib.blake2b |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
93 except AttributeError: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
94 import pyblake2 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
95 return pyblake2.blake2b |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
96 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
97 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
98 def get_blake2b_256(): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
99 """Get the factory for blake2b-256""" |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
100 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
101 try: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
102 hashlib.blake2b |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
103 except AttributeError: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
104 import pyblake2 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
105 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
106 def _get_blake(): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
107 return pyblake2.blake2b(digest_size=32) |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
108 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
109 else: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
110 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
111 def _get_blake(): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
112 return hashlib.blake2b(digest_size=32) |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
113 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
114 return _get_blake |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
115 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
116 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
117 def get_blake2s(): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
118 """Get the factory for blake2s""" |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
119 try: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
120 return hashlib.blake2s |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
121 except AttributeError: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
122 import pyblake2 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
123 return pyblake2.blake2s |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
124 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
125 |
|
184
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
126 def get_crc(name): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
127 """Get the factory for a CRC""" |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
128 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
129 from ..crcmod.predefined import PredefinedCrc |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
130 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
131 def _crc_type(): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
132 return PredefinedCrc(name) |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
133 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
134 return _crc_type |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
135 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
136 |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
137 def argv2algo(s): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
138 """Convert a command line algorithm specifier into a tuple with the |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
139 type/factory of the digest and the algorithms tag for output purposes. |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
140 |
|
172
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
141 :param str s: the specifier from the command line; should include all |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
142 algorithm tags also (for proper round-tripping) |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
143 :return: the internal digest specification |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
144 :rtype: a tuple (digest_type_or_factory, name_in_output) |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
145 :raises argparse.ArgumentTypeError: for unrecognized algorithms or names |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
146 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
147 String comparisons are done case-insensitively. |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
148 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
149 """ |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
150 s = s.lower() |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
151 if s in ("1", "sha1"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
152 return (hashlib.sha1, "SHA1") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
153 elif s in ("224", "sha224"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
154 return (hashlib.sha224, "SHA224") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
155 elif s in ("256", "sha256"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
156 return (hashlib.sha256, "SHA256") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
157 elif s in ("384", "sha384"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
158 return (hashlib.sha384, "SHA384") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
159 elif s in ("512", "sha512"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
160 return (hashlib.sha512, "SHA512") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
161 elif s in ("3-224", "sha3-224"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
162 return (hashlib.sha3_224, "SHA3-224") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
163 elif s in ("3-256", "sha3-256"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
164 return (hashlib.sha3_256, "SHA3-256") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
165 elif s in ("3-384", "sha3-384"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
166 return (hashlib.sha3_384, "SHA3-384") |
|
120
a548783381b6
More accurate description of --algorithm.
Franz Glasner <fzglas.hg@dom66.de>
parents:
118
diff
changeset
|
167 elif s in ("3", "3-512", "sha3-512"): |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
168 return (hashlib.sha3_512, "SHA3-512") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
169 elif s in ("blake2b", "blake2b-512", "blake2", "blake2-512"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
170 return (get_blake2b(), "BLAKE2b") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
171 elif s in ("blake2s", "blake2s-256"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
172 return (get_blake2s(), "BLAKE2s") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
173 elif s in ("blake2-256", "blake2b-256"): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
174 return (get_blake2b_256(), "BLAKE2b-256") |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
175 elif s == "md5": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
176 return (hashlib.md5, "MD5") |
|
184
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
177 elif s in ("crc24", "crc-24", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
178 "crc24-openpgp", "crc-24-openpgp"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
179 return (get_crc("crc-24"), "CRC-24") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
180 elif s in ("crc32", "crc-32", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
181 "crc32-pkzip", "crc-32-pkzip", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
182 "crc32-iso", "crc-32-iso", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
183 "crc32-iso-hdlc", "crc-32-iso-hdlc"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
184 return (get_crc("crc-32"), "CRC-32-ISO") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
185 elif s in ("crc32-posix", "crc-32-posix", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
186 "crc32-cksum", "crc-32-cksum", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
187 "posix"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
188 return (get_crc("posix"), "CRC-32-POSIX") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
189 elif s in ("crc64", "crc-64", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
190 "crc64-iso", "crc-64-iso"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
191 return (get_crc("crc-64"), "CRC-64-ISO") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
192 elif s in ("crc64-2", "crc-64-2", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
193 "crc64-iso-2", "crc-64-iso-2", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
194 "crc64-mcrc64", "crc-64-mcrc64"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
195 return (get_crc("crc-64-2"), "CRC-64-ISO-2") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
196 elif s in ("crc64-ecma", "crc-64-ecma"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
197 return (get_crc("crc-64-ecma"), "CRC-64-ECMA") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
198 elif s in ("crc64-xz", "crc-64-xz", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
199 "crc64-go-ecma", "crc-64-go-ecma"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
200 return (get_crc("crc-64-xz"), "CRC-64-XZ") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
201 elif s in ("crc64-go", "crc-64-go", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
202 "crc64-go-iso", "crc-64-go-iso"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
203 return (get_crc("crc-64-go"), "CRC-64-GO-ISO") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
204 elif s in ("crc64-redis", "crc-64-redis"): |
|
185
f04d4b1c14b3
FIX: "digest" had overwritteh the digest module
Franz Glasner <fzglas.hg@dom66.de>
parents:
184
diff
changeset
|
205 return (get_crc("crc-64-redis"), "CRC-64-REDIS") |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
206 else: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
207 raise argparse.ArgumentTypeError( |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
208 "`{}' is not a recognized algorithm".format(s)) |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
209 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
210 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
211 def algotag2algotype(s): |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
212 """Convert the algorithm specifier in a BSD-style digest file to the |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
213 type/factory of the corresponding algorithm. |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
214 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
215 :param str s: the tag (i.e. normalized name) or the algorithm |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
216 :return: the digest type or factory for `s` |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
217 :raises ValueError: on unknown and/or unhandled algorithms |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
218 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
219 All string comparisons are case-sensitive. |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
220 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
221 """ |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
222 if s == "SHA1": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
223 return hashlib.sha1 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
224 elif s == "SHA224": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
225 return hashlib.sha224 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
226 elif s == "SHA256": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
227 return hashlib.sha256 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
228 elif s == "SHA384": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
229 return hashlib.sha384 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
230 elif s == "SHA512": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
231 return hashlib.sha512 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
232 elif s == "SHA3-224": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
233 return hashlib.sha3_224 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
234 elif s == "SHA3-256": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
235 return hashlib.sha3_256 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
236 elif s == "SHA3-384": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
237 return hashlib.sha3_384 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
238 elif s == "SHA3-512": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
239 return hashlib.sha3_512 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
240 elif s in ("BLAKE2b", "BLAKE2b-512", "BLAKE2b512"): # compat for openssl |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
241 return get_blake2b() |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
242 elif s in ("BLAKE2s", "BLAKE2s-256", "BLAKE2s256"): # compat for openssl |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
243 return get_blake2s() |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
244 elif s in ("BLAKE2b-256", "BLAKE2b256"): # also compat for openssl dgst |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
245 return get_blake2b_256() |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
246 elif s == "MD5": |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
247 return hashlib.md5 |
|
184
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
248 elif s == "CRC-24": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
249 return get_crc("crc-24") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
250 elif s == "CRC-32-ISO": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
251 return get_crc("crc-32") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
252 elif s == "CRC-32-POSIX": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
253 return get_crc("posix") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
254 elif s == "CRC-64-ISO": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
255 return get_crc("crc-64") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
256 elif s == "CRC-64-ISO-2": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
257 return get_crc("crc-64-2") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
258 elif s == "CRC-64-ECMA": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
259 return get_crc("crc-64-ecma") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
260 elif s == "CRC-64-XZ": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
261 return get_crc("crc-64-xz") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
262 elif s == "CRC-64-GO-ISO": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
263 return get_crc("crc-64-go") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
264 elif s == "CRC-64-REDIS": |
|
185
f04d4b1c14b3
FIX: "digest" had overwritteh the digest module
Franz Glasner <fzglas.hg@dom66.de>
parents:
184
diff
changeset
|
265 return get_crc("crc-64-redis") |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
266 else: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
267 raise ValueError("unknown algorithm: {}".format(s)) |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
268 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
269 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
270 def normalize_filename(filename, strip_leading_dot_slash=False): |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
271 if isinstance(filename, bytes): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
272 filename = filename.replace(b"\\", b"/") |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
273 if strip_leading_dot_slash: |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
274 while filename.startswith(b"./"): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
275 filename = filename[2:] |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
276 else: |
|
166
ed45abb4940f
FIX: in util.normalize_filename(): use the 'u"' prefix in the else part for non-byte strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
277 filename = filename.replace(u"\\", u"/") |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
278 if strip_leading_dot_slash: |
|
166
ed45abb4940f
FIX: in util.normalize_filename(): use the 'u"' prefix in the else part for non-byte strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
279 while filename.startswith(u"./"): |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
280 filename = filename[2:] |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
281 return filename |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
282 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
283 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
284 def fsencode(what): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
285 """A somewhat compatibility function for :func:`os.fsencode`. |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
286 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
287 If `what` is of type :class:`bytes` no :func:`os.fsencode` is required. |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
288 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
289 """ |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
290 if isinstance(what, bytes): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
291 return what |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
292 return os.fsencode(what) |
|
173
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
293 |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
294 |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
295 def interpolate_bytes(formatstr, *values): |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
296 """Interpolate byte strings also on Python 3.4. |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
297 |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
298 :param bytes formatstr: |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
299 :param values: params for interpolation: may *not* contain Unicode strings |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
300 :rvalue: the formatted octet |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
301 :rtype: bytes |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
302 |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
303 """ |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
304 assert isinstance(formatstr, bytes) |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
305 # Python 3.5+ or Python2 know how to interpolate byte strings |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
306 if PY35 or PY2: |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
307 return formatstr % values |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
308 # Workaround with a Latin-1 dance |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
309 tformatstr = formatstr.decode("latin1") |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
310 tvalues = [] |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
311 for v in values: |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
312 if PY2: |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
313 if isinstance(v, unicode): # noqa: F821 undefined name 'unicode' |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
314 assert False |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
315 else: |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
316 if isinstance(v, str): |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
317 assert False |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
318 if isinstance(v, bytes): |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
319 tvalues.append(v.decode("latin1")) |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
320 else: |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
321 tvalues.append(v) |
|
e081b6ee5570
treesum.py now runs on Python3.4 also: use a workaround for its missing byte % formatting.
Franz Glasner <fzglas.hg@dom66.de>
parents:
172
diff
changeset
|
322 return (tformatstr % tuple(tvalues)).encode("latin1") |
