org.bouncycastle.jce.spec.IESParameterSpec Maven / Gradle / Ivy
package org.bouncycastle.jce.spec;
import java.security.spec.AlgorithmParameterSpec;
import org.bouncycastle.util.Arrays;
/**
* Parameter spec for an integrated encryptor, as in IEEE P1363a
*/
public class IESParameterSpec
implements AlgorithmParameterSpec
{
private byte[] derivation;
private byte[] encoding;
private int macKeySize;
private int cipherKeySize;
private byte[] nonce;
private boolean usePointCompression;
/**
* Set the IES engine parameters.
*
* @param derivation the optional derivation vector for the KDF.
* @param encoding the optional encoding vector for the KDF.
* @param macKeySize the key size (in bits) for the MAC.
*/
public IESParameterSpec(
byte[] derivation,
byte[] encoding,
int macKeySize)
{
this(derivation, encoding, macKeySize, -1, null, false);
}
/**
* Set the IES engine parameters.
*
* @param derivation the optional derivation vector for the KDF.
* @param encoding the optional encoding vector for the KDF.
* @param macKeySize the key size (in bits) for the MAC.
* @param cipherKeySize the key size (in bits) for the block cipher.
* @param nonce an IV to use initialising the block cipher.
*/
public IESParameterSpec(
byte[] derivation,
byte[] encoding,
int macKeySize,
int cipherKeySize,
byte[] nonce)
{
this(derivation, encoding, macKeySize, cipherKeySize, nonce, false);
}
/**
* Set the IES engine parameters.
*
* @param derivation the optional derivation vector for the KDF.
* @param encoding the optional encoding vector for the KDF.
* @param macKeySize the key size (in bits) for the MAC.
* @param cipherKeySize the key size (in bits) for the block cipher.
* @param nonce an IV to use initialising the block cipher.
* @param usePointCompression whether to use EC point compression or not (false by default)
*/
public IESParameterSpec(
byte[] derivation,
byte[] encoding,
int macKeySize,
int cipherKeySize,
byte[] nonce,
boolean usePointCompression)
{
if (derivation != null)
{
this.derivation = new byte[derivation.length];
System.arraycopy(derivation, 0, this.derivation, 0, derivation.length);
}
else
{
this.derivation = null;
}
if (encoding != null)
{
this.encoding = new byte[encoding.length];
System.arraycopy(encoding, 0, this.encoding, 0, encoding.length);
}
else
{
this.encoding = null;
}
this.macKeySize = macKeySize;
this.cipherKeySize = cipherKeySize;
this.nonce = Arrays.clone(nonce);
this.usePointCompression = usePointCompression;
}
/**
* return the derivation vector.
*/
public byte[] getDerivationV()
{
return Arrays.clone(derivation);
}
/**
* return the encoding vector.
*/
public byte[] getEncodingV()
{
return Arrays.clone(encoding);
}
/**
* return the key size in bits for the MAC used with the message
*/
public int getMacKeySize()
{
return macKeySize;
}
/**
* return the key size in bits for the block cipher used with the message
*/
public int getCipherKeySize()
{
return cipherKeySize;
}
/**
* Return the nonce (IV) value to be associated with message.
*
* @return block cipher IV for message.
*/
public byte[] getNonce()
{
return Arrays.clone(nonce);
}
/**
* Set the 'point compression' flag.
*/
public void setPointCompression(boolean usePointCompression)
{
this.usePointCompression = usePointCompression;
}
/**
* Return the 'point compression' flag.
*
* @return the point compression flag
*/
public boolean getPointCompression()
{
return usePointCompression;
}
}