/**
   * Create a buffered block cipher that uses Cipher Text Stealing
   *
   * @param cipher the underlying block cipher this buffering object wraps.
   */
  public CTSBlockCipher(BlockCipher cipher) {
    if ((cipher instanceof OFBBlockCipher)
        || (cipher instanceof CFBBlockCipher)
        || (cipher instanceof SICBlockCipher)) {
      // TODO: This is broken - need to introduce marker interface to differentiate block cipher
      // primitive from mode?
      throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers");
    }

    this.cipher = cipher;

    blockSize = cipher.getBlockSize();

    buf = new byte[blockSize * 2];
    bufOff = 0;
  }
  /**
   * Create a buffered block cipher with, or without, padding.
   *
   * @param cipher the underlying block cipher this buffering object wraps.
   */
  public PaddedBlockCipher(BlockCipher cipher) {
    this.cipher = cipher;

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
  }
 public int getBlockSize() {
   return cipher.getBlockSize();
 }