Decrypting error : "no iv set when one expected"
===

I'm almost new to encryption.

I am trying to decrypt an array of bytes, and when I am providing the IV I am getting an exception :
InvalidAlgorithmParameterException (no iv set when one expected).

Here's my code (*iv* is an array of 16 bytes which is not null and has the values used when encrypting) :

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, encriptionKey,new IvParameterSpec(iv));

If I don't specify the IV the cipher gets initialized ok : 

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, encriptionKey);

Trying to find an answer I did find an implementation of JCEStreamCipher ([here][1]) which may not correspond to the version I am using but has some code that makes me thing I am not understanding it correctly.


Here's the code :

       if ((ivLength != 0) && !(param instanceof ParametersWithIV))
        {
            SecureRandom    ivRandom = random;

            if (ivRandom == null)
            {
                ivRandom = new SecureRandom();
            }

            if ((opmode == Cipher.ENCRYPT_MODE) || (opmode == Cipher.WRAP_MODE))
            {
                byte[]  iv = new byte[ivLength];

                ivRandom.nextBytes(iv);
                param = new ParametersWithIV(param, iv);
                ivParam = (ParametersWithIV)param;
            }
            else
            {
                throw new InvalidAlgorithmParameterException("no IV set when one expected");
            }
        }
 
Looks like I cannot provide an IV when decrypting, but it doesn't makes too much sense to me.

any help will be greatly appreciated.

thanks a lot,
richard.


  [1]: http://java2s.com/Open-Source/Java/Security/Bouncy-Castle/org/bouncycastle/jce/provider/JCEStreamCipher.java.htm
