diff options
| author | Damien George <damien@micropython.org> | 2021-05-25 16:48:29 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2021-05-26 21:44:46 +1000 |
| commit | 6a127810c03d7666f1866f5e48df3c102805dbe8 (patch) | |
| tree | e78b23382f2d3ff743ab8fefde198ba84cc42ba2 /tests/extmod/uhashlib_final.py | |
| parent | 0abf6f830cd390e2e5dbd4a2c68f611f5c9507dc (diff) | |
extmod/moduhashlib: Put hash obj in final state after digest is called.
If digest is called then the hash object is put in a "final" state and
calling update() or digest() again will raise a ValueError (instead of
silently producing the wrong result).
See issue #4119.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests/extmod/uhashlib_final.py')
| -rw-r--r-- | tests/extmod/uhashlib_final.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/extmod/uhashlib_final.py b/tests/extmod/uhashlib_final.py new file mode 100644 index 000000000..f562cc178 --- /dev/null +++ b/tests/extmod/uhashlib_final.py @@ -0,0 +1,35 @@ +try: + import uhashlib +except ImportError: + print("SKIP") + raise SystemExit + + +for algo_name in ("md5", "sha1", "sha256"): + algo = getattr(uhashlib, algo_name, None) + if not algo: + continue + + # Running .digest() several times in row is not supported. + h = algo(b"123") + h.digest() + try: + h.digest() + print("fail") + except ValueError: + # Expected path, don't print anything so test output is the + # same even if the algorithm is not implemented on the port. + pass + + # Partial digests are not supported. + h = algo(b"123") + h.digest() + try: + h.update(b"456") + print("fail") + except ValueError: + # Expected path, don't print anything so test output is the + # same even if the algorithm is not implemented on the port. + pass + +print("done") |
