code: public byte[] decrypt(byte[] message, byte[] aad, byte[] iv) throws GeneralSecurityException {
  		Cipher cipher = getCipher(true);
  		if(ivLength > 0) {
  			if(prependIV) {
  				cipher.init(Cipher.DECRYPT_MODE, getKey(), getAlgorithmParameterSpec(message));
  				if(aad != null) {
  					cipher.updateAAD(aad);
  				}
  				return cipher.doFinal(message, ivLength, message.length - ivLength);
  			} else {
  				throw new IllegalStateException("Could not obtain IV");
  			}
  		} else {
  			if(iv != null) {
  				cipher.init(Cipher.DECRYPT_MODE, getKey(), getAlgorithmParameterSpec(iv));
  			} else {
  				cipher.init(Cipher.DECRYPT_MODE, getKey());
  			}
  			if(aad != null) {
  				cipher.updateAAD(aad);
  			}
  			return cipher.doFinal(message);
  		}
  	}
docs: <p>Decrypts a byte array and returns the decrypted message.</p>
  @param message
  @param aad
  @param iv
  @return
  @throws GeneralSecurityException