Use fixed-point comb when multiplying basepoint
2 files changed, 11 insertions, 5 deletions
diff --git a/crypto/src/crypto/parameters/MqvPrivateParameters.cs b/crypto/src/crypto/parameters/MqvPrivateParameters.cs
index 9159cac12..37145715f 100644
--- a/crypto/src/crypto/parameters/MqvPrivateParameters.cs
+++ b/crypto/src/crypto/parameters/MqvPrivateParameters.cs
@@ -1,5 +1,8 @@
using System;
+using Org.BouncyCastle.Math.EC;
+using Org.BouncyCastle.Math.EC.Multiplier;
+
namespace Org.BouncyCastle.Crypto.Parameters
{
public class MqvPrivateParameters
@@ -32,9 +35,9 @@ namespace Org.BouncyCastle.Crypto.Parameters
if (ephemeralPublicKey == null)
{
- ephemeralPublicKey = new ECPublicKeyParameters(
- parameters.G.Multiply(ephemeralPrivateKey.D),
- parameters);
+ ECPoint q = new FixedPointCombMultiplier().Multiply(parameters.G, ephemeralPrivateKey.D);
+
+ ephemeralPublicKey = new ECPublicKeyParameters(q, parameters);
}
else if (!parameters.Equals(ephemeralPublicKey.Parameters))
{
diff --git a/crypto/src/crypto/parameters/SM2KeyExchangePrivateParameters.cs b/crypto/src/crypto/parameters/SM2KeyExchangePrivateParameters.cs
index 8afb61544..666566426 100644
--- a/crypto/src/crypto/parameters/SM2KeyExchangePrivateParameters.cs
+++ b/crypto/src/crypto/parameters/SM2KeyExchangePrivateParameters.cs
@@ -1,6 +1,7 @@
using System;
using Org.BouncyCastle.Math.EC;
+using Org.BouncyCastle.Math.EC.Multiplier;
namespace Org.BouncyCastle.Crypto.Parameters
{
@@ -29,11 +30,13 @@ namespace Org.BouncyCastle.Crypto.Parameters
if (!parameters.Equals(ephemeralPrivateKey.Parameters))
throw new ArgumentException("Static and ephemeral private keys have different domain parameters");
+ ECMultiplier m = new FixedPointCombMultiplier();
+
this.mInitiator = initiator;
this.mStaticPrivateKey = staticPrivateKey;
- this.mStaticPublicPoint = parameters.G.Multiply(staticPrivateKey.D).Normalize();
+ this.mStaticPublicPoint = m.Multiply(parameters.G, staticPrivateKey.D).Normalize();
this.mEphemeralPrivateKey = ephemeralPrivateKey;
- this.mEphemeralPublicPoint = parameters.G.Multiply(ephemeralPrivateKey.D).Normalize();
+ this.mEphemeralPublicPoint = m.Multiply(parameters.G, ephemeralPrivateKey.D).Normalize();
}
public virtual bool IsInitiator
|