Example #1
0
        private byte[] GenerateMask(byte[] seed, int outputLength)
        {
            if (outputLength > (Math.Pow(2, 32)))
            {
                throw new ArgumentException("Mask cannot exceed 2^32.");
            }
            else
            {
                var result = new List <byte>();
                for (var i = 0; i <= outputLength / _rsaConfig.hLen; i++)
                {
                    var data = new List <byte>();
                    data.AddRange(seed);
                    data.AddRange(RSAHelper.I2OSP(i, 4, false));
                    result.AddRange(_rsaConfig.ComputeHash(data.ToArray()));
                }

                if (outputLength <= result.Count)
                {
                    return(result.GetRange(0, outputLength).ToArray());
                }
                else
                {
                    throw new ArgumentException("mask length invalid.");
                }
            }
        }
Example #2
0
        public byte[] CrunchRSA(byte[] plainText, bool usePrivate)
        {
            if (usePrivate && (!_rsaConfig.Has_PRIVATE_Info))
            {
                throw new CryptographicException("No private key");
            }

            if ((usePrivate == false) && (!_rsaConfig.Has_PUBLIC_Info))
            {
                throw new CryptographicException("No public key");
            }

            BigInteger e;

            if (usePrivate)
            {
                e = _rsaConfig.D;
            }
            else
            {
                e = _rsaConfig.E;
            }

            var PT = RSAHelper.OS2IP(plainText, false);
            var M  = BigInteger.ModPow(PT, e, _rsaConfig.N);

            return(M.Sign == -1 ?
                   RSAHelper.I2OSP(M + _rsaConfig.N, _rsaConfig.OctetsInModulus, false) :
                   RSAHelper.I2OSP(M, _rsaConfig.OctetsInModulus, false));
        }
Example #3
0
        public byte[] PrivateDecryptFast(byte[] data)
        {
            if (!_rsaConfig.Has_PRIVATE_Info || !_rsaConfig.HasCRTInfo)
            {
                throw new CryptographicException("No private key");
            }
            else
            {
                var c = RSAHelper.OS2IP(data, false);

                var m1 = BigInteger.ModPow(c, _rsaConfig.DP, _rsaConfig.P);
                var m2 = BigInteger.ModPow(c, _rsaConfig.DQ, _rsaConfig.Q);
                var h  = ((m1 - m2) * _rsaConfig.InverseQ) % _rsaConfig.P;
                var m  = (m2 + (_rsaConfig.Q * h));

                return(m.Sign == -1 ?
                       RSAHelper.I2OSP(m + _rsaConfig.N, _rsaConfig.OctetsInModulus, false)
                    : RSAHelper.I2OSP(m, _rsaConfig.OctetsInModulus, false));
            }
        }