[Mono-bugs] [Bug 760434] New: BigInteger.Parse("1").ModInverse incorrectly throws ArithmeticException if modulus >0xFFFFFFFF
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Thu May 3 04:49:32 UTC 2012
https://bugzilla.novell.com/show_bug.cgi?id=760434
https://bugzilla.novell.com/show_bug.cgi?id=760434#c0
Summary: BigInteger.Parse("1").ModInverse incorrectly throws
ArithmeticException if modulus >0xFFFFFFFF
Classification: Mono
Product: Mono: Class Libraries
Version: 2.8.x
Platform: 32bit
OS/Version: Windows 7
Status: NEW
Severity: Major
Priority: P5 - None
Component: Mono.Security
AssignedTo: frego at suse.com
ReportedBy: andyrosa at digitalforces.com
QAContact: mono-bugs at lists.ximian.com
Found By: ---
Blocker: ---
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like
Gecko) Chrome/18.0.1025.168 Safari/535.19
i=ModInverse(x,p) is supposed to return i such that i*x (modulus p) is 1.
For i to exist, x and p have to be co-prime. Ie: gcd(x,p)=1.
In particular, ModInverse(1,p)=1 for all values of p>1.
In mono, the function BigInteger.ModInverse works for x=1 as long as
p<=0xFFFFFFFF. For larger p's, it incorrectly throws ArithmeticException ("No
inverse!")
Reproducible: Always
Steps to Reproduce:
Open MonoDevelop on Windows 7/32, add a reference to Mono.Security. Paste and
run this code:
using System;
using Mono.Math;//needs Mono.Security reference
namespace ModInverse
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine
(BigInteger.Parse("1").ModInverse(BigInteger.Parse("4294967296")));
}
}
}
Actual Results:
Unhandled Exception: System.ArithmeticException: No inverse!
at Mono.Math.BigInteger+Kernel.modInverse (Mono.Math.BigInteger bi,
Mono.Math.
BigInteger modulus) [0x00106] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.8
\mcs\class\Mono.Security\Mono.Math\BigInteger.cs:2364
at Mono.Math.BigInteger.ModInverse (Mono.Math.BigInteger modulus) [0x00000]
in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.8\mcs\class\Mono.Security\Mono.Ma
th\BigInteger.cs:888
Expected Results:
1
The error does not ocurr for p between 0 and 2^32-1. The error does not seem
to ocurr for x!=1.
Here is a little more info on modInverse:
http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html#modInverse(java.math.BigInteger)
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list