| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package com.sun.crypto.provider;  | 
 | 
 | 
 | 
import java.security.InvalidKeyException;  | 
 | 
 | 
 | 
/**  | 
 | 
 * This is the internal DES class responsible for encryption and  | 
 | 
 * decryption of a byte array of size <code>DES_BLOCK_SIZE</code>.  | 
 | 
 *  | 
 | 
 * @author Gigi Ankeny  | 
 | 
 * @author Jan Luehe  | 
 | 
 *  | 
 | 
 *  | 
 | 
 * @see DESConstants  | 
 | 
 * @see DESCipher  | 
 | 
 */  | 
 | 
 | 
 | 
class DESCrypt extends SymmetricCipher implements DESConstants { | 
 | 
    private static final int s0p[] = { | 
 | 
        0x00410100, 0x00010000, 0x40400000, 0x40410100, 0x00400000,  | 
 | 
        0x40010100, 0x40010000, 0x40400000, 0x40010100, 0x00410100,  | 
 | 
        0x00410000, 0x40000100, 0x40400100, 0x00400000, 0x00000000,  | 
 | 
        0x40010000, 0x00010000, 0x40000000, 0x00400100, 0x00010100,  | 
 | 
        0x40410100, 0x00410000, 0x40000100, 0x00400100, 0x40000000,  | 
 | 
        0x00000100, 0x00010100, 0x40410000, 0x00000100, 0x40400100,  | 
 | 
        0x40410000, 0x00000000, 0x00000000, 0x40410100, 0x00400100,  | 
 | 
        0x40010000, 0x00410100, 0x00010000, 0x40000100, 0x00400100,  | 
 | 
        0x40410000, 0x00000100, 0x00010100, 0x40400000, 0x40010100,  | 
 | 
        0x40000000, 0x40400000, 0x00410000, 0x40410100, 0x00010100,  | 
 | 
        0x00410000, 0x40400100, 0x00400000, 0x40000100, 0x40010000,  | 
 | 
        0x00000000, 0x00010000, 0x00400000, 0x40400100, 0x00410100,  | 
 | 
        0x40000000, 0x40410000, 0x00000100, 0x40010100,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s1p[] = { | 
 | 
        0x08021002, 0x00000000, 0x00021000, 0x08020000, 0x08000002,  | 
 | 
        0x00001002, 0x08001000, 0x00021000, 0x00001000, 0x08020002,  | 
 | 
        0x00000002, 0x08001000, 0x00020002, 0x08021000, 0x08020000,  | 
 | 
        0x00000002, 0x00020000, 0x08001002, 0x08020002, 0x00001000,  | 
 | 
        0x00021002, 0x08000000, 0x00000000, 0x00020002, 0x08001002,  | 
 | 
        0x00021002, 0x08021000, 0x08000002, 0x08000000, 0x00020000,  | 
 | 
        0x00001002, 0x08021002, 0x00020002, 0x08021000, 0x08001000,  | 
 | 
        0x00021002, 0x08021002, 0x00020002, 0x08000002, 0x00000000,  | 
 | 
        0x08000000, 0x00001002, 0x00020000, 0x08020002, 0x00001000,  | 
 | 
        0x08000000, 0x00021002, 0x08001002, 0x08021000, 0x00001000,  | 
 | 
        0x00000000, 0x08000002, 0x00000002, 0x08021002, 0x00021000,  | 
 | 
        0x08020000, 0x08020002, 0x00020000, 0x00001002, 0x08001000,  | 
 | 
        0x08001002, 0x00000002, 0x08020000, 0x00021000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s2p[] = { | 
 | 
        0x20800000, 0x00808020, 0x00000020, 0x20800020, 0x20008000,  | 
 | 
        0x00800000, 0x20800020, 0x00008020, 0x00800020, 0x00008000,  | 
 | 
        0x00808000, 0x20000000, 0x20808020, 0x20000020, 0x20000000,  | 
 | 
        0x20808000, 0x00000000, 0x20008000, 0x00808020, 0x00000020,  | 
 | 
        0x20000020, 0x20808020, 0x00008000, 0x20800000, 0x20808000,  | 
 | 
        0x00800020, 0x20008020, 0x00808000, 0x00008020, 0x00000000,  | 
 | 
        0x00800000, 0x20008020, 0x00808020, 0x00000020, 0x20000000,  | 
 | 
        0x00008000, 0x20000020, 0x20008000, 0x00808000, 0x20800020,  | 
 | 
        0x00000000, 0x00808020, 0x00008020, 0x20808000, 0x20008000,  | 
 | 
        0x00800000, 0x20808020, 0x20000000, 0x20008020, 0x20800000,  | 
 | 
        0x00800000, 0x20808020, 0x00008000, 0x00800020, 0x20800020,  | 
 | 
        0x00008020, 0x00800020, 0x00000000, 0x20808000, 0x20000020,  | 
 | 
        0x20800000, 0x20008020, 0x00000020, 0x00808000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s3p[] = { | 
 | 
        0x00080201, 0x02000200, 0x00000001, 0x02080201, 0x00000000,  | 
 | 
        0x02080000, 0x02000201, 0x00080001, 0x02080200, 0x02000001,  | 
 | 
        0x02000000, 0x00000201, 0x02000001, 0x00080201, 0x00080000,  | 
 | 
        0x02000000, 0x02080001, 0x00080200, 0x00000200, 0x00000001,  | 
 | 
        0x00080200, 0x02000201, 0x02080000, 0x00000200, 0x00000201,  | 
 | 
        0x00000000, 0x00080001, 0x02080200, 0x02000200, 0x02080001,  | 
 | 
        0x02080201, 0x00080000, 0x02080001, 0x00000201, 0x00080000,  | 
 | 
        0x02000001, 0x00080200, 0x02000200, 0x00000001, 0x02080000,  | 
 | 
        0x02000201, 0x00000000, 0x00000200, 0x00080001, 0x00000000,  | 
 | 
        0x02080001, 0x02080200, 0x00000200, 0x02000000, 0x02080201,  | 
 | 
        0x00080201, 0x00080000, 0x02080201, 0x00000001, 0x02000200,  | 
 | 
        0x00080201, 0x00080001, 0x00080200, 0x02080000, 0x02000201,  | 
 | 
        0x00000201, 0x02000000, 0x02000001, 0x02080200,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s4p[] = { | 
 | 
        0x01000000, 0x00002000, 0x00000080, 0x01002084, 0x01002004,  | 
 | 
        0x01000080, 0x00002084, 0x01002000, 0x00002000, 0x00000004,  | 
 | 
        0x01000004, 0x00002080, 0x01000084, 0x01002004, 0x01002080,  | 
 | 
        0x00000000, 0x00002080, 0x01000000, 0x00002004, 0x00000084,  | 
 | 
        0x01000080, 0x00002084, 0x00000000, 0x01000004, 0x00000004,  | 
 | 
        0x01000084, 0x01002084, 0x00002004, 0x01002000, 0x00000080,  | 
 | 
        0x00000084, 0x01002080, 0x01002080, 0x01000084, 0x00002004,  | 
 | 
        0x01002000, 0x00002000, 0x00000004, 0x01000004, 0x01000080,  | 
 | 
        0x01000000, 0x00002080, 0x01002084, 0x00000000, 0x00002084,  | 
 | 
        0x01000000, 0x00000080, 0x00002004, 0x01000084, 0x00000080,  | 
 | 
        0x00000000, 0x01002084, 0x01002004, 0x01002080, 0x00000084,  | 
 | 
        0x00002000, 0x00002080, 0x01002004, 0x01000080, 0x00000084,  | 
 | 
        0x00000004, 0x00002084, 0x01002000, 0x01000004,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s5p[] = { | 
 | 
        0x10000008, 0x00040008, 0x00000000, 0x10040400, 0x00040008,  | 
 | 
        0x00000400, 0x10000408, 0x00040000, 0x00000408, 0x10040408,  | 
 | 
        0x00040400, 0x10000000, 0x10000400, 0x10000008, 0x10040000,  | 
 | 
        0x00040408, 0x00040000, 0x10000408, 0x10040008, 0x00000000,  | 
 | 
        0x00000400, 0x00000008, 0x10040400, 0x10040008, 0x10040408,  | 
 | 
        0x10040000, 0x10000000, 0x00000408, 0x00000008, 0x00040400,  | 
 | 
        0x00040408, 0x10000400, 0x00000408, 0x10000000, 0x10000400,  | 
 | 
        0x00040408, 0x10040400, 0x00040008, 0x00000000, 0x10000400,  | 
 | 
        0x10000000, 0x00000400, 0x10040008, 0x00040000, 0x00040008,  | 
 | 
        0x10040408, 0x00040400, 0x00000008, 0x10040408, 0x00040400,  | 
 | 
        0x00040000, 0x10000408, 0x10000008, 0x10040000, 0x00040408,  | 
 | 
        0x00000000, 0x00000400, 0x10000008, 0x10000408, 0x10040400,  | 
 | 
        0x10040000, 0x00000408, 0x00000008, 0x10040008,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s6p[] = { | 
 | 
        0x00000800, 0x00000040, 0x00200040, 0x80200000, 0x80200840,  | 
 | 
        0x80000800, 0x00000840, 0x00000000, 0x00200000, 0x80200040,  | 
 | 
        0x80000040, 0x00200800, 0x80000000, 0x00200840, 0x00200800,  | 
 | 
        0x80000040, 0x80200040, 0x00000800, 0x80000800, 0x80200840,  | 
 | 
        0x00000000, 0x00200040, 0x80200000, 0x00000840, 0x80200800,  | 
 | 
        0x80000840, 0x00200840, 0x80000000, 0x80000840, 0x80200800,  | 
 | 
        0x00000040, 0x00200000, 0x80000840, 0x00200800, 0x80200800,  | 
 | 
        0x80000040, 0x00000800, 0x00000040, 0x00200000, 0x80200800,  | 
 | 
        0x80200040, 0x80000840, 0x00000840, 0x00000000, 0x00000040,  | 
 | 
        0x80200000, 0x80000000, 0x00200040, 0x00000000, 0x80200040,  | 
 | 
        0x00200040, 0x00000840, 0x80000040, 0x00000800, 0x80200840,  | 
 | 
        0x00200000, 0x00200840, 0x80000000, 0x80000800, 0x80200840,  | 
 | 
        0x80200000, 0x00200840, 0x00200800, 0x80000800,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int s7p[] = { | 
 | 
        0x04100010, 0x04104000, 0x00004010, 0x00000000, 0x04004000,  | 
 | 
        0x00100010, 0x04100000, 0x04104010, 0x00000010, 0x04000000,  | 
 | 
        0x00104000, 0x00004010, 0x00104010, 0x04004010, 0x04000010,  | 
 | 
        0x04100000, 0x00004000, 0x00104010, 0x00100010, 0x04004000,  | 
 | 
        0x04104010, 0x04000010, 0x00000000, 0x00104000, 0x04000000,  | 
 | 
        0x00100000, 0x04004010, 0x04100010, 0x00100000, 0x00004000,  | 
 | 
        0x04104000, 0x00000010, 0x00100000, 0x00004000, 0x04000010,  | 
 | 
        0x04104010, 0x00004010, 0x04000000, 0x00000000, 0x00104000,  | 
 | 
        0x04100010, 0x04004010, 0x04004000, 0x00100010, 0x04104000,  | 
 | 
        0x00000010, 0x00100010, 0x04004000, 0x04104010, 0x00100000,  | 
 | 
        0x04100000, 0x04000010, 0x00104000, 0x00004010, 0x04004010,  | 
 | 
        0x04100000, 0x00000010, 0x04104000, 0x00104010, 0x00000000,  | 
 | 
        0x04000000, 0x04100010, 0x00004000, 0x00104010,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRight0[] = { | 
 | 
        0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00004000,  | 
 | 
        0x40004000, 0x00404000, 0x40404000, 0x00000040, 0x40000040,  | 
 | 
        0x00400040, 0x40400040, 0x00004040, 0x40004040, 0x00404040,  | 
 | 
        0x40404040,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeft1[] = { | 
 | 
        0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00004000,  | 
 | 
        0x40004000, 0x00404000, 0x40404000, 0x00000040, 0x40000040,  | 
 | 
        0x00400040, 0x40400040, 0x00004040, 0x40004040, 0x00404040,  | 
 | 
        0x40404040,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRight2[] = { | 
 | 
        0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00001000,  | 
 | 
        0x10001000, 0x00101000, 0x10101000, 0x00000010, 0x10000010,  | 
 | 
        0x00100010, 0x10100010, 0x00001010, 0x10001010, 0x00101010,  | 
 | 
        0x10101010,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeft3[] = { | 
 | 
        0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00001000,  | 
 | 
        0x10001000, 0x00101000, 0x10101000, 0x00000010, 0x10000010,  | 
 | 
        0x00100010, 0x10100010, 0x00001010, 0x10001010, 0x00101010,  | 
 | 
        0x10101010,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRight4[] = { | 
 | 
        0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400,  | 
 | 
        0x04000400, 0x00040400, 0x04040400, 0x00000004, 0x04000004,  | 
 | 
        0x00040004, 0x04040004, 0x00000404, 0x04000404, 0x00040404,  | 
 | 
        0x04040404,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeft5[] = { | 
 | 
        0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400,  | 
 | 
        0x04000400, 0x00040400, 0x04040400, 0x00000004, 0x04000004,  | 
 | 
        0x00040004, 0x04040004, 0x00000404, 0x04000404, 0x00040404,  | 
 | 
        0x04040404,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRight6[] = { | 
 | 
        0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100,  | 
 | 
        0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001,  | 
 | 
        0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101,  | 
 | 
        0x01010101,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeft7[] = { | 
 | 
        0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100,  | 
 | 
        0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001,  | 
 | 
        0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101,  | 
 | 
        0x01010101,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRight8[] = { | 
 | 
        0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00008000,  | 
 | 
        0x80008000, 0x00808000, 0x80808000, 0x00000080, 0x80000080,  | 
 | 
        0x00800080, 0x80800080, 0x00008080, 0x80008080, 0x00808080,  | 
 | 
        0x80808080,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeft9[] = { | 
 | 
        0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00008000,  | 
 | 
        0x80008000, 0x00808000, 0x80808000, 0x00000080, 0x80000080,  | 
 | 
        0x00800080, 0x80800080, 0x00008080, 0x80008080, 0x00808080,  | 
 | 
        0x80808080,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRightA[] = { | 
 | 
        0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00002000,  | 
 | 
        0x20002000, 0x00202000, 0x20202000, 0x00000020, 0x20000020,  | 
 | 
        0x00200020, 0x20200020, 0x00002020, 0x20002020, 0x00202020,  | 
 | 
        0x20202020,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeftB[] = { | 
 | 
        0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00002000,  | 
 | 
        0x20002000, 0x00202000, 0x20202000, 0x00000020, 0x20000020,  | 
 | 
        0x00200020, 0x20200020, 0x00002020, 0x20002020, 0x00202020,  | 
 | 
        0x20202020,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRightC[] = { | 
 | 
        0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00000800,  | 
 | 
        0x08000800, 0x00080800, 0x08080800, 0x00000008, 0x08000008,  | 
 | 
        0x00080008, 0x08080008, 0x00000808, 0x08000808, 0x00080808,  | 
 | 
        0x08080808,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeftD[] = { | 
 | 
        0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00000800,  | 
 | 
        0x08000800, 0x00080800, 0x08080800, 0x00000008, 0x08000008,  | 
 | 
        0x00080008, 0x08080008, 0x00000808, 0x08000808, 0x00080808,  | 
 | 
        0x08080808,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permRightE[] = { | 
 | 
        0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200,  | 
 | 
        0x02000200, 0x00020200, 0x02020200, 0x00000002, 0x02000002,  | 
 | 
        0x00020002, 0x02020002, 0x00000202, 0x02000202, 0x00020202,  | 
 | 
        0x02020202,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int permLeftF[] = { | 
 | 
        0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200,  | 
 | 
        0x02000200, 0x00020200, 0x02020200, 0x00000002, 0x02000002,  | 
 | 
        0x00020002, 0x02020002, 0x00000202, 0x02000202, 0x00020202,  | 
 | 
        0x02020202,  | 
 | 
    };  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    private static final int initPermLeft0[] = { | 
 | 
       0x00000000, 0x00008000, 0x00000000, 0x00008000, 0x00000080,  | 
 | 
       0x00008080, 0x00000080, 0x00008080, 0x00000000, 0x00008000,  | 
 | 
       0x00000000, 0x00008000, 0x00000080, 0x00008080, 0x00000080,  | 
 | 
       0x00008080,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight0[] = { | 
 | 
       0x00000000, 0x00000000, 0x00008000, 0x00008000, 0x00000000,  | 
 | 
       0x00000000, 0x00008000, 0x00008000, 0x00000080, 0x00000080,  | 
 | 
       0x00008080, 0x00008080, 0x00000080, 0x00000080, 0x00008080,  | 
 | 
       0x00008080,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft1[] = { | 
 | 
       0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00800000,  | 
 | 
       0x80800000, 0x00800000, 0x80800000, 0x00000000, 0x80000000,  | 
 | 
       0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00800000,  | 
 | 
       0x80800000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight1[] = { | 
 | 
       0x00000000, 0x00000000, 0x80000000, 0x80000000, 0x00000000,  | 
 | 
       0x00000000, 0x80000000, 0x80000000, 0x00800000, 0x00800000,  | 
 | 
       0x80800000, 0x80800000, 0x00800000, 0x00800000, 0x80800000,  | 
 | 
       0x80800000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft2[] = { | 
 | 
       0x00000000, 0x00004000, 0x00000000, 0x00004000, 0x00000040,  | 
 | 
       0x00004040, 0x00000040, 0x00004040, 0x00000000, 0x00004000,  | 
 | 
       0x00000000, 0x00004000, 0x00000040, 0x00004040, 0x00000040,  | 
 | 
       0x00004040,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight2[] = { | 
 | 
       0x00000000, 0x00000000, 0x00004000, 0x00004000, 0x00000000,  | 
 | 
       0x00000000, 0x00004000, 0x00004000, 0x00000040, 0x00000040,  | 
 | 
       0x00004040, 0x00004040, 0x00000040, 0x00000040, 0x00004040,  | 
 | 
       0x00004040,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft3[] = { | 
 | 
       0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00400000,  | 
 | 
       0x40400000, 0x00400000, 0x40400000, 0x00000000, 0x40000000,  | 
 | 
       0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00400000,  | 
 | 
       0x40400000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight3[] = { | 
 | 
       0x00000000, 0x00000000, 0x40000000, 0x40000000, 0x00000000,  | 
 | 
       0x00000000, 0x40000000, 0x40000000, 0x00400000, 0x00400000,  | 
 | 
       0x40400000, 0x40400000, 0x00400000, 0x00400000, 0x40400000,  | 
 | 
       0x40400000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft4[] = { | 
 | 
       0x00000000, 0x00002000, 0x00000000, 0x00002000, 0x00000020,  | 
 | 
       0x00002020, 0x00000020, 0x00002020, 0x00000000, 0x00002000,  | 
 | 
       0x00000000, 0x00002000, 0x00000020, 0x00002020, 0x00000020,  | 
 | 
       0x00002020,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight4[] = { | 
 | 
       0x00000000, 0x00000000, 0x00002000, 0x00002000, 0x00000000,  | 
 | 
       0x00000000, 0x00002000, 0x00002000, 0x00000020, 0x00000020,  | 
 | 
       0x00002020, 0x00002020, 0x00000020, 0x00000020, 0x00002020,  | 
 | 
       0x00002020,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft5[] = { | 
 | 
       0x00000000, 0x20000000, 0x00000000, 0x20000000, 0x00200000,  | 
 | 
       0x20200000, 0x00200000, 0x20200000, 0x00000000, 0x20000000,  | 
 | 
       0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00200000,  | 
 | 
       0x20200000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight5[] = { | 
 | 
       0x00000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,  | 
 | 
       0x00000000, 0x20000000, 0x20000000, 0x00200000, 0x00200000,  | 
 | 
       0x20200000, 0x20200000, 0x00200000, 0x00200000, 0x20200000,  | 
 | 
       0x20200000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft6[] = { | 
 | 
       0x00000000, 0x00001000, 0x00000000, 0x00001000, 0x00000010,  | 
 | 
       0x00001010, 0x00000010, 0x00001010, 0x00000000, 0x00001000,  | 
 | 
       0x00000000, 0x00001000, 0x00000010, 0x00001010, 0x00000010,  | 
 | 
       0x00001010,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight6[] = { | 
 | 
       0x00000000, 0x00000000, 0x00001000, 0x00001000, 0x00000000,  | 
 | 
       0x00000000, 0x00001000, 0x00001000, 0x00000010, 0x00000010,  | 
 | 
       0x00001010, 0x00001010, 0x00000010, 0x00000010, 0x00001010,  | 
 | 
       0x00001010,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft7[] = { | 
 | 
       0x00000000, 0x10000000, 0x00000000, 0x10000000, 0x00100000,  | 
 | 
       0x10100000, 0x00100000, 0x10100000, 0x00000000, 0x10000000,  | 
 | 
       0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00100000,  | 
 | 
       0x10100000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight7[] = { | 
 | 
       0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x00000000,  | 
 | 
       0x00000000, 0x10000000, 0x10000000, 0x00100000, 0x00100000,  | 
 | 
       0x10100000, 0x10100000, 0x00100000, 0x00100000, 0x10100000,  | 
 | 
       0x10100000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft8[] = { | 
 | 
       0x00000000, 0x00000800, 0x00000000, 0x00000800, 0x00000008,  | 
 | 
       0x00000808, 0x00000008, 0x00000808, 0x00000000, 0x00000800,  | 
 | 
       0x00000000, 0x00000800, 0x00000008, 0x00000808, 0x00000008,  | 
 | 
       0x00000808,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight8[] = { | 
 | 
       0x00000000, 0x00000000, 0x00000800, 0x00000800, 0x00000000,  | 
 | 
       0x00000000, 0x00000800, 0x00000800, 0x00000008, 0x00000008,  | 
 | 
       0x00000808, 0x00000808, 0x00000008, 0x00000008, 0x00000808,  | 
 | 
       0x00000808,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeft9[] = { | 
 | 
       0x00000000, 0x08000000, 0x00000000, 0x08000000, 0x00080000,  | 
 | 
       0x08080000, 0x00080000, 0x08080000, 0x00000000, 0x08000000,  | 
 | 
       0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00080000,  | 
 | 
       0x08080000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRight9[] = { | 
 | 
       0x00000000, 0x00000000, 0x08000000, 0x08000000, 0x00000000,  | 
 | 
       0x00000000, 0x08000000, 0x08000000, 0x00080000, 0x00080000,  | 
 | 
       0x08080000, 0x08080000, 0x00080000, 0x00080000, 0x08080000,  | 
 | 
       0x08080000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeftA[] = { | 
 | 
       0x00000000, 0x00000400, 0x00000000, 0x00000400, 0x00000004,  | 
 | 
       0x00000404, 0x00000004, 0x00000404, 0x00000000, 0x00000400,  | 
 | 
       0x00000000, 0x00000400, 0x00000004, 0x00000404, 0x00000004,  | 
 | 
       0x00000404,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRightA[] = { | 
 | 
       0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000000,  | 
 | 
       0x00000000, 0x00000400, 0x00000400, 0x00000004, 0x00000004,  | 
 | 
       0x00000404, 0x00000404, 0x00000004, 0x00000004, 0x00000404,  | 
 | 
       0x00000404,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeftB[] = { | 
 | 
       0x00000000, 0x04000000, 0x00000000, 0x04000000, 0x00040000,  | 
 | 
       0x04040000, 0x00040000, 0x04040000, 0x00000000, 0x04000000,  | 
 | 
       0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00040000,  | 
 | 
       0x04040000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRightB[] = { | 
 | 
       0x00000000, 0x00000000, 0x04000000, 0x04000000, 0x00000000,  | 
 | 
       0x00000000, 0x04000000, 0x04000000, 0x00040000, 0x00040000,  | 
 | 
       0x04040000, 0x04040000, 0x00040000, 0x00040000, 0x04040000,  | 
 | 
       0x04040000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeftC[] = { | 
 | 
       0x00000000, 0x00000200, 0x00000000, 0x00000200, 0x00000002,  | 
 | 
       0x00000202, 0x00000002, 0x00000202, 0x00000000, 0x00000200,  | 
 | 
       0x00000000, 0x00000200, 0x00000002, 0x00000202, 0x00000002,  | 
 | 
       0x00000202,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRightC[] = { | 
 | 
       0x00000000, 0x00000000, 0x00000200, 0x00000200, 0x00000000,  | 
 | 
       0x00000000, 0x00000200, 0x00000200, 0x00000002, 0x00000002,  | 
 | 
       0x00000202, 0x00000202, 0x00000002, 0x00000002, 0x00000202,  | 
 | 
       0x00000202,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeftD[] = { | 
 | 
       0x00000000, 0x02000000, 0x00000000, 0x02000000, 0x00020000,  | 
 | 
       0x02020000, 0x00020000, 0x02020000, 0x00000000, 0x02000000,  | 
 | 
       0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00020000,  | 
 | 
       0x02020000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRightD[] = { | 
 | 
       0x00000000, 0x00000000, 0x02000000, 0x02000000, 0x00000000,  | 
 | 
       0x00000000, 0x02000000, 0x02000000, 0x00020000, 0x00020000,  | 
 | 
       0x02020000, 0x02020000, 0x00020000, 0x00020000, 0x02020000,  | 
 | 
       0x02020000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeftE[] = { | 
 | 
       0x00000000, 0x00000100, 0x00000000, 0x00000100, 0x00000001,  | 
 | 
       0x00000101, 0x00000001, 0x00000101, 0x00000000, 0x00000100,  | 
 | 
       0x00000000, 0x00000100, 0x00000001, 0x00000101, 0x00000001,  | 
 | 
       0x00000101,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRightE[] = { | 
 | 
       0x00000000, 0x00000000, 0x00000100, 0x00000100, 0x00000000,  | 
 | 
       0x00000000, 0x00000100, 0x00000100, 0x00000001, 0x00000001,  | 
 | 
       0x00000101, 0x00000101, 0x00000001, 0x00000001, 0x00000101,  | 
 | 
       0x00000101,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermLeftF[] = { | 
 | 
       0x00000000, 0x01000000, 0x00000000, 0x01000000, 0x00010000,  | 
 | 
       0x01010000, 0x00010000, 0x01010000, 0x00000000, 0x01000000,  | 
 | 
       0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00010000,  | 
 | 
       0x01010000,  | 
 | 
    };  | 
 | 
 | 
 | 
    private static final int initPermRightF[] = { | 
 | 
       0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x00000000,  | 
 | 
       0x00000000, 0x01000000, 0x01000000, 0x00010000, 0x00010000,  | 
 | 
       0x01010000, 0x01010000, 0x00010000, 0x00010000, 0x01010000,  | 
 | 
       0x01010000,  | 
 | 
    };  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    byte[] expandedKey = null;  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    boolean decrypting = false;  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    int getBlockSize() { | 
 | 
        return DES_BLOCK_SIZE;  | 
 | 
    }  | 
 | 
 | 
 | 
    void init(boolean decrypting, String algorithm, byte[] rawKey)  | 
 | 
            throws InvalidKeyException { | 
 | 
        this.decrypting = decrypting;  | 
 | 
        if (!algorithm.equalsIgnoreCase("DES")) { | 
 | 
            throw new InvalidKeyException("Wrong algorithm: DES required"); | 
 | 
        }  | 
 | 
        if (rawKey.length != DES_BLOCK_SIZE) { | 
 | 
            throw new InvalidKeyException("Wrong key size"); | 
 | 
        }  | 
 | 
        expandKey(rawKey);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    void encryptBlock(byte[] plain, int plainOffset,  | 
 | 
                 byte[] cipher, int cipherOffset)  | 
 | 
    { | 
 | 
        cipherBlock(plain, plainOffset, cipher, cipherOffset);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    void decryptBlock(byte[] cipher, int cipherOffset,  | 
 | 
                 byte[] plain, int plainOffset)  | 
 | 
    { | 
 | 
        cipherBlock(cipher, cipherOffset, plain, plainOffset);  | 
 | 
    }  | 
 | 
 | 
 | 
 | 
 | 
    void cipherBlock(byte[] in, int inOffset, byte[] out, int outOffset) { | 
 | 
        byte key[];  | 
 | 
        int temp;  | 
 | 
        int i, j;  | 
 | 
        int offset;  | 
 | 
        int left, right;  | 
 | 
 | 
 | 
        left = initialPermutationLeft(in, inOffset);  | 
 | 
        right = initialPermutationRight(in, inOffset);  | 
 | 
 | 
 | 
        key = expandedKey;  | 
 | 
 | 
 | 
        if (decrypting) { | 
 | 
            offset = 16 - DES_BLOCK_SIZE;  | 
 | 
            j = 128 - DES_BLOCK_SIZE;  | 
 | 
 | 
 | 
        } else { | 
 | 
            offset = 0 - DES_BLOCK_SIZE;  | 
 | 
            j = 0;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (i = 0; i < 16; i++) { | 
 | 
            // make the first and last bit adjacent  | 
 | 
              | 
 | 
            temp = (right << 1) | ((right >> 31) & 1);  | 
 | 
 | 
 | 
            // mangler function:  | 
 | 
            // every 6 bit is fed into the sbox, which  | 
 | 
              | 
 | 
            left ^= s0p[(temp & 0x3f) ^ key[j+0]]  | 
 | 
                ^ s1p[((temp >>  4) & 0x3f) ^ key[j+1]]  | 
 | 
                ^ s2p[((temp >>  8) & 0x3f) ^ key[j+2]]  | 
 | 
                ^ s3p[((temp >> 12) & 0x3f) ^ key[j+3]]  | 
 | 
                ^ s4p[((temp >> 16) & 0x3f) ^ key[j+4]]  | 
 | 
                ^ s5p[((temp >> 20) & 0x3f) ^ key[j+5]]  | 
 | 
                ^ s6p[((temp >> 24) & 0x3f) ^ key[j+6]];  | 
 | 
 | 
 | 
              | 
 | 
            temp = ((right & 1) << 5) | ((right >> 27) & 0x1f);  | 
 | 
            left ^= s7p[temp ^ key[j+7]];  | 
 | 
            temp = left;  | 
 | 
            left = right;  | 
 | 
            right = temp;  | 
 | 
            j -= offset;  | 
 | 
        }  | 
 | 
 | 
 | 
        temp = left;  | 
 | 
        left = right;  | 
 | 
        right = temp;  | 
 | 
        perm(left, right, out, outOffset);  | 
 | 
    }  | 
 | 
 | 
 | 
    private static void perm(int left, int right,  | 
 | 
                             byte out[], int offset) { | 
 | 
        int low, high, temp;  | 
 | 
 | 
 | 
        temp = left;  | 
 | 
        high = permRight0[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  = permLeft1[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        high |= permRight2[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeft3[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        high |= permRight4[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeft5[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        high |= permRight6[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeft7[temp & 0x0000000f];  | 
 | 
 | 
 | 
        temp = right;  | 
 | 
        high |= permRight8[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeft9[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        high |= permRightA[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeftB[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        high |= permRightC[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeftD[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        high |= permRightE[temp & 0x0000000f];  | 
 | 
        temp >>= 4;  | 
 | 
        low  |= permLeftF[temp & 0x0000000f];  | 
 | 
 | 
 | 
 | 
 | 
        out[offset + 0] = (byte)low;  | 
 | 
        out[offset + 1] = (byte)(low >> 8);  | 
 | 
        out[offset + 2] = (byte)(low >> 16);  | 
 | 
        out[offset + 3] = (byte)(low >> 24);  | 
 | 
        out[offset + 4] = (byte)high;  | 
 | 
        out[offset + 5] = (byte)(high >> 8);  | 
 | 
        out[offset + 6] = (byte)(high >> 16);  | 
 | 
        out[offset + 7] = (byte)(high >> 24);  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    private static int initialPermutationLeft(byte block[], int offset) { | 
 | 
        int l;  | 
 | 
 | 
 | 
        l  = initPermLeft1[block[offset] & 0xf];  | 
 | 
        l |= initPermLeft0[(block[offset] >> 4) & 0xf];  | 
 | 
        l |= initPermLeft3[block[offset + 1] & 0xf];  | 
 | 
        l |= initPermLeft2[(block[offset + 1] >> 4) & 0xf];  | 
 | 
        l |= initPermLeft5[block[offset + 2] & 0xf];  | 
 | 
        l |= initPermLeft4[(block[offset + 2] >> 4) & 0xf];  | 
 | 
        l |= initPermLeft7[block[offset + 3] & 0xf];  | 
 | 
        l |= initPermLeft6[(block[offset + 3] >> 4) & 0xf];  | 
 | 
        l |= initPermLeft9[block[offset + 4] & 0xf];  | 
 | 
        l |= initPermLeft8[(block[offset + 4] >> 4) & 0xf];  | 
 | 
        l |= initPermLeftB[block[offset + 5] & 0xf];  | 
 | 
        l |= initPermLeftA[(block[offset + 5] >> 4) & 0xf];  | 
 | 
        l |= initPermLeftD[block[offset + 6] & 0xf];  | 
 | 
        l |= initPermLeftC[(block[offset + 6] >> 4) & 0xf];  | 
 | 
        l |= initPermLeftF[block[offset + 7] & 0xf];  | 
 | 
        l |= initPermLeftE[(block[offset + 7] >> 4) & 0xf];  | 
 | 
        return l;  | 
 | 
    }  | 
 | 
 | 
 | 
    private static int initialPermutationRight(byte block[], int offset) { | 
 | 
        int l;  | 
 | 
 | 
 | 
        l  = initPermRight1[block[offset] & 0xf];  | 
 | 
        l |= initPermRight0[(block[offset] >> 4) & 0xf];  | 
 | 
        l |= initPermRight3[block[offset + 1] & 0xf];  | 
 | 
        l |= initPermRight2[(block[offset + 1] >> 4) & 0xf];  | 
 | 
        l |= initPermRight5[block[offset + 2] & 0xf];  | 
 | 
        l |= initPermRight4[(block[offset + 2] >> 4) & 0xf];  | 
 | 
        l |= initPermRight7[block[offset + 3] & 0xf];  | 
 | 
        l |= initPermRight6[(block[offset + 3] >> 4) & 0xf];  | 
 | 
        l |= initPermRight9[block[offset + 4] & 0xf];  | 
 | 
        l |= initPermRight8[(block[offset + 4] >> 4) & 0xf];  | 
 | 
        l |= initPermRightB[block[offset + 5] & 0xf];  | 
 | 
        l |= initPermRightA[(block[offset + 5] >> 4) & 0xf];  | 
 | 
        l |= initPermRightD[block[offset + 6] & 0xf];  | 
 | 
        l |= initPermRightC[(block[offset + 6] >> 4) & 0xf];  | 
 | 
        l |= initPermRightF[block[offset + 7] & 0xf];  | 
 | 
        l |= initPermRightE[(block[offset + 7] >> 4) & 0xf];  | 
 | 
        return l;  | 
 | 
    }  | 
 | 
 | 
 | 
    void expandKey(byte key[]) { | 
 | 
        int octet;  | 
 | 
        byte ek[] = new byte[128];  | 
 | 
 | 
 | 
        octet = key[0];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  3] |=  2; ek[  9] |=  8; ek[ 18] |=  8;  | 
 | 
            ek[ 27] |= 32; ek[ 33] |=  2; ek[ 42] |= 16;  | 
 | 
            ek[ 48] |=  8; ek[ 65] |= 16; ek[ 74] |=  2;  | 
 | 
            ek[ 80] |=  2; ek[ 89] |=  4; ek[ 99] |= 16;  | 
 | 
            ek[104] |=  4; ek[122] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  1] |=  4; ek[  8] |=  1; ek[ 18] |=  4;  | 
 | 
            ek[ 25] |= 32; ek[ 34] |= 32; ek[ 41] |=  8;  | 
 | 
            ek[ 50] |=  8; ek[ 59] |= 32; ek[ 64] |= 16;  | 
 | 
            ek[ 75] |=  4; ek[ 90] |=  1; ek[ 97] |= 16;  | 
 | 
            ek[106] |=  2; ek[112] |=  2; ek[123] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  2] |=  1; ek[ 19] |=  8; ek[ 35] |=  1;  | 
 | 
            ek[ 40] |=  1; ek[ 50] |=  4; ek[ 57] |= 32;  | 
 | 
            ek[ 75] |=  2; ek[ 80] |= 32; ek[ 89] |=  1;  | 
 | 
            ek[ 96] |= 16; ek[107] |=  4; ek[120] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  4] |= 32; ek[ 20] |=  2; ek[ 31] |=  4;  | 
 | 
            ek[ 37] |= 32; ek[ 47] |=  1; ek[ 54] |=  1;  | 
 | 
            ek[ 63] |=  2; ek[ 68] |=  1; ek[ 78] |=  4;  | 
 | 
            ek[ 84] |=  8; ek[101] |= 16; ek[108] |=  4;  | 
 | 
            ek[119] |= 16; ek[126] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  5] |=  4; ek[ 15] |=  4; ek[ 21] |= 32;  | 
 | 
            ek[ 31] |=  1; ek[ 38] |=  1; ek[ 47] |=  2;  | 
 | 
            ek[ 53] |=  2; ek[ 68] |=  8; ek[ 85] |= 16;  | 
 | 
            ek[ 92] |=  4; ek[103] |= 16; ek[108] |= 32;  | 
 | 
            ek[118] |= 32; ek[124] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[ 15] |=  2; ek[ 21] |=  2; ek[ 39] |=  8;  | 
 | 
            ek[ 46] |= 16; ek[ 55] |= 32; ek[ 61] |=  1;  | 
 | 
            ek[ 71] |= 16; ek[ 76] |= 32; ek[ 86] |= 32;  | 
 | 
            ek[ 93] |=  4; ek[102] |=  2; ek[108] |= 16;  | 
 | 
            ek[117] |=  8; ek[126] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[ 14] |= 16; ek[ 23] |= 32; ek[ 29] |=  1;  | 
 | 
            ek[ 38] |=  8; ek[ 52] |=  2; ek[ 63] |=  4;  | 
 | 
            ek[ 70] |=  2; ek[ 76] |= 16; ek[ 85] |=  8;  | 
 | 
            ek[100] |=  1; ek[110] |=  4; ek[116] |=  8;  | 
 | 
            ek[127] |=  8;  | 
 | 
        }  | 
 | 
        octet = key[1];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  1] |=  8; ek[  8] |= 32; ek[ 17] |=  1;  | 
 | 
            ek[ 24] |= 16; ek[ 35] |=  4; ek[ 50] |=  1;  | 
 | 
            ek[ 57] |= 16; ek[ 67] |=  8; ek[ 83] |=  1;  | 
 | 
            ek[ 88] |=  1; ek[ 98] |=  4; ek[105] |= 32;  | 
 | 
            ek[114] |= 32; ek[123] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  0] |=  1; ek[ 11] |= 16; ek[ 16] |=  4;  | 
 | 
            ek[ 35] |=  2; ek[ 40] |= 32; ek[ 49] |=  1;  | 
 | 
            ek[ 56] |= 16; ek[ 65] |=  2; ek[ 74] |= 16;  | 
 | 
            ek[ 80] |=  8; ek[ 99] |=  8; ek[115] |=  1;  | 
 | 
            ek[121] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  9] |= 16; ek[ 18] |=  2; ek[ 24] |=  2;  | 
 | 
            ek[ 33] |=  4; ek[ 43] |= 16; ek[ 48] |=  4;  | 
 | 
            ek[ 66] |= 32; ek[ 73] |=  8; ek[ 82] |=  8;  | 
 | 
            ek[ 91] |= 32; ek[ 97] |=  2; ek[106] |= 16;  | 
 | 
            ek[112] |=  8; ek[122] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[ 14] |= 32; ek[ 21] |=  4; ek[ 30] |=  2;  | 
 | 
            ek[ 36] |= 16; ek[ 45] |=  8; ek[ 60] |=  1;  | 
 | 
            ek[ 69] |=  2; ek[ 87] |=  8; ek[ 94] |= 16;  | 
 | 
            ek[103] |= 32; ek[109] |=  1; ek[118] |=  8;  | 
 | 
            ek[124] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  7] |=  4; ek[ 14] |=  2; ek[ 20] |= 16;  | 
 | 
            ek[ 29] |=  8; ek[ 44] |=  1; ek[ 54] |=  4;  | 
 | 
            ek[ 60] |=  8; ek[ 71] |=  8; ek[ 78] |= 16;  | 
 | 
            ek[ 87] |= 32; ek[ 93] |=  1; ek[102] |=  8;  | 
 | 
            ek[116] |=  2; ek[125] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[  7] |=  2; ek[ 12] |=  1; ek[ 22] |=  4;  | 
 | 
            ek[ 28] |=  8; ek[ 45] |= 16; ek[ 52] |=  4;  | 
 | 
            ek[ 63] |= 16; ek[ 70] |=  8; ek[ 84] |=  2;  | 
 | 
            ek[ 95] |=  4; ek[101] |= 32; ek[111] |=  1;  | 
 | 
            ek[118] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  6] |= 16; ek[ 13] |= 16; ek[ 20] |=  4;  | 
 | 
            ek[ 31] |= 16; ek[ 36] |= 32; ek[ 46] |= 32;  | 
 | 
            ek[ 53] |=  4; ek[ 62] |=  2; ek[ 69] |= 32;  | 
 | 
            ek[ 79] |=  1; ek[ 86] |=  1; ek[ 95] |=  2;  | 
 | 
            ek[101] |=  2; ek[119] |=  8;  | 
 | 
        }  | 
 | 
        octet = key[2];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  0] |= 32; ek[ 10] |=  8; ek[ 19] |= 32;  | 
 | 
            ek[ 25] |=  2; ek[ 34] |= 16; ek[ 40] |=  8;  | 
 | 
            ek[ 59] |=  8; ek[ 66] |=  2; ek[ 72] |=  2;  | 
 | 
            ek[ 81] |=  4; ek[ 91] |= 16; ek[ 96] |=  4;  | 
 | 
            ek[115] |=  2; ek[121] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  3] |= 16; ek[ 10] |=  4; ek[ 17] |= 32;  | 
 | 
            ek[ 26] |= 32; ek[ 33] |=  8; ek[ 42] |=  8;  | 
 | 
            ek[ 51] |= 32; ek[ 57] |=  2; ek[ 67] |=  4;  | 
 | 
            ek[ 82] |=  1; ek[ 89] |= 16; ek[ 98] |=  2;  | 
 | 
            ek[104] |=  2; ek[113] |=  4; ek[120] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  1] |= 16; ek[ 11] |=  8; ek[ 27] |=  1;  | 
 | 
            ek[ 32] |=  1; ek[ 42] |=  4; ek[ 49] |= 32;  | 
 | 
            ek[ 58] |= 32; ek[ 67] |=  2; ek[ 72] |= 32;  | 
 | 
            ek[ 81] |=  1; ek[ 88] |= 16; ek[ 99] |=  4;  | 
 | 
            ek[114] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  6] |= 32; ek[ 12] |=  2; ek[ 23] |=  4;  | 
 | 
            ek[ 29] |= 32; ek[ 39] |=  1; ek[ 46] |=  1;  | 
 | 
            ek[ 55] |=  2; ek[ 61] |=  2; ek[ 70] |=  4;  | 
 | 
            ek[ 76] |=  8; ek[ 93] |= 16; ek[100] |=  4;  | 
 | 
            ek[111] |= 16; ek[116] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  6] |=  2; ek[ 13] |= 32; ek[ 23] |=  1;  | 
 | 
            ek[ 30] |=  1; ek[ 39] |=  2; ek[ 45] |=  2;  | 
 | 
            ek[ 63] |=  8; ek[ 77] |= 16; ek[ 84] |=  4;  | 
 | 
            ek[ 95] |= 16; ek[100] |= 32; ek[110] |= 32;  | 
 | 
            ek[117] |=  4; ek[127] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[  4] |=  1; ek[ 13] |=  2; ek[ 31] |=  8;  | 
 | 
            ek[ 38] |= 16; ek[ 47] |= 32; ek[ 53] |=  1;  | 
 | 
            ek[ 62] |=  8; ek[ 68] |= 32; ek[ 78] |= 32;  | 
 | 
            ek[ 85] |=  4; ek[ 94] |=  2; ek[100] |= 16;  | 
 | 
            ek[109] |=  8; ek[127] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  5] |= 16; ek[ 15] |= 32; ek[ 21] |=  1;  | 
 | 
            ek[ 30] |=  8; ek[ 44] |=  2; ek[ 55] |=  4;  | 
 | 
            ek[ 61] |= 32; ek[ 68] |= 16; ek[ 77] |=  8;  | 
 | 
            ek[ 92] |=  1; ek[102] |=  4; ek[108] |=  8;  | 
 | 
            ek[126] |= 16;  | 
 | 
        }  | 
 | 
        octet = key[3];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  2] |=  8; ek[  9] |=  1; ek[ 16] |= 16;  | 
 | 
            ek[ 27] |=  4; ek[ 42] |=  1; ek[ 49] |= 16;  | 
 | 
            ek[ 58] |=  2; ek[ 75] |=  1; ek[ 80] |=  1;  | 
 | 
            ek[ 90] |=  4; ek[ 97] |= 32; ek[106] |= 32;  | 
 | 
            ek[113] |=  8; ek[120] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  2] |=  4; ek[  8] |=  4; ek[ 27] |=  2;  | 
 | 
            ek[ 32] |= 32; ek[ 41] |=  1; ek[ 48] |= 16;  | 
 | 
            ek[ 59] |=  4; ek[ 66] |= 16; ek[ 72] |=  8;  | 
 | 
            ek[ 91] |=  8; ek[107] |=  1; ek[112] |=  1;  | 
 | 
            ek[123] |= 16;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  3] |=  8; ek[ 10] |=  2; ek[ 16] |=  2;  | 
 | 
            ek[ 25] |=  4; ek[ 35] |= 16; ek[ 40] |=  4;  | 
 | 
            ek[ 59] |=  2; ek[ 65] |=  8; ek[ 74] |=  8;  | 
 | 
            ek[ 83] |= 32; ek[ 89] |=  2; ek[ 98] |= 16;  | 
 | 
            ek[104] |=  8; ek[121] |= 16;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  4] |=  2; ek[ 13] |=  4; ek[ 22] |=  2;  | 
 | 
            ek[ 28] |= 16; ek[ 37] |=  8; ek[ 52] |=  1;  | 
 | 
            ek[ 62] |=  4; ek[ 79] |=  8; ek[ 86] |= 16;  | 
 | 
            ek[ 95] |= 32; ek[101] |=  1; ek[110] |=  8;  | 
 | 
            ek[126] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  5] |= 32; ek[ 12] |= 16; ek[ 21] |=  8;  | 
 | 
            ek[ 36] |=  1; ek[ 46] |=  4; ek[ 52] |=  8;  | 
 | 
            ek[ 70] |= 16; ek[ 79] |= 32; ek[ 85] |=  1;  | 
 | 
            ek[ 94] |=  8; ek[108] |=  2; ek[119] |=  4;  | 
 | 
            ek[126] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[  5] |=  2; ek[ 14] |=  4; ek[ 20] |=  8;  | 
 | 
            ek[ 37] |= 16; ek[ 44] |=  4; ek[ 55] |= 16;  | 
 | 
            ek[ 60] |= 32; ek[ 76] |=  2; ek[ 87] |=  4;  | 
 | 
            ek[ 93] |= 32; ek[103] |=  1; ek[110] |=  1;  | 
 | 
            ek[119] |=  2; ek[124] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  7] |= 32; ek[ 12] |=  4; ek[ 23] |= 16;  | 
 | 
            ek[ 28] |= 32; ek[ 38] |= 32; ek[ 45] |=  4;  | 
 | 
            ek[ 54] |=  2; ek[ 60] |= 16; ek[ 71] |=  1;  | 
 | 
            ek[ 78] |=  1; ek[ 87] |=  2; ek[ 93] |=  2;  | 
 | 
            ek[111] |=  8; ek[118] |= 16; ek[125] |= 16;  | 
 | 
        }  | 
 | 
        octet = key[4];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  1] |=  1; ek[ 11] |= 32; ek[ 17] |=  2;  | 
 | 
            ek[ 26] |= 16; ek[ 32] |=  8; ek[ 51] |=  8;  | 
 | 
            ek[ 64] |=  2; ek[ 73] |=  4; ek[ 83] |= 16;  | 
 | 
            ek[ 88] |=  4; ek[107] |=  2; ek[112] |= 32;  | 
 | 
            ek[122] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  0] |=  4; ek[  9] |= 32; ek[ 18] |= 32;  | 
 | 
            ek[ 25] |=  8; ek[ 34] |=  8; ek[ 43] |= 32;  | 
 | 
            ek[ 49] |=  2; ek[ 58] |= 16; ek[ 74] |=  1;  | 
 | 
            ek[ 81] |= 16; ek[ 90] |=  2; ek[ 96] |=  2;  | 
 | 
            ek[105] |=  4; ek[115] |= 16; ek[122] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  2] |=  2; ek[ 19] |=  1; ek[ 24] |=  1;  | 
 | 
            ek[ 34] |=  4; ek[ 41] |= 32; ek[ 50] |= 32;  | 
 | 
            ek[ 57] |=  8; ek[ 64] |= 32; ek[ 73] |=  1;  | 
 | 
            ek[ 80] |= 16; ek[ 91] |=  4; ek[106] |=  1;  | 
 | 
            ek[113] |= 16; ek[123] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  3] |=  4; ek[ 10] |= 16; ek[ 16] |=  8;  | 
 | 
            ek[ 35] |=  8; ek[ 51] |=  1; ek[ 56] |=  1;  | 
 | 
            ek[ 67] |= 16; ek[ 72] |=  4; ek[ 91] |=  2;  | 
 | 
            ek[ 96] |= 32; ek[105] |=  1; ek[112] |= 16;  | 
 | 
            ek[121] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  4] |= 16; ek[ 15] |=  1; ek[ 22] |=  1;  | 
 | 
            ek[ 31] |=  2; ek[ 37] |=  2; ek[ 55] |=  8;  | 
 | 
            ek[ 62] |= 16; ek[ 69] |= 16; ek[ 76] |=  4;  | 
 | 
            ek[ 87] |= 16; ek[ 92] |= 32; ek[102] |= 32;  | 
 | 
            ek[109] |=  4; ek[118] |=  2; ek[125] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[  6] |=  4; ek[ 23] |=  8; ek[ 30] |= 16;  | 
 | 
            ek[ 39] |= 32; ek[ 45] |=  1; ek[ 54] |=  8;  | 
 | 
            ek[ 70] |= 32; ek[ 77] |=  4; ek[ 86] |=  2;  | 
 | 
            ek[ 92] |= 16; ek[101] |=  8; ek[116] |=  1;  | 
 | 
            ek[125] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  4] |=  4; ek[ 13] |=  1; ek[ 22] |=  8;  | 
 | 
            ek[ 36] |=  2; ek[ 47] |=  4; ek[ 53] |= 32;  | 
 | 
            ek[ 63] |=  1; ek[ 69] |=  8; ek[ 84] |=  1;  | 
 | 
            ek[ 94] |=  4; ek[100] |=  8; ek[117] |= 16;  | 
 | 
            ek[127] |= 32;  | 
 | 
        }  | 
 | 
        octet = key[5];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  3] |= 32; ek[  8] |= 16; ek[ 19] |=  4;  | 
 | 
            ek[ 34] |=  1; ek[ 41] |= 16; ek[ 50] |=  2;  | 
 | 
            ek[ 56] |=  2; ek[ 67] |=  1; ek[ 72] |=  1;  | 
 | 
            ek[ 82] |=  4; ek[ 89] |= 32; ek[ 98] |= 32;  | 
 | 
            ek[105] |=  8; ek[114] |=  8; ek[121] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  1] |= 32; ek[ 19] |=  2; ek[ 24] |= 32;  | 
 | 
            ek[ 33] |=  1; ek[ 40] |= 16; ek[ 51] |=  4;  | 
 | 
            ek[ 64] |=  8; ek[ 83] |=  8; ek[ 99] |=  1;  | 
 | 
            ek[104] |=  1; ek[114] |=  4; ek[120] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  8] |=  2; ek[ 17] |=  4; ek[ 27] |= 16;  | 
 | 
            ek[ 32] |=  4; ek[ 51] |=  2; ek[ 56] |= 32;  | 
 | 
            ek[ 66] |=  8; ek[ 75] |= 32; ek[ 81] |=  2;  | 
 | 
            ek[ 90] |= 16; ek[ 96] |=  8; ek[115] |=  8;  | 
 | 
            ek[122] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  2] |= 16; ek[ 18] |=  1; ek[ 25] |= 16;  | 
 | 
            ek[ 34] |=  2; ek[ 40] |=  2; ek[ 49] |=  4;  | 
 | 
            ek[ 59] |= 16; ek[ 66] |=  4; ek[ 73] |= 32;  | 
 | 
            ek[ 82] |= 32; ek[ 89] |=  8; ek[ 98] |=  8;  | 
 | 
            ek[107] |= 32; ek[113] |=  2; ek[123] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  7] |=  1; ek[ 13] |=  8; ek[ 28] |=  1;  | 
 | 
            ek[ 38] |=  4; ek[ 44] |=  8; ek[ 61] |= 16;  | 
 | 
            ek[ 71] |= 32; ek[ 77] |=  1; ek[ 86] |=  8;  | 
 | 
            ek[100] |=  2; ek[111] |=  4; ek[117] |= 32;  | 
 | 
            ek[124] |= 16;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[ 12] |=  8; ek[ 29] |= 16; ek[ 36] |=  4;  | 
 | 
            ek[ 47] |= 16; ek[ 52] |= 32; ek[ 62] |= 32;  | 
 | 
            ek[ 68] |=  2; ek[ 79] |=  4; ek[ 85] |= 32;  | 
 | 
            ek[ 95] |=  1; ek[102] |=  1; ek[111] |=  2;  | 
 | 
            ek[117] |=  2; ek[126] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  5] |=  1; ek[ 15] |= 16; ek[ 20] |= 32;  | 
 | 
            ek[ 30] |= 32; ek[ 37] |=  4; ek[ 46] |=  2;  | 
 | 
            ek[ 52] |= 16; ek[ 61] |=  8; ek[ 70] |=  1;  | 
 | 
            ek[ 79] |=  2; ek[ 85] |=  2; ek[103] |=  8;  | 
 | 
            ek[110] |= 16; ek[119] |= 32; ek[124] |=  4;  | 
 | 
        }  | 
 | 
        octet = key[6];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  0] |= 16; ek[  9] |=  2; ek[ 18] |= 16;  | 
 | 
            ek[ 24] |=  8; ek[ 43] |=  8; ek[ 59] |=  1;  | 
 | 
            ek[ 65] |=  4; ek[ 75] |= 16; ek[ 80] |=  4;  | 
 | 
            ek[ 99] |=  2; ek[104] |= 32; ek[113] |=  1;  | 
 | 
            ek[123] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[ 10] |= 32; ek[ 17] |=  8; ek[ 26] |=  8;  | 
 | 
            ek[ 35] |= 32; ek[ 41] |=  2; ek[ 50] |= 16;  | 
 | 
            ek[ 56] |=  8; ek[ 66] |=  1; ek[ 73] |= 16;  | 
 | 
            ek[ 82] |=  2; ek[ 88] |=  2; ek[ 97] |=  4;  | 
 | 
            ek[107] |= 16; ek[112] |=  4; ek[121] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  0] |=  2; ek[ 11] |=  1; ek[ 16] |=  1;  | 
 | 
            ek[ 26] |=  4; ek[ 33] |= 32; ek[ 42] |= 32;  | 
 | 
            ek[ 49] |=  8; ek[ 58] |=  8; ek[ 65] |=  1;  | 
 | 
            ek[ 72] |= 16; ek[ 83] |=  4; ek[ 98] |=  1;  | 
 | 
            ek[105] |= 16; ek[114] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  8] |=  8; ek[ 27] |=  8; ek[ 43] |=  1;  | 
 | 
            ek[ 48] |=  1; ek[ 58] |=  4; ek[ 64] |=  4;  | 
 | 
            ek[ 83] |=  2; ek[ 88] |= 32; ek[ 97] |=  1;  | 
 | 
            ek[104] |= 16; ek[115] |=  4; ek[122] |= 16;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  5] |=  8; ek[ 14] |=  1; ek[ 23] |=  2;  | 
 | 
            ek[ 29] |=  2; ek[ 47] |=  8; ek[ 54] |= 16;  | 
 | 
            ek[ 63] |= 32; ek[ 68] |=  4; ek[ 79] |= 16;  | 
 | 
            ek[ 84] |= 32; ek[ 94] |= 32; ek[101] |=  4;  | 
 | 
            ek[110] |=  2; ek[116] |= 16; ek[127] |=  1;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[  4] |=  8; ek[ 15] |=  8; ek[ 22] |= 16;  | 
 | 
            ek[ 31] |= 32; ek[ 37] |=  1; ek[ 46] |=  8;  | 
 | 
            ek[ 60] |=  2; ek[ 69] |=  4; ek[ 78] |=  2;  | 
 | 
            ek[ 84] |= 16; ek[ 93] |=  8; ek[108] |=  1;  | 
 | 
            ek[118] |=  4;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  7] |= 16; ek[ 14] |=  8; ek[ 28] |=  2;  | 
 | 
            ek[ 39] |=  4; ek[ 45] |= 32; ek[ 55] |=  1;  | 
 | 
            ek[ 62] |=  1; ek[ 76] |=  1; ek[ 86] |=  4;  | 
 | 
            ek[ 92] |=  8; ek[109] |= 16; ek[116] |=  4;  | 
 | 
            ek[125] |=  1;  | 
 | 
        }  | 
 | 
        octet = key[7];  | 
 | 
        if ((octet & 0x80) != 0) { | 
 | 
            ek[  1] |=  2; ek[ 11] |=  4; ek[ 26] |=  1;  | 
 | 
            ek[ 33] |= 16; ek[ 42] |=  2; ek[ 48] |=  2;  | 
 | 
            ek[ 57] |=  4; ek[ 64] |=  1; ek[ 74] |=  4;  | 
 | 
            ek[ 81] |= 32; ek[ 90] |= 32; ek[ 97] |=  8;  | 
 | 
            ek[106] |=  8; ek[115] |= 32; ek[120] |= 16;  | 
 | 
        }  | 
 | 
        if ((octet & 0x40) != 0) { | 
 | 
            ek[  2] |= 32; ek[ 11] |=  2; ek[ 16] |= 32;  | 
 | 
            ek[ 25] |=  1; ek[ 32] |= 16; ek[ 43] |=  4;  | 
 | 
            ek[ 58] |=  1; ek[ 75] |=  8; ek[ 91] |=  1;  | 
 | 
            ek[ 96] |=  1; ek[106] |=  4; ek[113] |= 32;  | 
 | 
        }  | 
 | 
        if ((octet & 0x20) != 0) { | 
 | 
            ek[  3] |=  1; ek[  9] |=  4; ek[ 19] |= 16;  | 
 | 
            ek[ 24] |=  4; ek[ 43] |=  2; ek[ 48] |= 32;  | 
 | 
            ek[ 57] |=  1; ek[ 67] |= 32; ek[ 73] |=  2;  | 
 | 
            ek[ 82] |= 16; ek[ 88] |=  8; ek[107] |=  8;  | 
 | 
            ek[120] |=  2;  | 
 | 
        }  | 
 | 
        if ((octet & 0x10) != 0) { | 
 | 
            ek[  0] |=  8; ek[ 10] |=  1; ek[ 17] |= 16;  | 
 | 
            ek[ 26] |=  2; ek[ 32] |=  2; ek[ 41] |=  4;  | 
 | 
            ek[ 51] |= 16; ek[ 56] |=  4; ek[ 65] |= 32;  | 
 | 
            ek[ 74] |= 32; ek[ 81] |=  8; ek[ 90] |=  8;  | 
 | 
            ek[ 99] |= 32; ek[105] |=  2; ek[114] |= 16;  | 
 | 
        }  | 
 | 
        if ((octet & 0x8) != 0) { | 
 | 
            ek[  6] |=  1; ek[ 20] |=  1; ek[ 30] |=  4;  | 
 | 
            ek[ 36] |=  8; ek[ 53] |= 16; ek[ 60] |=  4;  | 
 | 
            ek[ 69] |=  1; ek[ 78] |=  8; ek[ 92] |=  2;  | 
 | 
            ek[103] |=  4; ek[109] |= 32; ek[119] |=  1;  | 
 | 
            ek[125] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x4) != 0) { | 
 | 
            ek[  7] |=  8; ek[ 21] |= 16; ek[ 28] |=  4;  | 
 | 
            ek[ 39] |= 16; ek[ 44] |= 32; ek[ 54] |= 32;  | 
 | 
            ek[ 61] |=  4; ek[ 71] |=  4; ek[ 77] |= 32;  | 
 | 
            ek[ 87] |=  1; ek[ 94] |=  1; ek[103] |=  2;  | 
 | 
            ek[109] |=  2; ek[124] |=  8;  | 
 | 
        }  | 
 | 
        if ((octet & 0x2) != 0) { | 
 | 
            ek[  6] |=  8; ek[ 12] |= 32; ek[ 22] |= 32;  | 
 | 
            ek[ 29] |=  4; ek[ 38] |=  2; ek[ 44] |= 16;  | 
 | 
            ek[ 53] |=  8; ek[ 71] |=  2; ek[ 77] |=  2;  | 
 | 
            ek[ 95] |=  8; ek[102] |= 16; ek[111] |= 32;  | 
 | 
            ek[117] |=  1; ek[127] |= 16;  | 
 | 
        }  | 
 | 
 | 
 | 
        expandedKey = ek;  | 
 | 
    }  | 
 | 
}  |