【Foxit PDF SDK】福昕GSDK如何使用默认的sub filter “ETSI.RFC3161” 签名回调及默认的 RevocationCallback进行长期签名验证?

以下为部分样例代码:

//初始化时间戳服务器管理器,添加并设置一个默认的时间戳服务器,它将默认使用签名回调用于时间戳签名。

TimeStampServerMgr.initialize();

TimeStampServer timestamp_server = TimeStampServerMgr.addServer(server_name, server_url,

server_username, server_password);

TimeStampServerMgr.setDefaultServer(timestamp_server);

// 假设“signed_pdf_path”表示包含签名的已签名PDF文档。

PDFDoc pdf_doc = new PDFDoc(signed_pdf_path);

pdf_doc.startLoad(null, false, null);

{

// 使用LTVVerifier验证并添加DSS。

LTVVerifier ltv_verifier = new LTVVerifier(pdf_doc, true, true, false, LTVVerifier.e_SignatureCreationTime);

// 设置必要的验证模式。

ltv_verifier.setVerifyMode(LTVVerifier.e_VerifyModeAcrobat);

SignatureVerifyResultArray sig_verify_result_array = ltv_verifier.verify();

for (long i = 0; i < sig_verify_result_array.getSize(); i++) {

//ltv状态在这里是e_LTVStateNotEnable。

int ltv_state = sig_verify_result_array.getAt(i).getLTVState();

if ((sig_verify_result_array.getAt(i).getSignatureState() & Signature.e_StateVerifyValid) ==

Signature.e_StateVerifyValid)

ltv_verifier.addDSS(sig_verify_result_array.getAt(i));

}

}

//将时间戳签名添加为DTS并对其进行签名。“saved_ltv_pdf_path”表示新保存的签名PDF 文件。

PDFPage pdf_page = pdf_doc.getPage(0);

//新的时间戳签名将具有默认的过滤器名称“Adobe”。默认子过滤器名称 “ETSI.RFC3161”。

Signature timestamp_signature = pdf_page.addSignature(new RectF(), "",

Signature.e_SignatureTypeTimeStamp, true);

Progressive sign_progressive = timestamp_signature.startSign("", empty_str.getBytes(),

Signature.e_DigestSHA256, saved_ltv_pdf_path, null, null);

if (sign_progressive.getRateOfProgress() != 100)

sign_progressive.resume();

// 然后使用ltvverify来验证新签名的PDF文件。

PDFDoc check_pdf_doc = new PDFDoc(saved_ltv_pdf_path);

check_pdf_doc.startLoad(null, false, null);

{

// 使用ltvverify进行验证。

LTVVerifier ltv_verifier = new LTVVerifier(pdf_doc, true, true, false, LTVVerifier.e_SignatureCreationTime);

// 设置必要的验证模式。

ltv_verifier.setVerifyMode(LTVVerifier.e_VerifyModeAcrobat);

SignatureVerifyResultArray sig_verify_result_array = ltv_verifier.verify();

for (long i = 0; i < sig_verify_result_array.getSize(); i++) {

//ltv状态在这里是e_LTVStateEnable。

int ltv_state = sig_verify_result_array.getAt(i).getLTVState();

… // 用户可以从SignatureVerifyResult中获取其他信息。

}

}

// 完成所有操作后,释放时间戳服务器管理器。

TimeStampServerMgr::Release();

**完整样例请查看GSDK包中的ltv.java。