2 Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
4 This file is a part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or (at
9 your option) any later version.
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
39 package gnu
.javax
.crypto
.cipher
;
41 import gnu
.java
.security
.Registry
;
42 import gnu
.java
.security
.util
.Util
;
44 import java
.security
.InvalidKeyException
;
45 import java
.util
.ArrayList
;
46 import java
.util
.Collections
;
47 import java
.util
.Iterator
;
50 * <p>Serpent is a 32-round substitution-permutation network block cipher,
51 * operating on 128-bit blocks and accepting keys of 128, 192, and 256 bits in
52 * length. At each round the plaintext is XORed with a 128 bit portion of the
53 * session key -- a 4224 bit key computed from the input key -- then one of
54 * eight S-boxes are applied, and finally a simple linear transformation is
55 * done. Decryption does the exact same thing in reverse order, and using the
56 * eight inverses of the S-boxes.</p>
58 * <p>Serpent was designed by Ross Anderson, Eli Biham, and Lars Knudsen as a
59 * proposed cipher for the Advanced Encryption Standard.</p>
61 * <p>Serpent can be sped up greatly by replacing S-box substitution with a
62 * sequence of binary operations, and the optimal implementation depends
63 * upon finding the fastest sequence of binary operations that reproduce this
64 * substitution. This implementation uses the S-boxes discovered by
65 * <a href="http://www.ii.uib.no/~osvik/">Dag Arne Osvik</a>, which are
66 * optimized for the Pentium family of processors.</p>
71 * <li><a href="http://www.cl.cam.ac.uk/~rja14/serpent.html">Serpent: A
72 * Candidate Block Cipher for the Advanced Encryption Standard.</a></li>
75 public class Serpent
extends BaseCipher
78 // Constants and variables
79 // -------------------------------------------------------------------------
81 private static final int DEFAULT_KEY_SIZE
= 16;
83 private static final int DEFAULT_BLOCK_SIZE
= 16;
85 private static final int ROUNDS
= 32;
87 /** The fractional part of the golden ratio, (sqrt(5)+1)/2. */
88 private static final int PHI
= 0x9e3779b9;
91 * KAT vector (from ecb_vk):
93 * KEY=008000000000000000000000000000000000000000000000
94 * CT=5587B5BCB9EE5A28BA2BACC418005240
96 private static final byte[] KAT_KEY
= Util
.toReversedBytesFromString("008000000000000000000000000000000000000000000000");
98 private static final byte[] KAT_CT
= Util
.toReversedBytesFromString("5587B5BCB9EE5A28BA2BACC418005240");
100 /** caches the result of the correctness test, once executed. */
101 private static Boolean valid
;
103 private int x0
, x1
, x2
, x3
, x4
;
106 // -------------------------------------------------------------------------
108 /** Trivial zero-argument constructor. */
111 super(Registry
.SERPENT_CIPHER
, DEFAULT_BLOCK_SIZE
, DEFAULT_KEY_SIZE
);
115 // -------------------------------------------------------------------------
118 // -------------------------------------------------------------------------
120 // java.lang.Cloneable interface implementation ----------------------------
122 public Object
clone()
124 Serpent result
= new Serpent();
125 result
.currentBlockSize
= this.currentBlockSize
;
129 // IBlockCipherSpi interface implementation --------------------------------
131 public Iterator
blockSizes()
133 return Collections
.singleton(new Integer(DEFAULT_BLOCK_SIZE
)).iterator();
136 public Iterator
keySizes()
138 ArrayList keySizes
= new ArrayList();
139 keySizes
.add(new Integer(16));
140 keySizes
.add(new Integer(24));
141 keySizes
.add(new Integer(32));
143 return Collections
.unmodifiableList(keySizes
).iterator();
146 public Object
makeKey(byte[] kb
, int blockSize
) throws InvalidKeyException
148 // Not strictly true, but here to conform with the AES proposal.
149 // This restriction can be removed if deemed necessary.
150 if (kb
.length
!= 16 && kb
.length
!= 24 && kb
.length
!= 32)
152 throw new InvalidKeyException("Key length is not 16, 24, or 32 bytes");
156 // Here w is our "pre-key".
157 int[] w
= new int[4 * (ROUNDS
+ 1)];
159 for (i
= 0, j
= 0; i
< 8 && j
< kb
.length
; i
++)
161 w
[i
] = (kb
[j
++] & 0xff) | (kb
[j
++] & 0xff) << 8
162 | (kb
[j
++] & 0xff) << 16 | (kb
[j
++] & 0xff) << 24;
164 // Pad key if < 256 bits.
169 // Transform using w_i-8 ... w_i-1
170 for (i
= 8, j
= 0; i
< 16; i
++)
172 int t
= w
[j
] ^ w
[i
- 5] ^ w
[i
- 3] ^ w
[i
- 1] ^ PHI ^ j
++;
173 w
[i
] = t
<< 11 | t
>>> 21;
176 for (i
= 0; i
< 8; i
++)
180 // Transform the rest of the key.
181 for (; i
< w
.length
; i
++)
183 int t
= w
[i
- 8] ^ w
[i
- 5] ^ w
[i
- 3] ^ w
[i
- 1] ^ PHI ^ i
;
184 w
[i
] = t
<< 11 | t
>>> 21;
187 // After these s-boxes the pre-key (w, above) will become the
188 // session key (key, below).
189 sbox3(w
[0], w
[1], w
[2], w
[3]);
194 sbox2(w
[4], w
[5], w
[6], w
[7]);
199 sbox1(w
[8], w
[9], w
[10], w
[11]);
204 sbox0(w
[12], w
[13], w
[14], w
[15]);
209 sbox7(w
[16], w
[17], w
[18], w
[19]);
214 sbox6(w
[20], w
[21], w
[22], w
[23]);
219 sbox5(w
[24], w
[25], w
[26], w
[27]);
224 sbox4(w
[28], w
[29], w
[30], w
[31]);
229 sbox3(w
[32], w
[33], w
[34], w
[35]);
234 sbox2(w
[36], w
[37], w
[38], w
[39]);
239 sbox1(w
[40], w
[41], w
[42], w
[43]);
244 sbox0(w
[44], w
[45], w
[46], w
[47]);
249 sbox7(w
[48], w
[49], w
[50], w
[51]);
254 sbox6(w
[52], w
[53], w
[54], w
[55]);
259 sbox5(w
[56], w
[57], w
[58], w
[59]);
264 sbox4(w
[60], w
[61], w
[62], w
[63]);
269 sbox3(w
[64], w
[65], w
[66], w
[67]);
274 sbox2(w
[68], w
[69], w
[70], w
[71]);
279 sbox1(w
[72], w
[73], w
[74], w
[75]);
284 sbox0(w
[76], w
[77], w
[78], w
[79]);
289 sbox7(w
[80], w
[81], w
[82], w
[83]);
294 sbox6(w
[84], w
[85], w
[86], w
[87]);
299 sbox5(w
[88], w
[89], w
[90], w
[91]);
304 sbox4(w
[92], w
[93], w
[94], w
[95]);
309 sbox3(w
[96], w
[97], w
[98], w
[99]);
314 sbox2(w
[100], w
[101], w
[102], w
[103]);
319 sbox1(w
[104], w
[105], w
[106], w
[107]);
324 sbox0(w
[108], w
[109], w
[110], w
[111]);
329 sbox7(w
[112], w
[113], w
[114], w
[115]);
334 sbox6(w
[116], w
[117], w
[118], w
[119]);
339 sbox5(w
[120], w
[121], w
[122], w
[123]);
344 sbox4(w
[124], w
[125], w
[126], w
[127]);
349 sbox3(w
[128], w
[129], w
[130], w
[131]);
358 public synchronized void encrypt(byte[] in
, int i
, byte[] out
, int o
,
363 x0
= (in
[i
] & 0xff) | (in
[i
+ 1] & 0xff) << 8 | (in
[i
+ 2] & 0xff) << 16
364 | (in
[i
+ 3] & 0xff) << 24;
365 x1
= (in
[i
+ 4] & 0xff) | (in
[i
+ 5] & 0xff) << 8
366 | (in
[i
+ 6] & 0xff) << 16 | (in
[i
+ 7] & 0xff) << 24;
367 x2
= (in
[i
+ 8] & 0xff) | (in
[i
+ 9] & 0xff) << 8
368 | (in
[i
+ 10] & 0xff) << 16 | (in
[i
+ 11] & 0xff) << 24;
369 x3
= (in
[i
+ 12] & 0xff) | (in
[i
+ 13] & 0xff) << 8
370 | (in
[i
+ 14] & 0xff) << 16 | (in
[i
+ 15] & 0xff) << 24;
553 out
[o
+ 1] = (byte) (x0
>>> 8);
554 out
[o
+ 2] = (byte) (x0
>>> 16);
555 out
[o
+ 3] = (byte) (x0
>>> 24);
556 out
[o
+ 4] = (byte) x1
;
557 out
[o
+ 5] = (byte) (x1
>>> 8);
558 out
[o
+ 6] = (byte) (x1
>>> 16);
559 out
[o
+ 7] = (byte) (x1
>>> 24);
560 out
[o
+ 8] = (byte) x2
;
561 out
[o
+ 9] = (byte) (x2
>>> 8);
562 out
[o
+ 10] = (byte) (x2
>>> 16);
563 out
[o
+ 11] = (byte) (x2
>>> 24);
564 out
[o
+ 12] = (byte) x3
;
565 out
[o
+ 13] = (byte) (x3
>>> 8);
566 out
[o
+ 14] = (byte) (x3
>>> 16);
567 out
[o
+ 15] = (byte) (x3
>>> 24);
570 public synchronized void decrypt(byte[] in
, int i
, byte[] out
, int o
,
575 x0
= (in
[i
] & 0xff) | (in
[i
+ 1] & 0xff) << 8 | (in
[i
+ 2] & 0xff) << 16
576 | (in
[i
+ 3] & 0xff) << 24;
577 x1
= (in
[i
+ 4] & 0xff) | (in
[i
+ 5] & 0xff) << 8
578 | (in
[i
+ 6] & 0xff) << 16 | (in
[i
+ 7] & 0xff) << 24;
579 x2
= (in
[i
+ 8] & 0xff) | (in
[i
+ 9] & 0xff) << 8
580 | (in
[i
+ 10] & 0xff) << 16 | (in
[i
+ 11] & 0xff) << 24;
581 x3
= (in
[i
+ 12] & 0xff) | (in
[i
+ 13] & 0xff) << 8
582 | (in
[i
+ 14] & 0xff) << 16 | (in
[i
+ 15] & 0xff) << 24;
766 out
[o
+ 1] = (byte) (x0
>>> 8);
767 out
[o
+ 2] = (byte) (x0
>>> 16);
768 out
[o
+ 3] = (byte) (x0
>>> 24);
769 out
[o
+ 4] = (byte) x1
;
770 out
[o
+ 5] = (byte) (x1
>>> 8);
771 out
[o
+ 6] = (byte) (x1
>>> 16);
772 out
[o
+ 7] = (byte) (x1
>>> 24);
773 out
[o
+ 8] = (byte) x2
;
774 out
[o
+ 9] = (byte) (x2
>>> 8);
775 out
[o
+ 10] = (byte) (x2
>>> 16);
776 out
[o
+ 11] = (byte) (x2
>>> 24);
777 out
[o
+ 12] = (byte) x3
;
778 out
[o
+ 13] = (byte) (x3
>>> 8);
779 out
[o
+ 14] = (byte) (x3
>>> 16);
780 out
[o
+ 15] = (byte) (x3
>>> 24);
783 public boolean selfTest()
787 boolean result
= super.selfTest(); // do symmetry tests
790 result
= testKat(KAT_KEY
, KAT_CT
);
792 valid
= new Boolean(result
);
794 return valid
.booleanValue();
797 // Own methods. ----------------------------------------------------------
799 // These first few S-boxes operate directly on the "registers",
800 // x0..x4, and perform the linear transform.
823 x1
= (x1
<< 13) | (x1
>>> 19);
826 x2
= (x2
<< 3) | (x2
>>> 29);
829 x4
= (x4
<< 1) | (x4
>>> 31);
831 x0
= (x0
<< 7) | (x0
>>> 25);
838 x1
= (x1
<< 5) | (x1
>>> 27);
839 x2
= (x2
<< 22) | (x2
>>> 10);
868 x0
= (x0
<< 13) | (x0
>>> 19);
871 x2
= (x2
<< 3) | (x2
>>> 29);
874 x4
= (x4
<< 1) | (x4
>>> 31);
876 x1
= (x1
<< 7) | (x1
>>> 25);
883 x0
= (x0
<< 5) | (x0
>>> 27);
884 x2
= (x2
<< 22) | (x2
>>> 10);
906 x2
= (x2
<< 13) | (x2
>>> 19);
909 x4
= (x4
<< 3) | (x4
>>> 29);
912 x1
= (x1
<< 1) | (x1
>>> 31);
914 x3
= (x3
<< 7) | (x3
>>> 25);
921 x2
= (x2
<< 5) | (x2
>>> 27);
922 x4
= (x4
<< 22) | (x4
>>> 10);
947 x1
= (x1
<< 13) | (x1
>>> 19);
950 x3
= (x3
<< 3) | (x3
>>> 29);
953 x4
= (x4
<< 1) | (x4
>>> 31);
955 x0
= (x0
<< 7) | (x0
>>> 25);
962 x1
= (x1
<< 5) | (x1
>>> 27);
963 x3
= (x3
<< 22) | (x3
>>> 10);
989 x4
= (x4
<< 13) | (x4
>>> 19);
992 x1
= (x1
<< 3) | (x1
>>> 29);
995 x2
= (x2
<< 1) | (x2
>>> 31);
997 x0
= (x0
<< 7) | (x0
>>> 25);
1004 x4
= (x4
<< 5) | (x4
>>> 27);
1005 x1
= (x1
<< 22) | (x1
>>> 10);
1008 private void sbox5()
1030 x2
= (x2
<< 13) | (x2
>>> 19);
1033 x4
= (x4
<< 3) | (x4
>>> 29);
1036 x0
= (x0
<< 1) | (x0
>>> 31);
1038 x1
= (x1
<< 7) | (x1
>>> 25);
1045 x2
= (x2
<< 5) | (x2
>>> 27);
1046 x4
= (x4
<< 22) | (x4
>>> 10);
1049 private void sbox6()
1069 x2
= (x2
<< 13) | (x2
>>> 19);
1072 x3
= (x3
<< 3) | (x3
>>> 29);
1075 x0
= (x0
<< 1) | (x0
>>> 31);
1077 x4
= (x4
<< 7) | (x4
>>> 25);
1084 x2
= (x2
<< 5) | (x2
>>> 27);
1085 x3
= (x3
<< 22) | (x3
>>> 10);
1088 private void sbox7()
1110 x3
= (x3
<< 13) | (x3
>>> 19);
1113 x4
= (x4
<< 3) | (x4
>>> 29);
1116 x1
= (x1
<< 1) | (x1
>>> 31);
1118 x2
= (x2
<< 7) | (x2
>>> 25);
1125 x3
= (x3
<< 5) | (x3
>>> 27);
1126 x4
= (x4
<< 22) | (x4
>>> 10);
1129 /** The final S-box, with no transform. */
1130 private void sbox7noLT()
1154 private void sboxI7noLT()
1177 private void sboxI6()
1179 x1
= (x1
>>> 22) | (x1
<< 10);
1180 x3
= (x3
>>> 5) | (x3
<< 27);
1187 x4
= (x4
>>> 7) | (x4
<< 25);
1188 x0
= (x0
>>> 1) | (x0
<< 31);
1192 x3
= (x3
>>> 13) | (x3
<< 19);
1195 x1
= (x1
>>> 3) | (x1
<< 29);
1215 private void sboxI5()
1217 x2
= (x2
>>> 22) | (x2
<< 10);
1218 x0
= (x0
>>> 5) | (x0
<< 27);
1225 x4
= (x4
>>> 7) | (x4
<< 25);
1226 x1
= (x1
>>> 1) | (x1
<< 31);
1230 x0
= (x0
>>> 13) | (x0
<< 19);
1233 x2
= (x2
>>> 3) | (x2
<< 29);
1255 private void sboxI4()
1257 x4
= (x4
>>> 22) | (x4
<< 10);
1258 x1
= (x1
>>> 5) | (x1
<< 27);
1265 x2
= (x2
>>> 7) | (x2
<< 25);
1266 x3
= (x3
>>> 1) | (x3
<< 31);
1270 x1
= (x1
>>> 13) | (x1
<< 19);
1273 x4
= (x4
>>> 3) | (x4
<< 29);
1296 private void sboxI3()
1298 x4
= (x4
>>> 22) | (x4
<< 10);
1299 x1
= (x1
>>> 5) | (x1
<< 27);
1306 x0
= (x0
>>> 7) | (x0
<< 25);
1307 x2
= (x2
>>> 1) | (x2
<< 31);
1311 x1
= (x1
>>> 13) | (x1
<< 19);
1314 x4
= (x4
>>> 3) | (x4
<< 29);
1335 private void sboxI2()
1337 x4
= (x4
>>> 22) | (x4
<< 10);
1338 x0
= (x0
>>> 5) | (x0
<< 27);
1345 x2
= (x2
>>> 7) | (x2
<< 25);
1346 x1
= (x1
>>> 1) | (x1
<< 31);
1350 x0
= (x0
>>> 13) | (x0
<< 19);
1353 x4
= (x4
>>> 3) | (x4
<< 29);
1375 private void sboxI1()
1377 x4
= (x4
>>> 22) | (x4
<< 10);
1378 x1
= (x1
>>> 5) | (x1
<< 27);
1385 x2
= (x2
>>> 7) | (x2
<< 25);
1386 x3
= (x3
>>> 1) | (x3
<< 31);
1390 x1
= (x1
>>> 13) | (x1
<< 19);
1393 x4
= (x4
>>> 3) | (x4
<< 29);
1415 private void sboxI0()
1417 x2
= (x2
>>> 22) | (x2
<< 10);
1418 x0
= (x0
>>> 5) | (x0
<< 27);
1425 x4
= (x4
>>> 7) | (x4
<< 25);
1426 x1
= (x1
>>> 1) | (x1
<< 31);
1430 x0
= (x0
>>> 13) | (x0
<< 19);
1433 x2
= (x2
>>> 3) | (x2
<< 29);
1455 private void sboxI7()
1457 x1
= (x1
>>> 22) | (x1
<< 10);
1458 x0
= (x0
>>> 5) | (x0
<< 27);
1465 x4
= (x4
>>> 7) | (x4
<< 25);
1466 x3
= (x3
>>> 1) | (x3
<< 31);
1470 x0
= (x0
>>> 13) | (x0
<< 19);
1473 x1
= (x1
>>> 3) | (x1
<< 29);
1495 // These S-Box functions are used in the key setup.
1498 private void sbox0(int r0
, int r1
, int r2
, int r3
)
1503 r0
= (r0
| r3
) ^ r4
;
1506 r2
= (r2
| r1
) ^ r4
;
1517 private void sbox1(int r0
, int r1
, int r2
, int r3
)
1530 r2
= (r2
| r0
) & r4
;
1539 private void sbox2(int r0
, int r1
, int r2
, int r3
)
1544 r3
= (r3
| r4
) ^ r1
;
1547 r3
= (r3
| r4
) ^ r0
;
1557 private void sbox3(int r0
, int r1
, int r2
, int r3
)
1568 r1
= (r1 ^ r3
| r0
) ^ r2
;
1570 x0
= (r1
| r3
) ^ r0
;
1577 private void sbox4(int r0
, int r1
, int r2
, int r3
)
1590 r4
= (r4
| r1
) ^ r0
;
1592 x1
= r4 ^
(r2
& r3
);
1593 x2
= ~
((r0
| r3
) ^ r2
);
1598 private void sbox5(int r0
, int r1
, int r2
, int r3
)
1614 x3
= ~
(r2 ^ r0
) ^
(r4
| r3
);
1618 private void sbox6(int r0
, int r1
, int r2
, int r3
)
1624 r2
= (r2
| r4
) ^ r0
;
1629 r0
= (r0
| r3
) ^ r2
;
1638 private void sbox7(int r0
, int r1
, int r2
, int r3
)
1641 r1
= (r1
| r2
) ^ r3
;
1644 r3
= (r3
| r4
) & r0
;
1647 r1
= (r1
| r4
) ^ r0
;
1648 r0
= (r0
| r4
) ^ r2
;
1651 x0
= r4 ^
(~r2
| r0
);
1658 // -----------------------------------------------------------------------
1660 private class Key
implements Cloneable
1663 // Constants and variables.
1664 // --------------------------------------------------------------------
1666 int k0
, k1
, k2
, k3
, k4
, k5
, k6
, k7
, k8
, k9
, k10
, k11
, k12
, k13
, k14
, k15
,
1667 k16
, k17
, k18
, k19
, k20
, k21
, k22
, k23
, k24
, k25
, k26
, k27
, k28
, k29
,
1668 k30
, k31
, k32
, k33
, k34
, k35
, k36
, k37
, k38
, k39
, k40
, k41
, k42
, k43
,
1669 k44
, k45
, k46
, k47
, k48
, k49
, k50
, k51
, k52
, k53
, k54
, k55
, k56
, k57
,
1670 k58
, k59
, k60
, k61
, k62
, k63
, k64
, k65
, k66
, k67
, k68
, k69
, k70
, k71
,
1671 k72
, k73
, k74
, k75
, k76
, k77
, k78
, k79
, k80
, k81
, k82
, k83
, k84
, k85
,
1672 k86
, k87
, k88
, k89
, k90
, k91
, k92
, k93
, k94
, k95
, k96
, k97
, k98
, k99
,
1673 k100
, k101
, k102
, k103
, k104
, k105
, k106
, k107
, k108
, k109
, k110
, k111
,
1674 k112
, k113
, k114
, k115
, k116
, k117
, k118
, k119
, k120
, k121
, k122
, k123
,
1675 k124
, k125
, k126
, k127
, k128
, k129
, k130
, k131
;
1678 // --------------------------------------------------------------------
1680 /** Trivial 0-arguments constructor. */
1685 /** Cloning constructor. */
1686 private Key(Key that
)
1698 this.k10
= that
.k10
;
1699 this.k11
= that
.k11
;
1700 this.k12
= that
.k12
;
1701 this.k13
= that
.k13
;
1702 this.k14
= that
.k14
;
1703 this.k15
= that
.k15
;
1704 this.k16
= that
.k16
;
1705 this.k17
= that
.k17
;
1706 this.k18
= that
.k18
;
1707 this.k19
= that
.k19
;
1708 this.k20
= that
.k20
;
1709 this.k21
= that
.k21
;
1710 this.k22
= that
.k22
;
1711 this.k23
= that
.k23
;
1712 this.k24
= that
.k24
;
1713 this.k25
= that
.k25
;
1714 this.k26
= that
.k26
;
1715 this.k27
= that
.k27
;
1716 this.k28
= that
.k28
;
1717 this.k29
= that
.k29
;
1718 this.k30
= that
.k30
;
1719 this.k31
= that
.k31
;
1720 this.k32
= that
.k32
;
1721 this.k33
= that
.k33
;
1722 this.k34
= that
.k34
;
1723 this.k35
= that
.k35
;
1724 this.k36
= that
.k36
;
1725 this.k37
= that
.k37
;
1726 this.k38
= that
.k38
;
1727 this.k39
= that
.k39
;
1728 this.k40
= that
.k40
;
1729 this.k41
= that
.k41
;
1730 this.k42
= that
.k42
;
1731 this.k43
= that
.k43
;
1732 this.k44
= that
.k44
;
1733 this.k45
= that
.k45
;
1734 this.k46
= that
.k46
;
1735 this.k47
= that
.k47
;
1736 this.k48
= that
.k48
;
1737 this.k49
= that
.k49
;
1738 this.k50
= that
.k50
;
1739 this.k51
= that
.k51
;
1740 this.k52
= that
.k52
;
1741 this.k53
= that
.k53
;
1742 this.k54
= that
.k54
;
1743 this.k55
= that
.k55
;
1744 this.k56
= that
.k56
;
1745 this.k57
= that
.k57
;
1746 this.k58
= that
.k58
;
1747 this.k59
= that
.k59
;
1748 this.k60
= that
.k60
;
1749 this.k61
= that
.k61
;
1750 this.k62
= that
.k62
;
1751 this.k63
= that
.k63
;
1752 this.k64
= that
.k64
;
1753 this.k65
= that
.k65
;
1754 this.k66
= that
.k66
;
1755 this.k67
= that
.k67
;
1756 this.k68
= that
.k68
;
1757 this.k69
= that
.k69
;
1758 this.k70
= that
.k70
;
1759 this.k71
= that
.k71
;
1760 this.k72
= that
.k72
;
1761 this.k73
= that
.k73
;
1762 this.k74
= that
.k74
;
1763 this.k75
= that
.k75
;
1764 this.k76
= that
.k76
;
1765 this.k77
= that
.k77
;
1766 this.k78
= that
.k78
;
1767 this.k79
= that
.k79
;
1768 this.k80
= that
.k80
;
1769 this.k81
= that
.k81
;
1770 this.k82
= that
.k82
;
1771 this.k83
= that
.k83
;
1772 this.k84
= that
.k84
;
1773 this.k85
= that
.k85
;
1774 this.k86
= that
.k86
;
1775 this.k87
= that
.k87
;
1776 this.k88
= that
.k88
;
1777 this.k89
= that
.k89
;
1778 this.k90
= that
.k90
;
1779 this.k91
= that
.k91
;
1780 this.k92
= that
.k92
;
1781 this.k93
= that
.k93
;
1782 this.k94
= that
.k94
;
1783 this.k95
= that
.k95
;
1784 this.k96
= that
.k96
;
1785 this.k97
= that
.k97
;
1786 this.k98
= that
.k98
;
1787 this.k99
= that
.k99
;
1788 this.k100
= that
.k100
;
1789 this.k101
= that
.k101
;
1790 this.k102
= that
.k102
;
1791 this.k103
= that
.k103
;
1792 this.k104
= that
.k104
;
1793 this.k105
= that
.k105
;
1794 this.k106
= that
.k106
;
1795 this.k107
= that
.k107
;
1796 this.k108
= that
.k108
;
1797 this.k109
= that
.k109
;
1798 this.k110
= that
.k110
;
1799 this.k111
= that
.k111
;
1800 this.k112
= that
.k112
;
1801 this.k113
= that
.k113
;
1802 this.k114
= that
.k114
;
1803 this.k115
= that
.k115
;
1804 this.k116
= that
.k116
;
1805 this.k117
= that
.k117
;
1806 this.k118
= that
.k118
;
1807 this.k119
= that
.k119
;
1808 this.k120
= that
.k120
;
1809 this.k121
= that
.k121
;
1810 this.k122
= that
.k122
;
1811 this.k123
= that
.k123
;
1812 this.k124
= that
.k124
;
1813 this.k125
= that
.k125
;
1814 this.k126
= that
.k126
;
1815 this.k127
= that
.k127
;
1816 this.k128
= that
.k128
;
1817 this.k129
= that
.k129
;
1818 this.k130
= that
.k130
;
1819 this.k131
= that
.k131
;
1822 // Cloneable interface implementation.
1823 // --------------------------------------------------------------------
1825 public Object
clone()
1827 return new Key(this);