# Interface KEMSpi.EncapsulatorSpi

Enclosing interface:
  `KEMSpi`

public static interface KEMSpi.EncapsulatorSpi
The KEM encapsulator implementation, generated by `KEMSpi.engineNewEncapsulator(java.security.PublicKey, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom)` on the KEM sender side.

Since:
  21
See Also:
  - `KEM.Encapsulator`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `KEM.Encapsulated`
  `engineEncapsulate(int from, int to, String algorithm)`
  The key encapsulation function.
  `int`
  `engineEncapsulationSize()`
  Returns the size of the key encapsulation message.
  `int`
  `engineSecretSize()`
  Returns the size of the shared secret.

- ## Method Details

  - ### engineEncapsulate

    KEM.Encapsulated engineEncapsulate(int from, int to, String algorithm)
    The key encapsulation function.

    Each invocation of this method must generate a new secret key and key encapsulation message that is returned in an `KEM.Encapsulated` object.

    An implementation must support the case where `from` is 0, `to` is the same as the return value of `secretSize()`, and `algorithm` is "Generic".

    Parameters:
      `from` - the initial index of the shared secret byte array to be returned, inclusive
      `to` - the final index of the shared secret byte array to be returned, exclusive
      `algorithm` - the algorithm name for the secret key that is returned
    Returns:
      an `KEM.Encapsulated` object containing a portion of the shared secret as a key with the specified algorithm, key encapsulation message, and optional parameters.
    Throws:
      `IndexOutOfBoundsException` - if `from < 0`, `from > to`, or `to > secretSize()`
      `NullPointerException` - if `algorithm` is `null`
      `UnsupportedOperationException` - if the combination of `from`, `to`, and `algorithm` is not supported by the encapsulator
    See Also:
      - `KEM.Encapsulated`
      - `KEM.Encapsulator.encapsulate(int, int, String)`

  - ### engineSecretSize

    int engineSecretSize()
    Returns the size of the shared secret.
    Returns:
      the size of the shared secret as a finite non-negative integer
    See Also:
      - `KEM.Encapsulator.secretSize()`

  - ### engineEncapsulationSize

    int engineEncapsulationSize()
    Returns the size of the key encapsulation message.
    Returns:
      the size of the key encapsulation message as a finite non-negative integer
    See Also:
      - `KEM.Encapsulator.encapsulationSize()`