/* Serpent.java --
   Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc.

This file is a part of GNU Classpath.

GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.

GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
USA

Linking this library statically or dynamically with other modules is
making a combined work based on this library.  Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.

As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module.  An independent module is a module which is not derived from
or based on this library.  If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so.  If you do not wish to do so, delete this
exception statement from your version.  */


package gnu.javax.crypto.cipher;

import gnu.java.security.Registry;
import gnu.java.security.util.Util;

import java.security.InvalidKeyException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

/**
 * Serpent is a 32-round substitution-permutation network block cipher,
 * operating on 128-bit blocks and accepting keys of 128, 192, and 256 bits in
 * length. At each round the plaintext is XORed with a 128 bit portion of the
 * session key -- a 4224 bit key computed from the input key -- then one of
 * eight S-boxes are applied, and finally a simple linear transformation is
 * done. Decryption does the exact same thing in reverse order, and using the
 * eight inverses of the S-boxes.
 * <p>
 * Serpent was designed by Ross Anderson, Eli Biham, and Lars Knudsen as a
 * proposed cipher for the Advanced Encryption Standard.
 * <p>
 * Serpent can be sped up greatly by replacing S-box substitution with a
 * sequence of binary operations, and the optimal implementation depends upon
 * finding the fastest sequence of binary operations that reproduce this
 * substitution. This implementation uses the S-boxes discovered by <a
 * href="http://www.ii.uib.no/~osvik/">Dag Arne Osvik</a>, which are optimized
 * for the Pentium family of processors.
 * <p>
 * References:
 * <ol>
 * <li><a href="http://www.cl.cam.ac.uk/~rja14/serpent.html">Serpent: A
 * Candidate Block Cipher for the Advanced Encryption Standard.</a></li>
 * </ol>
 */
