summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/jce/spec/IESParameterSpec.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jce/spec/IESParameterSpec.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jce/spec/IESParameterSpec.java176
1 files changed, 176 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jce/spec/IESParameterSpec.java b/bcprov/src/main/java/org/bouncycastle/jce/spec/IESParameterSpec.java
new file mode 100644
index 0000000..c18a88f
--- /dev/null
+++ b/bcprov/src/main/java/org/bouncycastle/jce/spec/IESParameterSpec.java
@@ -0,0 +1,176 @@
+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.
+ */
+ public IESParameterSpec(
+ byte[] derivation,
+ byte[] encoding,
+ int macKeySize,
+ int cipherKeySize)
+ {
+ this(derivation, encoding, macKeySize, cipherKeySize, 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;
+ }
+} \ No newline at end of file