01: package ch.ethz.ssh2.crypto.cipher;
02:
03: /*
04: This file was shamelessly taken (and modified) from the Bouncy Castle Crypto package.
05: Their licence file states the following:
06:
07: Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
08: (http://www.bouncycastle.org)
09:
10: Permission is hereby granted, free of charge, to any person obtaining a copy
11: of this software and associated documentation files (the "Software"), to deal
12: in the Software without restriction, including without limitation the rights
13: to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14: copies of the Software, and to permit persons to whom the Software is
15: furnished to do so, subject to the following conditions:
16:
17: The above copyright notice and this permission notice shall be included in
18: all copies or substantial portions of the Software.
19:
20: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21: IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22: FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23: AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26: THE SOFTWARE.
27: */
28:
29: /**
30: * DESede.
31: *
32: * @author See comments in the source file
33: * @version $Id: DESede.java,v 1.3 2005/08/11 12:47:27 cplattne Exp $ethz.ch
34: *
35: */
36: public class DESede extends DES {
37: private int[] key1 = null;
38: private int[] key2 = null;
39: private int[] key3 = null;
40:
41: private boolean encrypt;
42:
43: /**
44: * standard constructor.
45: */
46: public DESede() {
47: }
48:
49: /**
50: * initialise a DES cipher.
51: *
52: * @param encrypting
53: * whether or not we are for encryption.
54: * @param key
55: * the parameters required to set up the cipher.
56: * @exception IllegalArgumentException
57: * if the params argument is inappropriate.
58: */
59: public void init(boolean encrypting, byte[] key) {
60: key1 = generateWorkingKey(encrypting, key, 0);
61: key2 = generateWorkingKey(!encrypting, key, 8);
62: key3 = generateWorkingKey(encrypting, key, 16);
63:
64: encrypt = encrypting;
65: }
66:
67: public String getAlgorithmName() {
68: return "DESede";
69: }
70:
71: public int getBlockSize() {
72: return 8;
73: }
74:
75: public void transformBlock(byte[] in, int inOff, byte[] out,
76: int outOff) {
77: if (key1 == null) {
78: throw new IllegalStateException(
79: "DESede engine not initialised!");
80: }
81:
82: if (encrypt) {
83: desFunc(key1, in, inOff, out, outOff);
84: desFunc(key2, out, outOff, out, outOff);
85: desFunc(key3, out, outOff, out, outOff);
86: } else {
87: desFunc(key3, in, inOff, out, outOff);
88: desFunc(key2, out, outOff, out, outOff);
89: desFunc(key1, out, outOff, out, outOff);
90: }
91: }
92:
93: public void reset() {
94: }
95: }
|