Exemple #1
0
        private BigInteger getPublicKey(BigInteger phi, int length)
        {
            BigInteger publicKey = new BigInteger("0");
            Random     r         = new Random();

            var g = _zero.Clone();
            var _ = _zero.Clone();

            while (g.CompareTo(_one) != 0)
            {
                publicKey = getPrimeNumber(length);
                g         = extendedGCD(phi, publicKey, ref _, ref _);
            }

            return(publicKey);
        }
Exemple #2
0
        public BigInteger Mul(BigInteger secondNumber)
        {
            bool sign = false;

            if ((secondNumber.value[0] < 0 && value[0] >= 0) || (secondNumber.value[0] >= 0 && value[0] < 0))
            {
                sign = true;
            }

            var posValue    = Clone();
            var secPosValue = secondNumber.Clone();

            if (posValue.value[0] < 0)
            {
                posValue.value[0] *= -1;
            }

            if (secPosValue.value[0] < 0)
            {
                secPosValue.value[0] *= -1;
            }

            BigInteger res = new BigInteger(mulKaratsuba(posValue.value, secPosValue.value));

            if (sign)
            {
                res.value[0] *= -1;
            }

            return(res);
        }
Exemple #3
0
        public BigInteger Div(BigInteger secondNumber)
        {
            bool sign = false;

            if ((secondNumber.value[0] < 0 && value[0] >= 0) || (secondNumber.value[0] >= 0 && value[0] < 0))
            {
                sign = true;
            }

            var posValue    = Clone();
            var secPosValue = secondNumber.Clone();

            if (posValue.value[0] < 0)
            {
                posValue.value[0] *= -1;
            }

            if (secPosValue.value[0] < 0)
            {
                secPosValue.value[0] *= -1;
            }

            var res = new BigInteger(quadraticDiv(posValue.value, secPosValue.value).quotient);

            if (sign)
            {
                res.value[0] *= -1;
            }

            return(res);
        }
Exemple #4
0
        public BigInteger Sub(BigInteger secondNumber)
        {
            if (value[0] < 0 && secondNumber.value[0] < 0)
            {
                var posValue = Clone();
                posValue.value[0] *= -1;;

                var secPosValue = secondNumber.Clone();
                secPosValue.value[0] *= -1;;

                var res = new BigInteger(addHelper(posValue.value, secPosValue.value));
                res.value[0] *= -1;;

                return(res);
            }

            if (value[0] < 0)
            {
                var posValue = Clone();
                posValue.value[0] *= -1;

                var res = new BigInteger(addHelper(clone(secondNumber.value), posValue.value));
                res.value[0] *= -1;

                return(res);
            }

            if (secondNumber.value[0] < 0)
            {
                var posValue = secondNumber.Clone();
                posValue.value[0] *= -1;

                return(new BigInteger(addHelper(clone(value), posValue.value)));
            }

            return(new BigInteger(subHelper(clone(value), clone(secondNumber.value))));
        }