summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2015-03-26 14:01:31 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2015-03-26 14:01:31 +0700
commit37ebe56013377b5d5aaa2bf8b15ca9d8ea68d3ed (patch)
tree955a80d556306fe0deb98d8ccaa5f82084015221
parentMerge branch 'mpsinfo-duplicatedigest' (diff)
downloadBouncyCastle.NET-ed25519-37ebe56013377b5d5aaa2bf8b15ca9d8ea68d3ed.tar.xz
F2mCurve cleanup
-rw-r--r--crypto/src/math/ec/ECAlgorithms.cs18
-rw-r--r--crypto/src/util/Arrays.cs16
-rw-r--r--crypto/test/src/math/ec/test/TnafTest.cs2
3 files changed, 30 insertions, 6 deletions
diff --git a/crypto/src/math/ec/ECAlgorithms.cs b/crypto/src/math/ec/ECAlgorithms.cs
index a1349a9e0..5d60de40f 100644
--- a/crypto/src/math/ec/ECAlgorithms.cs
+++ b/crypto/src/math/ec/ECAlgorithms.cs
@@ -10,14 +10,23 @@ namespace Org.BouncyCastle.Math.EC
     {
         public static bool IsF2mCurve(ECCurve c)
         {
-            IFiniteField field = c.Field;
+            return IsF2mField(c.Field);
+        }
+
+        public static bool IsF2mField(IFiniteField field)
+        {
             return field.Dimension > 1 && field.Characteristic.Equals(BigInteger.Two)
                 && field is IPolynomialExtensionField;
         }
 
         public static bool IsFpCurve(ECCurve c)
         {
-            return c.Field.Dimension == 1;
+            return IsFpField(c.Field);
+        }
+
+        public static bool IsFpField(IFiniteField field)
+        {
+            return field.Dimension == 1;
         }
 
         public static ECPoint SumOfMultiplies(ECPoint[] ps, BigInteger[] ks)
@@ -61,10 +70,9 @@ namespace Org.BouncyCastle.Math.EC
             Q = ImportPoint(cp, Q);
 
             // Point multiplication for Koblitz curves (using WTNAF) beats Shamir's trick
-            if (cp is F2mCurve)
             {
-                F2mCurve f2mCurve = (F2mCurve) cp;
-                if (f2mCurve.IsKoblitz)
+                AbstractF2mCurve f2mCurve = cp as AbstractF2mCurve;
+                if (f2mCurve != null && f2mCurve.IsKoblitz)
                 {
                     return ValidatePoint(P.Multiply(a).Add(Q.Multiply(b)));
                 }
diff --git a/crypto/src/util/Arrays.cs b/crypto/src/util/Arrays.cs
index abea234a7..1f9711555 100644
--- a/crypto/src/util/Arrays.cs
+++ b/crypto/src/util/Arrays.cs
@@ -655,5 +655,21 @@ namespace Org.BouncyCastle.Utilities
 
             return result;
         }
+
+        public static int[] Reverse(int[] a)
+        {
+            if (a == null)
+                return null;
+
+            int p1 = 0, p2 = a.Length;
+            int[] result = new int[p2];
+
+            while (--p2 >= 0)
+            {
+                result[p2] = a[p1++];
+            }
+
+            return result;
+        }
     }
 }
diff --git a/crypto/test/src/math/ec/test/TnafTest.cs b/crypto/test/src/math/ec/test/TnafTest.cs
index c04ae00d2..f5a58e858 100644
--- a/crypto/test/src/math/ec/test/TnafTest.cs
+++ b/crypto/test/src/math/ec/test/TnafTest.cs
@@ -40,7 +40,7 @@
 //		{
 //			X9ECParameters x9ECParameters = SecNamedCurves.GetByName(curveName);
 //
-//			F2mCurve curve = (F2mCurve)x9ECParameters.Curve;
+//			AbstractF2mCurve curve = (AbstractF2mCurve)x9ECParameters.Curve;
 //			BigInteger n = curve.N;
 //
 //			// The generator is multiplied by random b to get random q