compact1, compact2, compact3
javax.crypto

## Class MacSpi

- java.lang.Object
- - javax.crypto.MacSpi

-     public abstract class MacSpi
      extends Object

  This class defines the Service Provider Interface (SPI) for the `Mac` 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 MAC algorithm.

  Implementations are free to implement the Cloneable interface.

  Since:
    1.4

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `MacSpi()` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Object` | `clone()` | Returns a clone if the implementation is cloneable.
    `protected abstract byte[]` | `engineDoFinal()` | Completes the MAC computation and resets the MAC for further use, maintaining the secret key that the MAC was initialized with.
    `protected abstract int` | `engineGetMacLength()` | Returns the length of the MAC in bytes.
    `protected abstract void` | `engineInit(Key key, AlgorithmParameterSpec params)` | Initializes the MAC with the given (secret) key and algorithm parameters.
    `protected abstract void` | `engineReset()` | Resets the MAC for further use, maintaining the secret key that the MAC was initialized with.
    `protected abstract void` | `engineUpdate(byte input)` | Processes the given byte.
    `protected abstract void` | `engineUpdate(byte[] input, int offset, int len)` | Processes the first `len` bytes in `input`, starting at `offset` inclusive.
    `protected void` | `engineUpdate(ByteBuffer input)` | Processes `input.remaining()` bytes in the ByteBuffer `input`, starting at `input.position()`.

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

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

- - ### Constructor Detail

    - #### MacSpi

          public MacSpi()

  - ### Method Detail

    - #### engineGetMacLength

          protected abstract int engineGetMacLength()

      Returns the length of the MAC in bytes.
      Returns:
        the MAC length in bytes.

    - #### engineInit

          protected abstract void engineInit(Key key,
                                             AlgorithmParameterSpec params)
                                      throws InvalidKeyException,
                                             InvalidAlgorithmParameterException

      Initializes the MAC with the given (secret) key and algorithm parameters.
      Parameters:
        `key` - the (secret) key.
        `params` - the algorithm parameters.
      Throws:
        `InvalidKeyException` - if the given key is inappropriate for initializing this MAC.
        `InvalidAlgorithmParameterException` - if the given algorithm parameters are inappropriate for this MAC.

    - #### engineUpdate

          protected abstract void engineUpdate(byte input)

      Processes the given byte.
      Parameters:
        `input` - the input byte to be processed.

    - #### engineUpdate

          protected abstract void engineUpdate(byte[] input,
                                               int offset,
                                               int len)

      Processes the first `len` bytes in `input`, starting at `offset` inclusive.
      Parameters:
        `input` - the input buffer.
        `offset` - the offset in `input` where the input starts.
        `len` - the number of bytes to process.

    - #### engineUpdate

          protected void engineUpdate(ByteBuffer input)

      Processes `input.remaining()` bytes in the ByteBuffer `input`, starting at `input.position()`. Upon return, the buffer's position will be equal to its limit; its limit will not have changed.

      Subclasses should consider overriding this method if they can process ByteBuffers more efficiently than byte arrays.

      Parameters:
        `input` - the ByteBuffer
      Since:
        1.5

    - #### engineDoFinal

          protected abstract byte[] engineDoFinal()

      Completes the MAC computation and resets the MAC for further use, maintaining the secret key that the MAC was initialized with.
      Returns:
        the MAC result.

    - #### engineReset

          protected abstract void engineReset()

      Resets the MAC for further use, maintaining the secret key that the MAC was initialized with.

    - #### clone

          public Object clone()
                       throws CloneNotSupportedException

      Returns a clone if the implementation is cloneable.
      Overrides:
        `clone` in class `Object`
      Returns:
        a clone if the implementation is cloneable.
      Throws:
        `CloneNotSupportedException` - if this is called on an implementation that does not support `Cloneable`.
      See Also:
        `Cloneable`

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.