========================================             XML長期署名ライブラリ LE:XAdES:Lib            Ver 2.04.R3版 「最初にお読みください」          有限会社ラング・エッジ 2024年08月28日 ======================================== ■ 最初にお読みください 本ドキュメントは、有限会社ラング・エッジが開発した以下のXML電子署名ライブラリに ついての全体の説明をするファイルです。 ・XML長期署名ライブラリ LE:XAdES:Lib   XAdES v1.3.2/v1.4.1/v1.4.2対応・JIS X5093準拠・XMLデータ他の署名ライブラリ 詳しくは以下のサイトをご覧ください。 http://www.langedge.jp/biz/LeXAdES/index.html ■ 評価版について 評価版については以下の制限があります。 1.評価版でメイン指定する参照数は最大5ファイルまでとなります。 2.評価版でManifest指定する参照数は最大5ファイルまでとなります。 3.評価版では LE:XAdES:Lib Evaluation オブジェクトが必ず 参照に追加されます。 4.評価版にソースコードは付属しません。 評価版の確認はLpaCmdを実行することで確認可能です。 > bin_win/Release/LxaCmd.exe ○ 以下のように "[EVAL]" が表示された場合は評価版です。 LpxCmd : LeXAdES(V2.0X.RX) [EVAL] LangEdge XAdES Command. ^^^^^^ ○ 以下のように表示された場合は製品版です。 LpxCmd : LePAdES(V2.0X.RX) LangEdge XAdES Command. ■ ドキュメント説明 readme-LeXAdES.txt : 全体に関する説明ファイル。本ファイル。 EULA-LeXAdES.txt : ソフトウェア製品使用許諾契約書ファイル。 doc/LeXAdES/cmd/*-help.txt : コマンドラインの利用方法のヘルプファイル。 doc/LeXAdES/cpp/index.html : C++/CLIのAPIリファレンスファイル。 readme/LeXAdES/readme-LeXAdES-old.txt : Ver1.40以前の更新内容履歴。 ■ 実行に必要なLE:XAdES:Libモジュール構成 LeXAdESdnet.dll : LeXAdESライブラリ本体(.NET API用)※1 LxaCmd.exe : LeXAdESコマンド(コマンド用) LxaCmd.exe.config.sample : DEVPATHでLeXAdESdnet.dllを利用するサンプルconfig ※2 libeay32L.dll : OpenSSLライブラリ(必須)※3 ※1 LeXAdESdnet.dllは.NET用ですのでアセンブリの関係でPATH環境変数が通った場所に    置いても利用できません。利用する実行ファイル(例:LxaCmd.exe)と同じディレク    トリに入れるかアセンブリの解決をして利用ください。 ※2 LeXAdESdnet.dllをどうしても実行ファイルとは別のフォルダに置きたい場合には    <実行ファイル名>.config とDEVPATH環境変数を使う方法があります。ただし開発者    向けの高度な利用方法ですので、実行ファイルと同じ場所でのご利用を推奨します。    詳しくは LxaCmd.exe.config.sample の中のコメントや以下サイトをご覧ください。    参考 https://msdn.microsoft.com/ja-jp/library/cskzh7h6%28v=vs.110%29.aspx    注:利用時にはDEVPATH環境変数とPATH環境変数の両方を指定する必要があります。 ※3 OpenSSLの libeay32L.dll はPATH環境変数が通った場所であればどこにあっても構い    ません。またモジュール名を標準から変更していますので他社アプリ等で配布される    libeay32.dll とは互換性がありませんのでご注意ください。 ■ .NETの参照追加のやり直し  LeXAdESdnet.dll は.NETのモジュールの為に基本的には実行モジュールと  同じフォルダに置いておき、プロジェクトから参照を行う必要があります。  サンプルでは参照しているのですが、別の環境で再度プロジェクトを開いた  時に参照がうまく通っていないケースがあります。この場合は以下の手順で  参照をやり直してお試しください。  1:プロジェクト CppSign 等の右クリックから「参照」を実行する  2:参照画面で LeXAdESdnet を「参照の削除」ボタンで一度削除する  3:bin_win\Release\LeXAdESdnet.dll を    sample\LeXAdES\cpp\Release の下にコピーする。  4:bin_win\Release64\LeXAdESdnet.dll を    sample\LeXAdES\cpp\x64\Release の下にコピーする。  5:「新しい参照の追加」ボタンで参照追加画面を開く  6:「参照」タブをクリックしてファイル選択画面にする  7:x86/x64の環境に合わせて3/4のいずれかのコピーした    LeXAdESdnet.dll ファイルを選択して「OK」をする。 ■ フォルダ構成 1)LE:XAdES:Libを利用するのに必要なフォルダ bin_win : 実行ファイル(Windows用) 必要なDLLファイルやコマンドが入っている。※3 readme : 簡単な利用方法を説明しているReadmeファイル用フォルダ。 doc : APIリファレンス用等のドキュメントフォルダ。 doc/LeXAdES/cpp : C++のAPIに関するドキュメント用フォルダ。index.htmlを開く。 license : フリーライブラリのライセンス用フォルダ。 ※3 Windows環境用は更に以下のサブフォルダに分かれている。    Release : Windows 32bit リリース版    Release64 : Windows 64bit リリース版    Debug : Windows 32bit デバッグ版    Debug64 : Windows 64bit デバッグ版 2)LE:XAdES:Libをビルドするのに必要なフォルダ include : 外部公開API用インクルードフォルダ src : LE:XAdES:Libビルド用ソースフォルダ local : フリーライブラリ用フォルダ 3)その他 sample/LeXAdES/cmd : LxaCmdによるサンプルソース ※4 sample/LeXAdES/cpp : C++のAPI実装によるサンプルソース ※4 sample/LeXAdES/cs : C#のAPI実装によるサンプルソース ※4 ※4 Windows64ビット版を利用する場合にはバッチファイルに引数 "64" を指定する。 ■ 簡単な利用方法 1)LpxCmdコマンドライン  sample/LeXAdES/cmd 下にある CmdSign.bat と CmdVerify.bat をご覧ください。 2)C++/CLIからの利用  a) プロジェクトの [参照...] から [参照]-[新しい参照の追加] の参照タブから LeXAdESdnet.dll を指定して LeXAdESdnet を追加  b) プロジェクトのプロパティページから [C/C++]-[全般]-[#using 参照の解決] に LeXAdESdnet.dll が存在するフォルダを指定  c) #using をソースに追加  ヘッダファイル LeXAdES.hpp 等の include は不要です。APIの参照に利用してください。 le::LeXAdES^ xades = gcnew le::LeXAdES(); // 生成 String^ version = xades->getVersion(); // 利用  具体的には sample/LeXAdES/cpp の下をご覧ください。 3)C#からの利用  LeXAdESdnet.dllを参照に追加して利用する。 le::LeXAdES xades = new le::LeXAdES(); // 生成 String version = xades.getVersion(); // 利用  具体的には sample/LeXAdES/cs の下をご覧ください。 ■ OpenSSLライブラリの明示的な初期化と解放の方法  初期化と解放の為に静的(static)メンバを提供しています。  暗号モジュールの初期化:   C++: le::LeXAdES::init();   C#: le.LeXAdES.init();   ※ アプリやシステムの起動時に一度だけ呼んでください。   ※ 通常はLeXAdESクラスのインスタンス生成時に自動的に呼び出されます。  暗号モジュールの解放:   C++: le::LeXAdES::term();   C#: le.LeXAdES.term();   ※ アプリやシステムの終了前に一度だけ呼んでください。   ※ 解放は自動的には呼び出されない為に明示的に呼び出す必要があります。 ■ Visual Studio 2012 以降でのご利用  現在 LeXAdES は Visual Studio 2010 でビルドして提供されています。  この為に Visual Studio 2012 以降で利用する場合には以下の設定を行う  必要があります。  プロパティ - 構成プロパティ - 全般 - プラットフォーム ツールセット  ここで v100 を指定することで Visual Studio 2012 以降でも利用することが  可能になります。これは Visual Studio 2012 以降でビルドしますがランタイム  等は Visual Studio 2010 を利用する利用方法になります。  なお Visual Studui 2010 がインストールされていないとプラットフォーム  ツールセットで v100 の選択ができません。以下から無料のExpressがダウン  ロードできますのでこれをインストールすることで v100 の選択が可能になり  ます。Expressはインストールするだけで、直接使う必要はありません。  http://download.microsoft.com/download/4/E/6/4E61E454-1DE7-4B70-860B-13282DE65D6B/VS2010ExpressJPN.iso  プラットフォーム ツールセットもご利用の環境のままで利用したい場合には  LeXAdES本体をご利用の環境でリビルドする必要があります。環境によっては  トラブルを生じる場合もあるかと思いますが、トラブル時にはご相談下さい。 ■ Doxygenファイル(C++/CLIのAPIリファレンス/C#のAPIリファレンスとしても参照可能)  doc\LeXAdES\cppフォルダ下にDoxygenで生成されたC++/APIドキュメントがあります。  doc\LeXAdES\cpp\index.htmlをブラウザで開いてご覧下さい。 ■ 著作権  XML長期署名ライブラリ Le-XAdES は 有限会社ラング・エッジ の著作物です。  ASN1-BER/XML変換ライブラリ LeAsn1Xml は 有限会社ラング・エッジ の著作物です。  Microsoft Visual C++ 2010 ランタイム はMicrosoftの著作物です。  Microsoft Windows および .NET Framework はMicrosoftの著作物です。 ■ SigningCertificateV2 解説  SigningCertificateV2 要素は最新の欧州仕様では新規作成時の利用が必須となっています。  しかしながらまだ国内を含め多くの実装では検証時に未対応のものも多くLE:XAdES:Libでは  デフォルトではSIGN_FLAG::SIGN_USE_SIGNCERTV2フラグはONにしていません。  もし他社実装のXAdESにて検証をしないのであればSIGN_FLAG::SIGN_USE_SIGNCERTV2フラグを  指定して SigningCertificateV2 要素の利用を推奨します。  SigningCertificateV2 自体は署名証明書を確認する為の情報です。この要素を使わなくても  検証は可能である為に実際には SigningCertificateV2 要素を使っても検証時に大きな問題  になる可能性は小さいと言えます。 ■ Mainifest 解説  Manifest 要素はW3CのXmlDsig(XML署名)の仕様に定義されているReference要素の階層構造を  実現する為の要素となります。  LE:XAdES:LibのVer2.01.R1よりManifest要素のEnveloping的な利用方法をサポートしました。  Ver2.03.R1からはManifest要素の外部Detached的な利用方法も可能となりました。  なお現時点ではManifest要素の中のReference要素としてManifest要素を指定することは未サ  ポートとなりますのでご注意ください。つまり階層的なManifest要素の利用は出来ません。  並列的に複数のManifest要素を指定することは可能です。  またVer2.03.R1からManifestファイルの生成も可能となりました。先にManifestファイルを  作った上でXAdES署名時にManifest指定することが可能です。 ■ Le-XAdESライブラリの更新内容履歴 Ver2.04.R3版 : 2024-08-28 ・OCSP/CRLの署名証明書の有効性はその発行日時でおこなうように仕様変更。  OCSP/CRLへの署名証明書が新規発行された時にXAdES-Tの検証において、   -3015:時刻(XXXXXXX)がLINK1(EE)証明書の有効期限の前です。  となる問題への対応。タイムスタンプ時刻の方がOCSP等の証明書の発行前と  なる為のエラーです。  ※ 本問題はLE:XAdES:LibのV3系およびLE:PAdES:Libでは生じません。 Ver2.04.R2a版 : 2024-03-04 ・タイムスタンプリクエストのNonceの1バイト目を0x04固定とした。  Nonceの1バイト目が 0x00 or 0xFF の場合に処理できない他社実装がある為。 Ver2.04.R2版 : 2024-01-22 ・Windows版の認証付きプロキシ環境でWinHTTP(デフォルト)を使った場合にエラーになり  通信できない問題の修正。現在Basic認証のみサポート。NTLM/PASSPORT/DIGEST等の認証が  必要な場合にはご連絡ください。 Ver2.04.R1版 : 2023-09-13 ・新バージョン LE:XAdES:Lib V3.00.R1 が 2023-08-30 にリリースされました。  主な新機能:LinuxおよびJavaへの対応、複数署名への対応、LE:PKI:Lib利用、等。  ※ V2.04.R1版とはAPI互換性はありませんのでご注意ください。  ※ 互換性が無い為に LE:XAdES:Lib V2系の保守サポートは継続します。  ※ 今後新機能はLE:XAdES:Lib V3系への実装となりますので移行を検討ください。 ・HTTP通信の標準設定をWinInetからWinHTTPに変更した。※注意:仕様変更  ※注意 参照するプロキシ設定が変わる可能性があるので事前チェックが必須です。  WinHTTPはWindows Updateで使われているHTTP通信方式。  従来通り WinInet を使う場合は以下のAPI引数の httpType に HTTP_WININET を指定する。  ※ LeXAdES.setHttpType() は新しく追加されたAPI。   // 選択可能なHTTP通信方式   HTTP_TYPE::HTTP_WINHTTP(2) WinHTTP通信方式の利用(デフォルト設定/推奨)   HTTP_TYPE::HTTP_WINSOCK(1) WinSock+OpenSSL通信方式の利用(独自プロキシ設定)   HTTP_TYPE::HTTP_WININET(0) WinInet通信方式の利用(V2.03までのデフォルト設定/非推奨)   // HTTP通信方式指定API   LeXAdES.setHttpType(HTTP_TYPE htype); // タイムスタンプ/検証情報取得HTTP方式の指定   LeTimeStamp.getTs3161(..., HTTP_TYPE httpType, ...); // タイムスタンプ取得時のHTTP方式の指定   LeTimeStamp.getTsAmano(..., HTTP_TYPE httpType, ...); // タイムスタンプ取得時のHTTP方式の指定  LxaCmd では引数 -http inet を指定することで従来と同じWinInetの利用が可能。 ・HTTP通信にてSocket+OpenSSLの指定が可能となった。  API利用時には HTTP_SOCKET を指定、コマンド利用時には -http sock を指定。  ※ プロキシ設定 proxy.ini は実行モジュール(LxaCmd.exe等)と同じか C:\Temp 下から読み込む。 ・OpenSSLの1.1.1のサポートが2023年9月11日で終了の為に3.1.1に更新した。  LE:XAdES:Lib V2ではOpenSSLはHTTP_SOCK通信時を除けばCRL/OCSP取得とRSA検証時のみ利用している。  ※ 3.1.1よりスタティックリンクに切り替えた為に libeay32L.dll と ssleay32L.dll は不要となった。  https://www.openssl.org/blog/blog/2023/03/28/1.1.1-EOL/ ・Visual Studio 2022 に対応した。src/LeXAdES2022.sln にてリビルドが可能。  ※ Visual Studio 2010/2012 はマイクロソフトのサポート期限切れにつき未サポートとなった。    サポートする Visual Studio は、2013/2015/2017/2019/2022 となった。 ・XAdES検証時のSigningCertificateV2に不具合がある場合があったので修正した。 Ver2.03.R1版 : 2022-06-22 ・XAdES検証時にSigningCertificateV2のチェックするようになった。 ・SigningCertificateV2の利用オプションSIGN_FLAG::SIGN_USE_SIGNCERTV2を追加。  デフォルトはオフ(SigningCertificateの利用)なので指定しない限り出力に変更無し。 ・LxaCmd の署名時にSigningCertificateV2を利用する -sflag scv2 を追加。 ・LxaCmd に ファイル参照操作(Manifest)を行うコマンド引数 -ref を追加。 > LxaCmd -help -ref LxaCmd : LeXAdES(2.03.R1/32bit) [Debug] LangEdge XAdES Command. Copyright (c) 2006-2022 LangEdge,Inc. all rights reserved. > LxaCmd.exe -ref [-options] [-in input.xml] [-out output.xml] options: 参照生成操作(Manifest) : 出力指定(-out)必須 -make : Manifestファイルの生成を行う -det filepath : Detached(外部ファイル参照)形式の署名対象追加 -dlist filepath : Detached形式の署名対象をリストから追加 ※ dlist は単独指定で中に1行1ファイルパスで記述 -hash : 参照ハッシュ方式 省略時=s256 sha1 : SHA-1 (160ビット) s256 : SHA-2 (256ビット) s384 : SHA-2 (384ビット) s512 : SHA-2 (512ビット) options: 参照検証操作(Manifest) : 入力指定(-in)必須 -check : Manifestファイル参照先のハッシュ値をチェックする -report : 検証結果レポートの画面出力 options: 入出力オプション -in filepath : 入力Manifestファイル -out filepath : 出力Manifestファイル ・Detached形式で外部Manifestファイルを指定する LeXAdES::addDetachedManifest() を  追加した。API仕様は以下の通り。s /** Manifest形式リファレンス(署名対象)のDetached形式での追加\n\n * 署名ファイルの外にあるManifestファイルを指定する形式のリファレンスを追加する。 * ハッシュ値は署名時に内部にて計算されるのでアクセス可能でなければいけない。 * * @param fname [IN] 署名対象Manifestファイルを指定(ファイルは存在している必要がある) * @retval XAdES_OK エラーが無かった場合にはXAdES_OKが返る * @retval マイナス値 エラーコードが返る * @note ルートフォルダが指定されていればルートフォルダからの相対位置で指定 * @note ルートフォルダが指定されていない場合は署名ファイル位置がルートフォルダ * @note 署名前に addDetached/addEnveloping/addEnveloped/addManifest のいずれかの実行が必須 */ virtual int addDetachedManifest( String^ fname // [IN] 署名対象ファイルを指定 ) = 0; ・LxaCmd の署名時にDetached形式で外部Manifestファイルを指定する -detmani を追加。  以下はLxaCmdで外部DetachedマニフェストのXAdES生成する例 // 最初に -ref オプションでManifestファイルを生成 > LxaCmd -ref -make -det test.txt -det test2.xml -det test3.jpg -out manifest.xml // Manifestファイルを -detmani 引数で指定してXAdES署名の実行 > LxaCmd -sign -cert select -detmani manifest.xml -out xades-manifest.xml // XAdES検証の実行(V2.03.R1では manifest.xml の参照先もチェック) // ※ V2.02.XX 以前では manifest.xml の参照先はチェックしないので注意。 > LxaCmd -verify -report -in xades-manifest.xml ・XAdES検証時に外部Detachedマニフェストのチェックするようになった。 ・XAdESレベルダウン操作API LeXAdES::setType() を追加。  setType後に保存することでレベルダウンしたXAdESを取得可能。  ※ レベルダウンは XAdES-BES か XAdES-T のみ可能。 ・LxaCmd に XAdESレベル操作 を行うコマンド引数 -level を追加。 > LxaCmd -help -level LxaCmd : LeXAdES(2.03.R1/32bit) [Debug] LangEdge XAdES Command. Copyright (c) 2006-2022 LangEdge,Inc. all rights reserved. > LxaCmd.exe -level [-options] -in input.xml [-out output.xml] options: レベル表示操作 (無し) : -level 指定のみでレベル表示(オプション無し) note: ES Level (Type) XmlDsig (0x1000) : XML Signature (not XAdES). XAdES-BES (0x1001) : XAdES Signature only. XAdES-T (0x1005) : XAdES-BES + SignatureTimestamp. XAdES-X-L (0x1025) : XAdES-T + Certificates and Revocation datas. XAdES-A (0x1065) : XAdES-X-L + ArchiveTimestamp. options: レベルダウン操作 -cut : レベルダウン出力するXAdES種別 (BES=XAdES-BES/T=XAdES-T) options: 入出力オプション -in filepath : 入力XAdESファイル(必須) -out filepath : 出力XAdESファイル ・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)" Ver2.02.RC5版 : 2019-10-05 ・証明書形式の互換性を向上。  1)有効期限のUTCTimeとGeneralizedTimeの混在に対応  2)BMPString(UnicodeString)に対応 ・アーカイブタイムスタンプを重ねる場合に最初にV1.3.2があり後からV1.4.1を追加  した場合のファイルに対する検証に失敗していたので修正した。  なお通常は無いと思いますが逆に最初にV1.4.1があり後からV1.3.2を追加した形式  には非対応です。 Ver2.02.R4版 : 2018-02-02 ・別途作成されたハッシュ値計算済みのManifestファイルの読み込みに対応した。  API的にはLeManifestクラスにManifest情報を読み込めば良い。  コマンドでは -mani 引数にて Manifestファイル の指定が可能となった。 -mani filepath : Manifest(外部間接ファイル参照)形式の署名対象追加 ・AMANO新ライセンス形式への対応  アマノタイムスタンプサービス3161のライセンスファイル形式更新への対応。 Ver2.02.R3版 : 2016-09-15 ・保管タイムスタンプ付きの場合に、署名証明書の有効期限切れ後に有効期限エラーを  出していた。Ver2.02.R1版におけるinfo[VERIFY_LIST::VL_VALID] の時の修正時に  入った問題の修正。保管タイムスタンプ付きの場合にはエラーにならないはずなのに  エラーを出していたので注意が必要。なおaddEsXl()やaddEsA()等にはこの問題は生じ  ない、検証verify()時だけの問題である。 ・LxaCmdの検証時にエラーメッセージが重複して2回出ていたので1回だけの出力に変更。 Ver2.02.R2版 : 2016-03-30 ・新規Windows環境(7/8.1/10)においてWindows証明書ストアのSHA-2証明書が検索でき  ない問題があり、検索前に一度WindowsのAPIにて認証パスを構築して確認するように  修正した。これにより問題は生じないことを確認している。  本修正前の現象としては検証時に認証パスが構築できない(-3000)等のエラーを生じる  場合があります。一度証明書画面を開き認証パスを表示すると正常に動作するように  なる。 Ver2.02.R1版 : 2016-03-24 ・XAdES-Tの時に検証後の info[VERIFY_LIST::VL_VALID] に常にTSA証明書の日時が  セットされてしまっていた。署名証明書の日時ときちんと比較してセットされる  ように修正した。 ・MS16-035問題により一部環境では SignedXml の Detached 検証が正常に動作しない  問題があり、LE:XAdES:Lib としては SingedXml を検証時に利用するオプション  VERIFY_FLAG::VERIFY_SIGNEDXML をデフォルト(VERIFY_ALL)ではオフになるよう  に仕様を変更した。  参考情報 http://www.langedge.jp/blog/index.php?itemid=709 ・独自証明書ストア利用時に見つからない場合にはWindows証明書ストアを見に行く  ように修正された。 ・DataObjectFormat(署名対象の属性)をサポートするAPI群が追加された。  現在 Mime-Type / Encoding / Identifier が指定可能である。  DataObjectFormatはETSI(欧州)のXAdES Baseline Profileでは必須要素である。  ETSI新仕様(Baseline Profile)への準拠。  〇 .NET API(C#,C++/CLI)   LeXAdES::addDetachedEx();   LeXAdES::addDetachedDigestEx();   LeXAdES::addEnvelopingEx();   LeXAdES::addEnvelopingXmlEx();   LeXAdES::addEnvelopedEx();  〇 コマンド引数   -det/-eping/epedのファイル指定の後に mime: enc: ident: で指定可能。 mime: : Mime-Typeを指定する 例) "text/plain" ※ enc: : Encodingを指定する 例) "http://www.ietf.org/rfc/rfc2279.txt" ident: : Identifierを指定する" 例) "http://uri.etsi.org/01903/v1.3.2#"  ※ MimeTypeの指定はEnvelopingのObjectにも利用される。 ・タイムスタンプトークン/証明書/CRL/OCSPにDERエンコードの属性を追加。  ETSI新仕様(Baseline Profile)への準拠。  旧  新 ・タイムスタンプにc14n正規化要素を追加。  ETSI新仕様(Baseline Profile)への準拠。  旧        新          ・コマンドによるCRL/OCSP取得時のBasic認証引数(-basicオプション)の追加。  ※ 相互運用性試験(プラグテスト)用であり通常利用しない。 ・認証パス構築オプションにOCSPを利用しない noocsp を追加。  ※ 相互運用性試験(プラグテスト)用であり通常利用しない。 ・Visual Studio 2005のビルドのベータ版を提供。 ・XAdESのReferenceを取得する LeXAdES::getReferences() を新規にAPI追加した。 ・ManifestのReferenceの位置を指定する LeManifest::setRoot() を新規にAPI追加した。 ・Doxygenヘルプの文字化けしている箇所を修正した。 Ver2.01.R3版 : 2015-08-19 ・PKCS#11のDLL指定読み込み時に失敗する時があったので修正した。  修正ソース src\LeXAdES\LeXAdES\src\LeCertPkcs11.cpp ・検証時にEncapsulParserクラスのvalue->OuterXmlの読み込みを一回のみに変更。  共通のメンバとしてm_Parserを追加して再利用するように修正した。Manifestのような  大きなXAdESファイルの検証時に多少は処理時間の短縮につながる。  修正ソース src\LeXAdES\LeXAdES\src\LeXAdES.cpp ・署名証明書のシリアル番号の上限を18バイトから20バイト以上を利用可能とした。  OpenSSLのBIGNUMを利用。修正ソース src\LeXAdES\LeXAdES\src\LeXadesObj.cpp ・署名証明書のシリアル番号の上限が18バイトの時に19バイト以上の指定があった  場合に例外を正しく取得できていなかったので、シリアル番号変換部を try 文の  中に移動した。修正ソース src\LeXAdES\LeXAdES\src\LeXAdES.cpp Ver2.01.R2a版 : 2015-06-15 ・複数のアーカイブタイムスタンプがある時にWindows証明書ストアにルート証明書が無く  独自証明書ストアにのみルート証明書を置いた場合の検証時にXAdES_ATS_CHAIN_ERR(-3016)  となる問題があったので修正した。内側のアーカイブタイムスタンプの場合にはルート  証明書の確認方法が異なるが、その際にフラグ CP_FLAG::CP_FLAG_ROOT_NO_TSA_WIN を  追加する必要があったのでLeXAdES.cppの5473行目に追加した。 Ver2.01.R2版 : 2015-06-04 ・Manifest利用のサンプルコマンドを追加。   sample\LeXAdES\cmd\CmdManifestTest.bat ・評価版判定の LeXAdES::isEvaluation() を新規にAPI追加した。 ・評価版機能の組み込みを行った。  ※ 製品版への影響はありません。 Ver2.01.R1版 : 2015-05-08 ・新機能 PKCS#11 ICカード利用。  API:ILeXAdES::signPkcs11() によるPKCS#11カードによる署名機能を追加。  コマンド:署名時の証明書指定のオプションに p11 を追加。   LxaCmd -sign -cert p11 filepath passwd : P11のDLLファイルとパスワードが必要  ※ PKCS#11のDLLファイルは、APIではnullptr、コマンドでは p11 HPKI passwd とする    ことで "C:\\Windows\\System32\\P11Std9a.dll" の指定と同じになる。  ※ PKCS#11に格納されている全ての証明書が XAdES の ds:KeyInfo の下に出力されます。    通常は署名証明書のみ格納されますがICカード利用時に証明書を読み出す為の仕様。  ※ 本機能はPKCS#11のICカード全てに対応したものでは無く実績が無い場合には事前に    動作確認が別途必要となります。 ・PKCS#11利用時、CKM_RSA_PKCS の初期化に失敗した場合の別方法で署名処理組み込み。  標準では CKM_RSA_PKCS により初期化を行い、こちらで計算したダイジェスト値の暗号化  を行うことで署名処理を実行している。CKM_RSA_PKCS の初期化に失敗した場合には、  CKM_SHA1_RSA_PKCS/CKM_SHA256_RSA_PKCS/CKM_SHA384_RSA_PKCS/CKM_SHA512_RSA_PKCSを  使った署名計算を行うように修正をした。 ・新機能 Manifest 対応。  ManifestはXML署名標準仕様に含まれる複数ファイルの階層化指定の仕様です。 ・Manifestの署名時追加機能の実装。  API:LeManifestクラス新設、ILeXAdES::addManifest() 追加。  コマンド:署名時引数に -mlist と -mlists を追加。 ・Manifestの検証機能の実装。  API:VERIFY_FLAG::VERIFY_MANIFEST_REF と ILeXAdES::getManifests() の追加。  API:LeManifest::verifyReferences() による検証機能の追加。  コマンド:検証時引数に -vflag nomanif と -manifest の追加。 ・コマンド:署名対象のリストファイルによる指定の追加。  -dlist : Detached対象リストファイルの指定  -elist : Enveloping対象リストファイルの指定 ・ILeXAdESクラスにタイムスタンプ情報の取得APIを追加した。   getSTS() : 署名タイムスタンプ(バイナリ)の取得   getATSnum() : 保管タイムスタンプ数の取得   getATS(num) : 保管タイムスタンプの取得(num=-1なら最後の保管タイムスタンプ) ・C++のサンプルにXAdESの証明書情報を取得する CppParse プロジェクトを追加した。   sample/LeXAdES/cpp/CppParse.cpp を参照。 ・LxaCmdの検証(-verify)時に認証パス構築オプションとして引数 -bflag を追加した。 -bflag : 認証パス構築オプション指定 nowin : Windows証明書ストアを利用しない noadd : 独自証明書ストアを利用しない nowinta : Windows証明書ストアのルート証明書を利用しない noaddta : 独自証明書ストアのルート証明書を利用しない notsa : TSA証明書はWindows証明書ストアのルート証明書を利用しない dir : ディレクトリサーバから証明書を取得(-repository指定が必要) ・利用しているOpenSSLのバージョンを 1.0.1g から 1.0.1i に変更した。 Ver2.00R1版 : 2015-04-13 ・正式リリース版。 Ver2.00RC1版 : 2014-10-20 ・タイムスタンプにTAC属性証明書が入っている場合に解放エラーになったいた問題の  修正。 ・古い証明書でMD2利用時にOpenSSLでは無くCAPIを使って検証するように修正した。  OpenSSL1.0以降ではMD2が未サポートになった為。 Ver2.00β2版 : 2014-08-08 ・OpenSSLの初期化を見直し。  C#のマルチスレッド時問題への対応。 ・LeDetachedOpt.cpp の修正。  原本が多い場合の、処理の重複の回避。 Ver2.00β1版 : 2014-07-31 ・Ver2.00の最初のベータ版リリース。  正式名称を「Le-XAdESライブラリ」から「LE:XAdES:Lib」に変更。  提供形態をスタティックライブラリからダイナミックライブラリ(DLL)形式に変更。  外部公開APIを完全にCLI対応としたことにより直接C#からも利用可能になった。  ファクトリメソッドを廃止してC++/CLIではgcnewをC#ではnewを使って生成する。  内部をマルチバイトからユニコードに変更した。  API仕様が古いAPIの削除等により一部変更になっている。 ・ビルド環境が Visual Studio 2010 になった。  同時に64bit対応をしたので32bit/64bitどちらのモジュールも提供される。  利用環境において必要となるC++ランタイムもVisual Studio C++ 2010用が必要。  これにより.NET 2.0から.NET 4.0対応に変更となった。 ・利用しているOpenSSLのバージョンを 0.9.8e から 1.0.1g に変更した。  更に libeay32.dll はLangEdge修正版の libeay32L.dll に変更して必須とした。  ソースは local\src\openssl の下に格納。  これにより既存他アプリインストールの libeay32.dll との混同が防止できる。  LE:PAdES:Libとモジュールを共通化。 ・XAdES v1.4.1/1.4.2仕様に対応した。  XAdESv141:TimeStampValidationData と XAdESv141:ArchiveTimeStamp の対応。 ・XAdES v1.3.2指定時の ES-T の証明書と検証情報の保管場所を変更した。  ES-T(署名タイムスタンプ)の検証に必要となる証明書と検証情報は EX-X-L 化  する際に RevocationValues に入れていましたが、Ver2.00より署名タイムスタンプ  のタイムスタンプトークン自体に埋め込む形式に変更された。  v1.4.1形式のTimeStampValidationData対応の影響。 ・boostの利用を止めた。  これによりVisual Studioのバージョン依存が無くなった。 ・コマンドラインで利用できる LxaCmd.exe を提供するようになった。  ヘルプ表示は LxaCmd.exe -help にて。 ・C++/CLI,C#,コマンドの各利用サンプルを sample\LeXAdES に提供するようになった。  その他フォルダ構成全体をPDF長期署名ライブラリLE:PAdES:Libと共通化した。 ・アマノタイムスタンプサービス3161 Type-Tへの対応。  ライセンスファイルが必要なケースでも標準で利用が可能。 ・PFUタイムスタンプサービス対応部の削除。  PFUタイムスタンプサービス停止に伴う対応。 ・検証情報(証明書/CRL/OCSP)をXML要素として埋め込む場合に重複している要素は省略  するように修正した。リンク証明書利用時等に有効。 ・loadXml() 呼び出し時に入力XAdESファイルの位置を setRoot() していたがLxaCmdの  サポートの為に廃止した。  プログラミングで利用する場合に必要であれば独自に setRoot() をする必要がある。 ・OpenSSLを利用した CryptoFrameOSSL.cpp のマルチスレッド対応が不十分だったので  修正した。LeAsn1Xml/src/CryptoFrame/CryptoFrameOSSL.cpp を修正。  ※ Ver1.43c版からの反映 ・RSA検証時に.NETのRSACryptoServiceProviderのVerifyData()を利用していたがこれと  SignData()をドメインコントローラ利用環境下で利用した場合に余計なLDAP通信が発生  して速度低下を生じる事が分かった。この為にRSA検証を常にOpenSSLのAPIを利用する  ように修正した。LeAsn1Xml/src/CryptoFrame/CryptoFrame.cpp を修正。  ※ ここまでVer1.43b版からの反映  更にPKCS#12ファイルを利用した署名付与の場合にはRSA署名にもOpenSSLのAPIを利用する  ように修正した。すなわちPKCS#12ファイル利用時にはSignData()は利用されない。 ・CRL検証時にCRL署名検証がエラーに係らず毎回正常終了していたので修正。  OpenSSLの初期化 OpenSSL_add_all_algorithms() を呼び出すようにした。  検証結果が正常な"1"以外の時は全てエラーになるようにした。  上記いずれも LeAsn1Xml/src/object/CertificateList.cpp を修正。  ※ Ver1.43a版からの反映 ・CRL検証にOpenSSLを使うビルドオプション _USE_OPENSSL を追加。  LeAsn1Xml/object/CertificateList.hpp ← ※ _USE_OPENSSL を定義  ※ Ver1.43版からの反映 ・OpenLDAPの利用が可能になった。  OpenLDAPとWinLDAPはどちらか一方を選択して利用する。  切り替えは LeXAdES\src\LeLdapConnect.hpp の USE_OPEN_LDAP 定義で行う。  #define USE_OPEN_LDAP // この行が有効なら OpenLDAP 無効なら WinLDAP を利用  ソースは local\src\openldap の下に格納。  LE:PAdES:Libとモジュールを共通化。 ・内部で直接タイムスタンプを取得して付与する addEsT() と addEsA() を追加。 ・署名設定に le::SIGN_FLAG::SIGN_USE_JPKI_CERT オプションを追加。  JPKI(公的個人認証)ICカード利用の利用が可能となった。  なおJPKIではRSA-SHA1のみ利用が可能であり、検証とES-X-Lの生成が出来ない。 ・署名時オプションをXMLとして addSignOption() で追加できるようになった。  現在は SignatureProductionPlace要素 が追加可能である。  指定すると City/StateOrProvince/PostalCode/CountryName の設定が可能。  XAdES objectの署名領域に追加される。 ・署名設定に le::SIGN_FLAG::SIGN_NO_XADESOBJ オプションを追加。  XAdESだけでは無くXML署名のファイルも生成可能となった。 ・証明書の概要表示時に別名(alias)やJPKI/商業登記証明書の拡張を表示可能になった。  UTF-8による日本語の属性も正しく表示されるようになった。 Ver1.43c版 : 2014-05-11 ・OpenSSLを利用した CryptoFrameOSSL.cpp のマルチスレッド対応が不十分だったので  修正した。LeAsn1Xml/src/CryptoFrame/CryptoFrameOSSL.cpp を修正。 Ver1.43b版 : 2013-06-13 ・RSA検証時に.NETのRSACryptoServiceProviderのVerifyData()を利用していたがこれと  SignData()をドメインコントローラ利用環境下で利用した場合に余計なLDAP通信が発生  して速度低下を生じる事が分かった。この為にRSA検証を常にOpenSSLのAPIを利用する  ように修正した。LeAsn1Xml/src/CryptoFrame/CryptoFrame.cpp を修正。 Ver1.43a版 : 2013-02-13 ・CRL検証時にCRL署名検証がエラーに係らず毎回正常終了していたので修正。  OpenSSLの初期化 OpenSSL_add_all_algorithms() を呼び出すようにした。  検証結果が正常な"1"以外の時は全てエラーになるようにした。  上記いずれも LeAsn1Xml/src/object/CertificateList.cpp を修正。 Ver1.43版 : 2013-02-05 ・CRL検証にOpenSSLを使うビルドオプション _USE_OPENSSL を追加。  LeAsn1Xml/object/CertificateList.hpp ← ※ _USE_OPENSSL を定義  LeAsn1Xml/src/object/CertificateList.cpp  LeAsn1Xml/src/object/TimeStampToken.cpp  LeAsn1Xml/src/CryptoFrame/CryptoFrameOSSL.cpp  LeAsn1Xml/src/Asn1Util.cpp  LeXAdES/src/LeCRL.cppa  LeXAdES/src/LeXades.cpp  ※ _USE_OPENSSL を使う場合にはOpenSSL(libeay32.dll)は実行時に必須となる。 ・リンク時に lib\libeay32.lib を含めるか lib フォルダを「追加のライブラリ ディレ  クトリ」として追加する必要がある。 Ver1.42版 : 2012-05-14 ・VisualStudio 2010対応の為にboostのヘッダファイルの修正。  include\boost\config\compiler\visualc.hpp # elif _MSC_VER == 1600 # define BOOST_COMPILER_VERSION 10.0 ・XAdES v1.3.1 署名ファイル検証時のType属性チェック対応。  LeXades.cpp の checkRefType() のType属性チェック時にv1.3.1を追加した。 ・RSA-SHA2署名かつSIGN_NO_SIGN指定による署名時にエラーになる場合があったので修正。  「未対応のProviderType(XX)です。」と表示されるケースがあった。これは秘密鍵の暗号  プロバイダタイプチェックによる表示だが、そもそもSIGN_NO_SIGN指定時にはチェックが  不要なので呼ばれないようにした。LeXmlSign.cpp の setupsignatureValue() 内の修正。  またポップアップ表示はデバッグ用であって不要なのでデバッグ時以外では表示しない  ように修正した。 Ver1.41版 : 2012-02-06 ・全体に影響するオプションフラグ(OPT_FLAG)を設定する setOptFlag() の追加。  現在は省メモリの為にタイムスタンプのハッシュ対象計算時に常に中間ファイルのスト  リームを利用する OPT_ALWAYS_FTRM のみ利用可能。OPT_ALWAYS_FTRM は省メモリにはな  りますが実行速度はメモリでは無くファイルを使う為に遅くなりますのでご注意下さい。  なお100MBを超える署名対象の場合はこのオプションに関係無く中間ファイルが利用され  ています。  /**   @enum OPT_FLAG   @brief LeXAdES全体に影響するオプション定義  */  enum OPT_FLAG {   OPT_NONE = 0x0000, ///< オプション無し(標準)   OPT_ALWAYS_FTRM = 0x0001, ///< タイムスタンプ対象計算時に常にFileStreamを利用(注:省メモリだが低速度)  };  /** 全体に共通したオプションフラグを指定(オプション)\n\n   *   * @param optflag [IN] OPT_FLAGを指定   * @note 未セット時は OPT_NONE となる   */  virtual void setOptFlag (    unsigned int optflag // [IN] OPT_FLAGを指定    ) = 0; ・SetCurrentDirectory()の利用をやめフルパスにて検証を行なうようにした。  これにより異なるインスタンスで検証をスレッド等で同時に行なえるようになった。  ただし SignedXml の検証ではこの機能は使えない為に VERIFY_SIGNEDXML をオフに  して検証して下さい。 flag &= ~le::VERIFY_SIGNEDXML; // SignedXmlでの検証は失敗するのでオフにする ・const std::string にて定数定義していたところをメモリリークと紛らわしいので  const static char* での定数定義に変更した。 ・念のために pin_ptr している箇所は全て利用後に nullptr で明示的に開放するように  修正をした。 ※ Ver1.40版以前の更新内容履歴は以下ファイルを参照のこと。   readme\LeXAdES\readme-LeXAdES-old.txt ========================================      Copyright (C) 2006-2014 LangEdge,Inc. All rights reserved.               http://www.langedge.jp/ ========================================