Example #1
0
        public static int BitCount(this BigInteger bigN)
        {
            var test = new DJD.Security.BigInteger(bigN.ToByteArray());

            return(test.bitCount());
        }
Example #2
0
        public static bool IsProbablePrime(this BigInteger source, int certainty)
        {
            var test = new DJD.Security.BigInteger(source.ToByteArray());

            return(test.isProbablePrime(certainty));

            if (source == 2 || source == 3)
            {
                return(true);
            }
            if (source < 2 || source % 2 == 0)
            {
                return(false);
            }

            BigInteger d = source - 1;
            int        s = 0;

            while (d % 2 == 0)
            {
                d /= 2;
                s += 1;
            }

            RandomNumberGenerator rng = RandomNumberGenerator.Create();

            byte[]     bytes = new byte[source.ToByteArray().LongLength];
            BigInteger a;

            for (int i = 0; i < certainty; i++)
            {
                do
                {
                    rng.GetBytes(bytes);
                    a = new BigInteger(bytes);
                }while (a < 2 || a >= source - 2);

                BigInteger x = BigInteger.ModPow(a, d, source);
                if (x == 1 || x == source - 1)
                {
                    continue;
                }

                for (int r = 1; r < s; r++)
                {
                    x = BigInteger.ModPow(x, 2, source);
                    if (x == 1)
                    {
                        return(false);
                    }
                    if (x == source - 1)
                    {
                        break;
                    }
                }

                if (x != source - 1)
                {
                    return(false);
                }
            }

            return(true);
        }