""" 快速CRT提取测试 - 只测试一个PDF """ import pikepdf from cryptography.hazmat.primitives.serialization.pkcs7 import load_der_pkcs7_certificates from cryptography.x509.oid import NameOID pdf_path = "src/test/resources/data/pdfs/YDQ25_002294.pdf" print(f"Testing CRT extraction for: {pdf_path}") try: pdf = pikepdf.Pdf.open(pdf_path) acroform = pdf.Root.get("/AcroForm") if not acroform: print("ERROR: No /AcroForm found") exit(1) fields = acroform.get("/Fields", []) print(f"Found {len(fields)} fields") signatures = [] for idx, field in enumerate(fields): field_obj = field if field_obj.get("/FT") != "/Sig": continue sig_dict = field_obj.get("/V") if not sig_dict: continue contents_obj = sig_dict.get("/Contents") if contents_obj is None: continue contents = bytes(contents_obj) print(f"\nSignature #{len(signatures)}:") print(f" Size: {len(contents)} bytes") # Try PKCS#7 parsing try: certs = load_der_pkcs7_certificates(contents) print(f" PKCS#7 parsing: SUCCESS ({len(certs)} certificates)") for cert_idx, cert in enumerate(certs): print(f" Certificate #{cert_idx}:") print(f" Subject: {cert.subject}") # Try to get organization name for oid in [NameOID.COMMON_NAME, NameOID.ORGANIZATION_NAME]: val = cert.subject.get_attributes_for_oid(oid) if val: print(f" {oid._name}: {val[0].value}") except Exception as e: print(f" PKCS#7 parsing: FAILED ({e})") # Try binary search fallback known_institutions = [ "广东产品质量监督检验研究院", "广东产品质量监督检验", ] for inst in known_institutions: encoded = inst.encode('utf-8') if encoded in contents: print(f" Binary search: FOUND '{inst}'") print(f" Position: {contents.find(encoded)}") break signatures.append(contents) if len(signatures) >= 3: # Only test first 3 signatures break print(f"\nTotal signatures tested: {len(signatures)}") except Exception as e: print(f"ERROR: {e}") import traceback traceback.print_exc()