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