Mercurial > hgrepos > Python > apps > py-cutils
annotate cutils/util/__init__.py @ 278:822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Otherwise "backslashreplace" error encodings are "corrected" too.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 21 Feb 2025 17:27:59 +0100 |
| parents | 0f4febf646f5 |
| children | 44e62e36cad4 |
| 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 |
|
196
0f4febf646f5
Prepare for more Python2/3 compatibility: everywhere import print_function and absolute_import
Franz Glasner <fzglas.hg@dom66.de>
parents:
188
diff
changeset
|
10 from __future__ import print_function, absolute_import |
|
0f4febf646f5
Prepare for more Python2/3 compatibility: everywhere import print_function and absolute_import
Franz Glasner <fzglas.hg@dom66.de>
parents:
188
diff
changeset
|
11 |
|
0f4febf646f5
Prepare for more Python2/3 compatibility: everywhere import print_function and absolute_import
Franz Glasner <fzglas.hg@dom66.de>
parents:
188
diff
changeset
|
12 |
|
164
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
13 __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
|
14 "PY35", |
|
188
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
15 "n", "b", "u", |
|
164
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
16 "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
|
17 "argv2algo", |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
18 "algotag2algotype", |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
19 "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
|
20 "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
|
21 "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
|
22 "default_algotag", |
|
163
fa7dd54e9715
FIX: Add "fsencode" to public functions in cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
124
diff
changeset
|
23 "fsencode", |
|
188
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
24 "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
|
25 ] |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
26 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
27 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
28 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
|
29 import hashlib |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
30 import os |
|
164
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
31 import sys |
|
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
32 |
|
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
33 |
|
a813094ae4f5
Move PY2 from cutils.util.constants into cutils.util
Franz Glasner <fzglas.hg@dom66.de>
parents:
163
diff
changeset
|
34 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
|
35 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
|
36 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
37 |
|
188
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
38 if PY2: |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
39 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
40 def n(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
41 """Convert `s` to the native string implementation""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
42 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
|
43 return s.encode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
44 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
45 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
46 def b(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
47 """Convert `s` to bytes""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
48 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
|
49 return s.encode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
50 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
51 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
52 def u(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
53 """Convert `s` to a unicode string""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
54 if isinstance(s, str): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
55 return s.decode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
56 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
57 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
58 else: |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
59 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
60 def n(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
61 """Convert `s` to the native string implementation""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
62 if isinstance(s, (bytes, bytearray)): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
63 return s.decode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
64 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
65 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
66 def b(s, encoding="ascii"): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
67 """Convert `s` to bytes""" |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
68 if isinstance(s, str): |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
69 return s.encode(encoding) |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
70 return s |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
71 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
72 u = n |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
73 |
|
2784fdcc99e5
Implement basic parsing of treesum output.
Franz Glasner <fzglas.hg@dom66.de>
parents:
185
diff
changeset
|
74 |
|
172
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
75 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
|
76 """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
|
77 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
78 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
|
79 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
80 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
|
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 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
|
83 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
84 """ |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
85 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
|
86 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
|
87 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
|
88 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
|
89 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
|
90 |
|
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
91 |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
92 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
|
93 """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
|
94 try: |
|
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 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
|
96 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
|
97 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
|
98 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
|
99 |
|
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 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
|
102 """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
|
103 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
104 try: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
105 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
|
106 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
|
107 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
|
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 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
|
110 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
|
111 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
112 else: |
|
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 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
|
115 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
|
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 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
|
118 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
119 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
120 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
|
121 """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
|
122 try: |
|
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 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
|
124 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
|
125 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
|
126 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
|
127 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
128 |
|
184
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
129 def get_crc(name): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
130 """Get the factory for a CRC""" |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
131 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
132 from ..crcmod.predefined import PredefinedCrc |
|
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 def _crc_type(): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
135 return PredefinedCrc(name) |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
136 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
137 return _crc_type |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
138 |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
139 |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
140 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
|
141 """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
|
142 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
|
143 |
|
172
804a823c63f5
Now the selection of the default algorithm depends on availiability in hashlib
Franz Glasner <fzglas.hg@dom66.de>
parents:
166
diff
changeset
|
144 :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
|
145 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
|
146 :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
|
147 :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
|
148 :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
|
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 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
|
151 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
152 """ |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 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
|
168 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
|
169 return (hashlib.sha3_384, "SHA3-384") |
|
120
a548783381b6
More accurate description of --algorithm.
Franz Glasner <fzglas.hg@dom66.de>
parents:
118
diff
changeset
|
170 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
|
171 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
|
172 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
|
173 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
|
174 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
|
175 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
|
176 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
|
177 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
|
178 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
|
179 return (hashlib.md5, "MD5") |
|
184
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
180 elif s in ("crc24", "crc-24", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
181 "crc24-openpgp", "crc-24-openpgp"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
182 return (get_crc("crc-24"), "CRC-24") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
183 elif s in ("crc32", "crc-32", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
184 "crc32-pkzip", "crc-32-pkzip", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
185 "crc32-iso", "crc-32-iso", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
186 "crc32-iso-hdlc", "crc-32-iso-hdlc"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
187 return (get_crc("crc-32"), "CRC-32-ISO") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
188 elif s in ("crc32-posix", "crc-32-posix", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
189 "crc32-cksum", "crc-32-cksum", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
190 "posix"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
191 return (get_crc("posix"), "CRC-32-POSIX") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
192 elif s in ("crc64", "crc-64", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
193 "crc64-iso", "crc-64-iso"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
194 return (get_crc("crc-64"), "CRC-64-ISO") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
195 elif s in ("crc64-2", "crc-64-2", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
196 "crc64-iso-2", "crc-64-iso-2", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
197 "crc64-mcrc64", "crc-64-mcrc64"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
198 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
|
199 elif s in ("crc64-ecma", "crc-64-ecma"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
200 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
|
201 elif s in ("crc64-xz", "crc-64-xz", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
202 "crc64-go-ecma", "crc-64-go-ecma"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
203 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
|
204 elif s in ("crc64-go", "crc-64-go", |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
205 "crc64-go-iso", "crc-64-go-iso"): |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
206 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
|
207 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
|
208 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
|
209 else: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
210 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
|
211 "`{}' 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
|
212 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
213 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
214 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
|
215 """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
|
216 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
|
217 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
218 :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
|
219 :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
|
220 :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
|
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 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
|
223 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
224 """ |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 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
|
250 return hashlib.md5 |
|
184
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
251 elif s == "CRC-24": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
252 return get_crc("crc-24") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
253 elif s == "CRC-32-ISO": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
254 return get_crc("crc-32") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
255 elif s == "CRC-32-POSIX": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
256 return get_crc("posix") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
257 elif s == "CRC-64-ISO": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
258 return get_crc("crc-64") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
259 elif s == "CRC-64-ISO-2": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
260 return get_crc("crc-64-2") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
261 elif s == "CRC-64-ECMA": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
262 return get_crc("crc-64-ecma") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
263 elif s == "CRC-64-XZ": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
264 return get_crc("crc-64-xz") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
265 elif s == "CRC-64-GO-ISO": |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
266 return get_crc("crc-64-go") |
|
6154b8e4ba94
Include some new algorithms: CRC
Franz Glasner <fzglas.hg@dom66.de>
parents:
173
diff
changeset
|
267 elif s == "CRC-64-REDIS": |
|
185
f04d4b1c14b3
FIX: "digest" had overwritteh the digest module
Franz Glasner <fzglas.hg@dom66.de>
parents:
184
diff
changeset
|
268 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
|
269 else: |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
270 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
|
271 |
|
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
272 |
|
278
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
273 def normalize_filename(filename, strip_dot_slashes=False): |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
274 if isinstance(filename, bytes): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
275 filename = filename.replace(b"\\", b"/") |
|
278
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
276 if strip_dot_slashes: |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
277 while filename.startswith(b"./"): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
278 filename = filename[2:] |
|
278
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
279 # This also handles adjacent /./ cases |
|
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
280 while b"/./" in filename: |
|
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
281 filename = filename.replace(b"/./", b"/", 1) |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
282 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
|
283 filename = filename.replace(u"\\", u"/") |
|
278
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
284 if strip_dot_slashes: |
|
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
|
285 while filename.startswith(u"./"): |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
286 filename = filename[2:] |
|
278
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
287 # This also handles adjacent /./ cases |
|
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
288 while u"/./" in filename: |
|
822cf3a1da22
treesum: FIX: Removal of backslashes in output: do this only where really needed.
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
289 filename = filename.replace(u"/./", u"/", 1) |
|
118
12339ac2148d
Move some functions into cutils.util (i.e. algorithms and their aliases)
Franz Glasner <fzglas.hg@dom66.de>
parents:
115
diff
changeset
|
290 return filename |
|
124
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
291 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
292 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
293 def fsencode(what): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
294 """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
|
295 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
296 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
|
297 |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
298 """ |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
299 if isinstance(what, bytes): |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
300 return what |
|
3bd3f32b5e60
A first version of "treesum" is working
Franz Glasner <fzglas.hg@dom66.de>
parents:
120
diff
changeset
|
301 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
|
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 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
|
305 """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
|
306 |
|
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 :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
|
308 :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
|
309 :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
|
310 :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
|
311 |
|
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 """ |
|
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 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
|
314 # 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
|
315 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
|
316 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
|
317 # 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
|
318 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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 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
|
328 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
|
329 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
|
330 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
|
331 return (tformatstr % tuple(tvalues)).encode("latin1") |
