========================================
PDF長期署名ライブラリ LE:PAdES:Lib
PDF基本署名ライブラリ LE:PAdES-Basic:Lib
Ver 1.09.R1版 「最初にお読みください」
有限会社ラング・エッジ 2024年08月19日
========================================
■ 最初にお読みください
本ドキュメントは、有限会社ラング・エッジが開発した以下のPDF電子署名ライブラリに
ついての全体の説明をするファイルです。
・PDF基本署名ライブラリ LE:PAdES-Basic:Lib
ISO32000-1のPDF署名対応、PDFの公開や暗号化の用途に最適なライブラリ
※ LE:PAdES-Basic:LibはLE:PAdES:Libのサブセット版となります。
・PDF長期署名ライブラリ LE:PAdES:Lib
ISO32000-2のPDF長期署名対応、PDFの長期保管用途に最適なライブラリ
※ LE:PAdES:LibはLE:PAdES-Basic:Libと長期署名APIのフルセット版となります。
詳しくは以下のサイトをご覧ください。
http://www.langedge.jp/biz/LePAdES/about.html
■ 評価版について
評価版については以下の制限があります。
1.評価版で入力するPDFは最大3ページまでとなります。
2.評価版で付与する電子署名の署名理由には常に「LE:PAdES:Lib Evaluation」がセットされます。
3.評価版はフル機能の長期署名版(LE:PAdES:Lib)となります。署名基本版(LE:PAdES-Basic:Lib)の
評価版はありません。
4.評価版にソースコードは付属しません。
評価版の確認はLpaCmdを実行することで確認可能です。
・Windows版の実行方法
> bin_win/Release/LpaCmd.exe
・Linux版の実行方法
$ bin_linux/LpaCmd.sh
○ 以下のように "[EVAL]" が表示された場合は評価版です。
LpaCmd : LePAdES(V1.0X.RX)/LePKI(V1.0X.RX) [EVAL] LangEdge PAdES Command.
^^^^^^
○ 以下のように表示された場合は製品版です。
LpaCmd : LePAdES(V1.0X.RX)/LePKI(V1.0X.RX) LangEdge PAdES Command.
or
LpaCmd : LePAdES(V1.0X.RX)/LePKI(V1.0X.RX) LangEdge PAdES-Basic Command.
■ ドキュメント説明
readme-LePAdES.txt : 本ファイル、全体に関する説明とリリース履歴。
doc/LePAdES-manual.pdf : LE:PAdES:Libの製品マニュアル(エラーコード)。
doc/LePAdES/cmd/*-help.txt : コマンドラインの利用方法のヘルプファイル。
doc/LePAdES/cpp/index.html : CPPのAPIリファレンスファイル。
doc/LePAdES/java/index.html : JavaのAPIリファレンスファイル。
doc/LePAdES/dotnet/index.html : .NETのAPIリファレンスファイル。
doc/LePAdES/*.pdf : その他参考ドキュメント類。
■ LE:PAdES:Lib/LE:PAdES-Basic:Libモジュール構成
LE:PAdES:Lib/LE:PAdES-Basic:Libは大きく2つのモジュールに分けられます。
・LePKI : LangEdge PKI 操作モジュール
長期署名に対応したPKI操作の為のモジュール。
※ LE:XAdES:Lib等と共有されるモジュールです。
・LePAdES : LangEdge PAdES 操作モジュール
PDF署名に対応したPAdES操作の為のモジュール。
※ LE:PAdES:LibとLE:PAdES-Basic:Libでは同じファイル名で内容が異なります。
モジュールやライブラリ・ソース等もモジュール毎に分けられています。
LE:PAdES:Lib/LE:PAdES-Basic:Libを利用するにはLePKIとLePAdESの両方のモジュールが
必要となります。
■ フォルダ構成
1)LE:PAdES:Lib/LE:PAdES-Basic:Libを利用するのに必要なフォルダ
// 実行に必要なフォルダ
bin_win : 実行ファイル(Windows用) 必要なDLLファイルやコマンドが入っている。※1
lib_linux : リンクライブラリ(Linux用) 必要なsoファイル等が入っている。※2
bin_linux : 実行ファイル(Linux用) 実行スクリプト LpaCmd.sh が入っている。
java/lib : Java用のライブラリフォルダ。※3
// API組み込み時に必要なフォルダ
include : インクルードフォルダ この下へインクルードパスを通す。
lib_win : リンクライブラリ(Windows用) この下へライブラリパスを通す。※1
// クライアント署名用フォルダ
clientV2 : クライアント署名Ver2用のフォルダ。
client : クライアント署名Ver1用のフォルダ(過去互換性の為)。
// ドキュメント関連
doc : マニュアルファイルやAPIリファレンス用フォルダ。
license : フリーライブラリのライセンス用フォルダ。
※1 Windows環境用は更にbin_win下が以下のサブフォルダに分かれている。
Release : Windows 32bit リリース版
Release64 : Windows 64bit リリース版
Debug : Windows 32bit デバッグ版
Debug64 : Windows 64bit デバッグ版
なお.NETのDLL(LePAdESdnet.dll)はPATHを通すだけでは使えない場合があります。
利用する実行ファイル(例:LpaCmd.exe)と同じディレクトリに入れるかアセンブリの
解決が必要となる場合があります。
※2 Linux環境でC++/Javaから使う場合には、lib_linux に対して LD_LIBRARY_PATH
環境変数をセットするか、lib_linux の中にあるファイルを標準のライブラリ
ディレクトリ(/usr/lib 等)にコピーをする必要がある。
詳細は readme/LePAdES/readme-linux.txt または製品マニュアルを参照。
※3 JavaのAPIを利用しないなら不要
2)LE:PAdES:Lib/LE:PAdES-Basic:Libをビルドするのに必要なフォルダ
src : LE:PAdES:Libビルド用ソースフォルダ ※4
local : フリーライブラリ用フォルダ ※4
java : Java用のソースとビルド用フォルダ
dotnet : .NET用のソースとビルド用フォルダ(DLLファイルはbin_winの下)
clientV2 : クライアント署名Ver2用のフォルダ
※4 評価版には含まれない
3)その他
sample/LePAdES/cmd : LpaCmdによるサンプルソース ※5
sample/LePAdES/cpp : C++のAPI実装によるサンプルソース ※5
sample/LePAdES/java : JavaのAPI実装によるサンプルソース ※5
sample/LePAdES/cs : .NETのAPI実装によるC#用サンプルソース ※5
※5 Windowsの64ビットを利用する場合にはバッチファイルに引数 "64" を指定する。
■ コマンド利用サンプル
sample/LePAdES/cmd の下に格納されています。
// Windows
CmdAll.bat : 全サンプルの実行 ※6
CmdSignTest.bat : 署名付与サンプル(署名フィールドと署名を一括)の実行バッチファイル ※6
CmdStepTest.bat : 署名付与サンプル(署名フィールドと署名が別)の実行バッチファイル ※6
CmdPadesTest.bat : 長期保管サンプル(署名+検証情報保存+タイムスタンプ)の実行バッチファイル ※6 ※7
CmdDoctsTest.bat : ドキュメントタイムスタンプ付与サンプルの実行バッチファイル ※6
CmdVerifyTest.bat : 検証実行サンプルの実行バッチファイル ※6
CmdClientTest.bat : クライアント署名対応サンプルの実行バッチファイル ※6
CmdHsmTest.bat : HSM利用サンプルの実行バッチファイル(署名値はPKCS#12ファイルで計算) ※6
// Linux
CmdAll.sh : 全サンプルの実行
CmdSignTest.sh : 署名付与サンプル(署名フィールドと署名を一括)の実行シェルファイル
CmdStepTest.sh : 署名付与サンプル(署名フィールドと署名が別)の実行シェルファイル
CmdPadesTest.sh : 長期保管サンプル(署名+検証情報保存+タイムスタンプ)の実行バッチファイル ※7
CmdDoctsTest.sh : ドキュメントタイムスタンプ付与サンプルの実行シェルファイル
CmdVerifyTest.sh : 検証実行サンプルの実行シェルファイル
CmdClientTest.sh : クライアント署名対応サンプルの実行バッチファイル
CmdHsmTest.sh : HSM利用サンプルの実行バッチファイル(署名値はPKCS#12ファイルで計算)
※6 Windowsの64ビットを利用する場合にはバッチファイルに引数 "64" を指定する。
※7 実行にはフル版であるLE:PAdES:Libが必要。LpaCmdのヘルプで確認可能。
sample/LePAdES/pdf : サンプル用の入力PDFファイル用フォルダ
sample/LePAdES/LeTest.p12 : サンプル実行用の証明書(PKCS#12/パスワード"test")
sample/LePAdES/image.png : サンプル実行用の画像ファイル
sample/LePAdES/store/ : サンプル用の独自証明書ストアディレクトリ
■ 更新履歴
Ver1.09.R1版 : 2024-08-19
・RC4 40bitsの暗号化のうち V=1/R=3 (ただしISO仕様違反)の時の処理に対応。
・OCSPの失効日時の取得に失敗して常に現在時刻での失効確認になっていた問題の修正。
・OCSP優先時でも埋め込みか外部から提供されたCRLをまずチェックするように仕様変更。
・CRL優先時でも埋め込みか外部から提供されたOCSPをまずチェックするように仕様変更。
・PKCS#11の署名時に例外になる箇所があり修正した。
・PT_SUBJECT_ALTを指定した場合に別名がマージされていなかった問題を修正した。
・CRLへの署名証明書の認証パス構築に間違いがあったので修正した。
この問題はCRL用の署名証明書を別にした場合にのみ問題があった。
・PAdESにてCAdES/PKCS#7のECDSA(楕円曲線暗号)署名検証にベータ対応した。
PAdESにてCAdESのECDSA署名付与にベータ対応した。
ただしベータ版につきPKCS#11の署名は非対応、OCSP/CVSによる検証は動作未確認。
ECDSA対応に伴い以下APIを追加。
LpkCert::getKeyAlg() // 証明書の公開鍵方式をLPK_RSAかLPK_ECDSAで返す
LpkCades::getSignType() // CAdESの署名方式をLPK_SIGNで返す
LpkPkcs7::getSignType() // PKCS#7の署名方式をLPK_SIGNで返す
ECDSA対応に伴い検証結果XMLの"Sign"要素に署名方式の属性"signtype"を追加。
・検証時のオプションフラグとしてCVS(証明書検証サーバー)向け機能を2つ追加。
LPKV_OPT_USECVS: CVSで検証済みの検証処理をおこなう ※1
LPKV_OPT_USECONSTR: 証明書の基本制約とCRL/ARLのチェックをおこなう ※2
※1 LPKV_OPT_USECVSはCRLへの署名証明書の公開鍵が一致しない場合であっても
Issuerが一致すれば検証する等の処理をおこなう為のフラグ。CVSの場合には
CRLの認証パスまでは返さない為の措置であり通常は指定しないことを推奨。
CVS検証結果を使う時のみ利用する。
※2 LPKV_OPT_USECONSTRはCVS等でCRL/ARLが混在して返される場合に正しいもの
を識別して利用する為のフラグ。CVS利用に限らずARLを正しく識別して利用
したい場合に利用する。
Ver1.08.R3a版 : 2024-03-04
・タイムスタンプリクエストのNonceの1バイト目を0x04固定とした。
Nonceの1バイト目が 0x00 or 0xFF の場合に処理できない他社実装がある為。
Ver1.08.R3版 : 2024-01-22
・OpenSSLを3.1.1にしたことで一部のPKCS#7署名の検証に失敗していた問題の修正。
・OpenSSLを3.1.1にしたことで一部のタイムスタンプの情報取得に失敗していた問題の修正。
・異常なタイムスタンプトークンの解析に失敗した場合に例外を生じる問題の修正。
・画像解析を指定した場合に未サポートの /ASCII85Decode でエンコードされていた場合に
例外を生じる問題の修正。署名検証機能には影響は無くPDF解析時のみ影響がある。
・Windows版の認証付きプロキシ環境でWinHTTP(デフォルト)を使った場合にエラーになり
通信できない問題の修正。現在Basic認証のみサポート。NTLM/PASSPORT/DIGEST等の認証が
必要な場合にはご連絡ください。
・PDF解析結果XMLとして署名オプション情報の取得が可能となった。
API利用時にはLePAdES.parse()のflagにPDA_PARSE_FLAG::PPF_SIGN_OPT_INFOを指定する。
LpaCmd利用時には -pflag sigopt を指定する。
出力されるXML仕様はマニュアル LePAdES-manual.pdf の「9.PDF解析結果XML」に記載。
・LE:PKI:LibのV1.08.R3への更新。
・LE:PAdES:LibマニュアルとLE:PKI:Libマニュアルの更新。
Ver1.08.R2版 : 2023-10-27
・OpenSSLを3.1.1にしたことで属性証明書を含むタイムスタンプトークンの検証に失敗を
していた問題の修正。なおOpenSSLの修正となる。
・AES 256bitsにて暗号化されたPDFファイルの読み込みが失敗する問題の修正。
・証明書にV_ASN1_BMPSTRING(UTF-16BE)が使われていた場合に情報取得に失敗をする問題
の修正。
・証明書にDN形式のCRLDPがある時にLPKV_NOUSE_LDAPを指定してもCRL取得しようとする
問題の修正。DN形式のCRLDPはGPKI証明書等で使われている。
・OpenSSLの3.1.1完全移行に向けてOpenSSLレガシーAPIの利用停止。
・LpaCmdで検証結果XMLを画面表示する場合(-result のみ指定)に結果の Verified 等
を表示しないように変更した。
Ver1.08.R1版 : 2023-08-30
・Ver1.08.R1はメジャーバージョンアップとなり2箇所の仕様変更があるので注意。
またマニュアルとしてLE:PKI:Libは doc/LePKI-manual.pdf として別となった。
LE:PKI:Libのコマンド LpkCmd.exe/LpkCmd.sh も提供されるようになった。
Windows版の実行時に LePKI.dll と LePAdES.dll だけで良く他のDLLは不要になった。
※ 必要なライブラリは全てスタティックリンクするようになった。
※ ただしJava利用時には LePKIjni.dll と LePAdESjni.dll が必要。
※ ただし.NET利用時には LePKIdnet.dll と LePAdESdnet.dll が必要。
・検証時の優先をCRLからOCSPへ変更した。※注意:仕様変更1、Windows版Linux版共通
優先とは証明書にCRLDPとOCSPのURLがある場合にどちらを先に使うかの指定と言う意味。
従来デフォルトでは先にCRLをチェックして次にOCSPをチェックしていた。
今後デフォルトでは先にOCSPをチェックして次にCRLをチェックするようになった。
従来通りCRL優先としたい場合には以下の対応が必要となる。
API利用時:検証オプション LPKV_PRIOR_CRL を指定する。
※ LPKV_PRIOR_OCSP の指定も可能だが LPKV_PRIOR_CRL の指定が優先される。
コマンド利用時:引数 -prior crl を指定する。
※ 従来の -prior ocsp を指定してもエラーにはならない。
・Windows版のLePKIからのHTTP通信の標準をWinInetからWinHTTPに変更した。※注意:仕様変更2
WinHTTPはWindows Updateで使われているHTTP通信方式。
従来通り WinInet を使う場合は以下のAPI引数の htype に LPK_HTTP_WININET を指定する。
※ LePKI.setHttp() と LpkTimestamp.setHttp() は新しく追加されたAPI。
LePKI.setHttp(LPK_HTTP_TYPE htype); // 検証時のCRL/OCSP取得のHTTP方式の指定
LpkTimestamp.setHttp(LPK_HTTP_TYPE htype); // タイムスタンプ取得時のHTTP方式の指定
LpkUtil.getCrl(..., LPK_HTTP_TYPE htype); // CRL取得時のHTTP方式の指定
LpkUtil.getOcsp(..., LPK_HTTP_TYPE htype); // OCSP取得時のHTTP方式の指定
LpkUtil.getOcsp2(..., LPK_HTTP_TYPE htype); // 独自OCSP取得時のHTTP方式の指定
LpkUtil.getCvs(..., LPK_HTTP_TYPE htype); // CVS検証結果取得時のHTTP方式の指定
LpaCmd では引数 -http inet を指定することで従来と同じWinInetの利用が可能。
・Windows版のLePKIからのHTTP通信にてLinux版と同じSocket+OpenSSLの指定が可能となった。
API利用時には LPK_HTTP_SOCKET を指定、コマンド利用時には -http sock を指定。
※ プロキシ設定 proxy.ini は実行モジュール(LpaCmd.exe等)と同じか C:\Temp 下から読み込む。
※ Linux版では従来通り LPK_HTTP_SOCKET のみサポートとなり他の指定は不可となっている。
・OpenSSLの1.1.1のサポートが2023年9月11日で終了の為に3.1.1に更新した。
https://www.openssl.org/blog/blog/2023/03/28/1.1.1-EOL/
・Visual Studio 2022 に対応した。src/LePAdES2022.sln にてリビルドが可能。
※ Visual Studio 2010/2012 はマイクロソフトのサポート期限切れにつき未サポートとなった。
サポートする Visual Studio は、2013/2015/2017/2019/2022 となった。
・署名証明書を取得する PdaSign.getSignCert() が追加された。
手順1)LePAdES.getSign() にて PdaSign を取得。
手順2)PdaSIgn.getSignCert() にて LpkCert として署名証明書が取得可能。
・検証時に署名証明書認証パスのトラストアンカー指定 rootCert が指定可能となった。
証明書検証サーバー(CVS)等で取得した検証情報を利用する場合等に指定する。
CVSの場合はCVS取得時指定のトラストアンカーと同じ証明書をverifyの引数に指定する。
LpaCmdでは引数 -root 証明書ファイル.cer で指定が可能。
もしルート証明書がトラストアンカーと異なる場合には従来通りの認証パス構築となる。
・LpaCmd の検証 -verify 時に -result のみ指定すると標準出力に検証結果XMLを表示する
ようになった。ex) LpaCmd -verify -result -in signed.xml
・1バイト目が改行コードのPDFファイル(ISO仕様違反)も読み込めるように修正した。
・/Pageに/Annotsの間接指定があり間接指定されたオブジェクトのxrefにサイズゼロでの
情報が存在するがオブジェクト自体は無い場合(PDF仕様違反)に例外を生じていた問題
の修正。
・署名オプションのSignInfoの埋め込み文字列をUTF16LEからUTF16BEに変更。
LE(Little Endian)ではISO仕様に適合しない為。
・AESV2/AESV3の暗号化時のPADDINGにおいて割り切れるサイズの場合でもパディングする
必要があった問題の修正。PADDINGの仕様はRFC 8018から参照しているRFC 1423 にて定義
されている。なお復号時は同仕様に対応済み。
・MDP署名のP=3/Lock署名のP=3 の時に署名フィールド付与が出来ない問題の修正。
P=3 は「注釈の作成、フォームフィールドの入力と署名フィールドに署名」であり、
署名フィールドの作成は可能で無ければならない。
・LpaCmdの引数に"で囲っても中にスペース文字があった場合に正しく引数を認識しない問題の修正。
・Linux版にてシステムのタイムゾーン値取得時に異常な値だった場合にはローカル時刻との差分で
タイムゾーン計算するように修正した。それでも失敗した場合にはタイムゾーンはゼロとして扱う。
・Linux版にて文字列セット時のUSC4変換のチェックを厳しくした。
またJavaの PdaSign.setOptInfo() に戻り値 int を追加してUCS4変換エラーがあった場合に検知
出来るように修正した。
・オブジェクトの重複があった場合に-4220/PDA_ERR_UPDATE_BYTERANGEとなる場合が
あったので修正した。
・事前に複数の署名フィールドを用意した後で外観付き署名付与を行った場合に
Adobe Reader にて [フォームフィールドのプロパティが変更されました] と表示される
ケースがあった問題の修正。
・PKCS#7署名の検証に失敗することがあったので修正した。
DigestInfoのPARAMETERS NULLが無い場合にOpenSSL1.1.1で検証できなかった問題。
・CRL取得がシングルスレッド実行されていた為にCRL取得のタイムアウトがあった場合に
他のCRL取得が出来ない問題の修正。
・Linux版プロキシ利用時のマルチスレッド対応で稀に失敗する問題の修正。
・LpaCmdの設定XMLを -type docts で使った場合にエラーになる場合があった問題の修正。
Ver1.07.R6a版 : 2023-02-13
・2023年2月9日に見つかったOpenSSLの脆弱性対応の為にOpenSSLを1.1.1tに更新した。
脆弱性情報 https://jvn.jp/vu/JVNVU91213144/
OpenSSLはLePKIからのみ利用しておりLePAdESの修正は無い。
Windows環境は更新に伴い外部DLLファイル(libeay32L.dll/ssleay32L.dll)が不要となった。
Ver1.07.R6版 : 2023-01-20
・期限切れに伴い試験用の独自証明書類を更新しリポジトリを公開。
sample/***/LeTest.p12 や sample/***/store/trusts/ の下等を更新。
[LE認証局リポジトリ]
https://www.langedge.jp/democa/
[LE製品サンプル更新ファイル]
https://www.langedge.jp/democa/le-ca-update-2023.zip
・Subject/Issuer/SubjectAltNameにサロゲートペア文字を使った証明書の署名パネル上の表示
が文字化けしている問題を修正した。
※注:Subject/Issuer/SubjectAltNameにサロゲートペア文字を使った証明書のテキスト印影
に関しては現在未サポートです。
・配信CRLがPEM形式でも読み込み可能となるように修正した。
・/Pagesの下にページがゼロ(1ページも無い)場合にエラーにならないよう修正した。
・/EmbeddedFiles があるのに中に添付ファイルが無い場合にエラーにしないように修正した。
・CropBoxの指定があるページに対して署名印影を指定した場合に位置がずれる問題の修正。
CropBoxがある場合にはMediaBoxに代わってCropBoxを使う。
・オブジェクト番号が穴あき状態になっているPDFファイルの場合に署名に失敗することが
ある問題の修正。
・LpaCmdの -server オプションとして -opt 引数が正常に処理されていなかった問題の修正。
事前検証の -opt prevf 等が使えていなかった。
・MediaBoxの原点がゼロ以外の場合の署名外観位置のズレ問題を修正した。
Ver1.07.R5版 : 2022-09-05
・最後の署名後に更新があるかどうかを判定する LePAdES::isUpdate() を追加した。
もし署名やタイムスタンプの付与直後に true が返される場合には余計な情報が追加された
可能性がある。なお addLTV() 後は検証情報を埋め込んでいるので true となるので注意。
/** 最後の署名後に増分更新で情報追加されているかどうかを返す\n\n
*
* @retval bool値 true/falseで結果を返す
* @note 最後の署名/タイムスタンプのByteRangeの後ろにデータがあるかどうかを確認する
* @note addLTV() 後に本APIを実行すると true が返るので注意(検証情報が追加される為)
*/
bool isUpdate();
LpaCmdコマンドの検証引数に最後の署名後に更新を判定する -isupdate を追加した。
-isupdate : 署名後に更新されたかどうかを表示する(true/false)
・署名外観に利用する証明書情報(PDA_TEXT_TYPE)に所有者別名を利用するオプション
PT_SUBJECT_ALT を追加した。別名がある場合にはそちらを優先して利用する。
LpaCmd では -text オプションに suba として指定が可能。
・証明書の所有者別名(subjectAltName)が正しく取得出来ない場合があったので修正した。
・Windows版においてSIGSEGV(セグメンテーション違反)時の例外をcatchしてthrowされるように
修正した。なおLinux版においてはthrowが出来ない為に従来通り例外のままとなる。
・clientV2 フォルダの下を、クライアント署名V2.1.R2 に更新した。
詳細はクライアント署名V2マニュアル clientV2/doc/LeClientSign.pdf を参照。
・LpaCmdの -client オプションの仕様を変更して、Linux版でも動作するように修正した。
仕様は clientV2/doc/LeClientSign2-manual.pdf の「4.1.独自通信XMLプロトコル」を参照。
これに伴い以下のサンプルを追加または修正した。
sample/LePAdES/cmd/CmdClientTest.bat ← 最もシンプルな利用方法例
sample/LePAdES/cmd/CmdClientTest2.bat ← 署名外観やタイムスタンプを使う利用方法例
sample/LePAdES/cmd/CmdClientTest.sh ← 最もシンプルな利用方法例
sample/LePAdES/cmd/CmdClientTest2.sh ← 署名外観やタイムスタンプを使う利用方法例
sample/LePAdES/java/LePAdES_client.java ← クライアント署名Ver2の利用APIに変更
sample/LePAdES/java/JavaClientTest.bat
sample/LePAdES/java/JavaClientTest.sh
・LpaCmdの -server オプションの仕様を変更して、クライアントからの要求XMLを標準入力からでも
指定出来るように修正した。
・PDF内部のHEX文字列の途中で改行がある場合に無限ループとなる可能性があった問題の修正。
・DSS辞書が既に存在している場合のaddLTV()時にDSS辞書が更新されない問題の修正。
なおVRI辞書は更新される。
・LePAdESクラスの添付ファイル追加APIの addEmbedFile()/addEmbedBinary() が署名済みのPDFに対し
実行された場合には(-4851/PDA_ERR_ALREADY_SIGNED)を返すようにした。
LpaCmdの -embedadd 引数でも(-4851/PDA_ERR_ALREADY_SIGNED)エラーとなる。
署名済みのPDFファイルに対して追加等の処理は不正となる為。
・PDFのMediaBoxの値においてx1とx2またはy1とy2が入れ替わっている場合でも正しく署名フィールド
の位置を指定できるように修正した。
・Object Stream 解析時の最大バッファサイズの指定に誤りがあったので修正した。
この為にメモリ状態によっては挙動が変わる場合があった。
・未使用のPDFオブジェクトがあった時に誤動作する場合があったので修正した。
・xrefの情報が誤っている不正PDFの場合に例外となる場合があったので修正した。
・ByteRangeの情報が誤っている不正PDFの場合に例外となる場合があったので修正した。
・署名情報が誤っている不正PDFの場合に例外となる場合があったので修正した。
・.NETのAPIにおいてsaveEmbedFileにてユニコードの扱いを間違えていた問題を修正した。
・LpkTimestampTokenクラスに証明書とCRLを埋め込む addValidationData() を追加。
※ PAdESでは通常使いません。
Ver1.07.R4版 : 2022-05-25
・サイズがゼロの添付ファイルをエラーにしていたが正常に扱えるように修正した。
・暗号化PDFファイルの文書ID情報が空文字だった場合の修正。
文書ID情報は暗号化キー計算時に必要な為に空だと(-2101/LP_ERR_PARSE_KEY)となる。
文書IDは暗号化ファイルでは必須項目だが空の場合に未対応であった為の修正。
・添付ファイル処理APIのファイル名引数にユニコード(WCHAR)を使う以下APIを追加。
int LePAdES::saveEmbedFile(int embedNumb, const WCHAR* embedPath) const;
int LePAdES::addEmbedFile(const WCHAR* embedPath);
int LePAdES::addEmbedBinary(const BYTE* ptr, SIZE len, const WCHAR* embedName);
機種依存文字を使う場合にはこちらのAPIを利用。
Javaと.NETのAPIも内部的にユニコードを使うように修正。
・添付ファイルの追加時に一部PDF仕様違反があったので修正した。
添付ファイルリストは表示されるが開けない場合があった。
・圧縮率が非常に高いXRefStm(ストリーム形式のXREF)があった場合に展開バッ
ファが不足して読み込みに失敗(-2040/LP_ERR_PARSE_XREF)することがあった。
展開バッファが足り無い場合には拡張して読み込むように修正した。
・CAdESの署名証明書情報(SigningCertficateV2)に古い形式(V2より前)を
使っている場合にも検証できるようにした。なお古い形式の署名証明書情報は
CAdES仕様としては違反となる。
既存:SigningCertificateV2(1.2.840.113549.1.9.16.2.47)
追加:SigningCertificate(1.2.840.113549.1.9.16.2.12)
・PDFのタイトル情報等に異常な文字列が含まれている場合にLinux版において
文字列の変換に失敗して-2023(LP_ERR_OBJ_SAVE)となる場合があった。
変換に失敗した場合には変換等を行わずそのまま利用する修正を行った。
なおWindows版では正しくは無いが文字列変換は成功するので現象は出ない。
・xrefによる管理テーブルの情報が誤っているが、PDF本体のオブジェクトの
情報は正しい場合にはオブジェクト情報から内部の管理テーブルを更新して
リカバリーするように修正した。この場合にはほぼ同じ情報を重複して書き
出す為にファイルサイズは倍近くになる。
なお本現象を生じるPDFファイルはこれ以前は(-2021/LP_ERR_ROOT)のエラー
となっていた。
・署名/タイムスタンプの印影にPDFファイルを使った場合にリソース中に文字列
が含まれており、かつ処理対象PDFファイルがパスワード暗号化されていた場合
にリソース中の文字列が2重に暗号化されてしまい最初の1バイト目がたまたま
ゼロになると処理に失敗して(-2023/LP_ERR_OBJ_SAVE)を返す問題を修正した。
注:この修正により印影に利用するPDFファイルは暗号化していないものに制限
されます。なお処理対象PDFファイルは暗号化していても構いません。これ
は新しい制限となります。
・HTTP通信時のUserAgentがIE6の偽装になっていたのでIE11に変更した。
新:"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"
旧:"Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
・Windows環境でWindows証明書の「個人」に中間CA証明書等の秘密鍵を持たない
証明書があっても検証に失敗しないように修正した。通常はこのようなことは
ありません。
・暗号化済みPDFファイルに署名辞書がある場合に/Typeキーが省略されていると
署名データ(/Contents)を復号してしまう問題の修正。
/Type以外に/SubFilterをチェックするように修正した。
・検証結果XMLのの日付が常にPDFのM要素が格納されていたので
署名タイムスタンプがある時はタイムスタンプ時刻を格納するように修正した。
これでマニュアル記載通りの動作となる。
なおこの時刻は実際の検証処理で使われている時刻では無く単に表示だけの問題。
・署名理由等をJavaで取得する時にサロゲートペア文字等が正しく返せていなかった
問題の修正。
・XMPのサイズがゼロのケースにエラー(-2027/LP_ERR_METADATA)になっていた問題を
修正した。
・Windows版のC++のAPI LePAdES.saveFile() の引数はCP932(Shift_JIS)となる為に
機種依存文字が使えない問題があったので、引数にユニコード指定可能なAPIを
追加した。なお LePAdES.loadFile() にはユニコード指定可能なAPIは既に提供を
している。
/** PDFファイル出力\n\n
*
* @param path [IN] PDFファイルのパスを指定
* @param reload [IN] trueの場合にpath/outstrmがNULLなら一時メモリ/ファイルに保存して再読み込み(オプション)
* @param increment [IN] trueの場合は増分更新、falseの場合は出来れば通常更新を行うが増分更新になる場合もある(オプション)
* @param encrypt [IN] 未暗号化のPDFを暗号化をする場合に暗号設定を指定する(オプション:V1.0では未サポート)
* @retval マイナス値 エラーコードが返る
* @note 入力PDFが暗号化されている場合は暗号化設定がそのまま引き継がれる
* @note ファイル名に機種依存文字等を利用する場合にはこちらを利用すること
*/
int saveFile(const WCHAR* path, bool reload = false, bool increment = true, const PdaEncrypt* encrypt = NULL);
.NETの loadFile()/saveFile() でも機種依存文字が使えるように修正した。
またLpaCmdの引数にも機種依存文字が使えるようにした。
・証明書を設定XMLからセットする際に誤りがあったので修正した。
・不正な注釈があっても上書きして署名フィールドを生成できるように修正。
・PKCS#11利用時のパスワードが正常に渡らない場合がある問題の修正。
Ver1.07.R3版 : 2022-02-14
・LTV状態かどうかを判定する PdaVerifyXml.isLTV() を追加した。
証明書/CRL/OCSPの "from" が "network" の物があれば false(0) が返る。
"network" 取得が無ければ true(1) が返る。
/** LTV(長期検証状態)を判定して返す\n\n
*
* @retval LTVの場合=1, LTVでは無い場合=0
* @retval マイナス値 エラーコードが返る
*/
int isLTV() const;
LpaCmdコマンドの検証引数にLTV判定する -isltv を追加した。
-isltv : 検証結果がLTVかどうかを表示
・XMP読み込み実行の設定をする LdPAdES.loadXmp() を追加した。
XMPの異常で解析に失敗する場合でも loadXmp(false) を指定するとPDF読み込み時に
XMPを読み込まない。ただしその場合にXMP操作は行えない。
/** XMP読み込み設定\n\n
*
* @note 未指定時のデフォルト設定はtrueとなる
* @note loadFile/loadStream/loadBinaryを呼び出す前に利用する
* @note XMP異常(-2054)があるがPDFファイルとしては正常な場合にfalseを指定する
* @note falseを設定した場合にはXMPに関する操作は行うことが出来ない
*/
void loadXmp(bool load);
LpaCmdコマンドの引数にXMP読み込みをしない -noxmp を追加した。
-noxmp : XMP読み込みしない(XMP操作しない)
・.NETのAPIでバイナリ等が返される場合に lastError() により最後のエラー値を
取得できるようになった。
・Windows版のPKCS#11を使った場合にうまく署名が出来ないケースがあったので
対応した。HPKIのICカードで試験して動作を確認した。
・Linux版において署名理由や署名場所に欧州文字等のSHIFT_JIS(CP932)に変換が
出来ない文字があった場合に該当文字が出力されない問題を修正した。
Java/.NETからであれば何もしないで対応しているが、C++においては LeString
に setWStr() にてユニコード指定した場合のみ対応となる。
なお印影文字列の署名理由等については内部コードがSHIFT_JIS(CP932)である
為に変換できない文字は出力されないがこれは仕様とする。
・署名理由や署名場所の指定に「髙」(はしごだか)等が入っていると署名時に
エラー(-2023)になる場合があった。エラーにならなくても該当文字が出力が
されない場合があった。この問題の修正をした。
・XMPのpdfx名前空間が他ツール等でXML正規化された後に設定されない問題を修正
した。
・XMPに属性として標準情報が入っていたケースに対応した。
名前空間プリフィックス不一致時の未整合の問題を修正した。
・タイムスタンプトークンのフォーマット異常時に例外となる場合があった。
エラーとして返すように修正した。
・PKCS#7の検証時にAdobe仕様の失効情報(CRL/OCSP)の埋め込みに対応した。
注意:署名時のAdobe仕様の失効情報の埋め込みはPKCS#7では出来ない。
CAdESでは埋め込み可能なのでCAdESの利用を推奨。
・パスワード付きPDFの読み込み時に正しくパスワードデータの取得が出来ない例が
あったので修正して対応した。
・Amazon Linux上で利用した場合にiconv引数にNULLが渡されると例外になる為に
異常終了する場合があったのでNULLが渡らないように修正した。
iconvのバージョンアップによる仕様変更があったことが根本原因。
・setPropNameによるプロパティ設定時にXMLタグ名の対応を厳密にした。
1文字目:数字と、"_"と":"以外の記号と、空白文字はエスケープ文字対象
2文字目:"_"と":"と"."と"-"以外の記号と、空白文字はエスケープ文字対象
※ 注意:":"はエスケープ文字の対象ではありませんが非推奨文字となります。
・JavaのLpkCades::getSignHash()のJNI引数処理に誤りがあったので修正した。
JNI側の問題なのでJavaライブラリlepki-1.0.0.jarはそのまま利用が可能。
・署名理由などのリテラル文字列のエスケープ文字処理に誤りがあったので修正。
文字化けする場合があった。
・必須情報であるPDFのページ回転値取得に失敗した場合に例外を生じる問題の修正。
正しく値が取れる修正と共に必須情報が無い場合にも例外にならないようにした。
・xrefの指定が改行コード等で始まっている場合(PDF仕様違反です)に改行コード等
をスキップして読めるように修正した。
・その他警告レベルの細かな問題を修正した。
Ver1.07.R2版 : 2021-07-07
・Linux版のリリースビルドに従来のCentOSに加えてAmazon Linux 2を提供する。
どちらもRedHat系だが、Amazon Linux 版の方がビルド環境としては新しい。
1)CentOS 6.8 版 :gcc 4.4.7 / glibc 2.12
2)Amazon Linux 2版:gcc 7.3.1 / glibc 2.26 ※CentOS7系
なおRedHat系以外の場合には本体以外に利用しているライブラリ類の再ビルドが
必要となるケースがある。この場合には有償のサポートが必要となる場合がある。
・署名データ用の確保領域を増やした。
新:1024*20バイト/17キロバイト(旧:1024*15バイト/15キロバイト)
最近中間CA証明書の階層が増える傾向があり不足するケース(PDA_ERR_CONTENTS_BUF
:-4261)が出て来た為。なおこのエラーを生じた場合には明示的に確保領域を増やす
こと(LePAdES.setContentsDefaultSize()やコマンドの-contsize)で対応が可能。
・マニュアル4章を「4.PKI要素と署名方法」として更新した。
署名時の証明書/秘密鍵の指定方法や仮署名2等の情報を追加して再整理した。
doc/LePAdES-manual.pdf
・HSM利用(外部で署名値計算)を想定した仮署名2(CAdES署名データまで生成する
LePAdeS.makeEnhanced2機能)をコマンドLpaCmdでサポートした。
-make2 : 仮署名2 (CAdES署名データを生成しハッシュ値(HEX)を返す)
-value2 hash : 仮署名2 (試験用:ハッシュ値から署名値を計算)
-setval2 val : 仮署名2 署名値埋め込み (make2済みファイルに署名値埋め込み)
Linux版では仮署名2の実行時に証明書ファイル(X.509)の指定が可能となった。
-cert : 署名証明書指定 (署名時必須,doctsでは無効)
-cert x509 filepath : 指定証明書をファイルから指定(仮署名2用)
・仮署名2コマンドの利用サンプルを追加した。
Windows版:sample/LePAdES/cmd/CmdHsmTest.bat
Linux版 :sample/LePAdES/cmd/CmdHsmTest.sh
・CAdESの署名ハッシュ値計算のAPIである LpkCades.getSignHash() の引数に、
ハッシュアルゴリズムを指定する LPK_HASH hashType を追加した。
※ 仮署名2のハッシュアルゴリズムがSHA-256固定となっていた問題の解消の為。
・Windows版にて証明書ファイル(X.509)の指定にて証明書ストアの関連付いた秘密鍵
の利用指定が最新のWindows環境では動作しなくなっていた問題の修正をした。
・Windows版にてICカード設定を指定できる LpkCert::setCard2() を追加。
setCard2()で設定するとカード種別は LPK_CT_SPEC となるが、設定XMLに
情報を保存したり読み込んだりすることは出来ない。
/** ICカード証明書指定V2(Windows環境のみ)\n\n
* パラメータ指定してICカードを利用する
*
* @param provName [IN] プロバイダ名を指定
* @param provType [IN] プロバイダ種別を指定(PROV_RSA_FULL/PROV_RSA_AES等)
* @param provFlag [IN] プロバイダフラグを指定(CRYPT_SILENT等)
* @param keyType [IN] 鍵種別を指定(AT_SIGNATURE[2]/AT_KEYEXCHANGE[1]等)
* @param chain [IN] ICカードのCA証明書や証明書チェーンの取得
* @retval マイナス値 エラーコードが返る
*/
int setCard2(const CHAR* provName, int provType, int provFlag=0, int keyType=2, bool chain=false);
・LpaCmd の引数として -cert card type [numb] を追加してプリセットされた
ICカード設定を利用可能とした。numbとして以下の1から7まで指定が可能。
Numb, provName, provType, provFlag, keyType, chain
------------------------------------------------------------------------
1, "JPKI Crypto Service Provider for Sign", PROV_RSA_AES, 0, -1, true
2, "JPKI Crypto Service Provider for Auth", PROV_RSA_AES, 0, -1, true
3, "JPKI Crypto Service Provider", PROV_RSA_FULL, 0, -1, false
4, "Melco Standard-9 Enhanced Cryptographic Service Provider", PROV_RSA_AES, 0, -1, false
5, "NEC Secure Ware AES Cryptographic Provider", PROV_RSA_AES, CRYPT_SILENT, -1, false
6, "DNP Standard-9 Cryptographic Service Provider", PROV_RSA_AES, 0, 1, false
7, MS_SCARD_PROV_A, PROV_RSA_FULL, CRYPT_SILENT, -1, false
・メタデータが暗号化されたPDFの読み込み時に、メタデータ(XMP)読み込みに失敗する
問題の修正。
・互換性向上の為に一部のCAdESデータ仕様(標準的では無いPKCS#7的な形式)への対応。
・Windows版にてWindows証明書ストアのCNG形式で登録された秘密鍵に対応した。
Adobe Acrobatの "IDを追加"-"今すぐデジタルIDを新規作成"-"Windows証明書ストア" にて
登録するとCNG形式での登録となる。Windows版のみ。
・MDP署名にて/Pキーが無い場合に読み込みに失敗する問題の修正。
・署名フィールド名に日本語(マルチバイト)が使われている場合の問題を修正。
UTF-8では無くShift-JISになっていた。
・PDFのハイブリッドXREF構造への対応。詳細は ISO 32000-2 の 7.5.8.4章 参照。
Ver1.07.R1版 : 2021-01-15
・署名等でPDFを更新した時にXMPのModifyDateも更新するように変更した。
・Windows版で実行時に libxml2.dll と zlib1.dll が不要になった。
※ スタティックリンクによる組み込みに変更した為。
・Visual Studio 2017/2019 のビルドに対応した。
※ 現在 Visual Studio 2010/2012/2013/2015/2017/2019 に対応済み。
・AES-256bits (V=5 and R=6) の暗号方式の読み込みに対応した。
※ 読み込んだ後の保存にも対応している。
・Linux環境でXMPの編集操作(追加/上書き/削除)に対応した。
※ XML操作をWindows APIからlibxml2へ変更した。
・JavaのAPIでバイナリ等が返される場合に lastError() により最後のエラー値を
取得できるようになった。
・LpkCertに商業登記証明書の登記事項等を取得するgetRegisteredInfo()を追加。
・LpkCertに公的個人証明書(JPKI)の登録事項を取得するgetJpkiInfo()を追加。
・LpkCertのgetInfo()の引数に英語情報で返すenglishを追加。
・LePKIに証明書検証を行うverifyCert()/resultCert()/reportCert()を追加。
verifyCert() : 引数で与えられた証明書の検証を行い検証結果XMLを返す。
resultCert() : 検証結果XMLから検証結果(VALID/INDETERMINATE/INVALID)を返す。
reportCert() : 検証結果XMLから分かりやすいレポート形式文字列を生成して返す。
・LpkCertの証明書読み込み時にバイナリ(DER)で失敗した後でPEMで読み込みする
ように変更した。これでPEM形式の証明書も読み込めるようになった。
・HTTP/LDAP通信に失敗した場合には1度だけ0.5秒待ってリトライするようにした。
・その他細かなバグ修正と互換性アップの為の修正。
Ver1.06.R2版 : 2019-08-30
・署名データ用の確保領域を増やした。
新:1024*15バイト/15キロバイト(旧:1024*10バイト/10キロバイト)
・添付ファイルの読み込みと追加に対応した。
注:他社ツールによる添付ファイルとの完全互換を保証する機能ではありません。
追加API(C++/.NET/Java):
LePAdES::setParseEmbed() // PDF読み込み時に添付ファイルの解析を行うAPI
LePAdES::getEmbedFileNum() // 添付ファイル数を返すAPI
LePAdES::getEmbedFileName() // 添付ファイル名を取得するAPI
LePAdES::saveEmbedFile() // 添付ファイルを保存するAPI
LePAdES::saveEmbedBinary() // 添付ファイルをバイナリ保存するAPI
LePAdES::addEmbedFile() // 添付ファイルを追加するAPI ※1
LePAdES::addEmbedBinary() // 添付ファイルをバイナリ追加するAPI ※1
※1 既に他社ツールで追加した添付ファイルがあるPDFへの添付ファイルの追加は
仕様によっては未サポートの場合があります。基本的には添付ファイルが無い
PDFファイルへaddEmbedFile()/addEmbedBinary()により添付ファイルを追加
する仕様です。
追加引数(LpaCmd):
LpaCmdの -pdf コマンド時に以下引数を追加。
-embedlist : 添付ファイルのリストを表示する
-embedsave num [path] : 添付ファイルを保存する
path省略時はそのままのファイル名で保存
numが-1なら全添付ファイルをそのままのファイル名で保存
-embedadd path : 添付ファイルを追加する
・PDFの情報としてページ数とPDFバージョンを取得するAPIを追加した。
追加API(C++/.NET/Java):
LePAdES::getPageNum() // PDFページ数を返すAPI
LePAdES::getPdfVersion() // PDFバージョンを取得するAPI
追加引数(LpaCmd):
LpaCmdの -pdf コマンド時に以下引数を追加。
-pagenum : PDFページ数を表示する
-version : PDFバージョンを表示する
・タイムスタンプトークンからのCRL取得に対応した。
追加API(C++/.NET/Java):
LpkTimestampToken::getAllCrls() // タイムスタンプに含まれる全CRLを取得
・署名外観に画像(BMP/PNG/JPEG)を使った場合のエラー処理系でEXITする場合が
あったのでエラー PDA_ERR_APEA_MAKE_IMAGEFILE = -4424 を返すように修正。
・リンク証明書と複数のルート証明書が署名データに含まれている場合の認証パス
構築にミスがあり重複して無限ループに陥る可能性があったので修正した。
修正後は認証パス中に重複した証明書があれば除外するようになる。
リンク証明書を使わない場合の影響は無い。
・C#のAPIにおいてPdaErrとLpkErrクラスのgetDefine()/getMesg()引数をintに変更。
変更前は、PdaErrの引数はLPARETで、LpkErrの引数はLPKRETであった。
・書き込み禁止ファイルへの書き込み等のエラーを LP_ERR_SAVE_WRITER で返すように
した。
・同じインスタンスでsaveFileを2回以上実行した場合にエラーになっていた問題の修正。
・増分更新しない時のストリームの扱いに誤りがあったので修正した。
署名系の機能への影響は無い。
・増分更新しない場合のストリームの扱いに問題があったので修正。
署名処理等の通常の処理では増分更新なので影響は無い。
・署名時の事前検証用に検証フラグを指定可能とした。
検証フラグ PDA_VERIFY_FLAG を16ビット左シフトして利用する。
API例)flags |= (PVF_NOUSE_LDAP << 16);
LpaCmdには -opt 引数に以下を追加。
-opt : 署名オプション 省略時=none (doctsでは無効)
none : 署名オプション無し
nochn : 署名証明書のチェーンを埋め込まない (非推奨)
prevf : 署名前に署名証明書の検証を行う (検証に成功しないと署名できない)
arevo : 証明書の検証を行い検証情報を署名対象に追加する (cadesのみ)
noldap : 事前検証オプション LDAP経由のCRL/証明書取得を行わない
nohttp : 事前検証オプション HTTP経由のCRL取得を行わない
noocsp : 事前検証オプション OCSP取得を行わない
pocsp : 事前検証オプション OCSP優先検証
・.NETの検証情報埋め込みAPI利用時にStackOverFlowを生じる場合があった点の修正。
・一番外側のタイムスタンプ検証時刻仕様等の修正。
・検証時のCRL署名証明書のチェックを強化。
注意:異なる世代のルート証明書でCRLが署名している場合にINDETERMINATEとなる。
その場合の解決方法はCRL署名ルート証明書も信頼済みストアに入れて下さい。
・添付ファイルの上限を205Mバイトに変更した。
・署名時のメモリ利用量を削減した結果、以下の上限となった。
32bit版:400Mバイト程度のPDFファイルに署名が可能。
64bit版:2Gバイト程度のPDFファイルに署名が可能。
※ ただしその分のメモリが必要となるのでご注意ください。
・Windows版においてXMP処理時にメモリリークが生じていた。
その他細かいメモリ解放チェックを実施した。
・Windows版においてBasic認証付きPROXYの認証情報の設定方法の変更。
Squidにおいてhttps通信時に失敗をしていた問題の修正。
・検証時にLPKV_NOUSE_HTTP/PVF_NOUSE_HTTPを使った場合に結果としてINDETERMINATEでは
無くVALIDなるようにした。この場合にはVALIDになっても完全に検証は行われていない
ことになるので利用には注意が必要。長期署名時には使ってはいけないオフライン検証。
Ver1.06.R1版 : 2018-11-26
・透過PNGにも対応した新しい署名外観をサポートした。
透過PNGでは無い普通のPNG画像時にもJPEG圧縮されないので従来より綺麗な外観となる。
なお対応する透過PNGはアルファチャンネル付きとなる。
typedef enum {
(略)
PG_PNGBITMAP = 5 ///< 透過PNG対応のビットマップ(※setImage()にてPNGファイル指定が必要)
} PDA_GRAPHIC_TYPE;
LpaCmdには以下の引数を追加
-grap : 署名外観指定 省略時=name
(略)
png : PNGイメージ(透過部分も反映される)
・可視署名時に署名外観を指定しないことを許した。
・JPKI対応を住基カードからマイナンバーカードの署名用証明書に変更。
・検証時にCRL優先とOCSP優先の指定を可能とした。
また検証時のデフォルトをOCSP優先からCRL優先に変更した。
/** 検証フラグ */
typedef enum {
(略)
PVF_PRIOR_OCSP = LPKV_PRIOR_OCSP, // OCSPを優先利用する(標準/省略時はCRL優先)
(略)
} PDA_VERIFY_FLAG;
LpaCmdには -verify 用に以下の引数を追加。
-prior ocsp : 失効情報優先フラグ指定
ocsp : OCSP優先、省略時はCRL利用
・検証時にメモリ上に取得したCRL/OCSPを保存できるオプションを追加した。
/** 検証フラグ */
typedef enum {
(略)
PVF_ADD_VALID = LPKV_ADD_VALID, // 取得したCRL/OCSPを独自証明書ストアに追加する(Ver1.60以降)
} PDA_VERIFY_FLAG;
LpaCmdには -verify 用に以下の引数を追加。
-addvalid : 取得した検証情報(CRL/OCSP)を独自ストアに追加する",
・clientV2 フォルダの下に、クライアント署名V2の実行モジュールを追加した。
詳細はクライアント署名V2マニュアル clientV2/doc/LeClientSign.pdf を参照。
・クライアント署名V2の為にAPIと仕様の追加があった。
追加API:
LePAdES::makeEnhanced2() // クライアント署名V2対応の仮署名付与API
LePAdES::setSignValue() // クライアント署名V2対応の署名値埋め込みAPI
PdaClientXml::setVer() // クライアント署名のバージョン指定
PdaClientXml::getVer() // クライアント署名のバージョン取得
LpkCades::getSignHash() // CAdES署名データの署名ハッシュ値を取得(オプション)
LpkCades::setSignValue() // CAdES署名データへ署名値を埋め込む(オプション)
追加仕様:
PdaClientXmlクラスにクライアント署名V2の仕様へ対応
※ ルート要素名の違い
LePdaClientRequest → LcsRequest
LePdaClientReply → LcsResponse
※ 種別(type)属性値の違い
PDSC_CERT_SEND → LCS_CERT
PDSC_DATA_SEND → LCS_SIGN
PDSC_MESG_SEND → LCS_MESG
・PDF解析機能 LePAdES::parse() の実装を行った。
PDF解析は検証では無いので外部接続はしないで構造のみ解析する。
解析対象は以下の3つで、標準ではPDF基本情報とPDF署名情報が解析される。
1)PDF基本情報 : タイトルや作成者等のPDFプロパティ情報。
2)PDF署名情報 : 署名/タイムスタンプに関連するPKI/PAdES情報。
3)PDF画像情報 : 各ページに含まれる画像情報(オプション)。
LpaCmdには -pdf 用に以下の引数を追加。
-parse [filepath] : PDF解析結果XMLファイルの出力(検証は行われない)",
-pflag : PDF解析フラグ
nosign : PDFの署名情報は解析しない
image : PDFのページ毎の画像情報を解析する
value : 証明書等のPKIデータや画像のバイナリを出力する
API LePAdES::parse() に引数としてフラグ PDA_PARSE_FLAG を追加した。
/** 解析フラグ. */
typedef enum {
PPF_NONE, // フラグ指定無し(署名情報のみ返す、検証はしないで構造の情報のみ)
PPF_NO_SIGN_INFO, // PDFの署名情報は解析しない
PPF_IMAGE_INFO, // PDFのページ毎の画像情報を返す(主に電子帳簿保存法対応用が目的)
PPF_ADD_VALUE, // 証明書等のデータや画像ストリームを出力(画像はHEX化される)
} PDA_PARSE_FLAG;
PDF解析結果XMLレポート用クラス LpaParseXml を実装した。
LpaParseXml::setXml() と LpaParseXml::getReport() を利用。
・CAdESの署名時にAdobe仕様の失効情報の埋め込みに対応した。
なおこの仕様では猶予期間に対応できない等の制限もあるので利用には注意が必要。
/** 署名フラグ. */
typedef enum {
(略)
PF_SIGN_ADDREVO, // 失効情報(CRL/OCSP)を埋め込む(サイズがオーバーする可能性があり非推奨)
} PDA_SIGN_FLAG;
LpaCmdには -sign 用に以下の引数を追加。
-opt : 署名オプション 省略時=none (doctsでは無効)
(略)
arevo : 証明書の検証を行い検証情報を署名対象に追加する (cadesのみ)",
・OCSPURLが設定されていない証明書でOCSPURLを外から与えるオプションを追加。
LePKI::addValidationServer() を利用。
type引数は LPK_CVS_OCSP のみ利用可能で、LPK_CVS_GPKIは未サポート。
/** OCSPレスポンダの追加\n\n
*
* @param url [IN] 追加するOCSPレスポンダのURLを指定
* @param type [IN] LPK_CVS_TYPEのLPK_CVS_OCSPのみ利用可能(LPK_CVS_GPKIは未サポート)
* @retval マイナス値 エラーコードが返る
*/
int addValidationServer(const CHAR* url, LPK_CVS_TYPE type);
LpaCmdには -verify 用に以下の引数を追加。
-ocsp url : RFC 6960 OCSPレスポンダの指定
・LangEdge独自検証プロキシサーバの指定を可能とした。
LangEdge独自検証プロキシサーバは標準化されたものでは無いので独自構築が必要(要相談)。
/** 独自失効プロキシサーバ追加(Ver1.06以降)\n\n
*
* @param url [IN] 追加する独自失効プロキシサーバのURLを指定
* @retval マイナス値 エラーコードが返る
* @note CRL/OCSPのHTTP通信による取得時に指定サーバ経由で取得する
* @note 失効プロキシサーバは独自仕様のサーバとなります(詳細はマニュアル参照)
*/
int addRevoProxyServer(const CHAR* url);
LpaCmdには -verify 用に以下の引数を追加。
-revoproxy url : LE独自検証プロキシサーバの指定
・LpkCadesクラスに主にHSM用のAPIを追加。
/** 署名値を埋め込んでいないCAdESの署名対象ハッシュ値を取得(Ver1.06以降)\n\n
*
* @param hash [OUT] ハッシュ値が返る
* @retval マイナス値 エラーコードが返る
*/
int getSignHash(BINARY& hash);
/** 署名値を埋め込む(Ver1.06以降)\n\n
*
* @param value [IN] 署名値を指定(通常クライアント署名で作成)
* @retval マイナス値 エラーコードが返る
*/
int setSignValue(const BINARY& value);
int setSignValue(const BYTE* value, SIZE len);
・期限切れに伴い試験用の独自証明書類を更新しリポジトリを公開。
sample/***/LeTest.p12 や sample/***/store/trusts/ の下等を更新。
[LE認証局リポジトリ]
http://www.langedge.jp/democa/
[LE製品サンプル更新ファイル]
http://www.langedge.jp/democa/le-ca-update-2018.zip
・Java API のライブラリ lepades-1.0.0.jar / lepki-1.0.0.jar を JDK8(1.8)
でビルドするように変更した。以前は JDK7(1.7) だった。
リリース 利用開始 終了通知 公式終了(商用) 公式終了(個人)
----------------------------------------------------------------
JDK 7 2011年 7月 2014年 3月 2015年 4月 ---
JDK 8 2014年 3月 2017年 9月 2019年 1月 2020年12月
JDK 9 2017年 9月 2017年 9月 2018年 3月 ---
なお JDK7 以前のライブラリが必要であればご利用の環境にて以下バッチファイル
かシェルスクリプトでビルドが可能。
java/LePAdES/JavaBuild.bat (JavaBuild.sh)
java/LePKI/JavaBuild.bat (JavaBuild.sh)
今後当分の間は JDK8 で固定予定。これは JDK9 以降のサポート方針が変更された
為である。JDK9 以降のライブラリが必要であれば上述の方法でビルドが可能。
・上書き更新時のXREF部をバイナリの新しい形式に変更。
長期署名化した場合に問題があるPDFが見つかった為に修正。
通常の署名/タイムスタンプ時は増分更新なので影響はない。
・Java APIの障害修正。
1)Windows版でLpkCadesのネイティブ部の実装が含まれていなかった。
2)LpkCert.getCrlDps()実装不足の追加。
・.NET APIの障害修正。
1)PdaVerifyXml::getReport()の引数englishが無効でした。
2)スレッドによるタイムスタンプ処理時の問題を修正。
・XMP処理の問題修正。UTF対応等。
・暗号化PDFにおいてメタデータを暗号化しない仕様に未対応だったので修正。
・署名フィールドが間接指定のPDFの場合にうまく署名できない障害の修正。
・署名フィールドが大量にあるPDFファイルからLePAdES::getField()を繰り
返した場合に例外を発生する場合がある障害の修正。
※ 現象が確認されたのはLinux環境でJava利用の場合のみ。
Ver1.05.R1e版 : 2018-05-10
・AMANO新ライセンス形式への対応
アマノタイムスタンプサービス3161のライセンスファイル形式更新への対応。
Ver1.05.R1版 : 2016-12-21
・LE:PAdES-Basic:LibでもCAdES-detachedの署名が可能になりました。
LpaCmdの初期設定も -type cades がデフォルトとなります。
・Visual Studio 2005 はMSのサポート終了の為に非サポートになった。
[Visual Studio 2005 サポート終了のお知らせ]
https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/03/10/visual-studio-2005/
・Windows版で、Visual Studio 2012/2013/2015 のリビルドに対応した。
実行に必要なDLLも別途準備した。bin_win の下に以下の更新バッチファイル
を用意した。最初は Visual Studio 2010 となっている。
bin_win/setup_dll_vs2010.bat : bin_win の下のDLLをVS2010用に更新。
bin_win/setup_dll_vs2012.bat : bin_win の下のDLLをVS2012用に更新。
bin_win/setup_dll_vs2013.bat : bin_win の下のDLLをVS2013用に更新。
bin_win/setup_dll_vs2015.bat : bin_win の下のDLLをVS2015用に更新。
なお更新されるDLLファイルは以下となる。
Release: libeay32L.dll / ssleay32L.dll / libxml2.dll / zlib1.dll
Debug: libeay32D.dll / ssleay32D.dll / libxml2.dll / zlib1.dll
※ LePAdES.dll / LePKI.dll はリビルドする必要がある。
・Linux版でビルドする時のデフォルトを64bit環境に変更した。
64bitビルド: $ make or $ make all (旧:$ make all64 )
32bitビルド: $ make all32 (旧:$ make )
詳しくはルートディレクトリ下の Makefile を参照。
・OpenSSLの1.0.1系メンテナンス終了に伴い1.0.2系に移行。
現在 1.0.2j を利用。
・Windows版にて、.NET版APIの正式サポート開始。
LePAdESdnet.dll / LePKIdnet.dll を利用。
必要となる .NET framework のバージョンはビルド環境に依存する。
Visual Studio 2010 版 : .NET Framework v4.0 以上
Visual Studio 2012 版 : .NET Framework v4.5 以上
Visual Studio 2013 版 : .NET Framework v4.5 以上
Visual Studio 2015 版 : .NET Framework v4.5.2 以上
・Java API のライブラリ lepades-1.0.0.jar / lepki-1.0.0.jar を JDK7(1.7)
でビルドするように変更した。以前は JDK6(1.6) だった。
リリース 利用開始 終了通知 公式終了
-------------------------------------------
JDK 6 2006年12月 2011年 2月 2013年 2月
JDK 7 2011年 7月 2014年 3月 2015年 4月
JDK 8 2014年 3月 未定 2018年 9月
なお JDK6 以前のライブラリが必要であればご利用の環境にて以下バッチファイル
かシェルスクリプトでビルドが可能。
java/LePAdES/JavaBuild.bat (JavaBuild.sh)
java/LePKI/JavaBuild.bat (JavaBuild.sh)
・.NETとJavaの PdaSign::getByteRange() に問題があり正しく値が取得できて
いない問題の修正。
・LePKI(PKIライブラリ)に LpkUtil::getCvs() と LpkUtil::getOcsp2() を
追加した。日本のGPKIのCVS(証明書検証サーバ)に対応した。
getOcsp2() は独自のLeBerXmlライブラリを使ったOCSP取得実装。
この修正によるPAdES生成への影響は無い。
・LePKI(PKIライブラリ)に静的メソッド LePKI::initProxy() を追加した。
Linux版のみ指定可能で、Windows版でも指定は可能だが無視される。
・PDF操作としてプロパティ操作の以下機能をC++/Java/.NETのAPIに追加した。
プロパティ情報取得:getPropNum()/getPropName()/getPropValue()
プロパティ情報編集:setProp()/delProp()
LpdCmdには以下の引数を追加(-pdfのサブコマンド)
プロパティ情報取得:-prop [key]
プロパティ情報編集:-padd key\value / -pdel key
Windows版ではプロパティ操作と同時にXMP操作も可能。XMPの情報を取得するには
プロパティ情報取得APIの引数type(LP_PROP_TYPE)で指定する。またWindows版では
XMPがセット済みのPDFであれば、プロパティ情報編集時には自動的にXMPにも情報が
セットされる。
・PDF電子署名を無効化するAPI delAllSign() をC++/Java/.NETのAPIに追加した。
LpaCmdでは -delsign として利用が可能。
全ての情報を削除している訳ではなく、各署名フィールドの署名辞書(/V)と署名外観
(/AP)のリンクを削除して、更にRoot辞書のAcroForm要素を削除している。
Pageの注釈は削除しないので署名外観を持つ署名の場合には未署名の署名フィールド
が残る。
Ver1.04.R3版 : 2016-03-30
・新規Windows環境(7/8.1/10)においてWindows証明書ストアのSHA-2証明書が検索でき
ない問題があり、検索前に一度WindowsのAPIにて認証パスを構築して確認するように
修正した。これにより問題は生じないことを確認している。Windows版のみの修正。
本修正前の現象としては検証時に認証パスが構築できない(-3000)等のエラーを生じる
場合があります。一度証明書画面を開き認証パスを表示すると正常に動作するように
なる。
・OCSP検証時にOCSP署名が中間CA証明書があった場合に検証できなかったので修正した。
・LePAdES::saveFile()のファイル名引数にNULLを入れた時にきちんとメモリ上で
処理が継続できるように修正した。使い方は sample/LePAdES/cpp/CppPades.cpp
を参照のこと。
・.NETのAPIのベータ版(注:正式サポート前)を提供開始(Windows版のみ)。
C#からの利用サンプルを sample\LePAdES\cs の下に追加した。
APIの詳細は以下のヘッダファイルを参照。
> LePAdESクラス dotnet/LePAdESdnet/LePAdESdnet.h
> LePKIクラス dotnet/LePKIdnet/LePKIdnet.h
ソースコードは dotnet フォルダ下にて提供。
・Doxygenヘルプの文字化けしている箇所を修正した。
Ver1.04.R2版 : 2015-06-04
・Windows版にてPKCS#11を利用したICカードによる署名に対応した。
詳しくはマニュアル「4.7.PKCS#11対応ICカードによる署名の利用」を参照。
PKCS#11を利用するC++/JavaのAPI
LpkCert::initPkcs11() : PKCS#11カードの初期化と証明書の取得
LpkCert::termPkcs11() : PKCS#11カードの解放(通常呼ぶ必要は無い)
LpkCert::getP11Certs() : PKCS#11カードの証明書情報の取得
LpkCert::getP11Mesg() : PKCS#11カードエラーの文字列取得(staticメンバ)
PKCS#11を利用するLpaCmdの引数
-cert : 署名証明書指定 (署名時必須)
p11 filepath passwd : PKCS#11指定 P11のDLLファイルとパスワードが必要
PKCS#11利用時のエラー追加(本エラー時の後で LpkCert::getP11Mesg() を利用可能)
LPK_ERR_OCERT_INITP11 = -3215, ///< OpenSSL証明書(PKCS#11)初期化エラー
LPK_ERR_OCERT_SIGNP11 = -3216, ///< OpenSSL証明書(PKCS#11)署名エラー
※ 本機能はPKCS#11のICカード全てに対応したものでは無く実績が無い場合には事前に
動作確認が別途必要となります。
※ Linux環境でのPKCS#11のICカードによる署名機能は未組み込みです。
要望があれば検討致しますのでご連絡ください。
・ETSI PAdES Plugtest 2015参加による結果の反映。
1)CRL/OCSP取得時のBasic認証に対応した。
2)SHA-256タイムスタンプの取得機能を追加した。
3)他社検証時にPDFやCAdESの形式の相違によるエラーがあったので修正対応した。※
※ 本製品の署名機能に問題は無かった為に署名付与に関する変更はありません。
検証に関する相互運用性を高めました。
・評価版判定の LePAdES::isEvaluation() を新規にAPI追加した。
・PKCS#11とJavaに関するインクルードファイルをローカルソースに追加
local/include/pkcs11 # PKCS11用のヘッダファイル(RSA Security Inc.)
local/include/java # Java1.8のJDKヘッダファイル(JNI用)
Ver1.04.R1b版 : 2015-05-29
・暗号化用パスワード読み込み時に正常であっても稀にパスワードエラーになる問題の修正。
パスワードはバイナリだがPDF仕様では文字列の為にUTFのBOMがあると誤動作していた。
修正内容:パスワード読み込み時のみバイナリとして文字列取得するように修正した。
Ver1.04.R1a版 : 2015-03-05
・Linux版のOpenSSLを使ったHTTPソケット通信時に SSL_library_init() を通信の度に
呼び出していたが、スレッドセーフでは無い可能性があるので初期化時の1回だけに
変更した。修正したソースは以下。
src/LePKI/LeMutex.cpp
src/LeCommon/LeHttpConnectSocket.cpp
src/LeCommon/LeHttpConnect.hpp
※ Windows版の修正は無い。
Ver1.04.R1版 : 2015-01-13
・Linux環境のHTTP通信にてプロキシ接続(認証無し)をサポート。
プロキシ設定情報は以下のいずれかのディレクトリ下にある proxy.ini ファイルを参照。
1:実行モジュール(LpaCmd等)と同じディレクトリ下の proxy.ini
2:/usr/local/LePAdES/proxy.ini
proxy.iniファイルには以下の設定を行う。
A:Apache等のプロキシサーバ利用時=最初に"A:"を付けてプロキシサーバのURLを指定
例 A:http://218.59.144.95:81/
B:Squid等のプロキシサーバ利用時=プロキシサーバのURLを指定
例 http://133.242.232.124:3128/
※ Windows環境ではHTTP通信にWinInetを利用しているのでIEプロキシ設定が利用される。
・XMP(メタデータ)の埋め込み/取得の機能を追加。
新機能1)XMPの取得
コマンド:$ LpaCmd -pdf -getxmp output.xmp -in test.pdf
C++/Java:LePAdES::getXmp(BINARY& data);
新機能2)XMPの埋め込み(署名前に指定可能)
コマンド:$ LpaCmd -pdf -setxmp set.xmp -in test.pdf -out test-xmp.pdf
C++/Java:LePAdES::setXmp(const BYTE* xmp, SIZE len);
・保存(署名)時の作成日/更新日の指定機能を追加。
新機能3)作成日/更新日の指定
コマンド:$ LpaCmd -pdf -credate "D:20150107122030+09'00'" -in test.pdf -out new.pdf
C++/Java:LePAdES::setDates(const char* creationDate, const char* modDate);
※ LpaCmdで更新日の指定は -moddate となる。
※ 日付の指定は "D:YYYYMMDDHHmmSSOHH'mm'" となる。
"O"が"+"か"-"ならHH'mm'で時差を指定、"O"が"z"ならUTC時刻
※ 作成日と更新日は以下のルールで保存時に設定される。
作成日:未指定、更新日:未指定 → 作成日はそのままで更新日のみ現在時刻に更新
作成日:指定、 更新日:未指定 → 作成日と更新日はどちらも作成日指定時刻に更新
作成日:未指定、更新日:指定 → 作成日はそのままで更新日のみ指定時刻に更新
作成日:指定、 更新日:指定 → 作成日と更新日はどちらもそれぞれの指定時刻に更新
・コマンドLpaCmdからでも署名時刻(署名辞書のMキー)を指定可能にする引数 -mtime の追加。
なおAPIからであれば従来より指定が可能であった。
・その他細かなメモリリーク対応等の修正。
Ver1.03.R2版 : 2014-09-01
・同梱しているOpenSSLのバージョンを最新のv1.0.1iに更新。
・アマノタイムスタンプ利用のES-T生成時の問題を修正。
タイムスタンプ対象の指定方法が誤っていました。
・CRLとOCSPの両方のアドレスがセットしてある証明書を利用した検証時にvalid要素が2回
出力されてしまい、XML解析エラーになっていた。CRLとOCSPを正しく判断してvalid要素が
1回だけ出力されるように修正。
・海外にてタイムスタンプ応答中に独自のBERデータが挿入されているケースがあり、余計な
BER/DERデータは無視するように修正した。
・印影画像指定時に透過マスク情報付きのPNGがうまく使えないケースがあった為に、変換
方法を修正した。
・マルチスレッド時の初期化をセマフォを使いより安全に行えるように修正した。
Windows版のWinInetも同時使用数に制限がある為セマフォにより制限するように修正した。
・普通署名のロックに対応した。署名種別(PDA_SIGN_TYPE)に4~6を追加した。
LpaCmdの-mdp引数でも4~6を追加。
/** 署名種別.
*/
typedef enum {
PS_NORMAL = 0, ///< 普通署名:MDP署名を使わない
PS_MDP_NOCHANGE = 1, ///< 証明署名:変更を許可しない
PS_MDP_FFSIGN = 2, ///< 証明署名:フォームフィールドの入力と署名フィールドに署名
PS_MDP_FFSIGNANNOT = 3, ///< 証明署名:注釈の作成、フォームフィールドの入力と署名フィールドに署名
PS_LOCK_NOCHANGE = 4, ///< ロック署名:変更を許可しない(普通署名)
PS_LOCK_FFSIGN = 5, ///< ロック署名:フォームフィールドの入力と署名フィールドに署名(普通署名)
PS_LOCK_FFSIGNANNOT = 6 ///< ロック署名:注釈の作成、フォームフィールドの入力と署名フィールドに署名(普通署名)
} PDA_SIGN_TYPE;
・LpaCmdのヘルプ表示の誤りを修正。
Ver1.03.R1版 : 2014-05-02
・フォルダ構成の整理(主にドキュメント類)。詳細はマニュアルにて。
・同梱しているOpenSSLのバージョンをv1.0.1gに更新。
Heartbleed Bug 修正バージョンです。
※ LE:PAdES:LibのWindows版では "Heartbleed Bug" の影響はありません。
※ LE:PAdES:LibのLinux版では "Heartbleed Bug" について以下の場合に影響があります。
1)と2)の両方の条件が必要で、通常の利用方法では問題にはなりません。
1)CRL/OCSP/タイムスタンプ取得時のSSL通信時のみ可能性がある。
2)DNS書き換えがされて不正なサーバに誘導される。
基本的に問題にはなりませんが、念のために最新に更新したと言うことになります。
・Windows版のビルドをVisualStudio2005からVisualStudio2010に変更。
※ VisualStudio2005版が必要な場合はご連絡ください。
・アマノタイムスタンプサービス3161 Type-Tへの対応。
ライセンスファイルが必要なケースでも標準で利用が可能。
・Windows版におけるTDB電子認証サービスTypeAの対応。
ICカード利用時には -card capi を指定する事でRSA-SHA2署名も可能。
検証時にPINコード入力要求があったが要求されないように修正した。
・Windows/Linux版におけるジャパンネットDIACERTサービスの対応。
ファイルタイプ(PKCS#12)によりLinux/Windowsどちらでも利用可能。
シリアル番号のDERエンコード利用に誤りがあったので修正した。
・Windows/Linux版におけるJIPDEC JCAN証明書の動作確認。
ファイルタイプ(PKCS#12)によりLinux/Windowsどちらでも利用可能。
・CAdESプラグテストの結果を反映。
他社(Adobe以外)との互換性が少し向上した。
・LePKI(PKIライブラリ)のサンプル追加とAPIの調整。
この修正によるPAdES生成への影響は無い。
・PKCS#12ファイル同梱のルート証明書利用時の小さなメモリリークの修正。
Ver1.02.R2k版 : 2014-01-28
・署名以外のフィールドがありMDP署名した時の署名フラグの問題を修正した。
Ver1.02.R2j版 : 2014-01-24
・enobjの付け方によりエラーになるPDFファイルがあったので修正した。
・FREEのオブジェクトを利用するPDFファイルがあったので修正した。
正常なファイルではこの問題は生じない。
・FREEのオブジェクトを利用する場合に例外を生じていたのでどのような場合
でも例外では無くエラーを返すように修正した。
Ver1.02.R2i版 : 2014-01-19
・Ver1.02.R2h版の修正にてPKCS#7の検証処理で問題を生じたので修正した。
OpenSSLのAPI呼び出し手順のミス。
Ver1.02.R2h版 : 2014-01-17
・Visual Studio 2010 用にオープンソースのライブラリを再ビルドして利用するよう
にした。これにより実行には Visual Studio 2010 のランタイムのみで良くなった。
再ビルドしたのは libpng / libjpeg / zlib の3種類。
・OpenSSLの解放用にstaticなAPIの le::LpkCrypto::opensslTerm() を追加。
アプリケーション終了時に1回だけこのAPIを呼び出す事でOpenSSL用に確保された
テーブル等メモリを解放する。初期化APIの le::LpkCrypto::opensslInit() も追加
したがこちらは自動的に呼び出されるので明示的呼び出す必要は通常無い。
opensslInit() はマルチスレッドのサーバ環境では最初に1度呼び出しておくと良い。
・幾つか細かなメモリリークがあったので修正。
文字列等なので数十バイト程度。
・Windows XPにおいてX.509証明書ファイル指定によるPAdES-Basic署名に失敗していた
ので修正した。ファイル指定の場合にもWindows証明書ストアから再取得するように
変更した。
・ユーザ(開く)パスワードに対応した。
これによりV1.02.R2hでは現在以下の制限があります。
1)署名外観のフォントは現在"MS-Mincho"のみ利用可能です。
2)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
3)証明書による暗号化には未対応です。
4)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
5)その他未対応の機能にはAPIリファレンスにて「(V1.0では未サポート)」と記述。
Ver1.02.R2g版 : 2014-01-08
・署名証明書において以下の場合に検証エラーになっていた場合の修正。
1)CommonNameがマルチバイトコード(日本語等)の場合
2)X.500名が空文字であった場合
いずれも通常の認証局発行の証明書ではあり得ないが自己署名証明書を自分で作成した
場合等に問題になる。
・OpenSSLとlibxml2のDLLをVisualStudio2010用に再ビルドした。
Ver1.02.R2f版 : 2013-12-26
・LePAdES::isMdp() で正しく結果が取得できないケースがあったので修正。
Ver1.02.R2e版 : 2013-12-26
・LePAdES::getField()でfieldNumを1以上の値にした場合にエラーが返っていたので修正。
・LpaCmdの -verify 時に署名フィールド一覧を表示する -fields オプションを追加。
・その他細かな内部的修正。
Ver1.02.R2d版 : 2013-12-13
・検証時にLDAP/HTTP通信をそれぞれ使わない(検証エラーにならない)フラグ指定を追加。
LePAdES::verify() の引数にオプション検証フラグを追加した。
/** 検証フラグ.
*/
typedef enum {
PVF_NONE = 0x00000000, ///< フラグ指定無し
PVF_NOUSE_LDAP = 0x00000001, ///< LDAP経由の検証情報の取得検証をしない(addLTV()で使う時は指定してはいけない)
PVF_NOUSE_HTTP = 0x00000002, ///< HTTP経由の検証情報の取得検証をしない(addLTV()で使う時は指定してはいけない)
} PDA_VERIFY_FLAG;
PdsCmdの署名時に以下のオプションが利用可能となった。
-not : ネット環境の不使用 (検証情報が無くてもエラーにしない)
・LDAPリポジトリから親証明書を取得する LpkUtil::getCerts() のサポート。
・ldap接続に関して ";binary" が小文字の時にうまく動作していなかった問題の
修正。
・CRL配布ポイントがディレクトリ名で指定されていた場合に未チェックだった
ので修正した。ディレクトリ名指定には LePKI::addRepositoryServer() を利用。
例:LePKI pki; pki.addRepositoryServer("ldap://dir.gpki.go.jp/");
・LpaCmdの引数にディレクトリサーバを指定する -repository 引数の追加。
例: LpaCmd -verify -repository ldap://dir.gpki.go.jp/ -report -in signed.pdf
Ver1.02.R2c版 : 2013-11-28
・C#から使われた場合にデストラクタが呼び出されないケースがあったので
LePAdES::clear() を追加した。saveFile() の後に clear() を呼び出す。
※ LePAdES.h ヘッダファイルが修正されているので注意!
・JPKI(公的個人)が LpkCert::setCard() でセット済みの場合に再度実行する
とエラーになっていたので、再度実行しても正常動作するように修正した。
Ver1.02.R2b版 : 2013-11-26
・Visual Studio 2010 のビルド環境への対応。
メイン部とサンプル部にて Visual Studio 2010 でビルドと実行を可能とした。
・PDF内のコメントへ対応した。
Adobe製品等の自動生成されるPDFでは通常コメントは入らないがサンプル等の
手入力されたPDFではコメントが使われていた。
Ver1.02.R2a版 : 2013-11-12
・Adobe社のMDP署名に含まれる /DigestValue 値が非暗号化対象になっていなかった
ので修正した。なお本仕様は PDF1.5 の仕様であり ISO3200-1 では対象外。
Ver1.02.R2版 : 2013-10-21
・同じ名前のテキストフィールドがあった場合にエラーになっていたので修正した。
・読み込み時の署名フィールドのチェック時のエラー判定を or(||) すべき箇所を
and(&&) にしていた為に例外を発生していたので修正した。
同じミスが無いか確認したが他には見つからなかった。
・署名外観のテキスト情報の描画で最後の1文字が表示されない場合があった。
複数行の場合の文字数と描画領域の矩形の種類によるもので常に現象は出ていな
かった。
・長期保管用のLTVを重ねた場合にうまく動作してなかったので修正した。
この問題の為にドキュメントタイムスタンプも重ねる事が出来なかった。
長期保管情報追加のJavaのサンプル JavaLtvTest.bat/.sh を追加した。
※ LE:PAdES:Lib のみの影響であり LE:PAdES-Basic:Lib には影響しない。
・検証時のCRL/OCSP情報の発行日付等の確認を厳密に行うようにした。
署名時刻(タイムスタンプ時刻)より後に発行された情報を取得または優先して
利用するようになった。
この為にC++のAPIの LpkOcsp::isTarget() を追加したが内部利用目的が主の為
なのでJavaのAPIには追加していない。
検証結果のレポート表示時に検証情報(CRL/OCSP)の取得元や生成時刻を表示す
るように変更した。
※ これまで検証できていたケースには影響は無く、長期保管用の情報が入って
いる場合の動作が修正された。
・その他細かな問題修正。
Ver1.02.R1版 : 2013-09-12
・PAdES-Enhanced(CAdES利用)の署名が可能となった。 [※ LE:PAdES:Libのみ]
これにともないPAdESサンプルも修正された。
※ 他社製品で生成したPAdES-Enhancedファイルの検証はまだ完全では無い可能性
がある。LE:PAdES:Libで生成したPAdES-Enhancedファイル検証は問題無い。
・サンプルのタイムスタンプ局をラング・エッジ独自TSAに変更。
詳細はマニュアルに記載。
・ソケットによるHTTP通信(Linux版)において Chunked transfer encoding に対応した。
Content-Length が未設定の場合に使われる可能性があった。
・V1.02.R1では現在以下の制限があります。
1)署名外観のフォントは現在"MS-Mincho"のみ利用可能です。
2)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
3)ユーザパスワードによる暗号化ファイルへは未対応です。
4)証明書による暗号化には未対応です。
5)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
6)その他未対応の機能にはAPIリファレンスにて「(V1.0では未サポート)」と記述。
Ver1.02.B1版 : 2013-08-09
・Windows版で64ビット対応をした。
bin_win と lib_win の下以下サブフォルダで提供。
Release : Windows 32bit リリース版
Release64 : Windows 64bit リリース版
Debug : Windows 32bit デバッグ版
Debug64 : Windows 64bit デバッグ版
・Windows版でiconvを使わないようにlibxml2をビルドしなおした。
これにより iconv.dll が実行時不要になった。
・Linux版でlibxml2/zlib/OpenLDAPの各ライブラリもスタティックリンクするように
変更した。これにより環境依存性は低くなった。マニュアルの記述も修正した。
ライブラリは local/lib_linux と local/lib64_linux の下にある。
libxml2 v2.7.8 : zlibをスタティックリンクするように修正。
zlib v1.2.5 : libxml2 が 1.2.5 以上を要求の為。
OpenLDAP v2.4.32 : libldap.a と liblber.a を利用。
※ ビルドした環境は local/src の下に格納して保存している。
※ 64bit版ではいずれもコンパイル時に -fPIC を追加している。
・Linux版で環境変数を自動セットして実行する LpaCmd.sh を提供。
LD_LIBRARY_PATH を自動設定するのでtarで展開してすぐ LpaCmd.sh 実行が可能。
・マルチスレッド時のMutex初期化タイミングの修正。
なおできれば最初に LePKI のインスタンス生成をしてMutex初期化する。
・Linux版のOpenSSLのバージョンを 1.0.1c から 1.0.1e に更新。
※ ビルドした環境は local/src の下に格納して保存している。
※ 64bit版ではコンパイル時に -fPIC を追加している。
・検証結果レポートを英語で出力可能にした。
C++/JavaではPdaVerifyXml::getReport(bool english)の引数で指定。
LpaCmdでは-engで英語で結果出力。
※ JavaではAPI変更になるので注意が必要。
・LpaCmdの各種出力メッセージの文字コードを指定可能にした。
-engで英語(ASCII)、-sjisでシフトJIS、-utf8でUTF-8で出力される。
Windows版ではデフォルト-sjisであり、Linux版ではデフォルト-engになる。
詳しくはマニュアル「1.10. 文字コードとLeStringクラス」を参照。
・LpaCmdのヘルプメッセージを修正すると共に英語版も用意した。
Ver1.01.R3版 : 2013-07-10
・ドキュメントやJavaサンプルに finalize() によるネイティブメモリ解放を追加。
finalize() によるメモリ解放をしないと、大きなファイルへ署名を繰り返した場合に
JNIで利用するネイティブメモリが不足になる可能性がある。
・Linux版にてSSL通信(HTTPS)の利用が可能となった。
・RFC3161タイムスタンプ取得時にBasic認証の利用が可能となった。
・Windows版にてWindows証明書ストアの利用が可能となった。
APIとしては以下が追加/実装された。
LePKI:getCertByHash(), LePKI:getCertSelect()
LpkCert::setCapi(), LpkCert::setCard()
PdsCmdの署名時に以下のオプションが利用可能となった。
-cert : 署名証明書指定 省略時=未指定 (必須)
finger HEX : Windows証明書ストアから指紋(HEX文字列)で指定
x509 filepath : 指定証明書をWindows証明書ストアから取得
select : Windows証明書ストアから選択して取得
card : ICカードから取得
capi : CryptoAPI利用(GPKI等) 証明書選択画面から指定
jpki : JPKI 公的個人認証ICカード利用 (ハッシュ方式は現在SHA1のみ対応)
Windows証明書ストアの利用方法をマニュアルに追記した。
・PdaSignクラスに署名者名と署名日時を取得するAPIを追加。
いずれも署名済みPDFファイルからgetSign()で取得した場合にのみ返される。
署名者名:PdaSign::getSigner();
署名日時:PdaSign::getTime();
・未実装ではあったがPFUタイムスタンプサービスのオプションやクラスを削除。
PFUタイムスタンプサービスの終了に伴う対応。
・V1.01.R3では現在以下の制限があります。
1)LE:PAdES:LibにおいてCAdES(PF_CADES_DETACH)は未サポートです。
2)署名外観のフォントは現在"MS-Micho"のみ利用可能です。
3)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
4)ユーザパスワードによる暗号化ファイルへは未対応です。
5)証明書による暗号化には未対応です。
6)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
7)その他未対応の機能にはAPIリファレンスにて「(V1.0では未サポート)」と記述。
Ver1.01.R2版 : 2013-06-18
・Linux64bit版でストリームXRef形式のPDFが扱えない問題を修正。
Adobe Acrobat/Reader X 以降でファイル保存するとストリームXRef形式になる。
Ver1.01.R1版 : 2013-06-17
・署名フィールドと署名の同時作成が可能になり、中間ファイルが不要になった。
LpaCmd では -sign 時の引数に -newf を指定すると署名フィールドを作成して署名
APIでは以下の手順が利用可能になった。
pades.loadFile() // 手順1 PDFファイルの読み込み
pades.addField() // 手順2 署名フィールドの追加
// 従来はここで保存と再読み込みが必要だったが不要になった
pades.addBasic() // 手順3 署名の追加(署名付与)
pades.saveFile() // 手順4 署名済みPDFファイルの保存
具体的に利用方法はサンプル sample/cpp sample/java の下のソースを参照。
・CRLキャッシュのデフォルト設定を0秒(利用しない)に変更した
特にLinux環境ではキャッシュファイルの入出力で競合を生じやすく例外を発生する
ケース(マルチプロセス環境)がある為。キャッシュの利用には十分注意が必要。
シングルプロセス/マルチスレッド環境では独自mutexで競合へ対応済み。
・証明書にUTF16BE形式で日本語が設定されている時に対応した。
・Linuxにおいてタイムゾーン取得できないケースに対応した。
・長期保管の為の検証情報の埋め込みに対応した [※ LE:PAdES:Libのみ]
・製品マニュアルを更新して正式にリリースした。
doc/PAdES.pdf
・検証結果レポートの証明書出力でシリアル番号と期限を出力するようになった。
・LTV(DSS/VRI)が使われたPDFの検証に対応した。
・署名証明書が異なるCRL/OCSPで信頼済みルートの場合は検証成功に変更した。
・検証関連のOCSP等の細かなバグ修正。
・LE:PAdES:Lib サポートかどうか判断する LePAdES::isFull() を追加。
true なら LE:PAdES:Lib であり false なら LE:PAdES-Basic:Lib となる。
true の場合には LpaCmd のメッセージも "LangEdge PAdES Command." となる。
・V1.01.R1では現在以下の制限があります。
1)LE:PAdES:LibにおいてCAdES(PF_CADES_DETACH)は未サポートです。
2)署名外観のフォントは現在"MS-Micho"のみ利用可能です。
3)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
4)ユーザパスワードによる暗号化ファイルへは未対応です。
5)証明書による暗号化には未対応です。
6)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
7)Linux版でのCRL/OCSP/タイムスタンプ取得のhttps/ldaps接続は未対応です。
8)その他未対応の機能にはAPIリファレンスにて「(V1.0では未サポート)」と記述。
Ver1.0.R9版 : 2013-05-31
・署名外観の日付テキストのフォーマット指定が可能になった。
フォーマットは "YYYYMMDDhhmmssZ" で指定 例 "YYYY/MM/DD hh:mm:ss Z"
C++/Javaでは新しく追加された PdaAppearance::setDateFormat() で指定
LpaCmdでは新しく追加された -datef 引数で指定
・フリーライブラリのライセンス用フォルダ license の追加。
・LE:PAdES:Lib用に内部を一部修正(APIやLpaCmdの仕様変更は無し)。
Ver1.0.R8版 : 2013-05-17
・設定XMLファイル(UTF-8形式)の日本語文字列が正しく扱えない問題の修正。
・署名外観の日本語文字列の改行位置が正しくない問題の修正。
・署名外観のテキスト改行位置計算方法の変更。より細かく計算するようになった。
Ver1.0.R7版 : 2013-05-10
・OpenSSLのマルチスレッド対応の組み込み。
R6版までではLinux版で稀に例外を発生するケースがあった。
Windows版では問題は無かったが念のために組み込み。
・CRLキャッシュのマルチスレッド対応。
ミューテックスを使い入出力の競合が無いようにした。
・Javaのマルチスレッド試験サンプルを追加。
sample/LePAdES/java/JavaVerifyThread.bat/.sh で実行可能。
・設定XMLファイルの保存と読み込み時のバグ対応。
内容次第では例外を発生するケースがあった。
・設定XMLファイルに保存時にパスワードは暗号化するようにした。
PKCS#12ファイルのパスワードとタイムスタンプ局のパスワードが対象。
なお従来のパスワードが暗号化されていない設定XMLファイルも利用可能。
※ 軽い秘匿の為であり完全に安全なわけでは無いので注意。
・LePAdES::getFieldNum() のAPI名が getFiledNum になっていたので修正。
※ C++/JavaのAPI名変更なので注意。
・設定情報取得のAPIを幾つか追加。
設定XMLファイルの生成と保存の為に利用。
・その他細かなバグ修正。
Ver1.0.R6版 : 2013-04-12
・PDFファイル保存時のデフォルトを増分更新に変更。
大きなファイルでも処理時間及びメモリ利用料を減らす為。
・LpaCmdにエラー表示の追加とエラーの英語表示オプション -eng の追加。
・その他バグ修正。
Ver1.0.R5版 : 2013-02-12
・クライアント署名に通信内容をHEX文字列化するHEXモードを追加。
1)PdaAxClientプラグインに 指定可能。
2)LpaCmd の引数に -hex が指定可能(通常指定する必要は無い)。
・HTTP通信時のAgent指定を以下に変更。IE偽装しないとFWでエラーになる事がある為。
"Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
・署名にテキスト印影を使った場合に文字列にゴミが残る問題の修正。
・PDF仕様に関する細かなバグ修正の反映。
Ver1.0.R4版 : 2012-12-23
・Linux環境においてUnicodeのUCS4/UCS2の処理に誤りがあったので修正した。
src/LeCommon/LeUtil.cpp src/LeCommon/LeUtil.h
Windows版への影響は無い。
Ver1.0.R3版 : 2012-12-05
・64bit Linuxへの対応の為に一部ソースを修正。
64bit Linux ビルド方法 : $ make all64
64bit Linux インストール方法: $ make install64
・localディレクトリ下に lib64_linux の追加。(LE:PAdES:Lib再ビルド時に必要)
・タイムスタンプ検証においてSHA256対応が不十分だったので修正した。
Ver1.0.R2版 : 2012-12-04
・クライアント署名 PdaAxClient の初期パラメータにリダイレクト処理のオフ機能を追加。
※ IE6で利用する場合にはリダイレクト処理をオフにする必要がある。
・C++/JavaのAPIとして PdaVerifyXml::getStatus() を追加。関連したエラーコードも追加。
JavaのAPIでは LePAdES::verify() の戻り値が使えない為に追加。
・暗号化された署名済みPDFファイルの検証に失敗していたので修正した。
署名辞書のContentsは暗号化されていない例外だが読み込み時に例外処理していなかった。
・検証時に証明書の有効期限切れが正しく検証できていなかった問題の修正。
期限切れ等の動作を確認する為に LePAdES::verify() に新しい引数として検証日時を追加。
※ 通常は検証日時としてNULL指定(現在時刻)を推奨。
指定方法はGeneralizedTime型なので"20120927132730+900"のように指定。
なお有効期限切れは PVS_INVALID ではなく PVS_INDETERMINATE となる。
長期署名の情報により署名時点での有効性が別途確認される可能性がある為。
・PdaVerifyXml::getReport() のメッセージを証明書と暗号の検証結果で異なるように修正。
・LpaCmd -client コマンドで署名付与する際にWindows XP環境ではエラーになる問題の修正。
LpaCmdのクライアント機能は証明書の再取得を行う。その際に「個人」証明書ストアから
さらに再取得しないとXP環境ではエラーになっていたので修正した。
クライアント署名のPdaAxClientでは最初に「個人」証明書ストアで取得した証明書をその
まま利用していたのでこの問題は生じない。
Ver1.0.R1版 : 2012-12-03
・権限(オーナー)パスワード利用時の署名フィールド名の問題を修正。
・/adbe.pkcs7.sha1 の時の検証における計算ミスの修正。
・Linux環境用の各種整備(Makefileやドキュメントの修正等)。
・V1.0.R1では現在以下の制限があります。
1)署名外観のフォントは現在"MS-Micho"のみ利用可能です。
2)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
3)ユーザパスワードによる暗号化ファイルへは未対応です。
4)証明書による暗号化には未対応です。
5)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
6)Linux版でのCRL/OCSP/タイムスタンプ取得のhttps/ldaps接続は未対応です。
7)その他未対応の機能にはAPIリファレンスにて「(V1.0では未サポート)」と書かれています。
Ver1.0.R0版 : 2012-11-29
・不足していた以下の機能を実装しました。
1)Windows証明書ストアの利用を組み込みました。
2)LDAPによる通信(CRL取得)を組み込みました。
3)署名前の証明書検証を組み込みました。
4)エラー処理の組み込みとエラーコードの整理をしました。LePAdES.docx参照。
・上記機能実装の為に、LePKI系のAPIの追加と変更。
LpkCert::getIssureName() をAPI追加(Windows証明書ストア対応の為)
LpkCert::getCrlDps() の引数にdirSrvs(ディレクトリサーバ)を追加(LDAP対応の為)
LpkPkcs7::sign() の引数LePKIをLeCertsに変更(署名前の証明書検証の為)
・PDFページに回転(Rotate)があった場合に外観の向きが正しくなかったので修正した。
外観自体の回転に誤りがありました。
・クライアントに送るエラーメッセージが2バイト文字の場合エラーになっていた。
UFT-8文字列の扱いと使い方に問題がありました。
この問題修正の為にJavaのPdaClientXmlクラスのAPIを修正しました
createCertResponse() と createCertResponse2() として直接UTF-8バイナリ取得APIを追加。
createSignResponse() と createSignResponse2() として直接UTF-8バイナリ取得APIを追加。
createErrorResponse() と createErrorResponse2() として直接UTF-8バイナリ取得APIを追加。
サンプル実装も修正してありますが出来るだけUTF-8を直接扱う方法が効率面で望ましいです。
・オーナーパスワードへの対応を修正した。
従来の修正が不十分でPDFの種類や暗号化の種類により出来ないケースが多々あった。
RC4(48/128bit)とAES(128bit)に対応しました。
なおAES(256bit)はまだ正式なISO仕様では無い為に未サポートです。
・クライアント署名のActiveXモジュールのエラーチェックを強化しました。
ただし根本的な手順の変更等はありません。
・その他V1.0では現在以下の制限があります。
1)署名外観のフォントは現在"MS-Micho"のみ利用可能です。
2)ユーザパスワードによる暗号化ファイルへは未対応です。
3)証明書による暗号化には未対応です。
4)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
5)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
6)Linux版でのCRL/OCSP/タイムスタンプ取得のhttps/ldaps接続は未対応です。
7)その他未対応の機能には「(V1.0では未サポート)」と書かれています。
Ver1.0.B3版 : 2012-11-26
・APIはほぼ確定した。問題が無い限りAPIの修正はありません。
・クライアント署名にてSHA-2署名に対応しました。ただし注意事項あり。
・API変更 PdaClientXml::createCertResponse() の引数に署名ハッシュ方式指定が追加されました。
・RFC3161タイムスタンプの利用が可能になりました。
クライアント署名された署名データにサーバ側でタイムスタンプの追加も可能です。
・LePKIクラスを使った署名と証明書の検証が可能になりました(検証系は各種API変更あり)。
・Windows用のOpenSSLモジュールファイル名が変更になりました。
新「libeay32L.dll」、旧「libeay32.dll」
・設定情報のXMLによる保存と読み込みに対応しました。
対応クラス:PdaField、PdaSign、PdaAppearance、LePKI、LpkCert、LpkTimestamp
一括クラス:LePAdES(PdaSign、PdaAppearance、LePKI、LpkCert、LpkTimestamp)
・サンプルは全て実装されました(署名、ドキュメントタイムスタンプ、検証、クライアント署名)。
以下の未組み込みの制限があります(リリース版までに実装されます)。
1)Windows証明書ストアの利用が未組み込みです。
2)LDAPによる通信(CRL取得)が未組み込みです。
3)署名前の証明書検証が未組み込みです。
4)エラー処理の組み込みがまだ不充分です。
V1.0では以下の制限があります。
5)署名外観のフォントは現在"MS-Micho"のみ利用可能です。
6)ユーザパスワードによる暗号化ファイルへは未対応です。
7)証明書による暗号化には未対応です。
8)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
9)PdaEncryptクラスとPdaParseXmlクラスは未サポートです。
10)Linux版ではhttpsの接続は未対応です。
11)その他未対応の機能には「(V1.0では未サポート)」と書かれています。
Ver1.0.B2版 : 2012-11-14
・MDP署名(証明)が利用可能になりました。
・可視署名(署名外観の指定)が可能になりました。
例:画像(image.png)のみを使った署名外観
> PdsCmd -sign -cert p12 LeTest.p12 test -text none -grap image -image image.png \
-in field.pdf -out output.pdf
指定可能な画像はJPEG/BMP/PNG及び、PDFファイルの画像またはコンテンツ。
サンプル(sample)も修正してあります。
・クライアントActiveXコンポーネント PdaAxClient.cab の更新。
OpenSSLにてVisualStudio 2005 ランタイム依存があったので依存しないように修正。
・API変更:getFont()/setFont()をPdaFieldクラスからPdaAppearanceクラスに移動。
・オーナパスワードによる暗号化ファイルへの対応。
以下の制限があります。
1)署名フィールド生成時の基点定義(LE_COORDINATE)の指定は未実装です。
2)タイムスタンプ利用は未実装です。
3)検証関連の機能は未実装です。
4)署名外観のフォントは現在"MS-Micho"のみ利用可能です。
5)ユーザパスワードによる暗号化ファイルへは未対応です。
6)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
7)エラー処理の組み込みがまだ不充分です。
8)クライアント署名のActiveXモジュールはまだ未署名です。
Ver1.0.B1版 : 2012-10-31
・最初のベータリリース版(LE:PAdES-Basic:Libの基本動作確認版)
以下の試験が可能です。
A)Windows環境において署名フィールド追加と不可視署名付与
sample/LePAdES/cpp/CppSignTest.bat (事前に CppButild.bat 実行が必要)
sample/LePAdES/cmd/CmdSignTest.bat (LpaCmd利用)
B)Linux環境において署名フィールド追加と不可視署名付与
sample/LePAdES/cpp/CppSignTest.sh (事前に CppButild.sh 実行が必要)
sample/LePAdES/cmd/CmdSignTest.sh (LpaCmd利用)
C)Java環境において署名フィールド追加と不可視署名付与
sample/LePAdES/java/JavaSignTest.bat (事前に JavaButild.bat 実行が必要)
D)Windows環境においてクライアント署名のローカル試験
sample/LePAdES/cpp/CppClientTest.bat (事前に CppButild.bat 実行が必要)
sample/LePAdES/cmd/CmdClientTest.bat (LpaCmd利用)
sample/LePAdES/java/JavaClientTest.bat (事前に JavaButild.bat 実行が必要)
※ クライアント署名のActiveXモジュールは用意されていますが未試験です。
ただしローカル試験は完了しているので動作するはずです。
client/bin/PdaAxClient.cab (組み込み例:PdaAxClient_test.html)
以下の制限があります。
1)可視署名は未実装です。
2)MDP署名(証明)は未実装です。
3)署名フィールド生成時の基点定義(LE_COORDINATE)とフォントの指定は未実装です。
4)タイムスタンプ利用は未実装です。
5)検証関連の機能は未実装です。
6)暗号化されたPDFの利用は未対応です。
7)200メガバイトを超えるような大きなPDFファイルの利用は未対応です。
8)エラー処理の組み込みがまだ不充分です。
9)クライアント署名のActiveXモジュールはまだ未署名です。
Ver1.00α1版 : 2012-10-01
・最初のリリース版(LE:PAdES:Lib/LE:PAdES-Basic:LibのAPI確認版)
以下の制限があります。
1)Java利用の為のJNI部は未実装です。
2)まだ署名/検証は実際に行えません。
3)コマンド(LpaCmd)はヘルプ表示はされますが実際には使えません。
4)クライアント署名用のActiveXコンポーネントもまだ未実装です。
========================================
Copyright (C) 2006-2020 LangEdge,Inc. All rights reserved.
http://www.langedge.jp/
========================================