import stdio
import stdlib
import string
import stdint
import t, c
import base64
import hashlib








def default_value_test_function(a: t.CInt, b: t.CInt = 1):
    print(a, b)




# ==============================================
# 工具函数：打印十六进制哈希串
# ==============================================
def print_hex(buf: t.CUInt8T | t.CPtr, length: t.CInt):
    for i in range(length):
        stdio.printf("%02x", buf[i])
    stdio.printf("\n")

# ==============================================
# 主函数测试入口
# ==============================================
def main1() -> t.CInt:
    plain: str = "hello123"
    print("原文", plain)

    # ---------- Base64 测试 ----------
    b64_out: t.CArray[t.CChar, 256]
    b64_dec: t.CArray[t.CUInt8T, 256]
    base64.b64encode(plain, b64_out)
    print("Base64 编码:", b64_out)
    dlen: t.CSizeT = base64.b64decode(b64_out, b64_dec)
    b64_dec[dlen] = 0
    print("Base64 解码:", b64_dec)

    # ---------- MD5 测试 ----------
    md5_buf: t.CArray[t.CUInt8T, hashlib.MD5_DIGEST_LEN]
    mctx = hashlib.md5()
    mctx.update(plain)
    mctx.final(md5_buf)
    print("MD5: ")
    print_hex(md5_buf, hashlib.MD5_DIGEST_LEN)

    # ---------- SHA1 测试 ----------
    sha1_buf: t.CArray[t.CUInt8T, hashlib.SHA1_DIGEST_LEN]
    s1ctx = hashlib.sha1()
    s1ctx.update(plain)
    s1ctx.final(sha1_buf)
    print("SHA1: ")
    print_hex(sha1_buf, hashlib.SHA1_DIGEST_LEN)

    # ---------- SHA256 测试 ----------
    sha256_buf: t.CArray[t.CUInt8T, hashlib.SHA256_DIGEST_LEN]
    s2ctx = hashlib.sha256()
    s2ctx.update(plain)
    s2ctx.final(sha256_buf)
    print("SHA256: ")
    print_hex(sha256_buf, hashlib.SHA256_DIGEST_LEN)

    # ---------- SHA512 测试 ----------
    sha512_buf: t.CArray[t.CUInt8T, hashlib.SHA512_DIGEST_LEN]
    s5ctx = hashlib.sha512()
    s5ctx.update(plain)
    s5ctx.final(sha512_buf)
    print("SHA512: ")
    print_hex(sha512_buf, hashlib.SHA512_DIGEST_LEN)

    default_value_test_function(b=2, a=1)

    return 0
