SerpentEngine (Bouncy Castle Library 1.85 API Specification)
Date: 2026-07-12

org.bouncycastle.crypto.engines

## Class SerpentEngine

- java.lang.Object
- - org.bouncycastle.crypto.engines.SerpentEngineBase
  - - org.bouncycastle.crypto.engines.SerpentEngine

- All Implemented Interfaces:
    BlockCipher

      public final class SerpentEngine
      extends SerpentEngineBase

  Serpent is a 128-bit 32-round block cipher with variable key lengths, including 128, 192 and 256 bit keys conjectured to be at least as secure as three-key triple-DES.

  Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a candidate algorithm for the NIST AES Quest.

  For full details see The Serpent home page

- - ### Field Summary

    - ### Fields inherited from class org.bouncycastle.crypto.engines.SerpentEngineBase

      `BLOCK_SIZE, encrypting, keyBits, wKey`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SerpentEngine()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `decryptBlock(byte[] input, int inOff, byte[] output, int outOff)` Decrypt one block of ciphertext.
    `protected void` | `encryptBlock(byte[] input, int inOff, byte[] output, int outOff)` Encrypt one block of plaintext.
    `protected int[]` | `makeWorkingKey(byte[] key)` Expand a user-supplied key material into a session key.

    - ### Methods inherited from class org.bouncycastle.crypto.engines.SerpentEngineBase

      `getAlgorithmName, getBlockSize, ib0, ib1, ib2, ib3, ib4, ib5, ib6, ib7, init, inverseLT, LT, processBlock, reset, rotateLeft, rotateRight, sb0, sb1, sb2, sb3, sb4, sb5, sb6, sb7`

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

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

- - ### Constructor Detail

    - #### SerpentEngine

          public SerpentEngine()

  - ### Method Detail

    - #### makeWorkingKey

          protected int[] makeWorkingKey(byte[] key)
                                  throws java.lang.IllegalArgumentException

      Expand a user-supplied key material into a session key.
      Specified by:
        `makeWorkingKey` in class `SerpentEngineBase`
      Parameters:
        `key` - The user-key bytes (multiples of 4) to use.
      Throws:
        `java.lang.IllegalArgumentException`

    - #### encryptBlock

          protected void encryptBlock(byte[] input,
                                      int inOff,
                                      byte[] output,
                                      int outOff)

      Encrypt one block of plaintext.
      Specified by:
        `encryptBlock` in class `SerpentEngineBase`
      Parameters:
        `input` - the array containing the input data.
        `inOff` - offset into the in array the data starts at.
        `output` - the array the output data will be copied into.
        `outOff` - the offset into the out array the output will start at.

    - #### decryptBlock

          protected void decryptBlock(byte[] input,
                                      int inOff,
                                      byte[] output,
                                      int outOff)

      Decrypt one block of ciphertext.
      Specified by:
        `decryptBlock` in class `SerpentEngineBase`
      Parameters:
        `input` - the array containing the input data.
        `inOff` - offset into the in array the data starts at.
        `output` - the array the output data will be copied into.
        `outOff` - the offset into the out array the output will start at.