diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2015-10-18 14:22:53 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2015-10-18 14:22:53 +0700 |
commit | 088e423b20074f3483b8c255ffcb724e3fdf4d6a (patch) | |
tree | 2cfc4ec51ced9f0807524b904803c2f4f7ffcbfd | |
parent | http://www.bouncycastle.org/jira/browse/BMA-113 (diff) | |
download | BouncyCastle.NET-ed25519-088e423b20074f3483b8c255ffcb724e3fdf4d6a.tar.xz |
http://www.bouncycastle.org/jira/browse/BMA-82
- use SecureRandom to generate "arbitrary" values
-rw-r--r-- | crypto/src/math/BigInteger.cs | 8 | ||||
-rw-r--r-- | crypto/src/math/ec/ECCurve.cs | 3 | ||||
-rw-r--r-- | crypto/src/math/ec/ECFieldElement.cs | 3 | ||||
-rw-r--r-- | crypto/src/math/raw/Mod.cs | 6 |
4 files changed, 13 insertions, 7 deletions
diff --git a/crypto/src/math/BigInteger.cs b/crypto/src/math/BigInteger.cs index f302f077e..f31e2d5f2 100644 --- a/crypto/src/math/BigInteger.cs +++ b/crypto/src/math/BigInteger.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using System.Globalization; using System.Text; +using Org.BouncyCastle.Security; using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Math @@ -179,7 +180,7 @@ namespace Org.BouncyCastle.Math private const int chunk2 = 1, chunk8 = 1, chunk10 = 19, chunk16 = 16; private static readonly BigInteger radix2, radix2E, radix8, radix8E, radix10, radix10E, radix16, radix16E; - private static readonly Random RandomSource = new Random(); + private static readonly SecureRandom RandomSource = new SecureRandom(); /* * These are the threshold bit-lengths (of an exponent) where we increase the window size. @@ -246,6 +247,11 @@ namespace Org.BouncyCastle.Math return (nBits + BitsPerByte - 1) / BitsPerByte; } + internal static BigInteger Arbitrary(int sizeInBits) + { + return new BigInteger(sizeInBits, RandomSource); + } + private BigInteger( int signum, int[] mag, diff --git a/crypto/src/math/ec/ECCurve.cs b/crypto/src/math/ec/ECCurve.cs index 40b46ce72..fa2c72570 100644 --- a/crypto/src/math/ec/ECCurve.cs +++ b/crypto/src/math/ec/ECCurve.cs @@ -760,10 +760,9 @@ namespace Org.BouncyCastle.Math.EC ECFieldElement gamma, z, zeroElement = FromBigInteger(BigInteger.Zero); int m = FieldSize; - Random rand = new Random(); do { - ECFieldElement t = FromBigInteger(new BigInteger(m, rand)); + ECFieldElement t = FromBigInteger(BigInteger.Arbitrary(m)); z = zeroElement; ECFieldElement w = beta; for (int i = 1; i < m; i++) diff --git a/crypto/src/math/ec/ECFieldElement.cs b/crypto/src/math/ec/ECFieldElement.cs index 4d4fb3e4d..d0e008aab 100644 --- a/crypto/src/math/ec/ECFieldElement.cs +++ b/crypto/src/math/ec/ECFieldElement.cs @@ -306,13 +306,12 @@ namespace Org.BouncyCastle.Math.EC BigInteger k = legendreExponent.Add(BigInteger.One), qMinusOne = q.Subtract(BigInteger.One); BigInteger U, V; - Random rand = new Random(); do { BigInteger P; do { - P = new BigInteger(q.BitLength, rand); + P = BigInteger.Arbitrary(q.BitLength); } while (P.CompareTo(q) >= 0 || !ModReduce(P.Multiply(P).Subtract(fourX)).ModPow(legendreExponent, q).Equals(qMinusOne)); diff --git a/crypto/src/math/raw/Mod.cs b/crypto/src/math/raw/Mod.cs index 63467e668..8d9e8fd21 100644 --- a/crypto/src/math/raw/Mod.cs +++ b/crypto/src/math/raw/Mod.cs @@ -2,12 +2,15 @@ using System.Diagnostics; using Org.BouncyCastle.Crypto.Utilities; +using Org.BouncyCastle.Security; using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Math.Raw { internal abstract class Mod { + private static readonly SecureRandom RandomSource = new SecureRandom(); + public static void Invert(uint[] p, uint[] x, uint[] z) { int len = p.Length; @@ -77,7 +80,6 @@ namespace Org.BouncyCastle.Math.Raw public static uint[] Random(uint[] p) { int len = p.Length; - Random rand = new Random(); uint[] s = Nat.Create(len); uint m = p[len - 1]; @@ -90,7 +92,7 @@ namespace Org.BouncyCastle.Math.Raw do { byte[] bytes = new byte[len << 2]; - rand.NextBytes(bytes); + RandomSource.NextBytes(bytes); Pack.BE_To_UInt32(bytes, 0, s); s[len - 1] &= m; } |