この仕様が完成すると、この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を識別できない可能性があります。