org.gudy.bouncycastle.crypto.encodings
Class ISO9796d1Encoding

java.lang.Object
  extended by org.gudy.bouncycastle.crypto.encodings.ISO9796d1Encoding
All Implemented Interfaces:
AsymmetricBlockCipher

public class ISO9796d1Encoding
extends java.lang.Object
implements AsymmetricBlockCipher

ISO 9796-1 padding. Note in the light of recent results you should only use this with RSA (rather than the "simpler" Rabin keys) and you should never use it with anything other than a hash (ie. even if the message is small don't sign the message, sign it's hash) or some "random" value. See your favorite search engine for details.


Constructor Summary
ISO9796d1Encoding(AsymmetricBlockCipher cipher)
           
 
Method Summary
 int getInputBlockSize()
          return the input block size.
 int getOutputBlockSize()
          return the maximum possible size for the output.
 int getPadBits()
          retrieve the number of pad bits in the last decoded message.
 AsymmetricBlockCipher getUnderlyingCipher()
           
 void init(boolean forEncryption, CipherParameters param)
          initialise the cipher.
 byte[] processBlock(byte[] in, int inOff, int inLen)
          process the block of len bytes stored in in from offset inOff.
 void setPadBits(int padBits)
          set the number of bits in the next message to be treated as pad bits.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ISO9796d1Encoding

public ISO9796d1Encoding(AsymmetricBlockCipher cipher)
Method Detail

getUnderlyingCipher

public AsymmetricBlockCipher getUnderlyingCipher()

init

public void init(boolean forEncryption,
                 CipherParameters param)
Description copied from interface: AsymmetricBlockCipher
initialise the cipher.

Specified by:
init in interface AsymmetricBlockCipher
Parameters:
forEncryption - if true the cipher is initialised for encryption, if false for decryption.
param - the key and other data required by the cipher.

getInputBlockSize

public int getInputBlockSize()
return the input block size. The largest message we can process is (key_size_in_bits + 3)/16, which in our world comes to key_size_in_bytes / 2.

Specified by:
getInputBlockSize in interface AsymmetricBlockCipher
Returns:
maximum size for an input block.

getOutputBlockSize

public int getOutputBlockSize()
return the maximum possible size for the output.

Specified by:
getOutputBlockSize in interface AsymmetricBlockCipher
Returns:
maximum size of the output block produced by the cipher.

setPadBits

public void setPadBits(int padBits)
set the number of bits in the next message to be treated as pad bits.


getPadBits

public int getPadBits()
retrieve the number of pad bits in the last decoded message.


processBlock

public byte[] processBlock(byte[] in,
                           int inOff,
                           int inLen)
                    throws InvalidCipherTextException
Description copied from interface: AsymmetricBlockCipher
process the block of len bytes stored in in from offset inOff.

Specified by:
processBlock in interface AsymmetricBlockCipher
Parameters:
in - the input data
inOff - offset into the in array where the data starts
inLen - the length of the block to be processed.
Returns:
the resulting byte array of the encryption/decryption process.
Throws:
InvalidCipherTextException - data decrypts improperly.