"""用 openssl asn1parse 看 TSA token 结构"""
import base64
import subprocess
import sys

p = r'C:\Users\13794\Desktop\workspace\工作\2026\aigcdemo\images\aigc1.jpg'
with open(p, 'rb') as f:
    data = f.read()

exif_marker = data.find(b'Exif\x00\x00')
tiff_start = exif_marker + 6
bo = 'LE' if data[tiff_start:tiff_start+2] == b'II' else 'BE'
def r16(o): return data[o] | (data[o+1] << 8) if bo == 'LE' else (data[o] << 8) | data[o+1]
def r32(o): return data[o] | (data[o+1] << 8) | (data[o+2] << 16) | (data[o+3] << 24) if bo == 'LE' else (data[o] << 24) | (data[o+1] << 16) | (data[o+2] << 8) | data[o+3]

ifd0_off = r32(tiff_start + 4)
ifd0_n = r16(tiff_start + ifd0_off)
exif_off = None
for i in range(ifd0_n):
    eo = tiff_start + ifd0_off + 2 + i * 12
    if r16(eo) == 0x8769:
        exif_off = r32(eo + 8)
exif_n = r16(tiff_start + exif_off)
for i in range(exif_n):
    eo = tiff_start + exif_off + 2 + i * 12
    if r16(eo) == 0xfe59:
        count = r32(eo + 4)
        data_off = tiff_start + r32(eo + 8)
        b64 = data[data_off:data_off + count].rstrip(b'\x00').decode('ascii')
        break

tsa = base64.b64decode(b64)
out = r'C:\Users\13794\AppData\Local\Temp\_tsa.der'
with open(out, 'wb') as f:
    f.write(tsa)
print('DER size:', len(tsa))
print('saved to', out)

# 用 openssl asn1parse
r = subprocess.run(['openssl', 'asn1parse', '-inform', 'DER', '-in', out],
                   capture_output=True, text=True)
print(r.stdout[:5000])
print('STDERR:', r.stderr[:500])