Module java.xml.crypto
Package javax.xml.crypto.dsig.keyinfo

# Interface KeyValue

All Superinterfaces:
  `XMLStructure`

public interface KeyValue extends XMLStructure
A representation of the XML `KeyValue` element as defined in the W3C Recommendation for XML-Signature Syntax and Processing. A `KeyValue` object contains a single public key that may be useful in validating the signature. The XML schema definition is defined as:

        <element name="KeyValue" type="ds:KeyValueType"/>
        <complexType name="KeyValueType" mixed="true">
          <choice>
            <element ref="ds:DSAKeyValue"/>
            <element ref="ds:RSAKeyValue"/>
            <!-- <element ref="dsig11:ECKeyValue"/> -->
            <!-- ECC keys (XMLDsig 1.1) will use the any element -->
            <any namespace="##other" processContents="lax"/>
          </choice>
        </complexType>

        <element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
        <complexType name="DSAKeyValueType">
          <sequence>
            <sequence minOccurs="0">
              <element name="P" type="ds:CryptoBinary"/>
              <element name="Q" type="ds:CryptoBinary"/>
            </sequence>
            <element name="G" type="ds:CryptoBinary" minOccurs="0"/>
            <element name="Y" type="ds:CryptoBinary"/>
            <element name="J" type="ds:CryptoBinary" minOccurs="0"/>
            <sequence minOccurs="0">
              <element name="Seed" type="ds:CryptoBinary"/>
              <element name="PgenCounter" type="ds:CryptoBinary"/>
            </sequence>
          </sequence>
        </complexType>

        <element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
        <complexType name="RSAKeyValueType">
          <sequence>
            <element name="Modulus" type="ds:CryptoBinary"/>
            <element name="Exponent" type="ds:CryptoBinary"/>
          </sequence>
        </complexType>

        <complexType name="ECKeyValueType">
          <sequence>
            <choice>
              <element name="ECParameters" type="dsig11:ECParametersType" />
              <element name="NamedCurve" type="dsig11:NamedCurveType" />
            </choice>
            <element name="PublicKey" type="dsig11:ECPointType" />
          </sequence>
          <attribute name="Id" type="ID" use="optional" />
        </complexType>

        <complexType name="NamedCurveType">
          <attribute name="URI" type="anyURI" use="required" />
        </complexType>

        <simpleType name="ECPointType">
          <restriction base="ds:CryptoBinary" />
        </simpleType>

See section 4.5.2.3.1 of the W3C Recommendation for the definition of ECParametersType.

A `KeyValue` instance may be created by invoking the `newKeyValue` method of the `KeyInfoFactory` class, and passing it a `PublicKey` representing the value of the public key. Here is an example of creating a `KeyValue` from a `DSAPublicKey` of a `Certificate` stored in a `KeyStore`:

     KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
     PublicKey dsaPublicKey = keyStore.getCertificate("myDSASigningCert").getPublicKey();
     KeyInfoFactory factory = KeyInfoFactory.getInstance("DOM");
     KeyValue keyValue = factory.newKeyValue(dsaPublicKey);

This class returns the `DSAKeyValue` and `RSAKeyValue` elements as objects of type `DSAPublicKey` and `RSAPublicKey`, respectively. Note that not all of the fields in the schema are accessible as parameters of these types.

Since:
  1.6
See Also:
  - `KeyInfoFactory.newKeyValue(PublicKey)`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`DSA_TYPE`
URI identifying the DSA KeyValue KeyInfo type: http://www.w3.org/2000/09/xmldsig#DSAKeyValue.
`static final String`
`EC_TYPE`
URI identifying the EC KeyValue KeyInfo type: http://www.w3.org/2009/xmldsig11#ECKeyValue.
`static final String`
`RSA_TYPE`
URI identifying the RSA KeyValue KeyInfo type: http://www.w3.org/2000/09/xmldsig#RSAKeyValue.

## Method Summary

Modifier and Type
Method
Description
`PublicKey`
`getPublicKey()`
Returns the public key of this `KeyValue`.

### Methods declared in interface javax.xml.crypto.XMLStructure

`isFeatureSupported`

## Field Details

### DSA_TYPE

static final String DSA_TYPE
URI identifying the DSA KeyValue KeyInfo type: http://www.w3.org/2000/09/xmldsig#DSAKeyValue. This can be specified as the value of the `type` parameter of the `RetrievalMethod` class to describe a remote `DSAKeyValue` structure.

See Also:
  - Constant Field Values

### RSA_TYPE

static final String RSA_TYPE
URI identifying the RSA KeyValue KeyInfo type: http://www.w3.org/2000/09/xmldsig#RSAKeyValue. This can be specified as the value of the `type` parameter of the `RetrievalMethod` class to describe a remote `RSAKeyValue` structure.

See Also:
  - Constant Field Values

### EC_TYPE

static final String EC_TYPE
URI identifying the EC KeyValue KeyInfo type: http://www.w3.org/2009/xmldsig11#ECKeyValue. This can be specified as the value of the `type` parameter of the `RetrievalMethod` class to describe a remote `ECKeyValue` structure.

See Also:
  - Constant Field Values

## Method Details

### getPublicKey

PublicKey getPublicKey() throws KeyException
Returns the public key of this `KeyValue`.

Returns:
  the public key of this `KeyValue`
Throws:
  `KeyException` - if this `KeyValue` cannot be converted to a `PublicKey`