[Mono-bugs] [Bug 81857][Nor] Changed - BigInteger reduction can fail on small values
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Thu Jul 5 11:09:04 EDT 2007
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by sebastien at ximian.com.
http://bugzilla.ximian.com/show_bug.cgi?id=81857
--- shadow/81857 2007-07-05 07:45:40.000000000 -0400
+++ shadow/81857.tmp.1207 2007-07-05 11:09:04.000000000 -0400
@@ -10,13 +10,13 @@
Component: Mono.Security
AssignedTo: sebastien at ximian.com
ReportedBy: atsushi at ximian.com
QAContact: mono-bugs at ximian.com
TargetMilestone: ---
URL:
-Summary: BigInteger.IsProbablePrime() fails on some primes
+Summary: BigInteger reduction can fail on small values
Kazuki found some BigInteger issues:
1) new BigInteger (5987).IsProbablePrime() returns false.
2) new BigInteger (65537).IsProbablePrime() causes IndexOutOfRangeException.
http://primes.utm.edu/lists/small/10000.txt
3) new BigInteger (5915587277).IsProbablePrime() returns false
@@ -121,6 +121,29 @@
a random number matching MR criteria.
This isn't something that's likely to occurs when testing random
primes on very large numbers - which is the point of the code. But
it's likely that I'll remove/comment/disable this case from the unit
tests.
+
+------- Additional Comments From sebastien at ximian.com 2007-07-05 11:09 -------
+Added a workaround for small primes (SVN r81393-5) where we avoid
+using the base == 2 optimization. This "fixes" the IsProbablePrime issue.
+
+I'm keeping this issue open (but renamed) because the root cause isn't
+fixed. There's a unit test (commented) that shows the problem.
+
+ [Test]
+ public void Bug81857 ()
+ {
+ BigInteger b = BigInteger.Parse ("18446744073709551616");
+ BigInteger exp = new BigInteger (2);
+ BigInteger mod = BigInteger.Parse ("48112959837082048697");
+ BigInteger expected = BigInteger.Parse ("4970597831480284165");
+
+ BigInteger manual = b * b % mod;
+ Assert.AreEqual (expected, manual, "b * b % mod");
+// fails (inside Barrett reduction)
+// BigInteger actual = b.ModPow (exp, mod);
+// Assert.AreEqual (expected, actual, "b.ModPow (exp, mod)");
+ }
+
More information about the mono-bugs
mailing list