mev-4.0.01/source/org/tigr/microarray/mev/r/jcrypt.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 package org.tigr.microarray.mev.r;
2 26 Feb 07 jari 2
2 26 Feb 07 jari 3 /****************************************************************************
2 26 Feb 07 jari 4  * jcrypt.java
2 26 Feb 07 jari 5  *
2 26 Feb 07 jari 6  * Java-based implementation of the unix crypt command
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Based upon C source code written by Eric Young, eay@psych.uq.oz.au
2 26 Feb 07 jari 9  *
2 26 Feb 07 jari 10  ****************************************************************************/
2 26 Feb 07 jari 11
2 26 Feb 07 jari 12 public class jcrypt
2 26 Feb 07 jari 13 {
2 26 Feb 07 jari 14    private static final int ITERATIONS = 16;
2 26 Feb 07 jari 15
2 26 Feb 07 jari 16    private static final int con_salt[] =
2 26 Feb 07 jari 17    {
2 26 Feb 07 jari 18       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
2 26 Feb 07 jari 19       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
2 26 Feb 07 jari 20       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
2 26 Feb 07 jari 21       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
2 26 Feb 07 jari 22       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
2 26 Feb 07 jari 23       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
2 26 Feb 07 jari 24       0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 
2 26 Feb 07 jari 25       0x0A, 0x0B, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 
2 26 Feb 07 jari 26       0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 
2 26 Feb 07 jari 27       0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 
2 26 Feb 07 jari 28       0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 
2 26 Feb 07 jari 29       0x23, 0x24, 0x25, 0x20, 0x21, 0x22, 0x23, 0x24, 
2 26 Feb 07 jari 30       0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 
2 26 Feb 07 jari 31       0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 
2 26 Feb 07 jari 32       0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 
2 26 Feb 07 jari 33       0x3D, 0x3E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 
2 26 Feb 07 jari 34    };
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36    private static final boolean shifts2[] =
2 26 Feb 07 jari 37    {
2 26 Feb 07 jari 38       false, false, true, true, true, true, true, true,
2 26 Feb 07 jari 39       false, true,  true, true, true, true, true, false
2 26 Feb 07 jari 40    };
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42    private static final int skb[][] =
2 26 Feb 07 jari 43    {
2 26 Feb 07 jari 44       {
2 26 Feb 07 jari 45          /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
2 26 Feb 07 jari 46          0x00000000, 0x00000010, 0x20000000, 0x20000010, 
2 26 Feb 07 jari 47          0x00010000, 0x00010010, 0x20010000, 0x20010010, 
2 26 Feb 07 jari 48          0x00000800, 0x00000810, 0x20000800, 0x20000810, 
2 26 Feb 07 jari 49          0x00010800, 0x00010810, 0x20010800, 0x20010810, 
2 26 Feb 07 jari 50          0x00000020, 0x00000030, 0x20000020, 0x20000030, 
2 26 Feb 07 jari 51          0x00010020, 0x00010030, 0x20010020, 0x20010030, 
2 26 Feb 07 jari 52          0x00000820, 0x00000830, 0x20000820, 0x20000830, 
2 26 Feb 07 jari 53          0x00010820, 0x00010830, 0x20010820, 0x20010830, 
2 26 Feb 07 jari 54          0x00080000, 0x00080010, 0x20080000, 0x20080010, 
2 26 Feb 07 jari 55          0x00090000, 0x00090010, 0x20090000, 0x20090010, 
2 26 Feb 07 jari 56          0x00080800, 0x00080810, 0x20080800, 0x20080810, 
2 26 Feb 07 jari 57          0x00090800, 0x00090810, 0x20090800, 0x20090810, 
2 26 Feb 07 jari 58          0x00080020, 0x00080030, 0x20080020, 0x20080030, 
2 26 Feb 07 jari 59          0x00090020, 0x00090030, 0x20090020, 0x20090030, 
2 26 Feb 07 jari 60          0x00080820, 0x00080830, 0x20080820, 0x20080830, 
2 26 Feb 07 jari 61          0x00090820, 0x00090830, 0x20090820, 0x20090830, 
2 26 Feb 07 jari 62       },
2 26 Feb 07 jari 63       {
2 26 Feb 07 jari 64          /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
2 26 Feb 07 jari 65          0x00000000, 0x02000000, 0x00002000, 0x02002000, 
2 26 Feb 07 jari 66          0x00200000, 0x02200000, 0x00202000, 0x02202000, 
2 26 Feb 07 jari 67          0x00000004, 0x02000004, 0x00002004, 0x02002004, 
2 26 Feb 07 jari 68          0x00200004, 0x02200004, 0x00202004, 0x02202004, 
2 26 Feb 07 jari 69          0x00000400, 0x02000400, 0x00002400, 0x02002400, 
2 26 Feb 07 jari 70          0x00200400, 0x02200400, 0x00202400, 0x02202400, 
2 26 Feb 07 jari 71          0x00000404, 0x02000404, 0x00002404, 0x02002404, 
2 26 Feb 07 jari 72          0x00200404, 0x02200404, 0x00202404, 0x02202404, 
2 26 Feb 07 jari 73          0x10000000, 0x12000000, 0x10002000, 0x12002000, 
2 26 Feb 07 jari 74          0x10200000, 0x12200000, 0x10202000, 0x12202000, 
2 26 Feb 07 jari 75          0x10000004, 0x12000004, 0x10002004, 0x12002004, 
2 26 Feb 07 jari 76          0x10200004, 0x12200004, 0x10202004, 0x12202004, 
2 26 Feb 07 jari 77          0x10000400, 0x12000400, 0x10002400, 0x12002400, 
2 26 Feb 07 jari 78          0x10200400, 0x12200400, 0x10202400, 0x12202400, 
2 26 Feb 07 jari 79          0x10000404, 0x12000404, 0x10002404, 0x12002404, 
2 26 Feb 07 jari 80          0x10200404, 0x12200404, 0x10202404, 0x12202404, 
2 26 Feb 07 jari 81       },
2 26 Feb 07 jari 82       {
2 26 Feb 07 jari 83          /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
2 26 Feb 07 jari 84          0x00000000, 0x00000001, 0x00040000, 0x00040001, 
2 26 Feb 07 jari 85          0x01000000, 0x01000001, 0x01040000, 0x01040001, 
2 26 Feb 07 jari 86          0x00000002, 0x00000003, 0x00040002, 0x00040003, 
2 26 Feb 07 jari 87          0x01000002, 0x01000003, 0x01040002, 0x01040003, 
2 26 Feb 07 jari 88          0x00000200, 0x00000201, 0x00040200, 0x00040201, 
2 26 Feb 07 jari 89          0x01000200, 0x01000201, 0x01040200, 0x01040201, 
2 26 Feb 07 jari 90          0x00000202, 0x00000203, 0x00040202, 0x00040203, 
2 26 Feb 07 jari 91          0x01000202, 0x01000203, 0x01040202, 0x01040203, 
2 26 Feb 07 jari 92          0x08000000, 0x08000001, 0x08040000, 0x08040001, 
2 26 Feb 07 jari 93          0x09000000, 0x09000001, 0x09040000, 0x09040001, 
2 26 Feb 07 jari 94          0x08000002, 0x08000003, 0x08040002, 0x08040003, 
2 26 Feb 07 jari 95          0x09000002, 0x09000003, 0x09040002, 0x09040003, 
2 26 Feb 07 jari 96          0x08000200, 0x08000201, 0x08040200, 0x08040201, 
2 26 Feb 07 jari 97          0x09000200, 0x09000201, 0x09040200, 0x09040201, 
2 26 Feb 07 jari 98          0x08000202, 0x08000203, 0x08040202, 0x08040203, 
2 26 Feb 07 jari 99          0x09000202, 0x09000203, 0x09040202, 0x09040203, 
2 26 Feb 07 jari 100       },
2 26 Feb 07 jari 101       {
2 26 Feb 07 jari 102          /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
2 26 Feb 07 jari 103          0x00000000, 0x00100000, 0x00000100, 0x00100100, 
2 26 Feb 07 jari 104          0x00000008, 0x00100008, 0x00000108, 0x00100108, 
2 26 Feb 07 jari 105          0x00001000, 0x00101000, 0x00001100, 0x00101100, 
2 26 Feb 07 jari 106          0x00001008, 0x00101008, 0x00001108, 0x00101108, 
2 26 Feb 07 jari 107          0x04000000, 0x04100000, 0x04000100, 0x04100100, 
2 26 Feb 07 jari 108          0x04000008, 0x04100008, 0x04000108, 0x04100108, 
2 26 Feb 07 jari 109          0x04001000, 0x04101000, 0x04001100, 0x04101100, 
2 26 Feb 07 jari 110          0x04001008, 0x04101008, 0x04001108, 0x04101108, 
2 26 Feb 07 jari 111          0x00020000, 0x00120000, 0x00020100, 0x00120100, 
2 26 Feb 07 jari 112          0x00020008, 0x00120008, 0x00020108, 0x00120108, 
2 26 Feb 07 jari 113          0x00021000, 0x00121000, 0x00021100, 0x00121100, 
2 26 Feb 07 jari 114          0x00021008, 0x00121008, 0x00021108, 0x00121108, 
2 26 Feb 07 jari 115          0x04020000, 0x04120000, 0x04020100, 0x04120100, 
2 26 Feb 07 jari 116          0x04020008, 0x04120008, 0x04020108, 0x04120108, 
2 26 Feb 07 jari 117          0x04021000, 0x04121000, 0x04021100, 0x04121100, 
2 26 Feb 07 jari 118          0x04021008, 0x04121008, 0x04021108, 0x04121108, 
2 26 Feb 07 jari 119       },
2 26 Feb 07 jari 120       {
2 26 Feb 07 jari 121          /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
2 26 Feb 07 jari 122          0x00000000, 0x10000000, 0x00010000, 0x10010000, 
2 26 Feb 07 jari 123          0x00000004, 0x10000004, 0x00010004, 0x10010004, 
2 26 Feb 07 jari 124          0x20000000, 0x30000000, 0x20010000, 0x30010000, 
2 26 Feb 07 jari 125          0x20000004, 0x30000004, 0x20010004, 0x30010004, 
2 26 Feb 07 jari 126          0x00100000, 0x10100000, 0x00110000, 0x10110000, 
2 26 Feb 07 jari 127          0x00100004, 0x10100004, 0x00110004, 0x10110004, 
2 26 Feb 07 jari 128          0x20100000, 0x30100000, 0x20110000, 0x30110000, 
2 26 Feb 07 jari 129          0x20100004, 0x30100004, 0x20110004, 0x30110004, 
2 26 Feb 07 jari 130          0x00001000, 0x10001000, 0x00011000, 0x10011000, 
2 26 Feb 07 jari 131          0x00001004, 0x10001004, 0x00011004, 0x10011004, 
2 26 Feb 07 jari 132          0x20001000, 0x30001000, 0x20011000, 0x30011000, 
2 26 Feb 07 jari 133          0x20001004, 0x30001004, 0x20011004, 0x30011004, 
2 26 Feb 07 jari 134          0x00101000, 0x10101000, 0x00111000, 0x10111000, 
2 26 Feb 07 jari 135          0x00101004, 0x10101004, 0x00111004, 0x10111004, 
2 26 Feb 07 jari 136          0x20101000, 0x30101000, 0x20111000, 0x30111000, 
2 26 Feb 07 jari 137          0x20101004, 0x30101004, 0x20111004, 0x30111004, 
2 26 Feb 07 jari 138       },
2 26 Feb 07 jari 139       {
2 26 Feb 07 jari 140          /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
2 26 Feb 07 jari 141          0x00000000, 0x08000000, 0x00000008, 0x08000008, 
2 26 Feb 07 jari 142          0x00000400, 0x08000400, 0x00000408, 0x08000408, 
2 26 Feb 07 jari 143          0x00020000, 0x08020000, 0x00020008, 0x08020008, 
2 26 Feb 07 jari 144          0x00020400, 0x08020400, 0x00020408, 0x08020408, 
2 26 Feb 07 jari 145          0x00000001, 0x08000001, 0x00000009, 0x08000009, 
2 26 Feb 07 jari 146          0x00000401, 0x08000401, 0x00000409, 0x08000409, 
2 26 Feb 07 jari 147          0x00020001, 0x08020001, 0x00020009, 0x08020009, 
2 26 Feb 07 jari 148          0x00020401, 0x08020401, 0x00020409, 0x08020409, 
2 26 Feb 07 jari 149          0x02000000, 0x0A000000, 0x02000008, 0x0A000008, 
2 26 Feb 07 jari 150          0x02000400, 0x0A000400, 0x02000408, 0x0A000408, 
2 26 Feb 07 jari 151          0x02020000, 0x0A020000, 0x02020008, 0x0A020008, 
2 26 Feb 07 jari 152          0x02020400, 0x0A020400, 0x02020408, 0x0A020408, 
2 26 Feb 07 jari 153          0x02000001, 0x0A000001, 0x02000009, 0x0A000009, 
2 26 Feb 07 jari 154          0x02000401, 0x0A000401, 0x02000409, 0x0A000409, 
2 26 Feb 07 jari 155          0x02020001, 0x0A020001, 0x02020009, 0x0A020009, 
2 26 Feb 07 jari 156          0x02020401, 0x0A020401, 0x02020409, 0x0A020409, 
2 26 Feb 07 jari 157       },
2 26 Feb 07 jari 158       {
2 26 Feb 07 jari 159          /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
2 26 Feb 07 jari 160          0x00000000, 0x00000100, 0x00080000, 0x00080100, 
2 26 Feb 07 jari 161          0x01000000, 0x01000100, 0x01080000, 0x01080100, 
2 26 Feb 07 jari 162          0x00000010, 0x00000110, 0x00080010, 0x00080110, 
2 26 Feb 07 jari 163          0x01000010, 0x01000110, 0x01080010, 0x01080110, 
2 26 Feb 07 jari 164          0x00200000, 0x00200100, 0x00280000, 0x00280100, 
2 26 Feb 07 jari 165          0x01200000, 0x01200100, 0x01280000, 0x01280100, 
2 26 Feb 07 jari 166          0x00200010, 0x00200110, 0x00280010, 0x00280110, 
2 26 Feb 07 jari 167          0x01200010, 0x01200110, 0x01280010, 0x01280110, 
2 26 Feb 07 jari 168          0x00000200, 0x00000300, 0x00080200, 0x00080300, 
2 26 Feb 07 jari 169          0x01000200, 0x01000300, 0x01080200, 0x01080300, 
2 26 Feb 07 jari 170          0x00000210, 0x00000310, 0x00080210, 0x00080310, 
2 26 Feb 07 jari 171          0x01000210, 0x01000310, 0x01080210, 0x01080310, 
2 26 Feb 07 jari 172          0x00200200, 0x00200300, 0x00280200, 0x00280300, 
2 26 Feb 07 jari 173          0x01200200, 0x01200300, 0x01280200, 0x01280300, 
2 26 Feb 07 jari 174          0x00200210, 0x00200310, 0x00280210, 0x00280310, 
2 26 Feb 07 jari 175          0x01200210, 0x01200310, 0x01280210, 0x01280310, 
2 26 Feb 07 jari 176       },
2 26 Feb 07 jari 177       {
2 26 Feb 07 jari 178          /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
2 26 Feb 07 jari 179          0x00000000, 0x04000000, 0x00040000, 0x04040000, 
2 26 Feb 07 jari 180          0x00000002, 0x04000002, 0x00040002, 0x04040002, 
2 26 Feb 07 jari 181          0x00002000, 0x04002000, 0x00042000, 0x04042000, 
2 26 Feb 07 jari 182          0x00002002, 0x04002002, 0x00042002, 0x04042002, 
2 26 Feb 07 jari 183          0x00000020, 0x04000020, 0x00040020, 0x04040020, 
2 26 Feb 07 jari 184          0x00000022, 0x04000022, 0x00040022, 0x04040022, 
2 26 Feb 07 jari 185          0x00002020, 0x04002020, 0x00042020, 0x04042020, 
2 26 Feb 07 jari 186          0x00002022, 0x04002022, 0x00042022, 0x04042022, 
2 26 Feb 07 jari 187          0x00000800, 0x04000800, 0x00040800, 0x04040800, 
2 26 Feb 07 jari 188          0x00000802, 0x04000802, 0x00040802, 0x04040802, 
2 26 Feb 07 jari 189          0x00002800, 0x04002800, 0x00042800, 0x04042800, 
2 26 Feb 07 jari 190          0x00002802, 0x04002802, 0x00042802, 0x04042802, 
2 26 Feb 07 jari 191          0x00000820, 0x04000820, 0x00040820, 0x04040820, 
2 26 Feb 07 jari 192          0x00000822, 0x04000822, 0x00040822, 0x04040822, 
2 26 Feb 07 jari 193          0x00002820, 0x04002820, 0x00042820, 0x04042820, 
2 26 Feb 07 jari 194          0x00002822, 0x04002822, 0x00042822, 0x04042822, 
2 26 Feb 07 jari 195       },
2 26 Feb 07 jari 196    };
2 26 Feb 07 jari 197
2 26 Feb 07 jari 198    private static final int SPtrans[][] =
2 26 Feb 07 jari 199    {
2 26 Feb 07 jari 200       {
2 26 Feb 07 jari 201          /* nibble 0 */
2 26 Feb 07 jari 202          0x00820200, 0x00020000, 0x80800000, 0x80820200,
2 26 Feb 07 jari 203          0x00800000, 0x80020200, 0x80020000, 0x80800000,
2 26 Feb 07 jari 204          0x80020200, 0x00820200, 0x00820000, 0x80000200,
2 26 Feb 07 jari 205          0x80800200, 0x00800000, 0x00000000, 0x80020000,
2 26 Feb 07 jari 206          0x00020000, 0x80000000, 0x00800200, 0x00020200,
2 26 Feb 07 jari 207          0x80820200, 0x00820000, 0x80000200, 0x00800200,
2 26 Feb 07 jari 208          0x80000000, 0x00000200, 0x00020200, 0x80820000,
2 26 Feb 07 jari 209          0x00000200, 0x80800200, 0x80820000, 0x00000000,
2 26 Feb 07 jari 210          0x00000000, 0x80820200, 0x00800200, 0x80020000,
2 26 Feb 07 jari 211          0x00820200, 0x00020000, 0x80000200, 0x00800200,
2 26 Feb 07 jari 212          0x80820000, 0x00000200, 0x00020200, 0x80800000,
2 26 Feb 07 jari 213          0x80020200, 0x80000000, 0x80800000, 0x00820000,
2 26 Feb 07 jari 214          0x80820200, 0x00020200, 0x00820000, 0x80800200,
2 26 Feb 07 jari 215          0x00800000, 0x80000200, 0x80020000, 0x00000000,
2 26 Feb 07 jari 216          0x00020000, 0x00800000, 0x80800200, 0x00820200,
2 26 Feb 07 jari 217          0x80000000, 0x80820000, 0x00000200, 0x80020200,
2 26 Feb 07 jari 218       },
2 26 Feb 07 jari 219       {
2 26 Feb 07 jari 220          /* nibble 1 */
2 26 Feb 07 jari 221          0x10042004, 0x00000000, 0x00042000, 0x10040000,
2 26 Feb 07 jari 222          0x10000004, 0x00002004, 0x10002000, 0x00042000,
2 26 Feb 07 jari 223          0x00002000, 0x10040004, 0x00000004, 0x10002000,
2 26 Feb 07 jari 224          0x00040004, 0x10042000, 0x10040000, 0x00000004,
2 26 Feb 07 jari 225          0x00040000, 0x10002004, 0x10040004, 0x00002000,
2 26 Feb 07 jari 226          0x00042004, 0x10000000, 0x00000000, 0x00040004,
2 26 Feb 07 jari 227          0x10002004, 0x00042004, 0x10042000, 0x10000004,
2 26 Feb 07 jari 228          0x10000000, 0x00040000, 0x00002004, 0x10042004,
2 26 Feb 07 jari 229          0x00040004, 0x10042000, 0x10002000, 0x00042004,
2 26 Feb 07 jari 230          0x10042004, 0x00040004, 0x10000004, 0x00000000,
2 26 Feb 07 jari 231          0x10000000, 0x00002004, 0x00040000, 0x10040004,
2 26 Feb 07 jari 232          0x00002000, 0x10000000, 0x00042004, 0x10002004,
2 26 Feb 07 jari 233          0x10042000, 0x00002000, 0x00000000, 0x10000004,
2 26 Feb 07 jari 234          0x00000004, 0x10042004, 0x00042000, 0x10040000,
2 26 Feb 07 jari 235          0x10040004, 0x00040000, 0x00002004, 0x10002000,
2 26 Feb 07 jari 236          0x10002004, 0x00000004, 0x10040000, 0x00042000,
2 26 Feb 07 jari 237       },
2 26 Feb 07 jari 238       {
2 26 Feb 07 jari 239          /* nibble 2 */
2 26 Feb 07 jari 240          0x41000000, 0x01010040, 0x00000040, 0x41000040,
2 26 Feb 07 jari 241          0x40010000, 0x01000000, 0x41000040, 0x00010040,
2 26 Feb 07 jari 242          0x01000040, 0x00010000, 0x01010000, 0x40000000,
2 26 Feb 07 jari 243          0x41010040, 0x40000040, 0x40000000, 0x41010000,
2 26 Feb 07 jari 244          0x00000000, 0x40010000, 0x01010040, 0x00000040,
2 26 Feb 07 jari 245          0x40000040, 0x41010040, 0x00010000, 0x41000000,
2 26 Feb 07 jari 246          0x41010000, 0x01000040, 0x40010040, 0x01010000,
2 26 Feb 07 jari 247          0x00010040, 0x00000000, 0x01000000, 0x40010040,
2 26 Feb 07 jari 248          0x01010040, 0x00000040, 0x40000000, 0x00010000,
2 26 Feb 07 jari 249          0x40000040, 0x40010000, 0x01010000, 0x41000040,
2 26 Feb 07 jari 250          0x00000000, 0x01010040, 0x00010040, 0x41010000,
2 26 Feb 07 jari 251          0x40010000, 0x01000000, 0x41010040, 0x40000000,
2 26 Feb 07 jari 252          0x40010040, 0x41000000, 0x01000000, 0x41010040,
2 26 Feb 07 jari 253          0x00010000, 0x01000040, 0x41000040, 0x00010040,
2 26 Feb 07 jari 254          0x01000040, 0x00000000, 0x41010000, 0x40000040,
2 26 Feb 07 jari 255          0x41000000, 0x40010040, 0x00000040, 0x01010000,
2 26 Feb 07 jari 256       },
2 26 Feb 07 jari 257       {
2 26 Feb 07 jari 258          /* nibble 3 */
2 26 Feb 07 jari 259          0x00100402, 0x04000400, 0x00000002, 0x04100402,
2 26 Feb 07 jari 260          0x00000000, 0x04100000, 0x04000402, 0x00100002,
2 26 Feb 07 jari 261          0x04100400, 0x04000002, 0x04000000, 0x00000402,
2 26 Feb 07 jari 262          0x04000002, 0x00100402, 0x00100000, 0x04000000,
2 26 Feb 07 jari 263          0x04100002, 0x00100400, 0x00000400, 0x00000002,
2 26 Feb 07 jari 264          0x00100400, 0x04000402, 0x04100000, 0x00000400,
2 26 Feb 07 jari 265          0x00000402, 0x00000000, 0x00100002, 0x04100400,
2 26 Feb 07 jari 266          0x04000400, 0x04100002, 0x04100402, 0x00100000,
2 26 Feb 07 jari 267          0x04100002, 0x00000402, 0x00100000, 0x04000002,
2 26 Feb 07 jari 268          0x00100400, 0x04000400, 0x00000002, 0x04100000,
2 26 Feb 07 jari 269          0x04000402, 0x00000000, 0x00000400, 0x00100002,
2 26 Feb 07 jari 270          0x00000000, 0x04100002, 0x04100400, 0x00000400,
2 26 Feb 07 jari 271          0x04000000, 0x04100402, 0x00100402, 0x00100000,
2 26 Feb 07 jari 272          0x04100402, 0x00000002, 0x04000400, 0x00100402,
2 26 Feb 07 jari 273          0x00100002, 0x00100400, 0x04100000, 0x04000402,
2 26 Feb 07 jari 274          0x00000402, 0x04000000, 0x04000002, 0x04100400,
2 26 Feb 07 jari 275       },
2 26 Feb 07 jari 276       {
2 26 Feb 07 jari 277          /* nibble 4 */
2 26 Feb 07 jari 278          0x02000000, 0x00004000, 0x00000100, 0x02004108,
2 26 Feb 07 jari 279          0x02004008, 0x02000100, 0x00004108, 0x02004000,
2 26 Feb 07 jari 280          0x00004000, 0x00000008, 0x02000008, 0x00004100,
2 26 Feb 07 jari 281          0x02000108, 0x02004008, 0x02004100, 0x00000000,
2 26 Feb 07 jari 282          0x00004100, 0x02000000, 0x00004008, 0x00000108,
2 26 Feb 07 jari 283          0x02000100, 0x00004108, 0x00000000, 0x02000008,
2 26 Feb 07 jari 284          0x00000008, 0x02000108, 0x02004108, 0x00004008,
2 26 Feb 07 jari 285          0x02004000, 0x00000100, 0x00000108, 0x02004100,
2 26 Feb 07 jari 286          0x02004100, 0x02000108, 0x00004008, 0x02004000,
2 26 Feb 07 jari 287          0x00004000, 0x00000008, 0x02000008, 0x02000100,
2 26 Feb 07 jari 288          0x02000000, 0x00004100, 0x02004108, 0x00000000,
2 26 Feb 07 jari 289          0x00004108, 0x02000000, 0x00000100, 0x00004008,
2 26 Feb 07 jari 290          0x02000108, 0x00000100, 0x00000000, 0x02004108,
2 26 Feb 07 jari 291          0x02004008, 0x02004100, 0x00000108, 0x00004000,
2 26 Feb 07 jari 292          0x00004100, 0x02004008, 0x02000100, 0x00000108,
2 26 Feb 07 jari 293          0x00000008, 0x00004108, 0x02004000, 0x02000008,
2 26 Feb 07 jari 294       },
2 26 Feb 07 jari 295       {
2 26 Feb 07 jari 296          /* nibble 5 */
2 26 Feb 07 jari 297          0x20000010, 0x00080010, 0x00000000, 0x20080800,
2 26 Feb 07 jari 298          0x00080010, 0x00000800, 0x20000810, 0x00080000,
2 26 Feb 07 jari 299          0x00000810, 0x20080810, 0x00080800, 0x20000000,
2 26 Feb 07 jari 300          0x20000800, 0x20000010, 0x20080000, 0x00080810,
2 26 Feb 07 jari 301          0x00080000, 0x20000810, 0x20080010, 0x00000000,
2 26 Feb 07 jari 302          0x00000800, 0x00000010, 0x20080800, 0x20080010,
2 26 Feb 07 jari 303          0x20080810, 0x20080000, 0x20000000, 0x00000810,
2 26 Feb 07 jari 304          0x00000010, 0x00080800, 0x00080810, 0x20000800,
2 26 Feb 07 jari 305          0x00000810, 0x20000000, 0x20000800, 0x00080810,
2 26 Feb 07 jari 306          0x20080800, 0x00080010, 0x00000000, 0x20000800,
2 26 Feb 07 jari 307          0x20000000, 0x00000800, 0x20080010, 0x00080000,
2 26 Feb 07 jari 308          0x00080010, 0x20080810, 0x00080800, 0x00000010,
2 26 Feb 07 jari 309          0x20080810, 0x00080800, 0x00080000, 0x20000810,
2 26 Feb 07 jari 310          0x20000010, 0x20080000, 0x00080810, 0x00000000,
2 26 Feb 07 jari 311          0x00000800, 0x20000010, 0x20000810, 0x20080800,
2 26 Feb 07 jari 312          0x20080000, 0x00000810, 0x00000010, 0x20080010,
2 26 Feb 07 jari 313       },
2 26 Feb 07 jari 314       {
2 26 Feb 07 jari 315          /* nibble 6 */
2 26 Feb 07 jari 316          0x00001000, 0x00000080, 0x00400080, 0x00400001,
2 26 Feb 07 jari 317          0x00401081, 0x00001001, 0x00001080, 0x00000000,
2 26 Feb 07 jari 318          0x00400000, 0x00400081, 0x00000081, 0x00401000,
2 26 Feb 07 jari 319          0x00000001, 0x00401080, 0x00401000, 0x00000081,
2 26 Feb 07 jari 320          0x00400081, 0x00001000, 0x00001001, 0x00401081,
2 26 Feb 07 jari 321          0x00000000, 0x00400080, 0x00400001, 0x00001080,
2 26 Feb 07 jari 322          0x00401001, 0x00001081, 0x00401080, 0x00000001,
2 26 Feb 07 jari 323          0x00001081, 0x00401001, 0x00000080, 0x00400000,
2 26 Feb 07 jari 324          0x00001081, 0x00401000, 0x00401001, 0x00000081,
2 26 Feb 07 jari 325          0x00001000, 0x00000080, 0x00400000, 0x00401001,
2 26 Feb 07 jari 326          0x00400081, 0x00001081, 0x00001080, 0x00000000,
2 26 Feb 07 jari 327          0x00000080, 0x00400001, 0x00000001, 0x00400080,
2 26 Feb 07 jari 328          0x00000000, 0x00400081, 0x00400080, 0x00001080,
2 26 Feb 07 jari 329          0x00000081, 0x00001000, 0x00401081, 0x00400000,
2 26 Feb 07 jari 330          0x00401080, 0x00000001, 0x00001001, 0x00401081,
2 26 Feb 07 jari 331          0x00400001, 0x00401080, 0x00401000, 0x00001001,
2 26 Feb 07 jari 332       },
2 26 Feb 07 jari 333       {
2 26 Feb 07 jari 334          /* nibble 7 */
2 26 Feb 07 jari 335          0x08200020, 0x08208000, 0x00008020, 0x00000000,
2 26 Feb 07 jari 336          0x08008000, 0x00200020, 0x08200000, 0x08208020,
2 26 Feb 07 jari 337          0x00000020, 0x08000000, 0x00208000, 0x00008020,
2 26 Feb 07 jari 338          0x00208020, 0x08008020, 0x08000020, 0x08200000,
2 26 Feb 07 jari 339          0x00008000, 0x00208020, 0x00200020, 0x08008000,
2 26 Feb 07 jari 340          0x08208020, 0x08000020, 0x00000000, 0x00208000,
2 26 Feb 07 jari 341          0x08000000, 0x00200000, 0x08008020, 0x08200020,
2 26 Feb 07 jari 342          0x00200000, 0x00008000, 0x08208000, 0x00000020,
2 26 Feb 07 jari 343          0x00200000, 0x00008000, 0x08000020, 0x08208020,
2 26 Feb 07 jari 344          0x00008020, 0x08000000, 0x00000000, 0x00208000,
2 26 Feb 07 jari 345          0x08200020, 0x08008020, 0x08008000, 0x00200020,
2 26 Feb 07 jari 346          0x08208000, 0x00000020, 0x00200020, 0x08008000,
2 26 Feb 07 jari 347          0x08208020, 0x00200000, 0x08200000, 0x08000020,
2 26 Feb 07 jari 348          0x00208000, 0x00008020, 0x08008020, 0x08200000,
2 26 Feb 07 jari 349          0x00000020, 0x08208000, 0x00208020, 0x00000000,
2 26 Feb 07 jari 350          0x08000000, 0x08200020, 0x00008000, 0x00208020
2 26 Feb 07 jari 351       }
2 26 Feb 07 jari 352    };
2 26 Feb 07 jari 353
2 26 Feb 07 jari 354    private static final int cov_2char[] =
2 26 Feb 07 jari 355    {
2 26 Feb 07 jari 356       0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 
2 26 Feb 07 jari 357       0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 
2 26 Feb 07 jari 358       0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 
2 26 Feb 07 jari 359       0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 
2 26 Feb 07 jari 360       0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 
2 26 Feb 07 jari 361       0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 
2 26 Feb 07 jari 362       0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 
2 26 Feb 07 jari 363       0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
2 26 Feb 07 jari 364    };
2 26 Feb 07 jari 365
2 26 Feb 07 jari 366    private static final int byteToUnsigned(byte b)
2 26 Feb 07 jari 367    {
2 26 Feb 07 jari 368       int value = (int)b;
2 26 Feb 07 jari 369
2 26 Feb 07 jari 370       return(value >= 0 ? value : value + 256);
2 26 Feb 07 jari 371    }
2 26 Feb 07 jari 372
2 26 Feb 07 jari 373    private static int fourBytesToInt(byte b[], int offset)
2 26 Feb 07 jari 374    {
2 26 Feb 07 jari 375       int value;
2 26 Feb 07 jari 376
2 26 Feb 07 jari 377       value  =  byteToUnsigned(b[offset++]);
2 26 Feb 07 jari 378       value |= (byteToUnsigned(b[offset++]) <<  8);
2 26 Feb 07 jari 379       value |= (byteToUnsigned(b[offset++]) << 16);
2 26 Feb 07 jari 380       value |= (byteToUnsigned(b[offset++]) << 24);
2 26 Feb 07 jari 381
2 26 Feb 07 jari 382       return(value);
2 26 Feb 07 jari 383    }
2 26 Feb 07 jari 384
2 26 Feb 07 jari 385    private static final void intToFourBytes(int iValue, byte b[], int offset)
2 26 Feb 07 jari 386    {
2 26 Feb 07 jari 387       b[offset++] = (byte)((iValue)        & 0xff);
2 26 Feb 07 jari 388       b[offset++] = (byte)((iValue >>> 8 ) & 0xff);
2 26 Feb 07 jari 389       b[offset++] = (byte)((iValue >>> 16) & 0xff);
2 26 Feb 07 jari 390       b[offset++] = (byte)((iValue >>> 24) & 0xff);
2 26 Feb 07 jari 391    }
2 26 Feb 07 jari 392
2 26 Feb 07 jari 393    private static final void PERM_OP(int a, int b, int n, int m, int results[])
2 26 Feb 07 jari 394    {
2 26 Feb 07 jari 395       int t;
2 26 Feb 07 jari 396
2 26 Feb 07 jari 397       t = ((a >>> n) ^ b) & m;
2 26 Feb 07 jari 398       a ^= t << n;
2 26 Feb 07 jari 399       b ^= t;
2 26 Feb 07 jari 400
2 26 Feb 07 jari 401       results[0] = a;
2 26 Feb 07 jari 402       results[1] = b;
2 26 Feb 07 jari 403    }
2 26 Feb 07 jari 404
2 26 Feb 07 jari 405    private static final int HPERM_OP(int a, int n, int m)
2 26 Feb 07 jari 406    {
2 26 Feb 07 jari 407       int t;
2 26 Feb 07 jari 408
2 26 Feb 07 jari 409       t = ((a << (16 - n)) ^ a) & m;
2 26 Feb 07 jari 410       a = a ^ t ^ (t >>> (16 - n));
2 26 Feb 07 jari 411
2 26 Feb 07 jari 412       return(a);
2 26 Feb 07 jari 413    }
2 26 Feb 07 jari 414
2 26 Feb 07 jari 415    private static int [] des_set_key(byte key[])
2 26 Feb 07 jari 416    {
2 26 Feb 07 jari 417       int schedule[] = new int[ITERATIONS * 2];
2 26 Feb 07 jari 418
2 26 Feb 07 jari 419       int c = fourBytesToInt(key, 0);
2 26 Feb 07 jari 420       int d = fourBytesToInt(key, 4);
2 26 Feb 07 jari 421
2 26 Feb 07 jari 422       int results[] = new int[2];
2 26 Feb 07 jari 423
2 26 Feb 07 jari 424       PERM_OP(d, c, 4, 0x0f0f0f0f, results);
2 26 Feb 07 jari 425       d = results[0]; c = results[1];
2 26 Feb 07 jari 426
2 26 Feb 07 jari 427       c = HPERM_OP(c, -2, 0xcccc0000);
2 26 Feb 07 jari 428       d = HPERM_OP(d, -2, 0xcccc0000);
2 26 Feb 07 jari 429
2 26 Feb 07 jari 430       PERM_OP(d, c, 1, 0x55555555, results);
2 26 Feb 07 jari 431       d = results[0]; c = results[1];
2 26 Feb 07 jari 432
2 26 Feb 07 jari 433       PERM_OP(c, d, 8, 0x00ff00ff, results);
2 26 Feb 07 jari 434       c = results[0]; d = results[1];
2 26 Feb 07 jari 435
2 26 Feb 07 jari 436       PERM_OP(d, c, 1, 0x55555555, results);
2 26 Feb 07 jari 437       d = results[0]; c = results[1];
2 26 Feb 07 jari 438
2 26 Feb 07 jari 439       d = (((d & 0x000000ff) <<  16) |  (d & 0x0000ff00)     |
2 26 Feb 07 jari 440            ((d & 0x00ff0000) >>> 16) | ((c & 0xf0000000) >>> 4));
2 26 Feb 07 jari 441       c &= 0x0fffffff;
2 26 Feb 07 jari 442
2 26 Feb 07 jari 443       int s, t;
2 26 Feb 07 jari 444       int j = 0;
2 26 Feb 07 jari 445
2 26 Feb 07 jari 446       for(int i = 0; i < ITERATIONS; i ++)
2 26 Feb 07 jari 447       {
2 26 Feb 07 jari 448          if(shifts2[i])
2 26 Feb 07 jari 449          {
2 26 Feb 07 jari 450             c = (c >>> 2) | (c << 26);
2 26 Feb 07 jari 451             d = (d >>> 2) | (d << 26);
2 26 Feb 07 jari 452          }
2 26 Feb 07 jari 453          else
2 26 Feb 07 jari 454          {
2 26 Feb 07 jari 455             c = (c >>> 1) | (c << 27);
2 26 Feb 07 jari 456             d = (d >>> 1) | (d << 27);
2 26 Feb 07 jari 457          }
2 26 Feb 07 jari 458
2 26 Feb 07 jari 459          c &= 0x0fffffff;
2 26 Feb 07 jari 460          d &= 0x0fffffff;
2 26 Feb 07 jari 461
2 26 Feb 07 jari 462          s = skb[0][ (c       ) & 0x3f                       ]|
2 26 Feb 07 jari 463              skb[1][((c >>>  6) & 0x03) | ((c >>>  7) & 0x3c)]|
2 26 Feb 07 jari 464              skb[2][((c >>> 13) & 0x0f) | ((c >>> 14) & 0x30)]|
2 26 Feb 07 jari 465              skb[3][((c >>> 20) & 0x01) | ((c >>> 21) & 0x06) |
2 26 Feb 07 jari 466                                           ((c >>> 22) & 0x38)];
2 26 Feb 07 jari 467
2 26 Feb 07 jari 468          t = skb[4][ (d     )  & 0x3f                       ]|
2 26 Feb 07 jari 469              skb[5][((d >>> 7) & 0x03) | ((d >>>  8) & 0x3c)]|
2 26 Feb 07 jari 470              skb[6][ (d >>>15) & 0x3f                       ]|
2 26 Feb 07 jari 471              skb[7][((d >>>21) & 0x0f) | ((d >>> 22) & 0x30)];
2 26 Feb 07 jari 472
2 26 Feb 07 jari 473          schedule[j++] = ((t <<  16) | (s & 0x0000ffff)) & 0xffffffff;
2 26 Feb 07 jari 474          s             = ((s >>> 16) | (t & 0xffff0000));
2 26 Feb 07 jari 475
2 26 Feb 07 jari 476          s             = (s << 4) | (s >>> 28);
2 26 Feb 07 jari 477          schedule[j++] = s & 0xffffffff;
2 26 Feb 07 jari 478       }
2 26 Feb 07 jari 479       return(schedule);
2 26 Feb 07 jari 480    }
2 26 Feb 07 jari 481
2 26 Feb 07 jari 482    private static final int D_ENCRYPT
2 26 Feb 07 jari 483    (
2 26 Feb 07 jari 484       int L, int R, int S, int E0, int E1, int s[]
2 26 Feb 07 jari 485    )
2 26 Feb 07 jari 486    {
2 26 Feb 07 jari 487       int t, u, v;
2 26 Feb 07 jari 488
2 26 Feb 07 jari 489       v = R ^ (R >>> 16);
2 26 Feb 07 jari 490       u = v & E0;
2 26 Feb 07 jari 491       v = v & E1;
2 26 Feb 07 jari 492       u = (u ^ (u << 16)) ^ R ^ s[S];
2 26 Feb 07 jari 493       t = (v ^ (v << 16)) ^ R ^ s[S + 1];
2 26 Feb 07 jari 494       t = (t >>> 4) | (t << 28);
2 26 Feb 07 jari 495
2 26 Feb 07 jari 496       L ^= SPtrans[1][(t       ) & 0x3f] |
2 26 Feb 07 jari 497            SPtrans[3][(t >>>  8) & 0x3f] |
2 26 Feb 07 jari 498            SPtrans[5][(t >>> 16) & 0x3f] |
2 26 Feb 07 jari 499            SPtrans[7][(t >>> 24) & 0x3f] |
2 26 Feb 07 jari 500            SPtrans[0][(u       ) & 0x3f] |
2 26 Feb 07 jari 501            SPtrans[2][(u >>>  8) & 0x3f] |
2 26 Feb 07 jari 502            SPtrans[4][(u >>> 16) & 0x3f] |
2 26 Feb 07 jari 503            SPtrans[6][(u >>> 24) & 0x3f];
2 26 Feb 07 jari 504
2 26 Feb 07 jari 505       return(L);
2 26 Feb 07 jari 506    }
2 26 Feb 07 jari 507
2 26 Feb 07 jari 508    private static final int [] body(int schedule[], int Eswap0, int Eswap1)
2 26 Feb 07 jari 509    {
2 26 Feb 07 jari 510       int left = 0;
2 26 Feb 07 jari 511       int right = 0;
2 26 Feb 07 jari 512       int t     = 0;
2 26 Feb 07 jari 513
2 26 Feb 07 jari 514       for(int j = 0; j < 25; j ++)
2 26 Feb 07 jari 515       {
2 26 Feb 07 jari 516          for(int i = 0; i < ITERATIONS * 2; i += 4)
2 26 Feb 07 jari 517          {
2 26 Feb 07 jari 518             left  = D_ENCRYPT(left,  right, i,     Eswap0, Eswap1, schedule);
2 26 Feb 07 jari 519             right = D_ENCRYPT(right, left,  i + 2, Eswap0, Eswap1, schedule);
2 26 Feb 07 jari 520          }
2 26 Feb 07 jari 521          t     = left; 
2 26 Feb 07 jari 522          left  = right; 
2 26 Feb 07 jari 523          right = t;
2 26 Feb 07 jari 524       }
2 26 Feb 07 jari 525
2 26 Feb 07 jari 526       t = right;
2 26 Feb 07 jari 527
2 26 Feb 07 jari 528       right = (left >>> 1) | (left << 31);
2 26 Feb 07 jari 529       left  = (t    >>> 1) | (t    << 31);
2 26 Feb 07 jari 530
2 26 Feb 07 jari 531       left  &= 0xffffffff;
2 26 Feb 07 jari 532       right &= 0xffffffff;
2 26 Feb 07 jari 533
2 26 Feb 07 jari 534       int results[] = new int[2];
2 26 Feb 07 jari 535
2 26 Feb 07 jari 536       PERM_OP(right, left, 1, 0x55555555, results); 
2 26 Feb 07 jari 537       right = results[0]; left = results[1];
2 26 Feb 07 jari 538
2 26 Feb 07 jari 539       PERM_OP(left, right, 8, 0x00ff00ff, results); 
2 26 Feb 07 jari 540       left = results[0]; right = results[1];
2 26 Feb 07 jari 541
2 26 Feb 07 jari 542       PERM_OP(right, left, 2, 0x33333333, results); 
2 26 Feb 07 jari 543       right = results[0]; left = results[1];
2 26 Feb 07 jari 544
2 26 Feb 07 jari 545       PERM_OP(left, right, 16, 0x0000ffff, results);
2 26 Feb 07 jari 546       left = results[0]; right = results[1];
2 26 Feb 07 jari 547
2 26 Feb 07 jari 548       PERM_OP(right, left, 4, 0x0f0f0f0f, results);
2 26 Feb 07 jari 549       right = results[0]; left = results[1];
2 26 Feb 07 jari 550
2 26 Feb 07 jari 551       int out[] = new int[2];
2 26 Feb 07 jari 552
2 26 Feb 07 jari 553       out[0] = left; out[1] = right;
2 26 Feb 07 jari 554
2 26 Feb 07 jari 555       return(out);
2 26 Feb 07 jari 556    }
2 26 Feb 07 jari 557
2 26 Feb 07 jari 558    public static final String crypt(String salt, String original)
2 26 Feb 07 jari 559    {
2 26 Feb 07 jari 560       while(salt.length() < 2)
2 26 Feb 07 jari 561          salt += "A";
2 26 Feb 07 jari 562
2 26 Feb 07 jari 563       StringBuffer buffer = new StringBuffer("             ");
2 26 Feb 07 jari 564
2 26 Feb 07 jari 565       char charZero = salt.charAt(0);
2 26 Feb 07 jari 566       char charOne  = salt.charAt(1);
2 26 Feb 07 jari 567
2 26 Feb 07 jari 568       buffer.setCharAt(0, charZero);
2 26 Feb 07 jari 569       buffer.setCharAt(1, charOne);
2 26 Feb 07 jari 570
2 26 Feb 07 jari 571       int Eswap0 = con_salt[(int)charZero];
2 26 Feb 07 jari 572       int Eswap1 = con_salt[(int)charOne] << 4;
2 26 Feb 07 jari 573  
2 26 Feb 07 jari 574       byte key[] = new byte[8];
2 26 Feb 07 jari 575
2 26 Feb 07 jari 576       for(int i = 0; i < key.length; i ++)
2 26 Feb 07 jari 577          key[i] = (byte)0;
2 26 Feb 07 jari 578
2 26 Feb 07 jari 579       for(int i = 0; i < key.length && i < original.length(); i ++)
2 26 Feb 07 jari 580       {
2 26 Feb 07 jari 581          int iChar = (int)original.charAt(i);
2 26 Feb 07 jari 582
2 26 Feb 07 jari 583          key[i] = (byte)(iChar << 1);
2 26 Feb 07 jari 584       }
2 26 Feb 07 jari 585
2 26 Feb 07 jari 586       int schedule[] = des_set_key(key);
2 26 Feb 07 jari 587       int out[]      = body(schedule, Eswap0, Eswap1);
2 26 Feb 07 jari 588
2 26 Feb 07 jari 589       byte b[] = new byte[9];
2 26 Feb 07 jari 590
2 26 Feb 07 jari 591       intToFourBytes(out[0], b, 0);
2 26 Feb 07 jari 592       intToFourBytes(out[1], b, 4);
2 26 Feb 07 jari 593       b[8] = 0;
2 26 Feb 07 jari 594
2 26 Feb 07 jari 595       for(int i = 2, y = 0, u = 0x80; i < 13; i ++)
2 26 Feb 07 jari 596       {
2 26 Feb 07 jari 597          for(int j = 0, c = 0; j < 6; j ++)
2 26 Feb 07 jari 598          {
2 26 Feb 07 jari 599             c <<= 1;
2 26 Feb 07 jari 600
2 26 Feb 07 jari 601             if(((int)b[y] & u) != 0)
2 26 Feb 07 jari 602                c |= 1;
2 26 Feb 07 jari 603
2 26 Feb 07 jari 604             u >>>= 1;
2 26 Feb 07 jari 605
2 26 Feb 07 jari 606             if(u == 0)
2 26 Feb 07 jari 607             {
2 26 Feb 07 jari 608                y++;
2 26 Feb 07 jari 609                u = 0x80;
2 26 Feb 07 jari 610             }
2 26 Feb 07 jari 611             buffer.setCharAt(i, (char)cov_2char[c]);
2 26 Feb 07 jari 612          }
2 26 Feb 07 jari 613       }
2 26 Feb 07 jari 614       return(buffer.toString());
2 26 Feb 07 jari 615    }
2 26 Feb 07 jari 616 }
2 26 Feb 07 jari 617