KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ch > ethz > ssh2 > crypto > cipher > CTRMode


1
2 package ch.ethz.ssh2.crypto.cipher;
3
4 /**
5  * This is CTR mode as described in draft-ietf-secsh-newmodes-XY.txt
6  *
7  * @author Christian Plattner, plattner@inf.ethz.ch
8  * @version $Id: CTRMode.java,v 1.1 2005/06/06 12:44:25 cplattne Exp $
9  */

10 public class CTRMode implements BlockCipher
11 {
12     byte[] X;
13     byte[] Xenc;
14
15     BlockCipher bc;
16     int blockSize;
17     boolean doEncrypt;
18
19     int count = 0;
20
21     public void init(boolean forEncryption, byte[] key)
22     {
23     }
24
25     public CTRMode(BlockCipher tc, byte[] iv, boolean doEnc) throws IllegalArgumentException JavaDoc
26     {
27         bc = tc;
28         blockSize = bc.getBlockSize();
29         doEncrypt = doEnc;
30
31         if (blockSize != iv.length)
32             throw new IllegalArgumentException JavaDoc("IV must be " + blockSize + " bytes long! (currently " + iv.length + ")");
33
34         X = new byte[blockSize];
35         Xenc = new byte[blockSize];
36
37         System.arraycopy(iv, 0, X, 0, blockSize);
38     }
39
40     public final int getBlockSize()
41     {
42         return blockSize;
43     }
44
45     public final void transformBlock(byte[] src, int srcoff, byte[] dst, int dstoff)
46     {
47         bc.transformBlock(X, 0, Xenc, 0);
48
49         for (int i = 0; i < blockSize; i++)
50         {
51             dst[dstoff + i] = (byte) (src[srcoff + i] ^ Xenc[i]);
52         }
53
54         for (int i = (blockSize - 1); i >= 0; i--)
55         {
56             X[i]++;
57             if (X[i] != 0)
58                 break;
59
60         }
61     }
62 }
63
Popular Tags