code: public CipherInputStream wrapInputStream(InputStream is, byte[] iv) throws GeneralSecurityException, IOException {
  		Cipher cipher = getCipher(true);
  		if(iv == null && ivLength > 0) {
  			if(prependIV) {
  				iv = new byte[ivLength];
  				is.read(iv);
  			} else {
  				throw new IllegalStateException("Could not obtain IV");
  			}
  		}
  		if(iv != null) {
  			cipher.init(Cipher.DECRYPT_MODE, getKey(), getAlgorithmParameterSpec(iv));
  		} else {
  			cipher.init(Cipher.DECRYPT_MODE, getKey());
  		}
  		return new CipherInputStream(is, cipher);
  	}
docs: <p>Wraps an <code>InputStream</code> with a <code>CipherInputStream</code> using this encryptor's cipher.</p>
  <p>If an <code>ivLength</code> has been specified and <code>prependIV</code> is set to <code>true</code> this method
  will try to read and consume an IV from the <code>InputStream</code> before wrapping it.</p>
  @param is
  @param iv
  @return
  @throws GeneralSecurityException
  @throws IOException