diff --git a/extmod/moduhashlib.c b/extmod/moduhashlib.c index 195a24334..372a12718 100644 --- a/extmod/moduhashlib.c +++ b/extmod/moduhashlib.c @@ -98,7 +98,8 @@ STATIC mp_obj_t uhashlib_sha256_digest(mp_obj_t self_in) { mp_obj_hash_t *self = MP_OBJ_TO_PTR(self_in); vstr_t vstr; vstr_init_len(&vstr, 32); - mbedtls_sha256_finish_ret((mbedtls_sha256_context *)&self->state, (unsigned char *)vstr.buf); + mbedtls_sha256_context tmp_ctx = *(mbedtls_sha256_context *)self->state; + mbedtls_sha256_finish_ret(&tmp_ctx, (unsigned char *)vstr.buf); return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); } @@ -129,7 +130,8 @@ STATIC mp_obj_t uhashlib_sha256_digest(mp_obj_t self_in) { mp_obj_hash_t *self = MP_OBJ_TO_PTR(self_in); vstr_t vstr; vstr_init_len(&vstr, SHA256_BLOCK_SIZE); - sha256_final((CRYAL_SHA256_CTX *)self->state, (byte *)vstr.buf); + CRYAL_SHA256_CTX tmp_ctx = *(CRYAL_SHA256_CTX *)self->state; + sha256_final(&tmp_ctx, (byte *)vstr.buf); return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); } #endif diff --git a/tests/extmod/uhashlib_sha256.py b/tests/extmod/uhashlib_sha256.py index 2e6df7df1..60c3b54ef 100644 --- a/tests/extmod/uhashlib_sha256.py +++ b/tests/extmod/uhashlib_sha256.py @@ -26,13 +26,13 @@ print(hashlib.sha256(b"\xff" * 64).digest()) # 56 bytes is a boundary case in the algorithm print(hashlib.sha256(b"\xff" * 56).digest()) -# TODO: running .digest() several times in row is not supported() -# h = hashlib.sha256(b'123') -# print(h.digest()) -# print(h.digest()) +# running .digest() several times in row is now supported +h = hashlib.sha256(b'123') +print(h.digest()) +print(h.digest()) -# TODO: partial digests are not supported -# h = hashlib.sha256(b'123') -# print(h.digest()) -# h.update(b'456') -# print(h.digest()) +# partial digests are supported +h = hashlib.sha256(b'123') +print(h.digest()) +h.update(b'456') +print(h.digest())