Files
TransPyV/Test/Sha1Test/App/main.py
2026-07-19 13:18:46 +08:00

63 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import t, c
from stdint import *
import stdio
import stdlib
import memhub
import hashlib
POOL_SIZE: t.CDefine = 16777480
@t.CExport
def main() -> int:
arena: bytes = stdlib.malloc(POOL_SIZE)
if arena is None:
return 1
mb: memhub.MemBuddy | t.CPtr = memhub.MemBuddy(arena, POOL_SIZE)
if mb is None:
return 1
hashlib._mbuddy = (memhub.MemManager | t.CPtr)(mb)
# 测试 "abc" 的 SHA1
# 期望: a9993e364706816aba3e25717850c26c9cd0d89d
s: str = "abc"
stdio.printf("input: %s\n", s)
# 计算 len(s)
n: t.CSizeT = len(s)
stdio.printf("len=%d\n", n)
# 构造 sha1 对象
ctx: hashlib.sha1 | t.CPtr = hashlib.sha1()
if ctx is None:
stdio.printf("ctx is None\n")
return 1
ctx.update(s)
digest: bytes = mb.alloc(hashlib.SHA1_DIGEST_LEN)
if digest is None:
stdio.printf("digest alloc failed\n")
return 1
ctx.final(digest)
# 打印 digest十六进制
stdio.printf("SHA1: ")
for i in range(hashlib.SHA1_DIGEST_LEN):
b: t.CUInt8T = digest[i]
hi: t.CInt = (b >> 4) & 0xF
lo: t.CInt = b & 0xF
if hi < 10:
stdio.printf("%c", '0' + hi)
else:
stdio.printf("%c", 'a' + (hi - 10))
if lo < 10:
stdio.printf("%c", '0' + lo)
else:
stdio.printf("%c", 'a' + (lo - 10))
stdio.printf("\n")
stdio.printf("expect: a9993e364706816aba3e25717850c26c9cd0d89d\n")
return 0