この仕様が完成すると、この API の機能について説明するリファレンス実装が作成されることになり、この仕様のオペレーションの定義が提供されます。この仕様の実装に対応しているかどうかを確認するための Technology Compatibility Kit (TCK) も使用可能になります。Java Community Process 2.1 に従ってこれらが必要になります。
JSR 105 API は、次の 2 種類のユーザーをターゲットにしています。
javax.xml.crypto.dom
および javax.xml.crypto.dsig.dom
のクラスで必要となります。KeyInfo
オブジェクトに含まれている情報を使用して鍵を検出して任意に検証する実装を提供できます。URIDereferencer クラスを使用すると、開発者は、独自の URI 間接参照実装を作成および指定できます。
javax.xml.crypto.dsig パッケージには、W3C XML デジタル署名仕様で定義されているコア要素を表すインタフェースが含まれています。もっとも重要なのは XMLSignature クラスです。このクラスを使用すると、XML デジタル署名の署名および検証を行うことができます。ほとんどの XML 署名または要素は、対応するインタフェースによって表されます。ただし、KeyInfo
構造は独自のパッケージに含まれているため、次の段落で説明します。これらのインタフェースには、SignedInfo、CanonicalizationMethod、SignatureMethod、Reference、Transform、DigestMethod、XMLObject、Manifest、SignatureProperty、および SignatureProperties があります。XMLSignatureFactory クラスは、これらのインタフェースを実装するオブジェクトを作成する場合に使用する抽象ファクトリです。
javax.xml.crypto.dsig.keyinfo パッケージには、W3C XML デジタル署名勧告で定義されているほとんどの KeyInfo
構造を表すインタフェースが含まれています。この構造には、KeyInfo、KeyName、KeyValue、X509Data、X509IssuerSerial、RetrievalMethod、および PGPData があります。KeyInfoFactory クラスは、これらのインタフェースを実装するオブジェクトを作成する場合に使用する抽象ファクトリです。
javax.xml.crypto.dsig.spec パッケージには、ダイジェスト、署名、変換、または XML 署名の処理で使用される正規化アルゴリズム用の入力パラメータを表すインタフェースおよびクラスが含まれています。
最後に、javax.xml.crypto.dom および javax.xml.crypto.dsig.dom パッケージには、javax.xml.crypto および javax.xml.crypto.dsig パッケージ用の DOM 固有のクラスが含まれています。DOM ベースの XMLSignatureFactory または KeyInfoFactory 実装を作成または使用する開発者およびユーザーのみが、これらのパッケージを直接使用する必要があります。
XMLSignatureFactory
の固定実装は、XML 署名に関する W3C 勧告に規定されているように、必要なそれぞれのアルゴリズムをサポートしている必要があります。この固定実装は、W3C 勧告やほかの仕様に規定されているように、ほかのアルゴリズムをサポートできます。
JSR 105 は、JCA プロバイダモデルを使用して XMLSignatureFactory
および KeyInfoFactory
実装の登録とロードを行います。
固定実装 XMLSignatureFactory
または KeyInfoFactory
はそれぞれ、XML 署名や KeyInfo 構造を解析および生成するときに実装によって内部で使用される XML 処理メカニズムを識別する特定の XML メカニズムタイプをサポートしています。この JSR は標準タイプ DOM をサポートしています。新しい標準タイプ (JDOM など) のサポートは、今後追加される可能性があります。
JSR 105 実装は、java.security.Signature や java.security.MessageDigest などのベースとなる JCA エンジンクラスを使用して暗号化操作を行う必要があります。
XMLSignatureFactory
および KeyInfoFactory
クラス以外に、JSR 105 は、変換および正規化アルゴリズム用のサービスプロバイダインタフェースもサポートしています。TransformService クラスを使用すると、特定の XML メカニズムタイプ用の固有の変換または正規化アルゴリズムの実装を開発およびプラグインすることができます。TransformService
クラスは、実装を登録およびロードするときに標準 JCA プロバイダモデルを使用します。各 JSR 105 実装は TransformService
クラスを使用して、生成または検証している XML 署名で変換アルゴリズムおよび正規化アルゴリズムをサポートするプロバイダを見つける必要があります。
XMLSignatureFactory
、KeyInfoFactory
、または TransformService
を実装する場合は、次の要件に従う必要があります。
XMLSignatureFactory
の unmarshalXMLSignature メソッドは DOMValidateContext 型をサポートする必要があります。型が DOMValidateContext
の場合は Signature
型の要素を含む必要があります。また、unmarshalXMLSignature
メソッドは渡される DOMValidateContext
の ID/要素マッピングを生成できます。XMLSignatureFactory
によって生成される XMLSignature の sign メソッドは DOMSignContext 型をサポートし、validate メソッドは DOMValidateContext 型をサポートする必要があります。この要件は、SignatureValue の validate メソッドおよび Reference の validate メソッドにも当てはまります。iterator
メソッドは型 org.w3c.dom.Node
のオブジェクトの繰り返しを返す必要があります。URIDereferencer
の dereference
メソッドに渡された URIReference
オブジェクトは型 DOMURIReference であり、XMLCryptoContext
オブジェクトは DOMCryptoContext を実装する必要があります。XMLSignatureFactory
および KeyInfoFactory
の getURIDereferencer
メソッドによって返される URIDereferencer
にも当てはまります。KeyInfoFactory
の unmarshalKeyInfo メソッドは DOMStructure 型をサポートする必要があります。型が DOMStructure
の場合は KeyInfo
型の要素を含む必要があります。Transform
の transform メソッドは DOMCryptoContext コンテキストパラメータ型をサポートする必要があります。XMLSignatureFactory
の newtransform および newCanonicalizationMethod メソッドは DOMStructure パラメータ型をサポートする必要があります。TransformService
の init および marshalParams メソッドは DOMStructure および DOMCryptoContext 型をサポートする必要があります。XMLSignatureFactory
の unmarshalXMLSignature メソッドは DOMStructure 型をサポートする必要があります。型が DOMStructure
の場合は Signature
型の要素を含む必要があります。KeyInfo
の marshal メソッドは DOMStructure および DOMCryptoContext パラメータ型をサポートする必要があります。XMLSignatureFactory
の DOM 実装は、内部的に SAX パーサーを使用してデータを正規化することができます。
<Reference URI="document.xml">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<XPath>id("foo")</XPath>
</Transform>
</Transforms>
</Reference>
外部ドキュメントの間接参照によってオクテットストリームが生成され、それが JSR 105 実装によって NodeSet に変換されています。ただし、API では外部ドキュメントの ID 属性を登録するためのメカニズムが提供されていないため、XPath 変換実装は「foo」 ID を識別できない可能性があります。