fix(narrow): hashlib 摘要写字节改用 uint8(...)

sha256/sha1/md5 的 digest 阶段把 32/64 位掩码结果写入 bytes 元素(i8),触发隐式窄化;统一加 uint8(...)(与 __sha512 一致)
This commit is contained in:
TermiNexus committed 2026-10-11 11:05:05 +08:00
1 parent 19e4ef26a2
commit 3dd5bca28e
3 files changed
+15 -15

No files matched your search

+5 -5
View File
@@ -118,11 +118,11 @@ class md5:
# Write total bit count
bits: uint64 = self.count << 3
for i in range(8):
self.buf[MD5_BLOCK_LEN - 8 + i] = (bits >> (i * 8)) & 0xFF
self.buf[MD5_BLOCK_LEN - 8 + i] = uint8((bits >> (i * 8)) & 0xFF)
self.transform(self.buf)
# State registers to little-endian byte output output
for i in range(4):
out[i * 4 + 0] = (self.state[i] >> 0) & 0xFF
out[i * 4 + 1] = (self.state[i] >> 8) & 0xFF
out[i * 4 + 2] = (self.state[i] >> 16) & 0xFF
out[i * 4 + 3] = (self.state[i] >> 24) & 0xFF
out[i * 4 + 0] = uint8((self.state[i] >> 0) & 0xFF)
out[i * 4 + 1] = uint8((self.state[i] >> 8) & 0xFF)
out[i * 4 + 2] = uint8((self.state[i] >> 16) & 0xFF)
out[i * 4 + 3] = uint8((self.state[i] >> 24) & 0xFF)
+5 -5
View File
@@ -105,11 +105,11 @@ class sha1:
bits: uint64 = self.count << 3
# SHA1 big-endian write length
for i in range(8):
self.buf[SHA1_BLOCK_LEN - 8 + i] = (bits >> (56 - i * 8)) & 0xFF
self.buf[SHA1_BLOCK_LEN - 8 + i] = uint8((bits >> (56 - i * 8)) & 0xFF)
self.transform(self.buf)
# State registers to big-endian byte output output output
for i in range(5):
out[i * 4 + 0] = (self.state[i] >> 24) & 0xFF
out[i * 4 + 1] = (self.state[i] >> 16) & 0xFF
out[i * 4 + 2] = (self.state[i] >> 8) & 0xFF
out[i * 4 + 3] = (self.state[i] >> 0) & 0xFF
out[i * 4 + 0] = uint8((self.state[i] >> 24) & 0xFF)
out[i * 4 + 1] = uint8((self.state[i] >> 16) & 0xFF)
out[i * 4 + 2] = uint8((self.state[i] >> 8) & 0xFF)
out[i * 4 + 3] = uint8((self.state[i] >> 0) & 0xFF)
+5 -5
View File
@@ -108,11 +108,11 @@ class sha256:
string.memset(self.buf + idx, 0, SHA256_BLOCK_LEN - 8 - idx)
bits: uint64 = self.count << 3
for i in range(8):
self.buf[SHA256_BLOCK_LEN-8+i] = (bits >> (56 - i*8)) & 0xFF
self.buf[SHA256_BLOCK_LEN-8+i] = uint8((bits >> (56 - i*8)) & 0xFF)
self.transform(self.buf)
# Byte order 32-bit words
for i in range(8):
out[i * 4 + 0] = (self.state[i] >> 24) & 0xFF
out[i * 4 + 1] = (self.state[i] >> 16) & 0xFF
out[i * 4 + 2] = (self.state[i] >> 8) & 0xFF
out[i * 4 + 3] = (self.state[i] >> 0) & 0xFF
out[i * 4 + 0] = uint8((self.state[i] >> 24) & 0xFF)
out[i * 4 + 1] = uint8((self.state[i] >> 16) & 0xFF)
out[i * 4 + 2] = uint8((self.state[i] >> 8) & 0xFF)
out[i * 4 + 3] = uint8((self.state[i] >> 0) & 0xFF)