# Class ExemptionMechanismSpi

java.lang.Object
javax.crypto.ExemptionMechanismSpi

public abstract class ExemptionMechanismSpi extends Object
This class defines the Service Provider Interface (SPI) for the `ExemptionMechanism` class. All the abstract methods in this class must be implemented by each cryptographic service provider who wishes to supply the implementation of a particular exemption mechanism.

Since:
  1.4

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ExemptionMechanismSpi()`
  Constructor for subclasses to call.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected abstract byte[]`
  `engineGenExemptionBlob()`
  Generates the exemption mechanism key blob.
  `protected abstract int`
  `engineGenExemptionBlob(byte[] output, int outputOffset)`
  Generates the exemption mechanism key blob, and stores the result in the `output` buffer, starting at `outputOffset` inclusive.
  `protected abstract int`
  `engineGetOutputSize(int inputLen)`
  Returns the length in bytes that an output buffer would need to be in order to hold the result of the next `engineGenExemptionBlob` operation, given the input length `inputLen` (in bytes).
  `protected abstract void`
  `engineInit(Key key)`
  Initializes this exemption mechanism with a key.
  `protected abstract void`
  `engineInit(Key key, AlgorithmParameters params)`
  Initializes this exemption mechanism with a key and a set of algorithm parameters.
  `protected abstract void`
  `engineInit(Key key, AlgorithmParameterSpec params)`
  Initializes this exemption mechanism with a key and a set of algorithm parameters.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### ExemptionMechanismSpi

    public ExemptionMechanismSpi()
    Constructor for subclasses to call.

- ## Method Details

  - ### engineGetOutputSize

    protected abstract int engineGetOutputSize(int inputLen)
    Returns the length in bytes that an output buffer would need to be in order to hold the result of the next `engineGenExemptionBlob` operation, given the input length `inputLen` (in bytes).

    The actual output length of the next `engineGenExemptionBlob` call may be smaller than the length returned by this method.

    Parameters:
      `inputLen` - the input length (in bytes)
    Returns:
      the required output buffer size (in bytes)

  - ### engineInit

    protected abstract void engineInit(Key key) throws InvalidKeyException, ExemptionMechanismException
    Initializes this exemption mechanism with a key.

    If this exemption mechanism requires any algorithm parameters that cannot be derived from the given `key`, the underlying exemption mechanism implementation is supposed to generate the required parameters itself (using provider-specific default values); in the case that algorithm parameters must be specified by the caller, an `InvalidKeyException` is raised.

    Parameters:
      `key` - the key for this exemption mechanism
    Throws:
      `InvalidKeyException` - if the given key is inappropriate for this exemption mechanism.
      `ExemptionMechanismException` - if problem(s) encountered in the process of initializing.

  - ### engineInit

    protected abstract void engineInit(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException, ExemptionMechanismException
    Initializes this exemption mechanism with a key and a set of algorithm parameters.

    If this exemption mechanism requires any algorithm parameters and `params` is null, the underlying exemption mechanism implementation is supposed to generate the required parameters itself (using provider-specific default values); in the case that algorithm parameters must be specified by the caller, an `InvalidAlgorithmParameterException` is raised.

    Parameters:
      `key` - the key for this exemption mechanism
      `params` - the algorithm parameters
    Throws:
      `InvalidKeyException` - if the given key is inappropriate for this exemption mechanism.
      `InvalidAlgorithmParameterException` - if the given algorithm parameters are inappropriate for this exemption mechanism.
      `ExemptionMechanismException` - if problem(s) encountered in the process of initializing.

  - ### engineInit

    protected abstract void engineInit(Key key, AlgorithmParameters params) throws InvalidKeyException, InvalidAlgorithmParameterException, ExemptionMechanismException
    Initializes this exemption mechanism with a key and a set of algorithm parameters.

    If this exemption mechanism requires any algorithm parameters and `params` is null, the underlying exemption mechanism implementation is supposed to generate the required parameters itself (using provider-specific default values); in the case that algorithm parameters must be specified by the caller, an `InvalidAlgorithmParameterException` is raised.

    Parameters:
      `key` - the key for this exemption mechanism
      `params` - the algorithm parameters
    Throws:
      `InvalidKeyException` - if the given key is inappropriate for this exemption mechanism.
      `InvalidAlgorithmParameterException` - if the given algorithm parameters are inappropriate for this exemption mechanism.
      `ExemptionMechanismException` - if problem(s) encountered in the process of initializing.

  - ### engineGenExemptionBlob

    protected abstract byte[] engineGenExemptionBlob() throws ExemptionMechanismException
    Generates the exemption mechanism key blob.
    Returns:
      the new buffer with the result key blob.
    Throws:
      `ExemptionMechanismException` - if problem(s) encountered in the process of generating.

  - ### engineGenExemptionBlob

    protected abstract int engineGenExemptionBlob(byte[] output, int outputOffset) throws ShortBufferException, ExemptionMechanismException
    Generates the exemption mechanism key blob, and stores the result in the `output` buffer, starting at `outputOffset` inclusive.

    If the `output` buffer is too small to hold the result, a `ShortBufferException` is thrown. In this case, repeat this call with a larger output buffer. Use `engineGetOutputSize` to determine how big the output buffer should be.

    Parameters:
      `output` - the buffer for the result
      `outputOffset` - the offset in `output` where the result is stored
    Returns:
      the number of bytes stored in `output`
    Throws:
      `ShortBufferException` - if the given output buffer is too small to hold the result.
      `ExemptionMechanismException` - if problem(s) encountered in the process of generating.