forked from casper-network/casper-python-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
how_to_hash_data.py
50 lines (37 loc) · 1.28 KB
/
how_to_hash_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import argparse
from pycspr.crypto import HashAlgorithm
from pycspr.crypto import get_hash
# CLI argument parser.
_ARGS = argparse.ArgumentParser("Demo illustrating how to hash data using pycspr.")
# CLI argument: hashing algorithm.
_ARGS.add_argument(
"--algo",
default=HashAlgorithm.BLAKE2B.name,
dest="algo",
help="Hashing algorithm to be used - defaults to blake2b.",
type=str,
choices=[i.name for i in HashAlgorithm],
)
# CLI argument: data to be hashed.
_ARGS.add_argument(
"--data",
default="أبو يوسف يعقوب بن إسحاق الصبّاح الكندي".encode("utf-8"),
dest="data",
help="Data to be hashed as a hexadecimal string.",
type=str,
)
def _main(args: argparse.Namespace):
"""Main entry point.
:param args: Parsed command line arguments.
"""
# Parse args.
algo = HashAlgorithm[args.algo]
# Create a digest - default algo = blake2b, default size = 32.
digest: bytes = get_hash(args.data)
assert isinstance(digest, bytes) and len(digest) == 32
# Create a digest of a specific size / algo.
digest: bytes = get_hash(args.data, algo=algo, size=32)
assert isinstance(digest, bytes) and len(digest) == 32
# Entry point.
if __name__ == "__main__":
_main(_ARGS.parse_args())