Package org.bouncycastle.crypto.engines

## Class SerpentEngineBase

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

- All Implemented Interfaces:
    `BlockCipher`
  Direct Known Subclasses:
    `SerpentEngine`, `TnepresEngine`

      public abstract class SerpentEngineBase
      extends java.lang.Object
      implements BlockCipher

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected static int` | `BLOCK_SIZE` |
    `protected boolean` | `encrypting` |
    `protected int[]` | `wKey` |
    `protected int` | `X0` |
    `protected int` | `X1` |
    `protected int` | `X2` |
    `protected int` | `X3` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected abstract void` | `decryptBlock​(byte[] input, int inOff, byte[] output, int outOff)` |
    `protected abstract void` | `encryptBlock​(byte[] input, int inOff, byte[] output, int outOff)` |
    `java.lang.String` | `getAlgorithmName()` | Return the name of the algorithm the cipher implements.
    `int` | `getBlockSize()` | Return the block size for this cipher (in bytes).
    `protected void` | `ib0​(int a, int b, int c, int d)` | InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms.
    `protected void` | `ib1​(int a, int b, int c, int d)` | InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps.
    `protected void` | `ib2​(int a, int b, int c, int d)` | InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps.
    `protected void` | `ib3​(int a, int b, int c, int d)` | InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms
    `protected void` | `ib4​(int a, int b, int c, int d)` | InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms.
    `protected void` | `ib5​(int a, int b, int c, int d)` | InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms.
    `protected void` | `ib6​(int a, int b, int c, int d)` | InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms.
    `protected void` | `ib7​(int a, int b, int c, int d)` | InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms.
    `void` | `init​(boolean encrypting, CipherParameters params)` | initialise a Serpent cipher.
    `protected void` | `inverseLT()` | Apply the inverse of the linear transformation to the register set.
    `protected void` | `LT()` | Apply the linear transformation to the register set.
    `protected abstract int[]` | `makeWorkingKey​(byte[] key)` |
    `int` | `processBlock​(byte[] in, int inOff, byte[] out, int outOff)` | Process one block of input from the array in and write it to the out array.
    `void` | `reset()` | Reset the cipher.
    `protected static int` | `rotateLeft​(int x, int bits)` |
    `protected static int` | `rotateRight​(int x, int bits)` |
    `protected void` | `sb0​(int a, int b, int c, int d)` | S0 - { 3, 8,15, 1,10, 6, 5,11,14,13, 4, 2, 7, 0, 9,12 } - 15 terms.
    `protected void` | `sb1​(int a, int b, int c, int d)` | S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms.
    `protected void` | `sb2​(int a, int b, int c, int d)` | S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms.
    `protected void` | `sb3​(int a, int b, int c, int d)` | S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms.
    `protected void` | `sb4​(int a, int b, int c, int d)` | S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms.
    `protected void` | `sb5​(int a, int b, int c, int d)` | S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms.
    `protected void` | `sb6​(int a, int b, int c, int d)` | S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms.
    `protected void` | `sb7​(int a, int b, int c, int d)` | S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms.

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

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

- - ### Field Detail

    - #### BLOCK_SIZE

          protected static final int BLOCK_SIZE

      See Also:
        Constant Field Values

    - #### encrypting

          protected boolean encrypting

    - #### wKey

          protected int[] wKey

    - #### X0

          protected int X0

    - #### X1

          protected int X1

    - #### X2

          protected int X2

    - #### X3

          protected int X3

  - ### Method Detail

    - #### init

          public void init​(boolean encrypting,
                           CipherParameters params)

      initialise a Serpent cipher.
      Specified by:
        `init` in interface `BlockCipher`
      Parameters:
        `encrypting` - whether or not we are for encryption.
        `params` - the parameters required to set up the cipher.
      Throws:
        `java.lang.IllegalArgumentException` - if the params argument is inappropriate.

    - #### getAlgorithmName

          public java.lang.String getAlgorithmName()

      Description copied from interface: `BlockCipher`
      Return the name of the algorithm the cipher implements.
      Specified by:
        `getAlgorithmName` in interface `BlockCipher`
      Returns:
        the name of the algorithm the cipher implements.

    - #### getBlockSize

          public int getBlockSize()

      Description copied from interface: `BlockCipher`
      Return the block size for this cipher (in bytes).
      Specified by:
        `getBlockSize` in interface `BlockCipher`
      Returns:
        the block size for this cipher in bytes.

    - #### processBlock

          public final int processBlock​(byte[] in,
                                        int inOff,
                                        byte[] out,
                                        int outOff)

      Process one block of input from the array in and write it to the out array.
      Specified by:
        `processBlock` in interface `BlockCipher`
      Parameters:
        `in` - the array containing the input data.
        `inOff` - offset into the in array the data starts at.
        `out` - the array the output data will be copied into.
        `outOff` - the offset into the out array the output will start at.
      Returns:
        the number of bytes processed and produced.
      Throws:
        `DataLengthException` - if there isn't enough data in in, or space in out.
        `java.lang.IllegalStateException` - if the cipher isn't initialised.

    - #### reset

          public void reset()

      Description copied from interface: `BlockCipher`
      Reset the cipher. After resetting the cipher is in the same state as it was after the last init (if there was one).
      Specified by:
        `reset` in interface `BlockCipher`

    - #### rotateLeft

          protected static int rotateLeft​(int x,
                                          int bits)

    - #### rotateRight

          protected static int rotateRight​(int x,
                                           int bits)

    - #### sb0

          protected final void sb0​(int a,
                                   int b,
                                   int c,
                                   int d)

      S0 - { 3, 8,15, 1,10, 6, 5,11,14,13, 4, 2, 7, 0, 9,12 } - 15 terms.

    - #### ib0

          protected final void ib0​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms.

    - #### sb1

          protected final void sb1​(int a,
                                   int b,
                                   int c,
                                   int d)

      S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms.

    - #### ib1

          protected final void ib1​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps.

    - #### sb2

          protected final void sb2​(int a,
                                   int b,
                                   int c,
                                   int d)

      S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms.

    - #### ib2

          protected final void ib2​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps.

    - #### sb3

          protected final void sb3​(int a,
                                   int b,
                                   int c,
                                   int d)

      S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms.

    - #### ib3

          protected final void ib3​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms

    - #### sb4

          protected final void sb4​(int a,
                                   int b,
                                   int c,
                                   int d)

      S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms.

    - #### ib4

          protected final void ib4​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms.

    - #### sb5

          protected final void sb5​(int a,
                                   int b,
                                   int c,
                                   int d)

      S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms.

    - #### ib5

          protected final void ib5​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms.

    - #### sb6

          protected final void sb6​(int a,
                                   int b,
                                   int c,
                                   int d)

      S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms.

    - #### ib6

          protected final void ib6​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms.

    - #### sb7

          protected final void sb7​(int a,
                                   int b,
                                   int c,
                                   int d)

      S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms.

    - #### ib7

          protected final void ib7​(int a,
                                   int b,
                                   int c,
                                   int d)

      InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms.

    - #### LT

          protected final void LT()

      Apply the linear transformation to the register set.

    - #### inverseLT

          protected final void inverseLT()

      Apply the inverse of the linear transformation to the register set.

    - #### makeWorkingKey

          protected abstract int[] makeWorkingKey​(byte[] key)

    - #### encryptBlock

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

    - #### decryptBlock

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