| package org.bouncycastle.crypto.engines; |
| |
| import org.bouncycastle.crypto.BlockCipher; |
| import org.bouncycastle.crypto.CipherParameters; |
| import org.bouncycastle.crypto.DataLengthException; |
| import org.bouncycastle.crypto.OutputLengthException; |
| |
| /** |
| * The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. |
| * Provided for the sake of completeness. |
| */ |
| public class NullEngine implements BlockCipher |
| { |
| private boolean initialised; |
| protected static final int DEFAULT_BLOCK_SIZE = 1; |
| private final int blockSize; |
| |
| /** |
| * Constructs a null engine with a block size of 1 byte. |
| */ |
| public NullEngine() |
| { |
| this(DEFAULT_BLOCK_SIZE); |
| } |
| |
| /** |
| * Constructs a null engine with a specific block size. |
| * |
| * @param blockSize the block size in bytes. |
| */ |
| public NullEngine(int blockSize) |
| { |
| this.blockSize = blockSize; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.bouncycastle.crypto.BlockCipher#init(boolean, org.bouncycastle.crypto.CipherParameters) |
| */ |
| public void init(boolean forEncryption, CipherParameters params) throws IllegalArgumentException |
| { |
| // we don't mind any parameters that may come in |
| this.initialised = true; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.bouncycastle.crypto.BlockCipher#getAlgorithmName() |
| */ |
| public String getAlgorithmName() |
| { |
| return "Null"; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.bouncycastle.crypto.BlockCipher#getBlockSize() |
| */ |
| public int getBlockSize() |
| { |
| return blockSize; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.bouncycastle.crypto.BlockCipher#processBlock(byte[], int, byte[], int) |
| */ |
| public int processBlock(byte[] in, int inOff, byte[] out, int outOff) |
| throws DataLengthException, IllegalStateException |
| { |
| if (!initialised) |
| { |
| throw new IllegalStateException("Null engine not initialised"); |
| } |
| if ((inOff + blockSize) > in.length) |
| { |
| throw new DataLengthException("input buffer too short"); |
| } |
| |
| if ((outOff + blockSize) > out.length) |
| { |
| throw new OutputLengthException("output buffer too short"); |
| } |
| |
| for (int i = 0; i < blockSize; ++i) |
| { |
| out[outOff + i] = in[inOff + i]; |
| } |
| |
| return blockSize; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.bouncycastle.crypto.BlockCipher#reset() |
| */ |
| public void reset() |
| { |
| // nothing needs to be done |
| } |
| } |