1    package org.bouncycastle.crypto;
2    
3    /**
4     * the interface stream ciphers conform to.
5     */
6    public interface StreamCipher
7    {
8        /**
9         * Initialise the cipher.
10        *
11        * @param forEncryption if true the cipher is initialised for
12        *  encryption, if false for decryption.
13        * @param param the key and other data required by the cipher.
14        * @exception IllegalArgumentException if the params argument is
15        * inappropriate.
16        */
17       public void init(boolean forEncryption, CipherParameters params)
18           throws IllegalArgumentException;
19   
20       /**
21        * Return the name of the algorithm the cipher implements.
22        *
23        * @return the name of the algorithm the cipher implements.
24        */
25       public String getAlgorithmName();
26   
27       /**
28        * encrypt/decrypt a single byte returning the result.
29        *
30        * @param in the byte to be processed.
31        * @return the result of processing the input byte.
32        */
33       public byte returnByte(byte in);
34   
35       /**
36        * process a block of bytes from in putting the result into out.
37        *
38        * @param in the input byte array.
39        * @param inOff the offset into the in array where the data to be processed starts.
40        * @param len the number of bytes to be processed.
41        * @param out the output buffer the processed bytes go into.
42        * @param outOff the offset into the output byte array the processed data stars at.
43        * @exception DataLengthException if the output buffer is too small.
44        */
45       public void processBytes(byte[] in, int inOff, int len, byte[] out, int outOff)
46           throws DataLengthException;
47   
48       /**
49        * reset the cipher. This leaves it in the same state
50        * it was at after the last init (if there was one).
51        */
52       public void reset();
53   }
54