summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2015-11-09 19:25:07 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2015-11-09 19:25:07 +0700
commitbf9600f6e8c3e8c83ba95a5e0821ec78e270cfa0 (patch)
tree6d8db3686653c7350ac306c7a180486f666458d2
parentAdd contributor entries (diff)
downloadBouncyCastle.NET-ed25519-bf9600f6e8c3e8c83ba95a5e0821ec78e270cfa0.tar.xz
Improve random prime constructor
-rw-r--r--crypto/src/math/BigInteger.cs18
1 files changed, 7 insertions, 11 deletions
diff --git a/crypto/src/math/BigInteger.cs b/crypto/src/math/BigInteger.cs
index 3d0509fe0..2ca3da978 100644
--- a/crypto/src/math/BigInteger.cs
+++ b/crypto/src/math/BigInteger.cs
@@ -681,6 +681,7 @@ namespace Org.BouncyCastle.Math
 
             int xBits = BitsPerByte * nBytes - bitLength;
             byte mask = (byte)(255U >> xBits);
+            byte lead = (byte)(1 << (7 - xBits));
 
             for (;;)
             {
@@ -690,7 +691,7 @@ namespace Org.BouncyCastle.Math
                 b[0] &= mask;
 
                 // ensure the leading bit is 1 (to meet the strength requirement)
-                b[0] |= (byte)(1 << (7 - xBits));
+                b[0] |= lead;
 
                 // ensure the trailing bit is 1 (i.e. must be odd)
                 b[nBytes - 1] |= 1;
@@ -705,18 +706,13 @@ namespace Org.BouncyCastle.Math
                 if (CheckProbablePrime(certainty, random, true))
                     break;
 
-                if (bitLength > 32)
+                for (int j = 1; j < magnitude.Length; ++j)
                 {
-                    for (int rep = 0; rep < 10000; ++rep)
-                    {
-                        int n = 33 + random.Next(bitLength - 2);
-                        this.magnitude[this.magnitude.Length - (n >> 5)] ^= (1 << (n & 31));
-                        this.magnitude[this.magnitude.Length - 1] ^= ((random.Next() + 1) << 1);
-                        this.mQuote = 0;
+                    this.magnitude[j] ^= (random.Next() << 1);
+                    this.mQuote = 0;
 
-                        if (CheckProbablePrime(certainty, random, true))
-                            return;
-                    }
+                    if (CheckProbablePrime(certainty, random, true))
+                        return;
                 }
             }
         }