open-keychain/libraries/spongycastle/jce/src/main/java/javax/crypto/spec/IvParameterSpec.java
2014-01-27 14:00:22 +01:00

76 lines
1.8 KiB
Java

package javax.crypto.spec;
import java.security.spec.AlgorithmParameterSpec;
/**
* This class specifies an <i>initialization vector</i> (IV). IVs are used
* by ciphers in feedback mode, e.g., DES in CBC mode.
*/
public class IvParameterSpec
implements AlgorithmParameterSpec
{
private byte[] iv;
/**
* Uses the bytes in <code>iv</code> as the IV.
*
* @param iv the buffer with the IV
*/
public IvParameterSpec(
byte[] iv)
{
if (iv == null)
{
throw new IllegalArgumentException("null iv passed");
}
this.iv = new byte[iv.length];
System.arraycopy(iv, 0, this.iv, 0, iv.length);
}
/**
* Uses the first <code>len</code> bytes in <code>iv</code>,
* beginning at <code>offset</code> inclusive, as the IV.
* <p>
* The bytes that constitute the IV are those between
* <code>iv[offset]</code> and <code>iv[offset+len-1]</code> inclusive.
*
* @param iv the buffer with the IV
* @param offset the offset in <code>iv</code> where the IV starts
* @param len the number of IV bytes
*/
public IvParameterSpec(
byte[] iv,
int offset,
int len)
{
if (iv == null)
{
throw new IllegalArgumentException("Null iv passed");
}
if (offset < 0 || len < 0 || (iv.length - offset) < len)
{
throw new IllegalArgumentException("Bad offset/len");
}
this.iv = new byte[len];
System.arraycopy(iv, offset, this.iv, 0, len);
}
/**
* Returns the initialization vector (IV).
*
* @return the initialization vector (IV)
*/
public byte[] getIV()
{
byte[] tmp = new byte[iv.length];
System.arraycopy(iv, 0, tmp, 0, iv.length);
return tmp;
}
}