========================================        XML長期署名ライブラリ Le-XAdES Ver 1.30R2 ドキュメント          有限会社ラング・エッジ 2010年01月05日 ======================================== ■ Le-XAdESの利用手順 1)Visual Studio 2005 C++ で以下のプロジェクトを作成   →「MFCアプリケーション」のプロジェクトを生成 2)プロジェクトのプロパティの「全ての構成」で以下を指定  構成プロパティ - 全般 - MFCの使用   → 「共有DLLでMFCを使う」を指定する   ※ 共通言語ランタイムを指定すると「スタティックライブラリでMFCを利用する」は使えない   ※ MFC自体は必須では無くサンプルツールで「MFCアプリケーション」を使っている為に指定  構成プロパティ - 全般 - 共通言語ランタイムサポート   → 「共通言語ランタイム サポート(/clr)」を指定する  構成プロパティ - 全般 - 文字セット   → 「マルチ バイト文字セットを使用する」を指定する   ※ 「Unicode 文字セットを使用する」もライブラリを再ビルドすれば利用可能。  構成プロパティ - C/C++ - 全般 - 追加のインクルードディレクトリ   → Le-XAdESのヘッダファイルが入っているパスを追加する  構成プロパティ - リンカ - 入力 - 追加の依存ファイル   → 「LeXAdES.lib LeAsn1Xml.lib Wldap32.lib Cryptnet.lib Crypt32.lib Cryptui.lib」     を指定する ※ Release版   → 「LeXAdESD.lib LeAsn1XmlD.lib Wldap32.lib Cryptnet.lib Crypt32.lib Cryptui.lib」     を指定する ※ Debug版 3)プロジェクトのリソースにLeXAdESリソースを追加  リソースファイル - 追加 - 既存の項目   → 「LeXAdES.rc」を指定して追加する(スキーマ情報利用の為) 4)ソースへの組み込み  LeXAdES\sample\XAdESsampleDlg.cpp を参考にして下さい。 ■ Le-XAdESサンプルツールの実行手順 1)Le-XAdESサンプルツール(XAdESsample)を起動します。 2)証明書リストから証明書を選択します。 3)タイムスタンプリストからタイムスタンプ局を選択します。 4)ES-BESボタンをクリックします。   ・署名対象ファイル(XML形式)を選択します。 5)ES-Tボタンをクリックします。   ・タイムスタンプ局に必要な情報入力ダイアログが開かれるので入力する。 6)ES-XLボタンをクリックします。 7)ES-Aボタンをクリックします。   ・タイムスタンプ局に必要な情報入力ダイアログが開かれるので入力する。 8)検証ボタンをクリックします。 ■ Le-XAdESサンプルツール他に関して  ・Le-XAdESサンプルツール1   ※ 第三者開発ソフトとしてOpenSSLとBoostを利用。   LeXAdES\sample\XAdESsample.sln を開いてサンプルツールのビルド&実行が可能です。  ・Le-XAdESサンプルツール2(PFUタイムスタンプと信頼リストを利用)   ※ 第三者開発ソフトとしてPFU-SDKとOpenSSLとBoostを利用。   ※ 別途PFUタイムスタンプSDKを入手して "PFU_SDK" フォルダにセットする必要があります。   LeXAdES\sample_trust\XAdESsample.sln を開いてサンプルツールのビルド&実行が可能です。  ・Le-XAdESサンプルツール3(SII様特注機能の動作確認用)   ※ 第三者開発ソフトとしてOpenSSLとBoostを利用。   ※ SII様以外には非公開非提供。   Detachedsample\Detachedsample.sln を開いてサンプルツールのビルド&実行が可能です。 ■ Doxygenファイル  LeXAdES\docフォルダ下にDoxygenで生成されたドキュメントがあります。  LeXAdES\doc\index.htmlをブラウザで開いてご覧下さい。 ■ 著作権  XML長期署名ライブラリ Le-XAdES は 有限会社ラング・エッジ の著作物です。  ASN1-BER/XML変換ライブラリ LeAsn1Xml は 有限会社ラング・エッジ の著作物です。  CAPICOM および Microsoft Visual C++ 2005 ランタイム はMicrosoftの著作物です。  Microsoft Windows および .NET Framework はMicrosoftの著作物です。  「PFUタイムスタンプ SDK RFC3161」は 株式会社PFU の著作物です。 ■ Le-XAdESライブラリの更新内容履歴  Ver1.30R2版 : 2010-01-05  ・検証フラグVERIFY_NO_TARGET指定の保管タイムスタンプ時間取得に誤りがあったので   修正された。  Ver1.30R1版 : 2009-12-24  ・署名対象がXMLであった場合に VERIFY_NO_TARGET の指定効果が無かった問題の解決。  Ver1.30B2版 : 2009-12-22  ・setSignatureValue() の最後で行っている検証時は署名対象が無くてもエラーになら   ないように VERIFY_NO_TARGET フラグをONにするように変更した。  ・addDetachedDigest() の引数として与えられるファイル拡張子が ".xml" の場合には   TransformとしてXML正規化がセットされるように変更した。  Ver1.30B1版 : 2009-12-16  ・CAPICOM非依存になった。これに伴い証明書の選択等も LeCertCapicom.hpp から   LeCertDnet.hpp に変更となった。一部引数が増えた以外はほぼ同じAPIになって   いる。詳細は LeCertDnet.hpp を参照。   従来通りCAPICOM依存で使いたい場合は以下の3つを対応する必要がある。   1)LeXAdES\old_src の下の LeCertCapicom.cpp をプロジェクトに追加。   2)LeXAdES\old_src をコンパイル時のインクルードに追加。(LeCertCapicom.hppの為)   3)LeXAdES\LeXades.hpp の USE_CAPICOM 定義を有効にする。  ・署名と保管のタイムスタンプのハッシュ値取得と付与のAPIにおいて利用されて   いなかった引数、id(署名タイムスタンプ)とrefids/othids(保管タイムスタンプ)を   廃止した。   従来通りの引数で使いたい場合は以下の対応を行う必要がある。   1)LeXAdES\LeXades.hpp の USE_OLD_TS_API 定義を有効にする。  ・検証フラグにDetachedの署名対象ファイルを検証しない VERIFY_NO_TARGET を追加。   VERIFY_NO_TARGET は内部利用と特注対応であり通常はオフにて利用する必要がある。   VERIFY_NO_TARGET = 0x0800, ///< ReferenceのDetachedファイルが必要な検証はしない(通常はオフ/V1.3追加)  ・検証フラグの VERIFY_ALL を -1 から、オフ推奨のビットを0にするように変更。   旧:VERIFY_ALL = 0xffff   新:VERIFY_ALL = 0xffff & ~(VERIFY_SCHEMA|VERIFY_ROOT_CRL|VERIFY_NO_TARGET)  ・古いソースとして LeCertCapicom.* と LeCertCapi.* を LeXAdES\old_src に移動。   また LeXAdES のプロジェクトにはこれらのソースは含まれてないように変更した。  ・CRL取得時の処理を以下のように変更(従来は最初の処理のみ、LeCRL.cppを修正)。   HTTP/HTTPS:WinInetによる取得に失敗したらCryptoAPIによる取得も試す   LDAP:CryptoAPIによる取得に失敗したらWinLdapによる取得も試す  ・以上の変更に伴いサンプルプログラムのソースを修正した。CAPICOM非依存等。  Ver1.20R4版 : 2009-04-20  ・署名検証時にエラーがあった場合に警告と判断をして結果リスト info に   正常終了「◎文書正常」を返していたので修正した。info 以外の戻り値と   エラーメッセージ等は正しく動作をしてエラーを返していた。  Ver1.20R3版 : 2009-03-18  ・検証時に警告があった場合 verify/verify2() の結果リスト info にエラー   を示す "×" が返されていたので、警告時には "○" を返すように修整した。   ArrayList^ info, // [OUT] 検証結果リスト(不要ならnullptr指定が可能)  Ver1.20R2版 : 2009-02-23  ・検証時のCRL/OCSP発行日厳密チェックのを署名証明書用とTSA証明書に分けた。   従来のフラグは署名証明書用となる。CP_FLAGは関連するフラグ位置が移動と   なったので注意(バイナリとして扱わなければ大丈夫です)。   VERIFY_NO_CRLDATE = 0x2000, ///< 署名証明書のCRL/OCSP発行日等の厳密な期限チェックを行わない /// (CP_FLAG_CRLDATE[注:意味が逆]でも指定可能だがこちらが優先)   VERIFY_NO_CRLDATE_TSA = 0x4000, ///< TSA証明書のCRL/OCSP発行日等の厳密な期限チェックを行わない /// (CP_FLAG_CRLDATE_TSA[注:意味が逆]でも指定可能だがこちらが優先)   // CRL厳密チェック   CP_FLAG_CRLDATE = 0x00010000, ///< 署名証明書のCRL/OCSP発行日等の厳密な期限チェックを行う   CP_FLAG_CRLDATE_TSA = 0x00020000, ///< TSA証明書のCRL/OCSP発行日等の厳密な期限チェックを行う  ・中間CA証明書のCRL署名の世代が異なる場合にLINK証明書のエラーが誤って返して   いた問題を修正。  ・検証時にEnvelopingのファイルパスがフォルダ指定時の問題を修正。   他社との互換性に問題がある場合があった。  ・検証時の Exclusive XML Canonicalization の処理に誤りがあったのを修正。   他社との互換性に問題がある場合があった。  ・ReferenceされていないObject要素があった場合の保管タイムスタンプ(ES-A)の計算   に誤りがあった問題を修正。  Ver1.20R1版 : 2009-02-18  ・CRLに次回更新時刻がある場合に以下のチェックを追加した。   1)オンライン状態の場合に取得したCRLの次回更新時刻が現在時刻より前ならエラー。   2)ES-X-Longの検証時にCRLの次回更新時刻が署名時刻より前ならエラー。   3)タイムスタンプ埋め込み検証情報の利用時にCRLの次回更新時刻がタイムスタンプ     時刻より前ならエラー。  ・CRLDPが無い場合に追加証明書ストアにCRLがありIssuerが一致した場合にCRLを   使っていた。不要なCRLが検証情報として入ってしまう問題を修整。  ・ILeXAdES::getLastErrorCode() で正しいエラーを返していなかった問題を修整。  ・ILeXAdES::verify2() のvalidity引数が正しく返らない場合があった問題を修整。  ・CRL(http)/OCSP取得時に基本(Basic)認証が使えるようになった。   LeXadeds.hpp にて ILeXAdES::setBasicAuthorization() が、   LeCertPath.hpp にて LeCertPath::setBasicAuth() が、追加された。  ・CRLDPとOCSPアドレスの両方がセットされている証明書においてOCSPを使わない   オプション CP_FLAG::CP_FLAG_NOUSE_OCSP を追加した。  ・「CRL発行日厳密チェック」をOCSPにも適用して「CRL/OCSP発行日厳密チェック」   に変更した。  ・その他細かなバグ修正他。  Ver1.20R0版 : 2009-02-13  ・古い認証パス構築部を全て削除して新認証パス構築 LeCertPath に切り替えた。   新認証パス構築の仕様は別途 LeCertPath.txt にまとめた。  ・認証パスの構築と検証の為のフラグ buildflag を指定可能な ES-Aのタイムスタンプ   に検証情報を埋め込む addEsARevocations2() が追加された。   /** 保管タイムスタンプ(XAdES-A)の検証情報(証明書/CRL)を埋め込む\n\n    * 指定された保管タイムスタンプ(XAdES-A)の検証情報(証明書/CRL)を埋め込む。    * 複数の保管タイムスタンプがある場合にも最後に付与した保管タイムスタンプが対象となる。    * 埋め込む位置としては非署名領域(JIS推奨)とCMSとしての証明書/CRL位置の2種類がある。    *    * @param buildflag [IN] 認証パス構築/検証用のフラグ(CP_FLAG)の指定(標準はゼロ[CP_FLAG_NONE]で良い)    * @param certs [IN] 埋め込む証明書のバイナリ配列を指定(nullptrにて省略可能)    * @param crls [IN] 埋め込むCRLのバイナリ配列を指定(nullptrにて省略可能)    * @param uatrb [IN] trueならTSTの非署名領域に、falseなら通常の証明書位置に埋め込む(JIS推奨はtrue)    * @retval XAdES_OK エラーが無かった場合にはXAdES_OKが返る    * @retval マイナス値 エラーコードが返る    */   virtual int addEsARevocations2 (     unsigned int buildflag, // [IN] 認証パス構築/検証用のフラグ     ArrayList^ certs, // [IN] 追加証明書(指定しない場合はnullptr指定)     ArrayList^ crls, // [IN] 追加CRL(指定しない場合はnullptr指定)     bool uatrb // [IN] 埋め込み位置を指定(true=非署名領域/false=標準)     ) = 0;  ・RFC3161タイムスタンプ取得時のBasic認証利用に問題があったので修整した。  ・その他細かなバグ修正他。  Ver1.19版 : 2009-02-06 (新認証パス構築検証のベータ2版)  ・認証パスの構築を全て新モジュール LeCertPath.cpp/.hpp に切り替えた。   addEsXL() 他も全て新認証パス構築モジュールを利用するようになった。  ・認証パス構築の多少の速度改善を行った。   また認証パスの動作等の調整も行った。  ・応答が無いOCSPサーバへの接続時に落ちる問題に対応した。  ・機関鍵識別子の利用方法が誤っていた為に認証パスの構築等が出来なかった問題の   修整をした。  ・認証パスの構築と検証の為のフラグ buildflag に検証フラグ CP_FLAG_CRLDATE と   CP_FLAG_ROOT_CRL を追加した。    CP_FLAG_CRLDATE = 0x0400, ///< 署名/TSA証明書のCRL発行日等の厳密な期限チェックを行う    CP_FLAG_ROOT_CRL = 0x0800, ///< 自己署名証明書の場合もCRL検証対象とする   verify()/verify2()による検証時に、従来の検証フラグ VERIFY_NO_CRLDATE と   VERIFY_ROOT_CRL の指定によって自動的に CP_FLAG_CRLDATE / CP_FLAG_ROOT_CRL が   セットされる。ただし VERIFY_NO_CRLDATE と CP_FLAG_CRLDATE はフラグの意味が逆   なので注意する事。    VERIFY_NO_CRLDATE = 0x2000, // 署名/TSA証明書のCRL発行日等の厳密な期限チェックを行わない // (CP_FLAG_CRLDATE[注:意味が逆]でも指定可能だがこちらが優先)    VERIFY_ROOT_CRL = 0x0008, // ルート証明書の場合もCRL検証対象とする // (CP_FLAG_ROOT_CRLでも指定可能だがこちらが優先/通常はオフを推奨)   またaddEsXL2()/getTrustedChain()では CP_FLAG_CRLDATE と CP_FLAG_ROOT_CRL は   使われない。検証情報追加段階では制限を弛めているので検証でチェックする事。  ・認証パスの構築と検証の為のフラグ buildflag に内部使用のフラグ CP_FLAG_SYS_KEEP   が追加された。このフラグはLeXAdESクラス内部で利用されるので外部から指定しても   使われない。     CP_FLAG_SYS_KEEP = 0x4000, ///< 内部利用フラグ(認証パス検証時に内部利用します)  ・その他細かなバグ修正他。  Ver1.18版 : 2009-02-02 (新認証パス構築検証のベータ版)  ・認証パス(証明書チェーン)構築と検証を別モジュール LeCertPath.cpp/.hpp と   して実装をして仮組み込みした。直接利用も可能だが、とりあえず LeXAdES クラス   の addEsXL2() と verify()/verify2() を利用すると、新しい認証パスの構築と検証   が利用される。addEsXL() を使うと従来の認証パス構築と検証を行うので注意。   後日完全に認証パスの構築と検証は LeCertPath.cpp/.hpp に入れ替える予定。   ※ 新しい認証パス構築検証モジュール LeCertPath.cpp/.hpp の特長   1)ディレクトリサーバにLDAPにより証明書を取得できるようになった。   2)独自の追加ルート証明書ストア setRootStore() が追加された。   3)リンク証明書に対応した(検証情報と署名証明書の署名の世代に対応した)。   4)複数の認証パスに対応した(標準は最短の認証パス構築で終了する)。   5)TSA証明書の認証パス構築と検証だけWindows証明書ストア利用可能。   6)その他細かな制御が引数 buildflag (CP_FLAG) にて指定が可能。   7)ES-X-L検証時も同じ LeCertPath を利用するようになった。   従来の認証パス構築検証に比較して複数の認証パスに対応した為に処理時間は増大を   している。今後バージョンアップにてチューニングにより速度向上をする予定。  ・追加ルート証明書が ILeXAdES::setRootStore() によりセット可能になった。   追加ルート証明書が使われると、Windows証明書ストアの「信頼済みのルート証明機   関」は使われないので注意が必要。   /** 信頼するルート証明書を指定(オプション)\n\n    * 追加ルート証明書(トラストアンカー)ストアとなる証明書(複数可)を指定。    *    * @param certs [IN] ルート証明書群のバイナリ配列を指定する    * @retval XAdES_OK エラーが無かった場合にはXAdES_OKが返る    * @retval マイナス値 エラーコードが返る    * @note 未セット時はWindows証明書ストアの利用となる    */   virtual int setRootStore (     ArrayList^ certs // [IN] ルート証明書群を指定     ) = 0;  ・認証パスの構築と検証の為のフラグ buildflag が addEsXL2() と verify2() の   引数に追加された。verify2() を利用していた場合には引数追加が必要なので注意。   /**    @enum CP_FLAG    @brief ILeXAdES::addEsXL2()/verify2() で指定する認証パスのオプション定義   */   enum CP_FLAG {     CP_FLAG_NONE = 0x0000, ///< オプション無し(デフォルト設定)     /// 証明書ストア(証明書取得)用オプション     CP_FLAG_STORE_NO_WIN = 0x0001, ///< Windows証明書ストアを利用しない(信頼点は別指定)     CP_FLAG_STORE_NO_ADD = 0x0002, ///< 追加証明書ストアを利用しない(あまり指定する必要はない)     CP_FLAG_STORE_DIR_SRV = 0x0004, ///< ディレクトリサーバから証明書取得を行う(注1)     /// 信頼点(トラストアンカー)用オプション     CP_FLAG_ROOT_NO_WIN = 0x0010, ///< Windows証明書ストアの信頼点を利用しない     CP_FLAG_ROOT_NO_ADD = 0x0020, ///< 追加証明書ストアの信頼点を利用しない(一時的にオフにする)     CP_FLAG_ROOT_NO_TSA_WIN = 0x0040, ///< TSA証明書でWindows証明書ストアの信頼点を利用しない     /// その他オプション     CP_FLAG_ALL_DIR_SRV = 0x0100, ///< CRLDPが無い場合でもLDAPにてCRL取得を行う(注1)     CP_FLAG_ESXL_NO_WARN = 0x0200, ///< ES-X-Lの署名及びTSA証明書が現在のトラストアンカー以外の場合に警告を非表示     /// 認証パスオプション     CP_FLAG_OFFLINE = 0x1000, ///< オフラインモード(ネット接続が必要な場合は警告を表示)     CP_FLAG_ALL_PATH = 0x2000, ///< 全ての認証パスを取得(オフなら最短の認証パス取得時点で終了)     /// 注1:ディレクトリサーバ指定が必須   };   /** リンク証明書等に対応した検証情報(XAdES-X-L)を付与する\n\n    * 現在のLeXAdESオブジェクトに対して証明書/CRL/OCSPの検証情報(XAdES-X-L)を付与する。    *    * @param buildflag [IN] 認証パス構築/検証用のフラグ(CP_FLAG)の指定(標準はゼロ[CP_FLAG_NONE]で良い)    * @param certs [IN] 証明書ストア以外に証明書を利用する場合にバイナリ配列を指定する(指定しない場合はnullptr指定)    * @param crls [IN] 取得済みのCRLがある場合にバイナリ配列を指定する(指定しない場合はnullptr指定)    * @param ocsps [IN] 取得済みのOCSPがある場合にバイナリ配列を指定する(指定しない場合はnullptr指定)    * @retval XAdES_OK エラーが無かった場合にはXAdES_OKが返る    * @retval マイナス値 エラーコードが返る    */   virtual int addEsXL2 (     unsigned int buildflag, // [IN] 認証パス構築/検証用のフラグ     ArrayList^ certs, // [IN] 追加証明書(指定しない場合はnullptr指定)     ArrayList^ crls, // [IN] 追加CRL(指定しない場合はnullptr指定)     ArrayList^ ocsps // [IN] 追加OCSP(指定しない場合はnullptr指定)     ) = 0;   /** XAdESを細かく検証する\n\n    * verify() と違い将来的に引数は変更される可能性があるので注意。    * 検証の内容自体は verify() と同一。    * 現在のLeXAdESオブジェクトに対して検証を実施する。    *    * @param flags [IN] 検証条件(VERIFY_FLAG)の指定(全て検証する場合には-1かVERIFY_ALLを指定)    * @param buildflag [IN] 認証パス構築/検証用のフラグ(CP_FLAG)の指定(標準はゼロ[CP_FLAG_NONE]で良い)    * @param info [OUT] 検証結果リストの配列を指定する(gcnewして指定するか、指定しない場合はnullptr指定)    * @param validity [OUT] 検証結果リストの項目別正当性を返す(項目はVERIFY_VALIDITYを参照)    * @param checkTime [IN] 検証日時を指定する(現在時刻の場合はnullptr指定)    * @param certs [IN] 証明書ストア以外に証明書を利用する場合にバイナリ配列を指定する(指定しない場合はnullptr指定)    * @param crls [IN] 取得済みのCRLがある場合にバイナリ配列を指定する(指定しない場合はnullptr指定)    * @param ocsps [IN] 取得済みのOCSPがある場合にバイナリ配列を指定する(指定しない場合はnullptr指定)    * @param online [IN] オンライン検証をする場合にはtrueを指定する    * @retval XAdES_OK 検証結果が正常だった場合にはXAdES_OKが返る    * @retval マイナス値 エラーコードが返る    */   virtual int verify2 (     unsigned int flags, // [IN] 検証条件(VERIFY_FLAG)の指定     unsigned int buildflag, // [IN] 認証パス構築/検証用のフラグ     ArrayList^ info, // [OUT] 検証結果リスト(不要ならnullptr指定が可能)     unsigned int &validity, // [OUT] 検証結果の項目別正当性     String^ checkTime, // [IN] 検証日時(現在時刻の場合はnullptr指定)     ArrayList^ certs, // [IN] 追加証明書(指定しない場合はnullptr指定)     ArrayList^ crls, // [IN] 追加CRL(指定しない場合はnullptr指定)     ArrayList^ ocsps, // [IN] 追加OCSP(指定しない場合はnullptr指定)     bool online // [IN] 証明書のオンライン検証をするかどうかのフラグ     ) = 0;  Ver1.16版 : 2008-12-05  ・「PFUタイムスタンプ SDK RFC3161」を明確に分離。"PFU_SDK" フォルダの新設。   詳細は "PFU_SDK/Readme_1st.txt" を参照。   標準ではタイムスタンプ検証時に「PFUタイムスタンプ SDK RFC3161」は使わない   設定となった。Ver1.15より利用可能となったOpenSSLによる検証を標準とする。   ※ 実行時に libeay32.dll が必要です。   ※注:「PFUタイムスタンプ SDK RFC3161」はLe-XAdESライブラリには含まれません。  ・Visual Studio 2008 C++ でコンパイルエラーになっていたので修整した。   CryptoAPIの WinCrypt.h が Visual Studio 2008 で変更されたようだ。  ・OpenSSLのヘッダを "Include" フォルダ下に移動。  ・その他細かなバグ修正他。  Ver1.15版 : 2008-11-18  ・ハッシュ計算と署名計算と署名検証の機能を CryptoFrame として整理した。   ヘッダファイルは LeAsn1Xml/CryptoFrame.hpp となる。   以下の3種類を使い分ける。   CryptoFrameDNET(CF_DOTNET) :.NETのAPIを使った暗号フレームワークを使う   CryptoFrameCAPI(CF_CAPI) :Win32のCryptoAPIを使った暗号フレームワークを使う   CryptoFrameOSSL(CF_OPENSSL) :OpenSSLのAPIを使った暗号フレームワークを使う   OpenSSLの機能は実行時にOpenSSLのライブラリファイル libeay32.dll の有無により   利用の可否が決まる。新しく必要となるリンクライブラリの追加は無い。   OpenSSLの機能としてはハッシュ計算と署名計算と検証の機能のみ利用。   署名付与に関してはまだ全てのフレームワークが使えるわけでは無いが、未サポート   の機能は他のサポート済みのフレームワークが自動的に使われる。  ・OpenSSLを利用したRSA/SHA-2署名の検証や署名値からのハッシュ値取得をサポー   トした。LeAsn1Xmlライブラリに CryptoFrame.hpp として実装。  ・MD2/MD4のハッシュ値やRSA署名はCryptoAPIを使うようにした。   LeAsn1Xmlライブラリに CryptoFrame.hpp として実装。  ・LeAsn1Xmlライブラリの証明書やCRL等のハッシュ値計算のAPIを CryptoFrame に   変更した。  ・LeAsn1XmlライブラリのOCSP関連にて証明書検証サーバ拡張に対応した。   GPKIの証明書検証サーバでの動作確認済み。  ・LeAsn1Xmlライブラリの BasicOCSPResponse.hpp にて署名検証の verify() を追加。   これにてOCSP検証も行えるようになった。  ・LDAP経由のディレクトリサーバより証明書を取得できる LeCERT.hpp を追加。   getCERTs() のAPIが2つ用意した。   /** 証明書取得関数\n\n    * 指定されたldapアドレスによりの証明書バイナリイメージ(複数の可能性あり)を返す。    *    * @param dirSrv [IN] LDAPサーバを指定する    * @param mesg [OUT] エラーメッセージ(不要ならNULL指定)    * @retval 正常終了 証明書のバイナリイメージ郡が返る    * @retval 異常終了 サイズがゼロになる    */   std::vector getCERTs (     const char* url, // - LDAPサーバのアドレスを指定する     std::string *mesg=NULL // - エラーメッセージを返す(不要ならNULL指定)     );   /** 証明書取得関数\n\n    * 指定された証明書の親証明書のバイナリイメージ(複数の可能性あり)を返す。    *    * @param cert [IN] 検索対象となる証明書バイナリイメージを指定する    * @param dirSrv [IN] LDAPサーバを指定する    * @param mesg [OUT] エラーメッセージ(不要ならNULL指定)    * @retval 正常終了 証明書のバイナリイメージ郡が返る    * @retval 異常終了 サイズがゼロになる    */   std::vector getCERTs (     const binary& cert, // - 証明書バイナリイメージ(この親証明書を取得)     const char* dirSrv, // - LDAPサーバを指定する     std::string *mesg=NULL // - エラーメッセージを返す(不要ならNULL指定)     );  ・ES-TのTSA証明書の検証失敗時に verify2() にて VV_STS を返すようにした。  ・エラーメッセージの値表示でBase64をやめて16進HEXで表示するようにした。  ・解析情報表示の署名対象出力時にASCII出力していた為にUTF-8日本語表示が壊れて   いた。正しくUTF-8出力するように修整した。  ・オフライン指定時にES-AのTSA証明書検証が警告として表示されるようにした。   これまではCRL等の取得に行きエラーになっていた。  ・その他細かなバグ修正他。  Ver1.11版 : 2008-10-01  ・CAPICOMでは無く一部CryptoAPI(CAPI)を使うように修整中。   ただし LeCertCapi.hpp の機能はまだ全て実装していないので注意。   注:新たにリンクライブラリとして Crypt32.lib と Cryptui.lib を追加する     必要がある。   ※ LeXAdES\LeCertCapi.hpp / LeXAdES\src\LeCertCapi.cpp を新規に追加。  ・署名値の計算だけを別途計算できるように新しいAPIを追加した。 /** X.509形式証明書を使って署名(XAdES-BES)を付与する */     virtual int sign (     array^ cert, // [IN] 署名に利用する証明書     bool online, // [IN] 証明書のオンライン検証をするかどうかのフラグ     unsigned int flags // [IN] 署名時のオプションフラグ指定(SIGN_FLAG)     ) = 0; /** 署名対象SignedInfo要素を正規化済みのバイナリで取得する */ virtual array^ getSignedInfo () = 0; /** 別途計算された署名値をセットする */ virtual int setSignatureValue ( array^ signatureValue ) = 0;  ・署名対象がEnveloping指定の場合には現状では 20〜30MB 程度の上限がある問題   について調査しましたが、XMLパーサにDOM型のXmlDocumentを使っている関係で   問題解消できませんでした。大きなファイルを署名対象とする場合にはDetached   指定をして下さい。個別にケースによっては対応は可能ですが詳細はお問合せを   お願いします。  ・内部的に重複している関数やクラス等の整理を行った。動作的には同じまま。   ※ LeXAdES\LeUtil.hpp / LeXAdES\src\LeUtil.cpp を新規に追加。  ・VERIFY_FLAGのVERIFY_NO_CRLDATEを未指定の場合の検証で現在時刻と次回更新   予定時刻の比較チェックをしていたが問題があるのでチェックしないように修整   した。  ・その他細かなバグ修正他。  Ver1.10R2版 : 2008-08-01  ・OCSP関連処理の見直しを行った。エラーメッセージの詳細化等。   ある程度きちんとした表示や対応が可能になったがOCSP関連に関してはもう少し   修正が必要です。本格的にOCSPを利用したい場合には事前にラング・エッジまで   ご連絡を下さい。   ※ LeAsn1Xml\src\object\OCSPResponse.cpp を新規に追加した。  ・複数ES-Aがある場合に2つ目以降のES-A検証エラー時にエラーを返さなかった。   検証エラーなのに戻り値が正常 XAdES_OK となっていたのでエラーを返すように   修正した。なおエラーメッセージは返されていた。またES-Aが1つの場合にはエ   ラーを返していた。  ・同じ秘密鍵を使った有効期間が異なるルート鍵がある場合に有効期間が長い方を   使うように修正した。  Ver1.10R1版 : 2008-07-15  ・検証オプションを追加した verify2() をAPIとして追加した。   既存の verify() は今後引数の修正等は行わない予定で、verify2() では新しい   機能の追加による引数等の変更をして行く予定。   verify2() では以下の引数及が追加された。   validity = VERIFY_VALIDITY で示される検証結果を項目毎に返す。   checkTime = 検証時刻を現在では無く指定された日時にセットする。   /**    @enum VERIFY_TYPE    @brief ILeXAdES::verify2() の validity 引数で返される検証結果リスト指定   */   enum VERIFY_VALIDITY {    VV_DSIG = 0x0001, ///< 文書の正当性(改竄されていない事)    VV_SIGN = 0x0002, ///< 署名の正当性(署名証明書の有効性)    VV_STS = 0x0004, ///< 時刻の正当性(署名タイムスタンプ)    VV_ATS = 0x0008 ///< 保管の正当性(保管タイムスタンプ)   };  ・検証の戻り値に有効期限を返すようにした。   verify() verify2() の戻り値を返す引数 info に有効期限を返す内容を追加した。   取り出すには info[VL_VALID] と指定すれば良い。   有効期限は一番外側のES-Aの証明書チェーン中で最初に有効期限が切れる証明書の   有効期限となる。  ・ES-BES/ES-T/ES-Aの各段階においてタイムスタンプ付与がその前の署名またはタイ   ムスタンプの有効期限内であるかどうかをチェックするようになった。  ・署名やタイムスタンプ用ハッシュ計算時に MemoryStream クラスを利用していた為   にDetached指定時の署名対象の合計が200MBまでしか扱えない制限があった。署名   対象の合計が100MBを超える場合には中間ファイルをシステム設定のTEMPフォルダに   作成して FileStream クラスにて処理をするように修正した。また同時に int64 に   対応をしたので、Detachedで指定可能なファイルサイズの上限が無くなった。   ただし巨大な中間ファイルが作成できるディスク容量が必要である点と、処理時間   が大きくなる点には注意が必要。例:3GBのファイルで署名=6分でES-A付与=15分。   なおEnveloping指定する場合には現状ではXML関連の問題で 20〜30MB 程度の署名対   象ファイルしか扱えないので注意が必要。Envelopingの件は後日再対応を予定。  ・RFC3161対応のタイムスタンプサーバが Content-Length を返さない場合にタイムス   タンプ取得に失敗していた。Content-Length が無い場合には繰り返し読み出すよう   に修正した。変更したソースは LeHttpConnectWin32.cpp となる。  ・その他細かなバグ修正他。  Ver1.07a版 : 2008-06-11  ・署名対象先に改竄があった場合にエラーメッセージは出力されるが、APIの戻り値   としては XAdES_OK と返していたバグを修正した。  Ver1.07版 : 2008-06-09  ・エラー処理の見直しにより詳細に情報を出力するようにした。   エラーは基本的に複数行となるので注意が必要。  ・LeAsn1Xmlライブラリで検証時に情報文字列を返す引数を幾つか追加した。   詳細なエラー内容の取得の為。  ・ファイル名が短い場合にisHttpで落ちていたバグの修正。   他にもStringクラスのSubstringを使っていた箇所の見直しと修正。  ・その他細かなバグ修正他。  Ver1.06版 : 2008-06-02 (外部には非公開/XAdEStoolは公開)  ・MD2/MD4/MD5の署名検証に対応した。   VeriSignのドキュメントサイニング証明書への対応の為。  ・その他細かなバグ修正他。  Ver1.05版 : 2008-05-28 (外部には非公開)  ・タイムスタンプトークンの署名検証機能を組み込んだ。   ただしVista以外ではSHA-2に対応できていないので注意が必要。  ・LeXmlSignクラスでSHA-2機能の組み込み。   ただしVistaでのみ動作確認、XPではまだ未サポートのようでエラーになる。  Ver1.04版 : 2008-05-19  ・LeCRL.cppのcheckCRL時にもARL/CRLの判定を追加した。  ・ルート証明書のCRL取得が出来なかった場合には検証時にエラーとした。   従来通りエラーにしない場合には検証時にフラグVERIFY_ROOT_CRL(新規追加)を指定。  ・CertificateListのisARLのバグ修正。  ・その他細かなバグ修正他。  Ver1.03版 : 2008-05-16  ・ES-XL生成時に信頼済みリストを使った操作用のAPIをILeXAdESクラスに追加。   メソッド getTrustedChain() / addTrustedEsXL() / addTrustedXmlEsXL() を追加。   フラグ TRUST_FLAG が新しく定義され信頼済みリスト利用時のオプション指定が可能。  ・検証時に指定するフラグに VERIFY_NO_CRLDATE を追加。   未指定時は、署名/TSA証明書のCRL発行日等の厳密な期限チェックを行う。   厳しすぎるので標準はオフにしてある。  ・CRLの無効証明書のチェックループを見直して少しでも時間短縮できるように修正。  ・その他証明書の情報取得時のバグ等細かな修正を実施。  Ver1.02版 : 2008-04-30  ・ARLにきちんと対応した。CRLのOID=2.5.29.28を利用して判別。  ・LeAsn1Xmlライブラリのインターフェイス見直しと証明書とCRLクラスの更新。  ・署名時のオプション指定のフラグ追加。現在は以下が指定可能。   /**    @enum SIGN_FLAG    @brief ILeXAdES::sign() で指定するオプション定義   */   enum SIGN_FLAG {    SIGN_NONE = 0x0000, ///< オプション無し    SIGN_NO_CERT_CHK = 0x0001, ///< 署名前に証明書チェックをしない    SIGN_NO_VERIFY = 0x0002, ///< 署名後にベリファイしない(SIGN_FULL_VERIFYより優先)    SIGN_FULL_VERIFY = 0x0004, ///< 署名後にフルベリファイする(指定なしなら署名値のみ検証)    SIGN_NO_XADESOBJ = 0x0010, ///< XAdESオブジェクトを追加しない(XML-DSIGになる)    SIGN_NO_SIGNTIME = 0x0020, ///< XAdESオブジェクトにSigningTime要素を追加しない   };  Ver1.01版 : 2008-04-21  ・最初のオープンソース公開バージョン。  ・Le-XAdESライブラリでのODF長期署名用の実装を明確に分離した。  ・証明書に含まれるCRL配布ポイントはURI/URL形式の場合が多いのですが、X.500形式   の名称が指定されている場合もあります。X.500名称の場合にはディレクトリサーバ   にアクセスする必要があります。XAdEStoolの初期設定ファイル(XAdEStoo.ini)中に   ""をエディタ等で追加する事で検索するディレクトリサーバの指定を可能   としました。以下は日本のGPKIディレクトリサーバを指定した例です。   ldap://dir.gpki.go.jp  ・Le-XAdESライブラリのオプションとして提供されるRFC-3161準拠のタイムスタンプ取得   のAPIに、Basic認証の為のユーザIDとパスワードの指定を可能とした。   XAdEStoolとしての動作に変更は無いが将来RFC-3161でのBasic認証へ対応予定。  ・ルート証明書が「信頼されたルート証明機関」の証明書の場合にはCRL取得に失敗しても   エラーとならないように変更した。海外サーバで一部このようなケースがあった為。  ・署名証明書とタイムスタンプ証明書の検証部の見直しをした。  Ver1.00版 : 2008-03-26 (外部非公開)  ・ECOMの長期署名フォーマット2007年度相互運用性テストXAdESにおけるテスト合格を   受けてバージョンを1.00とした。外部非公開。  ・EnvelopingによりXMLを指定した場合の調整を行った。   ODF署名等への対応の為。 ========================================      Copyright (C) 2006-2010 LangEdge,Inc. All rights reserved.               http://www.langedge.jp/ ========================================