/* * 複数の PDF 文書に PKCS#11 で署名を付与: * 複数の PDF 文書に電子署名を行う方法を示し、PKCS#11 トークンのためのセッション処理を演示します。 * * 必要な製品 : PDFlib PLOP DS 5 * 必要なデータ : demo_signer_rsa_2048.p12 * demo_signer_rsa_2048.p12 は data ディレクトリにあります。 * demo_signer_rsa_2048.p12 のパスワードは demo です。 */ import java.io.*; import com.pdflib.plop; import com.pdflib.PLOPException; public class multisign { public static void main (String argv[]) { plop plop = null; /* 基本的な署名オプション */ String sign_opts = /* ltv オプション:長期検証(LTV)をするかどうかを指定する。 LTV を行う場合は full を指定する(デフォルト:try) */ "ltv=try " + /* engine オプション:電子署名を作成するための暗号化エンジンを指定 digitalid オプション:暗号トーク ンに対する PKCS#11 DLL/共有ライブラリの名前を指定 */ "engine=pkcs#11 digitalid={filename=cryptoki.dll}"; boolean PKCS11 = false; try { /* 既存 PDF に関する変数を用意する */ String optlist; String signed_name = ""; String searchpath = "../data"; int doc; int i; /* 実行ファイルに渡す引数(取込む既存 PDF 名)のチェックを行う */ if (argv.length < 1) { throw new Exception("usage: sign ..."); } /* PLOP オブジェクトを作成する */ plop = new plop(); /* 読み込みたいファイルの入ったディレクトリを指定する */ optlist = "searchpath {" + searchpath + "} "; plop.set_option(optlist); /* @電子署名を作成する */ if (plop.prepare_signature(sign_opts) == -1) { throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); } PKCS11 = true; /* 取込みたい PDF 文書の数分、処理を繰り返す */ for (i = 0; i < argv.length; i++){ System.out.println("Signing '" + argv[i] + "'"); /* A既存の PDF 文書を開く */ if ((doc = plop.open_document(argv[i], "")) == -1) { System.err.println("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); continue; } /* 電子署名付与後のファイル名を指定する */ signed_name = argv[i] + "-signed.pdf"; /* B電子署名を PDF に付与して出力する */ if (plop.create_document(signed_name, "input=" + doc) == -1) { System.err.println("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); if (PKCS11){ if (plop.prepare_signature(optlist) == -1) { throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); } if (plop.create_document(signed_name, "input=" + doc) == -1) { throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); } } } /* CPDF文書を閉じる */ plop.close_document(doc, ""); } } catch (PLOPException e) { System.err.println("PLOP exception occurred in multisign sample:"); System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() + ": " + e.get_errmsg()); } catch (Exception e) { System.err.println(e); } finally { /* PLOP オブジェクトを削除する */ if (plop != null) plop.delete(); } } }