KeyFactorySpi (Java Platform SE 8 )
Keywords: java.security.KeyFactorySpi class
Date: 2026-04-22

compact1, compact2, compact3
java.security

## Class KeyFactorySpi

- java.lang.Object
- - java.security.KeyFactorySpi

-     public abstract class KeyFactorySpi
      extends Object

  This class defines the Service Provider Interface (SPI) for the `KeyFactory` class. All the abstract methods in this class must be implemented by each cryptographic service provider who wishes to supply the implementation of a key factory for a particular algorithm.

  Key factories are used to convert keys (opaque cryptographic keys of type `Key`) into key specifications (transparent representations of the underlying key material), and vice versa.

  Key factories are bi-directional. That is, they allow you to build an opaque key object from a given key specification (key material), or to retrieve the underlying key material of a key object in a suitable format.

  Multiple compatible key specifications may exist for the same key. For example, a DSA public key may be specified using `DSAPublicKeySpec` or `X509EncodedKeySpec`. A key factory can be used to translate between compatible key specifications.

  A provider should document all the key specifications supported by its key factory.

  Since:
    1.2
  See Also:
    `KeyFactory`, `Key`, `PublicKey`, `PrivateKey`, `KeySpec`, `DSAPublicKeySpec`, `X509EncodedKeySpec`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `KeyFactorySpi()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract PrivateKey` | `engineGeneratePrivate(KeySpec keySpec)` Generates a private key object from the provided key specification (key material).
    `protected abstract PublicKey` | `engineGeneratePublic(KeySpec keySpec)` Generates a public key object from the provided key specification (key material).
    `protected abstract <T extends KeySpec> T` | `engineGetKeySpec(Key key, Class<T> keySpec)` Returns a specification (key material) of the given key object.
    `protected abstract Key` | `engineTranslateKey(Key key)` Translates a key object, whose provider may be unknown or potentially untrusted, into a corresponding key object of this key factory.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### KeyFactorySpi

          public KeyFactorySpi()

  - ### Method Detail

    - #### engineGeneratePublic

          protected abstract PublicKey engineGeneratePublic(KeySpec keySpec)
                                                     throws InvalidKeySpecException

      Generates a public key object from the provided key specification (key material).
      Parameters:
        `keySpec` - the specification (key material) of the public key.
      Returns:
        the public key.
      Throws:
        `InvalidKeySpecException` - if the given key specification is inappropriate for this key factory to produce a public key.

    - #### engineGeneratePrivate

          protected abstract PrivateKey engineGeneratePrivate(KeySpec keySpec)
                                                       throws InvalidKeySpecException

      Generates a private key object from the provided key specification (key material).
      Parameters:
        `keySpec` - the specification (key material) of the private key.
      Returns:
        the private key.
      Throws:
        `InvalidKeySpecException` - if the given key specification is inappropriate for this key factory to produce a private key.

    - #### engineGetKeySpec

          protected abstract <T extends KeySpec> T engineGetKeySpec(Key key,
                                                                    Class<T> keySpec)
                                                             throws InvalidKeySpecException

      Returns a specification (key material) of the given key object. `keySpec` identifies the specification class in which the key material should be returned. It could, for example, be `DSAPublicKeySpec.class`, to indicate that the key material should be returned in an instance of the `DSAPublicKeySpec` class.
      Type Parameters:
        `T` - the type of the key specification to be returned
      Parameters:
        `key` - the key.
        `keySpec` - the specification class in which the key material should be returned.
      Returns:
        the underlying key specification (key material) in an instance of the requested specification class.
      Throws:
        `InvalidKeySpecException` - if the requested key specification is inappropriate for the given key, or the given key cannot be dealt with (e.g., the given key has an unrecognized format).

    - #### engineTranslateKey

          protected abstract Key engineTranslateKey(Key key)
                                             throws InvalidKeyException

      Translates a key object, whose provider may be unknown or potentially untrusted, into a corresponding key object of this key factory.
      Parameters:
        `key` - the key whose provider is unknown or untrusted.
      Returns:
        the translated key.
      Throws:
        `InvalidKeyException` - if the given key cannot be processed by this key factory.

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.