Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2014-02-06 10:29:51 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2014-02-06 10:29:51 +0400
commit7c506b7b529d1fa7db803e63e3efb5d6fa2a421b (patch)
tree8ab149d4874d33cb44ff5a3fabd1ee09810bbacc /core/src/main/java/org/bouncycastle/crypto/ec
parentcdb6db9df8b3f19116c97e46de93c1cd6074c8ef (diff)
Use FixedPointCombMultiplier for most base-point multiplications
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/ec')
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java6
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java10
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java23
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java22
4 files changed, 45 insertions, 16 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java
index 0e893ea1..a5296830 100644
--- a/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java
+++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java
@@ -7,7 +7,9 @@ import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
+import org.bouncycastle.math.ec.ECMultiplier;
import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.math.ec.FixedPointCombMultiplier;
/**
* this does your basic ElGamal encryption algorithm using EC
@@ -65,8 +67,10 @@ public class ECElGamalEncryptor
ECDomainParameters ec = key.getParameters();
BigInteger k = ECUtil.generateK(ec.getN(), random);
+ ECMultiplier basePointMultiplier = new FixedPointCombMultiplier();
+
ECPoint[] gamma_phi = new ECPoint[]{
- ec.getG().multiply(k),
+ basePointMultiplier.multiply(ec.getG(), k),
key.getQ().multiply(k).add(point)
};
diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java
index c382059d..02f5ca37 100644
--- a/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java
+++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java
@@ -5,7 +5,9 @@ import java.math.BigInteger;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.bouncycastle.math.ec.ECMultiplier;
import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.math.ec.FixedPointCombMultiplier;
/**
* this transforms the original randomness used for an ElGamal encryption by a fixed value.
@@ -39,7 +41,7 @@ public class ECFixedTransform
}
/**
- * Transform an existing cipher test pair using the ElGamal algorithm. Note: it is assumed this
+ * Transform an existing cipher text pair using the ElGamal algorithm. Note: it is assumed this
* transform has been initialised with the same public key that was used to create the original
* cipher text.
*
@@ -54,9 +56,13 @@ public class ECFixedTransform
}
ECDomainParameters ec = key.getParameters();
+ BigInteger n = ec.getN();
+
+ ECMultiplier basePointMultiplier = new FixedPointCombMultiplier();
+ BigInteger k = this.k.mod(n);
ECPoint[] gamma_phi = new ECPoint[]{
- ec.getG().multiply(k).add(cipherText.getX()),
+ basePointMultiplier.multiply(ec.getG(), k).add(cipherText.getX()),
key.getQ().multiply(k).add(cipherText.getY())
};
diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java
index 74016c18..9f7a0bf1 100644
--- a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java
+++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java
@@ -4,9 +4,12 @@ import java.math.BigInteger;
import java.security.SecureRandom;
import org.bouncycastle.crypto.CipherParameters;
+import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
+import org.bouncycastle.math.ec.ECMultiplier;
import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.math.ec.FixedPointCombMultiplier;
/**
* this does your basic Elgamal encryption algorithm using EC
@@ -49,7 +52,7 @@ public class ECNewPublicKeyTransform
}
/**
- * Transform an existing cipher test pair using the ElGamal algorithm. Note: the input cipherText will
+ * Transform an existing cipher text pair using the ElGamal algorithm. Note: the input cipherText will
* need to be preserved in order to complete the transformation to the new public key.
*
* @param cipherText the EC point to process.
@@ -62,13 +65,19 @@ public class ECNewPublicKeyTransform
throw new IllegalStateException("ECNewPublicKeyTransform not initialised");
}
- BigInteger n = key.getParameters().getN();
- BigInteger k = ECUtil.generateK(n, random);
+ ECDomainParameters ec = key.getParameters();
+ BigInteger n = ec.getN();
- ECPoint g = key.getParameters().getG();
- ECPoint gamma = g.multiply(k);
- ECPoint phi = key.getQ().multiply(k).add(cipherText.getY());
+ ECMultiplier basePointMultiplier = new FixedPointCombMultiplier();
+ BigInteger k = ECUtil.generateK(n, random);
- return new ECPair(gamma.normalize(), phi.normalize());
+ ECPoint[] gamma_phi = new ECPoint[]{
+ basePointMultiplier.multiply(ec.getG(), k),
+ key.getQ().multiply(k).add(cipherText.getY())
+ };
+
+ ec.getCurve().normalizeAll(gamma_phi);
+
+ return new ECPair(gamma_phi[0], gamma_phi[1]);
}
}
diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java
index b293759a..c146a0fb 100644
--- a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java
+++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java
@@ -4,9 +4,12 @@ import java.math.BigInteger;
import java.security.SecureRandom;
import org.bouncycastle.crypto.CipherParameters;
+import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
+import org.bouncycastle.math.ec.ECMultiplier;
import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.math.ec.FixedPointCombMultiplier;
/**
* this transforms the original randomness used for an ElGamal encryption.
@@ -66,16 +69,23 @@ public class ECNewRandomnessTransform
throw new IllegalStateException("ECNewRandomnessTransform not initialised");
}
- BigInteger n = key.getParameters().getN();
- BigInteger k = ECUtil.generateK(n, random);
- ECPoint g = key.getParameters().getG();
- ECPoint gamma = g.multiply(k);
- ECPoint phi = key.getQ().multiply(k).add(cipherText.getY());
+ ECDomainParameters ec = key.getParameters();
+ BigInteger n = ec.getN();
+
+ ECMultiplier basePointMultiplier = new FixedPointCombMultiplier();
+ BigInteger k = ECUtil.generateK(n, random);
+
+ ECPoint[] gamma_phi = new ECPoint[]{
+ basePointMultiplier.multiply(ec.getG(), k).add(cipherText.getX()),
+ key.getQ().multiply(k).add(cipherText.getY())
+ };
+
+ ec.getCurve().normalizeAll(gamma_phi);
lastK = k;
- return new ECPair(cipherText.getX().add(gamma).normalize(), phi.normalize());
+ return new ECPair(gamma_phi[0], gamma_phi[1]);
}
/**