public class Serpent
    extends BaseCipher
{
  private static final int DEFAULT_KEY_SIZE = 16;
  private static final int DEFAULT_BLOCK_SIZE = 16;
  private static final int ROUNDS = 32;
  /** The fractional part of the golden ratio, (sqrt(5)+1)/2. */
  private static final int PHI = 0x9e3779b9;
  /**
   * KAT vector (from ecb_vk): I=9
   * KEY=008000000000000000000000000000000000000000000000
   * CT=5587B5BCB9EE5A28BA2BACC418005240
   */
  private static final byte[] KAT_KEY = Util.toReversedBytesFromString(
      "008000000000000000000000000000000000000000000000");
  private static final byte[] KAT_CT =
      Util.toReversedBytesFromString("5587B5BCB9EE5A28BA2BACC418005240");
  /** caches the result of the correctness test, once executed. */
  private static Boolean valid;
  private int x0, x1, x2, x3, x4;

  /** Trivial zero-argument constructor. */
  public Serpent()
  {
    super(Registry.SERPENT_CIPHER, DEFAULT_BLOCK_SIZE, DEFAULT_KEY_SIZE);
  }

  public Object clone()
  {
    Serpent result = new Serpent();
    result.currentBlockSize = this.currentBlockSize;
    return result;
  }

  public Iterator blockSizes()
  {
    return Collections.singleton(Integer.valueOf(DEFAULT_BLOCK_SIZE)).iterator();
  }

  public Iterator keySizes()
  {
    ArrayList keySizes = new ArrayList();
    keySizes.add(Integer.valueOf(16));
    keySizes.add(Integer.valueOf(24));
    keySizes.add(Integer.valueOf(32));
    return Collections.unmodifiableList(keySizes).iterator();
  }

  public Object makeKey(byte[] kb, int blockSize) throws InvalidKeyException
  {
    // Not strictly true, but here to conform with the AES proposal.
    // This restriction can be removed if deemed necessary.
    if (kb.length != 16 && kb.length != 24 && kb.length != 32)
      throw new InvalidKeyException("Key length is not 16, 24, or 32 bytes");
    Key key = new Key();
    // Here w is our "pre-key".
    int[] w = new int[4 * (ROUNDS + 1)];
    int i, j;
    for (i = 0, j = 0; i < 8 && j < kb.length; i++)
      w[i] = (kb[j++] & 0xff)
           | (kb[j++] & 0xff) << 8
           | (kb[j++] & 0xff) << 16
           | (kb[j++] & 0xff) << 24;
    // Pad key if < 256 bits.
    if (i != 8)
      w[i] = 1;
    // Transform using w_i-8 ... w_i-1
    for (i = 8, j = 0; i < 16; i++)
      {
        int t = w[j] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ j++;
        w[i] = t << 11 | t >>> 21;
      }
    // Translate by 8.
    for (i = 0; i < 8; i++)
      w[i] = w[i + 8];
    // Transform the rest of the key.
    for (; i < w.length; i++)
      {
        int t = w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i;
        w[i] = t << 11 | t >>> 21;
      }
    // After these s-boxes the pre-key (w, above) will become the
    // session key (key, below).
    sbox3(w[0], w[1], w[2], w[3]);
    key.k0 = x0;
    key.k1 = x1;
    key.k2 = x2;
    key.k3 = x3;
    sbox2(w[4], w[5], w[6], w[7]);
    key.k4 = x0;
    key.k5 = x1;
    key.k6 = x2;
    key.k7 = x3;
    sbox1(w[8], w[9], w[10], w[11]);
    key.k8 = x0;
    key.k9 = x1;
    key.k10 = x2;
    key.k11 = x3;
    sbox0(w[12], w[13], w[14], w[15]);
    key.k12 = x0;
    key.k13 = x1;
    key.k14 = x2;
    key.k15 = x3;
    sbox7(w[16], w[17], w[18], w[19]);
    key.k16 = x0;
    key.k17 = x1;
    key.k18 = x2;
    key.k19 = x3;
    sbox6(w[20], w[21], w[22], w[23]);
    key.k20 = x0;
    key.k21 = x1;
    key.k22 = x2;
    key.k23 = x3;
    sbox5(w[24], w[25], w[26], w[27]);
    key.k24 = x0;
    key.k25 = x1;
    key.k26 = x2;
    key.k27 = x3;
    sbox4(w[28], w[29], w[30], w[31]);
    key.k28 = x0;
    key.k29 = x1;
    key.k30 = x2;
    key.k31 = x3;
    sbox3(w[32], w[33], w[34], w[35]);
    key.k32 = x0;
    key.k33 = x1;
    key.k34 = x2;
    key.k35 = x3;
    sbox2(w[36], w[37], w[38], w[39]);
    key.k36 = x0;
    key.k37 = x1;
    key.k38 = x2;
    key.k39 = x3;
    sbox1(w[40], w[41], w[42], w[43]);
    key.k40 = x0;
    key.k41 = x1;
    key.k42 = x2;
    key.k43 = x3;
    sbox0(w[44], w[45], w[46], w[47]);
    key.k44 = x0;
    key.k45 = x1;
    key.k46 = x2;
    key.k47 = x3;
    sbox7(w[48], w[49], w[50], w[51]);
    key.k48 = x0;
    key.k49 = x1;
    key.k50 = x2;
    key.k51 = x3;
    sbox6(w[52], w[53], w[54], w[55]);
    key.k52 = x0;
    key.k53 = x1;
    key.k54 = x2;
    key.k55 = x3;
    sbox5(w[56], w[57], w[58], w[59]);
    key.k56 = x0;
    key.k57 = x1;
    key.k58 = x2;
    key.k59 = x3;
    sbox4(w[60], w[61], w[62], w[63]);
    key.k60 = x0;
    key.k61 = x1;
    key.k62 = x2;
    key.k63 = x3;
    sbox3(w[64], w[65], w[66], w[67]);
    key.k64 = x0;
    key.k65 = x1;
    key.k66 = x2;
    key.k67 = x3;
    sbox2(w[68], w[69], w[70], w[71]);
    key.k68 = x0;
    key.k69 = x1;
    key.k70 = x2;
    key.k71 = x3;
    sbox1(w[72], w[73], w[74], w[75]);
    key.k72 = x0;
    key.k73 = x1;
    key.k74 = x2;
    key.k75 = x3;
    sbox0(w[76], w[77], w[78], w[79]);
    key.k76 = x0;
    key.k77 = x1;
    key.k78 = x2;
    key.k79 = x3;
    sbox7(w[80], w[81], w[82], w[83]);
    key.k80 = x0;
    key.k81 = x1;
    key.k82 = x2;
    key.k83 = x3;
    sbox6(w[84], w[85], w[86], w[87]);
    key.k84 = x0;
    key.k85 = x1;
    key.k86 = x2;
    key.k87 = x3;
    sbox5(w[88], w[89], w[90], w[91]);
    key.k88 = x0;
    key.k89 = x1;
    key.k90 = x2;
    key.k91 = x3;
    sbox4(w[92], w[93], w[94], w[95]);
    key.k92 = x0;
    key.k93 = x1;
    key.k94 = x2;
    key.k95 = x3;
    sbox3(w[96], w[97], w[98], w[99]);
    key.k96 = x0;
    key.k97 = x1;
    key.k98 = x2;
    key.k99 = x3;
    sbox2(w[100], w[101], w[102], w[103]);
    key.k100 = x0;
    key.k101 = x1;
    key.k102 = x2;
    key.k103 = x3;
    sbox1(w[104], w[105], w[106], w[107]);
    key.k104 = x0;
    key.k105 = x1;
    key.k106 = x2;
    key.k107 = x3;
    sbox0(w[108], w[109], w[110], w[111]);
    key.k108 = x0;
    key.k109 = x1;
    key.k110 = x2;
    key.k111 = x3;
    sbox7(w[112], w[113], w[114], w[115]);
    key.k112 = x0;
    key.k113 = x1;
    key.k114 = x2;
    key.k115 = x3;
    sbox6(w[116], w[117], w[118], w[119]);
    key.k116 = x0;
    key.k117 = x1;
    key.k118 = x2;
    key.k119 = x3;
    sbox5(w[120], w[121], w[122], w[123]);
    key.k120 = x0;
    key.k121 = x1;
    key.k122 = x2;
    key.k123 = x3;
    sbox4(w[124], w[125], w[126], w[127]);
    key.k124 = x0;
    key.k125 = x1;
    key.k126 = x2;
    key.k127 = x3;
    sbox3(w[128], w[129], w[130], w[131]);
    key.k128 = x0;
    key.k129 = x1;
    key.k130 = x2;
    key.k131 = x3;
    return key;
  }

  public synchronized void encrypt(byte[] in, int i, byte[] out, int o,
                                   Object K, int bs)
  {
    Key key = (Key) K;
    x0 = (in[i     ] & 0xff)
       | (in[i +  1] & 0xff) << 8
       | (in[i +  2] & 0xff) << 16
       | (in[i +  3] & 0xff) << 24;
    x1 = (in[i +  4] & 0xff)
       | (in[i +  5] & 0xff) << 8
       | (in[i +  6] & 0xff) << 16
       | (in[i +  7] & 0xff) << 24;
    x2 = (in[i +  8] & 0xff)
       | (in[i +  9] & 0xff) << 8
       | (in[i + 10] & 0xff) << 16
       | (in[i + 11] & 0xff) << 24;
    x3 = (in[i + 12] & 0xff)
       | (in[i + 13] & 0xff) << 8
       | (in[i + 14] & 0xff) << 16
       | (in[i + 15] & 0xff) << 24;
    x0 ^= key.k0;
    x1 ^= key.k1;
    x2 ^= key.k2;
    x3 ^= key.k3;
    sbox0();
    x1 ^= key.k4;
    x4 ^= key.k5;
    x2 ^= key.k6;
    x0 ^= key.k7;
    sbox1();
    x0 ^= key.k8;
    x4 ^= key.k9;
    x2 ^= key.k10;
    x1 ^= key.k11;
    sbox2();
    x2 ^= key.k12;
    x1 ^= key.k13;
    x4 ^= key.k14;
    x3 ^= key.k15;
    sbox3();
    x1 ^= key.k16;
    x4 ^= key.k17;
    x3 ^= key.k18;
    x0 ^= key.k19;
    sbox4();
    x4 ^= key.k20;
    x2 ^= key.k21;
    x1 ^= key.k22;
    x0 ^= key.k23;
    sbox5();
    x2 ^= key.k24;
    x0 ^= key.k25;
    x4 ^= key.k26;
    x1 ^= key.k27;
    sbox6();
    x2 ^= key.k28;
    x0 ^= key.k29;
    x3 ^= key.k30;
    x4 ^= key.k31;
    sbox7();
    x0 = x3;
    x3 = x2;
    x2 = x4;
    x0 ^= key.k32;
    x1 ^= key.k33;
    x2 ^= key.k34;
    x3 ^= key.k35;
    sbox0();
    x1 ^= key.k36;
    x4 ^= key.k37;
    x2 ^= key.k38;
    x0 ^= key.k39;
    sbox1();
    x0 ^= key.k40;
    x4 ^= key.k41;
    x2 ^= key.k42;
    x1 ^= key.k43;
    sbox2();
    x2 ^= key.k44;
    x1 ^= key.k45;
    x4 ^= key.k46;
    x3 ^= key.k47;
    sbox3();
    x1 ^= key.k48;
    x4 ^= key.k49;
    x3 ^= key.k50;
    x0 ^= key.k51;
    sbox4();
    x4 ^= key.k52;
    x2 ^= key.k53;
    x1 ^= key.k54;
    x0 ^= key.k55;
    sbox5();
    x2 ^= key.k56;
    x0 ^= key.k57;
    x4 ^= key.k58;
    x1 ^= key.k59;
    sbox6();
    x2 ^= key.k60;
    x0 ^= key.k61;
    x3 ^= key.k62;
    x4 ^= key.k63;
    sbox7();
    x0 = x3;
    x3 = x2;
    x2 = x4;
    x0 ^= key.k64;
    x1 ^= key.k65;
    x2 ^= key.k66;
    x3 ^= key.k67;
    sbox0();
    x1 ^= key.k68;
    x4 ^= key.k69;
    x2 ^= key.k70;
    x0 ^= key.k71;
    sbox1();
    x0 ^= key.k72;
    x4 ^= key.k73;
    x2 ^= key.k74;
    x1 ^= key.k75;
    sbox2();
    x2 ^= key.k76;
    x1 ^= key.k77;
    x4 ^= key.k78;
    x3 ^= key.k79;
    sbox3();
    x1 ^= key.k80;
    x4 ^= key.k81;
    x3 ^= key.k82;
    x0 ^= key.k83;
    sbox4();
    x4 ^= key.k84;
    x2 ^= key.k85;
    x1 ^= key.k86;
    x0 ^= key.k87;
    sbox5();
    x2 ^= key.k88;
    x0 ^= key.k89;
    x4 ^= key.k90;
    x1 ^= key.k91;
    sbox6();
    x2 ^= key.k92;
    x0 ^= key.k93;
    x3 ^= key.k94;
    x4 ^= key.k95;
    sbox7();
    x0 = x3;
    x3 = x2;
    x2 = x4;
    x0 ^= key.k96;
    x1 ^= key.k97;
    x2 ^= key.k98;
    x3 ^= key.k99;
    sbox0();
    x1 ^= key.k100;
    x4 ^= key.k101;
    x2 ^= key.k102;
    x0 ^= key.k103;
    sbox1();
    x0 ^= key.k104;
    x4 ^= key.k105;
    x2 ^= key.k106;
    x1 ^= key.k107;
    sbox2();
    x2 ^= key.k108;
    x1 ^= key.k109;
    x4 ^= key.k110;
    x3 ^= key.k111;
    sbox3();
    x1 ^= key.k112;
    x4 ^= key.k113;
    x3 ^= key.k114;
    x0 ^= key.k115;
    sbox4();
    x4 ^= key.k116;
    x2 ^= key.k117;
    x1 ^= key.k118;
    x0 ^= key.k119;
    sbox5();
    x2 ^= key.k120;
    x0 ^= key.k121;
    x4 ^= key.k122;
    x1 ^= key.k123;
    sbox6();
    x2 ^= key.k124;
    x0 ^= key.k125;
    x3 ^= key.k126;
    x4 ^= key.k127;
    sbox7noLT();
    x0 = x3;
    x3 = x2;
    x2 = x4;
    x0 ^= key.k128;
    x1 ^= key.k129;
    x2 ^= key.k130;
    x3 ^= key.k131;
    out[o     ] = (byte) x0;
    out[o +  1] = (byte)(x0 >>> 8);
    out[o +  2] = (byte)(x0 >>> 16);
    out[o +  3] = (byte)(x0 >>> 24);
    out[o +  4] = (byte) x1;
    out[o +  5] = (byte)(x1 >>> 8);
    out[o +  6] = (byte)(x1 >>> 16);
    out[o +  7] = (byte)(x1 >>> 24);
    out[o +  8] = (byte) x2;
    out[o +  9] = (byte)(x2 >>> 8);
    out[o + 10] = (byte)(x2 >>> 16);
    out[o + 11] = (byte)(x2 >>> 24);
    out[o + 12] = (byte) x3;
    out[o + 13] = (byte)(x3 >>> 8);
    out[o + 14] = (byte)(x3 >>> 16);
    out[o + 15] = (byte)(x3 >>> 24);
  }

  public synchronized void decrypt(byte[] in, int i, byte[] out, int o,
                                   Object K, int bs)
  {
    Key key = (Key) K;
    x0 = (in[i     ] & 0xff)
       | (in[i +  1] & 0xff) << 8
       | (in[i +  2] & 0xff) << 16
       | (in[i +  3] & 0xff) << 24;
    x1 = (in[i +  4] & 0xff)
       | (in[i +  5] & 0xff) << 8
       | (in[i +  6] & 0xff) << 16
       | (in[i +  7] & 0xff) << 24;
    x2 = (in[i +  8] & 0xff)
       | (in[i +  9] & 0xff) << 8
       | (in[i + 10] & 0xff) << 16
       | (in[i + 11] & 0xff) << 24;
    x3 = (in[i + 12] & 0xff)
       | (in[i + 13] & 0xff) << 8
       | (in[i + 14] & 0xff) << 16
       | (in[i + 15] & 0xff) << 24;
    x0 ^= key.k128;
    x1 ^= key.k129;
    x2 ^= key.k130;
    x3 ^= key.k131;
    sboxI7noLT();
    x3 ^= key.k124;
    x0 ^= key.k125;
    x1 ^= key.k126;
    x4 ^= key.k127;
    sboxI6();
    x0 ^= key.k120;
    x1 ^= key.k121;
    x2 ^= key.k122;
    x4 ^= key.k123;
    sboxI5();
    x1 ^= key.k116;
    x3 ^= key.k117;
    x4 ^= key.k118;
    x2 ^= key.k119;
    sboxI4();
    x1 ^= key.k112;
    x2 ^= key.k113;
    x4 ^= key.k114;
    x0 ^= key.k115;
    sboxI3();
    x0 ^= key.k108;
    x1 ^= key.k109;
    x4 ^= key.k110;
    x2 ^= key.k111;
    sboxI2();
    x1 ^= key.k104;
    x3 ^= key.k105;
    x4 ^= key.k106;
    x2 ^= key.k107;
    sboxI1();
    x0 ^= key.k100;
    x1 ^= key.k101;
    x2 ^= key.k102;
    x4 ^= key.k103;
    sboxI0();
    x0 ^= key.k96;
    x3 ^= key.k97;
    x1 ^= key.k98;
    x4 ^= key.k99;
    sboxI7();
    x1 = x3;
    x3 = x4;
    x4 = x2;
    x3 ^= key.k92;
    x0 ^= key.k93;
    x1 ^= key.k94;
    x4 ^= key.k95;
    sboxI6();
    x0 ^= key.k88;
    x1 ^= key.k89;
    x2 ^= key.k90;
    x4 ^= key.k91;
    sboxI5();
    x1 ^= key.k84;
    x3 ^= key.k85;
    x4 ^= key.k86;
    x2 ^= key.k87;
    sboxI4();
    x1 ^= key.k80;
    x2 ^= key.k81;
    x4 ^= key.k82;
    x0 ^= key.k83;
    sboxI3();
    x0 ^= key.k76;
    x1 ^= key.k77;
    x4 ^= key.k78;
    x2 ^= key.k79;
    sboxI2();
    x1 ^= key.k72;
    x3 ^= key.k73;
    x4 ^= key.k74;
    x2 ^= key.k75;
    sboxI1();
    x0 ^= key.k68;
    x1 ^= key.k69;
    x2 ^= key.k70;
    x4 ^= key.k71;
    sboxI0();
    x0 ^= key.k64;
    x3 ^= key.k65;
    x1 ^= key.k66;
    x4 ^= key.k67;
    sboxI7();
    x1 = x3;
    x3 = x4;
    x4 = x2;
    x3 ^= key.k60;
    x0 ^= key.k61;
    x1 ^= key.k62;
    x4 ^= key.k63;
    sboxI6();
    x0 ^= key.k56;
    x1 ^= key.k57;
    x2 ^= key.k58;
    x4 ^= key.k59;
    sboxI5();
    x1 ^= key.k52;
    x3 ^= key.k53;
    x4 ^= key.k54;
    x2 ^= key.k55;
    sboxI4();
    x1 ^= key.k48;
    x2 ^= key.k49;
    x4 ^= key.k50;
    x0 ^= key.k51;
    sboxI3();
    x0 ^= key.k44;
    x1 ^= key.k45;
    x4 ^= key.k46;
    x2 ^= key.k47;
    sboxI2();
    x1 ^= key.k40;
    x3 ^= key.k41;
    x4 ^= key.k42;
    x2 ^= key.k43;
    sboxI1();
    x0 ^= key.k36;
    x1 ^= key.k37;
    x2 ^= key.k38;
    x4 ^= key.k39;
    sboxI0();
    x0 ^= key.k32;
    x3 ^= key.k33;
    x1 ^= key.k34;
    x4 ^= key.k35;
    sboxI7();
    x1 = x3;
    x3 = x4;
    x4 = x2;
    x3 ^= key.k28;
    x0 ^= key.k29;
    x1 ^= key.k30;
    x4 ^= key.k31;
    sboxI6();
    x0 ^= key.k24;
    x1 ^= key.k25;
    x2 ^= key.k26;
    x4 ^= key.k27;
    sboxI5();
    x1 ^= key.k20;
    x3 ^= key.k21;
    x4 ^= key.k22;
    x2 ^= key.k23;
    sboxI4();
    x1 ^= key.k16;
    x2 ^= key.k17;
    x4 ^= key.k18;
    x0 ^= key.k19;
    sboxI3();
    x0 ^= key.k12;
    x1 ^= key.k13;
    x4 ^= key.k14;
    x2 ^= key.k15;
    sboxI2();
    x1 ^= key.k8;
    x3 ^= key.k9;
    x4 ^= key.k10;
    x2 ^= key.k11;
    sboxI1();
    x0 ^= key.k4;
    x1 ^= key.k5;
    x2 ^= key.k6;
    x4 ^= key.k7;
    sboxI0();
    x2 = x1;
    x1 = x3;
    x3 = x4;
    x0 ^= key.k0;
    x1 ^= key.k1;
    x2 ^= key.k2;
    x3 ^= key.k3;
    out[o     ] = (byte) x0;
    out[o +  1] = (byte)(x0 >>> 8);
    out[o +  2] = (byte)(x0 >>> 16);
    out[o +  3] = (byte)(x0 >>> 24);
    out[o +  4] = (byte) x1;
    out[o +  5] = (byte)(x1 >>> 8);
    out[o +  6] = (byte)(x1 >>> 16);
    out[o +  7] = (byte)(x1 >>> 24);
    out[o +  8] = (byte) x2;
    out[o +  9] = (byte)(x2 >>> 8);
    out[o + 10] = (byte)(x2 >>> 16);
    out[o + 11] = (byte)(x2 >>> 24);
    out[o + 12] = (byte) x3;
    out[o + 13] = (byte)(x3 >>> 8);
    out[o + 14] = (byte)(x3 >>> 16);
    out[o + 15] = (byte)(x3 >>> 24);
  }

  public boolean selfTest()
  {
    if (valid == null)
      {
        boolean result = super.selfTest(); // do symmetry tests
        if (result)
          result = testKat(KAT_KEY, KAT_CT);
        valid = Boolean.valueOf(result);
      }
    return valid.booleanValue();
  }

  // These first few S-boxes operate directly on the "registers",
  // x0..x4, and perform the linear transform.
  private void sbox0()
  {
    x3 ^= x0;
    x4 = x1;
    x1 &= x3;
    x4 ^= x2;
    x1 ^= x0;
    x0 |= x3;
    x0 ^= x4;
    x4 ^= x3;
    x3 ^= x2;
    x2 |= x1;
    x2 ^= x4;
    x4 ^= -1;
    x4 |= x1;
    x1 ^= x3;
    x1 ^= x4;
    x3 |= x0;
    x1 ^= x3;
    x4 ^= x3;

    x1 = (x1 << 13) | (x1 >>> 19);
    x4 ^= x1;
    x3 = x1 << 3;
    x2 = (x2 << 3) | (x2 >>> 29);
    x4 ^= x2;
    x0 ^= x2;
    x4 = (x4 << 1) | (x4 >>> 31);
    x0 ^= x3;
    x0 = (x0 << 7) | (x0 >>> 25);
    x3 = x4;
    x1 ^= x4;
    x3 <<= 7;
    x1 ^= x0;
    x2 ^= x0;
    x2 ^= x3;
    x1 = (x1 << 5) | (x1 >>> 27);
    x2 = (x2 << 22) | (x2 >>> 10);
  }

  private void sbox1()
  {
    x4 = ~x4;
    x3 = x1;
    x1 ^= x4;
    x3 |= x4;
    x3 ^= x0;
    x0 &= x1;
    x2 ^= x3;
    x0 ^= x4;
    x0 |= x2;
    x1 ^= x3;
    x0 ^= x1;
    x4 &= x2;
    x1 |= x4;
    x4 ^= x3;
    x1 ^= x2;
    x3 |= x0;
    x1 ^= x3;
    x3 = ~x3;
    x4 ^= x0;
    x3 &= x2;
    x4 = ~x4;
    x3 ^= x1;
    x4 ^= x3;

    x0 = (x0 << 13) | (x0 >>> 19);
    x4 ^= x0;
    x3 = x0 << 3;
    x2 = (x2 << 3) | (x2 >>> 29);
    x4 ^= x2;
    x1 ^= x2;
    x4 = (x4 << 1) | (x4 >>> 31);
    x1 ^= x3;
    x1 = (x1 << 7) | (x1 >>> 25);
    x3 = x4;
    x0 ^= x4;
    x3 <<= 7;
    x0 ^= x1;
    x2 ^= x1;
    x2 ^= x3;
    x0 = (x0 << 5) | (x0 >>> 27);
    x2 = (x2 << 22) | (x2 >>> 10);
  }

  private void sbox2()
  {
    x3 = x0;
    x0 = x0 & x2;
    x0 = x0 ^ x1;
    x2 = x2 ^ x4;
    x2 = x2 ^ x0;
    x1 = x1 | x3;
    x1 = x1 ^ x4;
    x3 = x3 ^ x2;
    x4 = x1;
    x1 = x1 | x3;
    x1 = x1 ^ x0;
    x0 = x0 & x4;
    x3 = x3 ^ x0;
    x4 = x4 ^ x1;
    x4 = x4 ^ x3;
    x3 = ~x3;

    x2 = (x2 << 13) | (x2 >>> 19);
    x1 ^= x2;
    x0 = x2 << 3;
    x4 = (x4 << 3) | (x4 >>> 29);
    x1 ^= x4;
    x3 ^= x4;
    x1 = (x1 << 1) | (x1 >>> 31);
    x3 ^= x0;
    x3 = (x3 << 7) | (x3 >>> 25);
    x0 = x1;
    x2 ^= x1;
    x0 <<= 7;
    x2 ^= x3;
    x4 ^= x3;
    x4 ^= x0;
    x2 = (x2 << 5) | (x2 >>> 27);
    x4 = (x4 << 22) | (x4 >>> 10);
  }

  private void sbox3()
  {
    x0 = x2;
    x2 = x2 | x3;
    x3 = x3 ^ x1;
    x1 = x1 & x0;
    x0 = x0 ^ x4;
    x4 = x4 ^ x3;
    x3 = x3 & x2;
    x0 = x0 | x1;
    x3 = x3 ^ x0;
    x2 = x2 ^ x1;
    x0 = x0 & x2;
    x1 = x1 ^ x3;
    x0 = x0 ^ x4;
    x1 = x1 | x2;
    x1 = x1 ^ x4;
    x2 = x2 ^ x3;
    x4 = x1;
    x1 = x1 | x3;
    x1 = x1 ^ x2;

    x1 = (x1 << 13) | (x1 >>> 19);
    x4 ^= x1;
    x2 = x1 << 3;
    x3 = (x3 << 3) | (x3 >>> 29);
    x4 ^= x3;
    x0 ^= x3;
    x4 = (x4 << 1) | (x4 >>> 31);
    x0 ^= x2;
    x0 = (x0 << 7) | (x0 >>> 25);
    x2 = x4;
    x1 ^= x4;
    x2 <<= 7;
    x1 ^= x0;
    x3 ^= x0;
    x3 ^= x2;
    x1 = (x1 << 5) | (x1 >>> 27);
    x3 = (x3 << 22) | (x3 >>> 10);
  }

  private void sbox4()
  {
    x4 = x4 ^ x0;
    x0 = ~x0;
    x3 = x3 ^ x0;
    x0 = x0 ^ x1;
    x2 = x4;
    x4 = x4 & x0;
    x4 = x4 ^ x3;
    x2 = x2 ^ x0;
    x1 = x1 ^ x2;
    x3 = x3 & x2;
    x3 = x3 ^ x1;
    x1 = x1 & x4;
    x0 = x0 ^ x1;
    x2 = x2 | x4;
    x2 = x2 ^ x1;
    x1 = x1 | x0;
    x1 = x1 ^ x3;
    x3 = x3 & x0;
    x1 = ~x1;
    x2 = x2 ^ x3;

    x4 = (x4 << 13) | (x4 >>> 19);
    x2 ^= x4;
    x3 = x4 << 3;
    x1 = (x1 << 3) | (x1 >>> 29);
    x2 ^= x1;
    x0 ^= x1;
    x2 = (x2 << 1) | (x2 >>> 31);
    x0 ^= x3;
    x0 = (x0 << 7) | (x0 >>> 25);
    x3 = x2;
    x4 ^= x2;
    x3 <<= 7;
    x4 ^= x0;
    x1 ^= x0;
    x1 ^= x3;
    x4 = (x4 << 5) | (x4 >>> 27);
    x1 = (x1 << 22) | (x1 >>> 10);
  }

  private void sbox5()
  {
    x4 = x4 ^ x2;
    x2 = x2 ^ x0;
    x0 = ~x0;
    x3 = x2;
    x2 = x2 & x4;
    x1 = x1 ^ x0;
    x2 = x2 ^ x1;
    x1 = x1 | x3;
    x3 = x3 ^ x0;
    x0 = x0 & x2;
    x0 = x0 ^ x4;
    x3 = x3 ^ x2;
    x3 = x3 ^ x1;
    x1 = x1 ^ x4;
    x4 = x4 & x0;
    x1 = ~x1;
    x4 = x4 ^ x3;
    x3 = x3 | x0;
    x1 = x1 ^ x3;

    x2 = (x2 << 13) | (x2 >>> 19);
    x0 ^= x2;
    x3 = x2 << 3;
    x4 = (x4 << 3) | (x4 >>> 29);
    x0 ^= x4;
    x1 ^= x4;
    x0 = (x0 << 1) | (x0 >>> 31);
    x1 ^= x3;
    x1 = (x1 << 7) | (x1 >>> 25);
    x3 = x0;
    x2 ^= x0;
    x3 <<= 7;
    x2 ^= x1;
    x4 ^= x1;
    x4 ^= x3;
    x2 = (x2 << 5) | (x2 >>> 27);
    x4 = (x4 << 22) | (x4 >>> 10);
  }

  private void sbox6()
  {
    x4 = ~x4;
    x3 = x1;
    x1 = x1 & x2;
    x2 = x2 ^ x3;
    x1 = x1 ^ x4;
    x4 = x4 | x3;
    x0 = x0 ^ x1;
    x4 = x4 ^ x2;
    x2 = x2 | x0;
    x4 = x4 ^ x0;
    x3 = x3 ^ x2;
    x2 = x2 | x1;
    x2 = x2 ^ x4;
    x3 = x3 ^ x1;
    x3 = x3 ^ x2;
    x1 = ~x1;
    x4 = x4 & x3;
    x4 = x4 ^ x1;
    x2 = (x2 << 13) | (x2 >>> 19);
    x0 ^= x2;
    x1 = x2 << 3;
    x3 = (x3 << 3) | (x3 >>> 29);
    x0 ^= x3;
    x4 ^= x3;
    x0 = (x0 << 1) | (x0 >>> 31);
    x4 ^= x1;
    x4 = (x4 << 7) | (x4 >>> 25);
    x1 = x0;
    x2 ^= x0;
    x1 <<= 7;
    x2 ^= x4;
    x3 ^= x4;
    x3 ^= x1;
    x2 = (x2 << 5) | (x2 >>> 27);
    x3 = (x3 << 22) | (x3 >>> 10);
  }

  private void sbox7()
  {
    x1 = x3;
    x3 = x3 & x0;
    x3 = x3 ^ x4;
    x4 = x4 & x0;
    x1 = x1 ^ x3;
    x3 = x3 ^ x0;
    x0 = x0 ^ x2;
    x2 = x2 | x1;
    x2 = x2 ^ x3;
    x4 = x4 ^ x0;
    x3 = x3 ^ x4;
    x4 = x4 & x2;
    x4 = x4 ^ x1;
    x1 = x1 ^ x3;
    x3 = x3 & x2;
    x1 = ~x1;
    x3 = x3 ^ x1;
    x1 = x1 & x2;
    x0 = x0 ^ x4;
    x1 = x1 ^ x0;
    x3 = (x3 << 13) | (x3 >>> 19);
    x1 ^= x3;
    x0 = x3 << 3;
    x4 = (x4 << 3) | (x4 >>> 29);
    x1 ^= x4;
    x2 ^= x4;
    x1 = (x1 << 1) | (x1 >>> 31);
    x2 ^= x0;
    x2 = (x2 << 7) | (x2 >>> 25);
    x0 = x1;
    x3 ^= x1;
    x0 <<= 7;
    x3 ^= x2;
    x4 ^= x2;
    x4 ^= x0;
    x3 = (x3 << 5) | (x3 >>> 27);
    x4 = (x4 << 22) | (x4 >>> 10);
  }

  /** The final S-box, with no transform. */
  private void sbox7noLT()
  {
    x1 = x3;
    x3 = x3 & x0;
    x3 = x3 ^ x4;
    x4 = x4 & x0;
    x1 = x1 ^ x3;
    x3 = x3 ^ x0;
    x0 = x0 ^ x2;
    x2 = x2 | x1;
    x2 = x2 ^ x3;
    x4 = x4 ^ x0;
    x3 = x3 ^ x4;
    x4 = x4 & x2;
    x4 = x4 ^ x1;
    x1 = x1 ^ x3;
    x3 = x3 & x2;
    x1 = ~x1;
    x3 = x3 ^ x1;
    x1 = x1 & x2;
    x0 = x0 ^ x4;
    x1 = x1 ^ x0;
  }

  private void sboxI7noLT()
  {
    x4 = x2;
    x2 ^= x0;
    x0 &= x3;
    x2 = ~x2;
    x4 |= x3;
    x3 ^= x1;
    x1 |= x0;
    x0 ^= x2;
    x2 &= x4;
    x1 ^= x2;
    x2 ^= x0;
    x0 |= x2;
    x3 &= x4;
    x0 ^= x3;
    x4 ^= x1;
    x3 ^= x4;
    x4 |= x0;
    x3 ^= x2;
    x4 ^= x2;
  }

  private void sboxI6()
  {
    x1 = (x1 >>> 22) | (x1 << 10);
    x3 = (x3 >>> 5) | (x3 << 27);
    x2 = x0;
    x1 ^= x4;
    x2 <<= 7;
    x3 ^= x4;
    x1 ^= x2;
    x3 ^= x0;
    x4 = (x4 >>> 7) | (x4 << 25);
    x0 = (x0 >>> 1) | (x0 << 31);
    x0 ^= x3;
    x2 = x3 << 3;
    x4 ^= x2;
    x3 = (x3 >>> 13) | (x3 << 19);
    x0 ^= x1;
    x4 ^= x1;
    x1 = (x1 >>> 3) | (x1 << 29);
    x3 ^= x1;
    x2 = x1;
    x1 &= x3;
    x2 ^= x4;
    x1 = ~x1;
    x4 ^= x0;
    x1 ^= x4;
    x2 |= x3;
    x3 ^= x1;
    x4 ^= x2;
    x2 ^= x0;
    x0 &= x4;
    x0 ^= x3;
    x3 ^= x4;
    x3 |= x1;
    x4 ^= x0;
    x2 ^= x3;
  }

  private void sboxI5()
  {
    x2 = (x2 >>> 22) | (x2 << 10);
    x0 = (x0 >>> 5) | (x0 << 27);
    x3 = x1;
    x2 ^= x4;
    x3 <<= 7;
    x0 ^= x4;
    x2 ^= x3;
    x0 ^= x1;
    x4 = (x4 >>> 7) | (x4 << 25);
    x1 = (x1 >>> 1) | (x1 << 31);
    x1 ^= x0;
    x3 = x0 << 3;
    x4 ^= x3;
    x0 = (x0 >>> 13) | (x0 << 19);
    x1 ^= x2;
    x4 ^= x2;
    x2 = (x2 >>> 3) | (x2 << 29);
    x1 = ~x1;
    x3 = x4;
    x2 ^= x1;
    x4 |= x0;
    x4 ^= x2;
    x2 |= x1;
    x2 &= x0;
    x3 ^= x4;
    x2 ^= x3;
    x3 |= x0;
    x3 ^= x1;
    x1 &= x2;
    x1 ^= x4;
    x3 ^= x2;
    x4 &= x3;
    x3 ^= x1;
    x4 ^= x0;
    x4 ^= x3;
    x3 = ~x3;
  }

  private void sboxI4()
  {
    x4 = (x4 >>> 22) | (x4 << 10);
    x1 = (x1 >>> 5) | (x1 << 27);
    x0 = x3;
    x4 ^= x2;
    x0 <<= 7;
    x1 ^= x2;
    x4 ^= x0;
    x1 ^= x3;
    x2 = (x2 >>> 7) | (x2 << 25);
    x3 = (x3 >>> 1) | (x3 << 31);
    x3 ^= x1;
    x0 = x1 << 3;
    x2 ^= x0;
    x1 = (x1 >>> 13) | (x1 << 19);
    x3 ^= x4;
    x2 ^= x4;
    x4 = (x4 >>> 3) | (x4 << 29);
    x0 = x4;
    x4 &= x2;
    x4 ^= x3;
    x3 |= x2;
    x3 &= x1;
    x0 ^= x4;
    x0 ^= x3;
    x3 &= x4;
    x1 = ~x1;
    x2 ^= x0;
    x3 ^= x2;
    x2 &= x1;
    x2 ^= x4;
    x1 ^= x3;
    x4 &= x1;
    x2 ^= x1;
    x4 ^= x0;
    x4 |= x2;
    x2 ^= x1;
    x4 ^= x3;
  }

  private void sboxI3()
  {
    x4 = (x4 >>> 22) | (x4 << 10);
    x1 = (x1 >>> 5) | (x1 << 27);
    x3 = x2;
    x4 ^= x0;
    x3 <<= 7;
    x1 ^= x0;
    x4 ^= x3;
    x1 ^= x2;
    x0 = (x0 >>> 7) | (x0 << 25);
    x2 = (x2 >>> 1) | (x2 << 31);
    x2 ^= x1;
    x3 = x1 << 3;
    x0 ^= x3;
    x1 = (x1 >>> 13) | (x1 << 19);
    x2 ^= x4;
    x0 ^= x4;
    x4 = (x4 >>> 3) | (x4 << 29);
    x3 = x4;
    x4 ^= x2;
    x2 &= x4;
    x2 ^= x1;
    x1 &= x3;
    x3 ^= x0;
    x0 |= x2;
    x0 ^= x4;
    x1 ^= x3;
    x4 ^= x1;
    x1 |= x0;
    x1 ^= x2;
    x3 ^= x4;
    x4 &= x0;
    x2 |= x0;
    x2 ^= x4;
    x3 ^= x1;
    x4 ^= x3;
  }

  private void sboxI2()
  {
    x4 = (x4 >>> 22) | (x4 << 10);
    x0 = (x0 >>> 5) | (x0 << 27);
    x3 = x1;
    x4 ^= x2;
    x3 <<= 7;
    x0 ^= x2;
    x4 ^= x3;
    x0 ^= x1;
    x2 = (x2 >>> 7) | (x2 << 25);
    x1 = (x1 >>> 1) | (x1 << 31);
    x1 ^= x0;
    x3 = x0 << 3;
    x2 ^= x3;
    x0 = (x0 >>> 13) | (x0 << 19);
    x1 ^= x4;
    x2 ^= x4;
    x4 = (x4 >>> 3) | (x4 << 29);
    x4 ^= x2;
    x2 ^= x0;
    x3 = x2;
    x2 &= x4;
    x2 ^= x1;
    x1 |= x4;
    x1 ^= x3;
    x3 &= x2;
    x4 ^= x2;
    x3 &= x0;
    x3 ^= x4;
    x4 &= x1;
    x4 |= x0;
    x2 = ~x2;
    x4 ^= x2;
    x0 ^= x2;
    x0 &= x1;
    x2 ^= x3;
    x2 ^= x0;
  }

  private void sboxI1()
  {
    x4 = (x4 >>> 22) | (x4 << 10);
    x1 = (x1 >>> 5) | (x1 << 27);
    x0 = x3;
    x4 ^= x2;
    x0 <<= 7;
    x1 ^= x2;
    x4 ^= x0;
    x1 ^= x3;
    x2 = (x2 >>> 7) | (x2 << 25);
    x3 = (x3 >>> 1) | (x3 << 31);
    x3 ^= x1;
    x0 = x1 << 3;
    x2 ^= x0;
    x1 = (x1 >>> 13) | (x1 << 19);
    x3 ^= x4;
    x2 ^= x4;
    x4 = (x4 >>> 3) | (x4 << 29);
    x0 = x3;
    x3 ^= x2;
    x2 &= x3;
    x0 ^= x4;
    x2 ^= x1;
    x1 |= x3;
    x4 ^= x2;
    x1 ^= x0;
    x1 |= x4;
    x3 ^= x2;
    x1 ^= x3;
    x3 |= x2;
    x3 ^= x1;
    x0 = ~x0;
    x0 ^= x3;
    x3 |= x1;
    x3 ^= x1;
    x3 |= x0;
    x2 ^= x3;
  }

  private void sboxI0()
  {
    x2 = (x2 >>> 22) | (x2 << 10);
    x0 = (x0 >>> 5) | (x0 << 27);
    x3 = x1;
    x2 ^= x4;
    x3 <<= 7;
    x0 ^= x4;
    x2 ^= x3;
    x0 ^= x1;
    x4 = (x4 >>> 7) | (x4 << 25);
    x1 = (x1 >>> 1) | (x1 << 31);
    x1 ^= x0;
    x3 = x0 << 3;
    x4 ^= x3;
    x0 = (x0 >>> 13) | (x0 << 19);
    x1 ^= x2;
    x4 ^= x2;
    x2 = (x2 >>> 3) | (x2 << 29);
    x2 = ~x2;
    x3 = x1;
    x1 |= x0;
    x3 = ~x3;
    x1 ^= x2;
    x2 |= x3;
    x1 ^= x4;
    x0 ^= x3;
    x2 ^= x0;
    x0 &= x4;
    x3 ^= x0;
    x0 |= x1;
    x0 ^= x2;
    x4 ^= x3;
    x2 ^= x1;
    x4 ^= x0;
    x4 ^= x1;
    x2 &= x4;
    x3 ^= x2;
  }

  private void sboxI7()
  {
    x1 = (x1 >>> 22) | (x1 << 10);
    x0 = (x0 >>> 5) | (x0 << 27);
    x2 = x3;
    x1 ^= x4;
    x2 <<= 7;
    x0 ^= x4;
    x1 ^= x2;
    x0 ^= x3;
    x4 = (x4 >>> 7) | (x4 << 25);
    x3 = (x3 >>> 1) | (x3 << 31);
    x3 ^= x0;
    x2 = x0 << 3;
    x4 ^= x2;
    x0 = (x0 >>> 13) | (x0 << 19);
    x3 ^= x1;
    x4 ^= x1;
    x1 = (x1 >>> 3) | (x1 << 29);
    x2 = x1;
    x1 ^= x0;
    x0 &= x4;
    x1 = ~x1;
    x2 |= x4;
    x4 ^= x3;
    x3 |= x0;
    x0 ^= x1;
    x1 &= x2;
    x3 ^= x1;
    x1 ^= x0;
    x0 |= x1;
    x4 &= x2;
    x0 ^= x4;
    x2 ^= x3;
    x4 ^= x2;
    x2 |= x0;
    x4 ^= x1;
    x2 ^= x1;
  }

  /** S-Box 0. */
  private void sbox0(int r0, int r1, int r2, int r3)
  {
    int r4 = r1 ^ r2;
    r3 ^= r0;
    r1 = r1 & r3 ^ r0;
    r0 = (r0 | r3) ^ r4;
    r4 ^= r3;
    r3 ^= r2;
    r2 = (r2 | r1) ^ r4;
    r4 = ~r4 | r1;
    r1 ^= r3 ^ r4;
    r3 |= r0;
    x0 = r1 ^ r3;
    x1 = r4 ^ r3;
    x2 = r2;
    x3 = r0;
  }

  /** S-Box 1. */
  private void sbox1(int r0, int r1, int r2, int r3)
  {
    r0 = ~r0;
    int r4 = r0;
    r2 = ~r2;
    r0 &= r1;
    r2 ^= r0;
    r0 |= r3;
    r3 ^= r2;
    r1 ^= r0;
    r0 ^= r4;
    r4 |= r1;
    r1 ^= r3;
    r2 = (r2 | r0) & r4;
    r0 ^= r1;
    x0 = r2;
    x1 = r0 & r2 ^ r4;
    x2 = r3;
    x3 = r1 & r2 ^ r0;
  }

  /** S-Box 2. */
  private void sbox2(int r0, int r1, int r2, int r3)
  {
    int r4 = r0;
    r0 = r0 & r2 ^ r3;
    r2 = r2 ^ r1 ^ r0;
    r3 = (r3 | r4) ^ r1;
    r4 ^= r2;
    r1 = r3;
    r3 = (r3 | r4) ^ r0;
    r0 &= r1;
    r4 ^= r0;
    x0 = r2;
    x1 = r3;
    x2 = r1 ^ r3 ^ r4;
    x3 = ~r4;
  }

  /** S-Box 3. */
  private void sbox3(int r0, int r1, int r2, int r3)
  {
    int r4 = r0;
    r0 |= r3;
    r3 ^= r1;
    r1 &= r4;
    r4 = r4 ^ r2 | r1;
    r2 ^= r3;
    r3 = r3 & r0 ^ r4;
    r0 ^= r1;
    r4 = r4 & r0 ^ r2;
    r1 = (r1 ^ r3 | r0) ^ r2;
    r0 ^= r3;
    x0 = (r1 | r3) ^ r0;
    x1 = r1;
    x2 = r3;
    x3 = r4;
  }

  /** S-Box 4. */
  private void sbox4(int r0, int r1, int r2, int r3)
  {
    r1 ^= r3;
    int r4 = r1;
    r3 = ~r3;
    r2 ^= r3;
    r3 ^= r0;
    r1 = r1 & r3 ^ r2;
    r4 ^= r3;
    r0 ^= r4;
    r2 = r2 & r4 ^ r0;
    r0 &= r1;
    r3 ^= r0;
    r4 = (r4 | r1) ^ r0;
    x0 = r1;
    x1 = r4 ^ (r2 & r3);
    x2 = ~((r0 | r3) ^ r2);
    x3 = r3;
  }

  /** S-Box 5. */
  private void sbox5(int r0, int r1, int r2, int r3)
  {
    r0 ^= r1;
    r1 ^= r3;
    int r4 = r1;
    r3 = ~r3;
    r1 &= r0;
    r2 ^= r3;
    r1 ^= r2;
    r2 |= r4;
    r4 ^= r3;
    r3 = r3 & r1 ^ r0;
    r4 = r4 ^ r1 ^ r2;
    x0 = r1;
    x1 = r3;
    x2 = r0 & r3 ^ r4;
    x3 = ~(r2 ^ r0) ^ (r4 | r3);
  }

  /** S-Box 6. */
  private void sbox6(int r0, int r1, int r2, int r3)
  {
    int r4 = r3;
    r2 = ~r2;
    r3 = r3 & r0 ^ r2;
    r0 ^= r4;
    r2 = (r2 | r4) ^ r0;
    r1 ^= r3;
    r0 |= r1;
    r2 ^= r1;
    r4 ^= r0;
    r0 = (r0 | r3) ^ r2;
    r4 = r4 ^ r3 ^ r0;
    x0 = r0;
    x1 = r1;
    x2 = r4;
    x3 = r2 & r4 ^ ~r3;
  }

  /** S-Box 7. */
  private void sbox7(int r0, int r1, int r2, int r3)
  {
    int r4 = r1;
    r1 = (r1 | r2) ^ r3;
    r4 ^= r2;
    r2 ^= r1;
    r3 = (r3 | r4) & r0;
    r4 ^= r2;
    r3 ^= r1;
    r1 = (r1 | r4) ^ r0;
    r0 = (r0 | r4) ^ r2;
    r1 ^= r4;
    r2 ^= r1;
    x0 = r4 ^ (~r2 | r0);
    x1 = r3;
    x2 = r1 & r0 ^ r4;
    x3 = r0;
  }

  private class Key
      implements Cloneable
  {
    int k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15,
        k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29,
        k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43,
        k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57,
        k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k70, k71,
        k72, k73, k74, k75, k76, k77, k78, k79, k80, k81, k82, k83, k84, k85,
        k86, k87, k88, k89, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99,
        k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111,
        k112, k113, k114, k115, k116, k117, k118, k119, k120, k121, k122, k123,
        k124, k125, k126, k127, k128, k129, k130, k131;

    /** Trivial 0-arguments constructor. */
    Key()
    {
    }

    /** Cloning constructor. */
    private Key(Key that)
    {
      this.k0 = that.k0;
      this.k1 = that.k1;
      this.k2 = that.k2;
      this.k3 = that.k3;
      this.k4 = that.k4;
      this.k5 = that.k5;
      this.k6 = that.k6;
      this.k7 = that.k7;
      this.k8 = that.k8;
      this.k9 = that.k9;
      this.k10 = that.k10;
      this.k11 = that.k11;
      this.k12 = that.k12;
      this.k13 = that.k13;
      this.k14 = that.k14;
      this.k15 = that.k15;
      this.k16 = that.k16;
      this.k17 = that.k17;
      this.k18 = that.k18;
      this.k19 = that.k19;
      this.k20 = that.k20;
      this.k21 = that.k21;
      this.k22 = that.k22;
      this.k23 = that.k23;
      this.k24 = that.k24;
      this.k25 = that.k25;
      this.k26 = that.k26;
      this.k27 = that.k27;
      this.k28 = that.k28;
      this.k29 = that.k29;
      this.k30 = that.k30;
      this.k31 = that.k31;
      this.k32 = that.k32;
      this.k33 = that.k33;
      this.k34 = that.k34;
      this.k35 = that.k35;
      this.k36 = that.k36;
      this.k37 = that.k37;
      this.k38 = that.k38;
      this.k39 = that.k39;
      this.k40 = that.k40;
      this.k41 = that.k41;
      this.k42 = that.k42;
      this.k43 = that.k43;
      this.k44 = that.k44;
      this.k45 = that.k45;
      this.k46 = that.k46;
      this.k47 = that.k47;
      this.k48 = that.k48;
      this.k49 = that.k49;
      this.k50 = that.k50;
      this.k51 = that.k51;
      this.k52 = that.k52;
      this.k53 = that.k53;
      this.k54 = that.k54;
      this.k55 = that.k55;
      this.k56 = that.k56;
      this.k57 = that.k57;
      this.k58 = that.k58;
      this.k59 = that.k59;
      this.k60 = that.k60;
      this.k61 = that.k61;
      this.k62 = that.k62;
      this.k63 = that.k63;
      this.k64 = that.k64;
      this.k65 = that.k65;
      this.k66 = that.k66;
      this.k67 = that.k67;
      this.k68 = that.k68;
      this.k69 = that.k69;
      this.k70 = that.k70;
      this.k71 = that.k71;
      this.k72 = that.k72;
      this.k73 = that.k73;
      this.k74 = that.k74;
      this.k75 = that.k75;
      this.k76 = that.k76;
      this.k77 = that.k77;
      this.k78 = that.k78;
      this.k79 = that.k79;
      this.k80 = that.k80;
      this.k81 = that.k81;
      this.k82 = that.k82;
      this.k83 = that.k83;
      this.k84 = that.k84;
      this.k85 = that.k85;
      this.k86 = that.k86;
      this.k87 = that.k87;
      this.k88 = that.k88;
      this.k89 = that.k89;
      this.k90 = that.k90;
      this.k91 = that.k91;
      this.k92 = that.k92;
      this.k93 = that.k93;
      this.k94 = that.k94;
      this.k95 = that.k95;
      this.k96 = that.k96;
      this.k97 = that.k97;
      this.k98 = that.k98;
      this.k99 = that.k99;
      this.k100 = that.k100;
      this.k101 = that.k101;
      this.k102 = that.k102;
      this.k103 = that.k103;
      this.k104 = that.k104;
      this.k105 = that.k105;
      this.k106 = that.k106;
      this.k107 = that.k107;
      this.k108 = that.k108;
      this.k109 = that.k109;
      this.k110 = that.k110;
      this.k111 = that.k111;
      this.k112 = that.k112;
      this.k113 = that.k113;
      this.k114 = that.k114;
      this.k115 = that.k115;
      this.k116 = that.k116;
      this.k117 = that.k117;
      this.k118 = that.k118;
      this.k119 = that.k119;
      this.k120 = that.k120;
      this.k121 = that.k121;
      this.k122 = that.k122;
      this.k123 = that.k123;
      this.k124 = that.k124;
      this.k125 = that.k125;
      this.k126 = that.k126;
      this.k127 = that.k127;
      this.k128 = that.k128;
      this.k129 = that.k129;
      this.k130 = that.k130;
      this.k131 = that.k131;
    }

    public Object clone()
    {
      return new Key(this);
    }
  }
}
