コード例 #1
0
        private void ExchangeServer()
        {
            BigInteger g;
            BigInteger n;

            // Generate random prime numbers for g and n
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(nBitsInKey))
            {
                RSAParameters parameters = rsa.ExportParameters(true);

                byte[] d       = parameters.D;
                byte[] modulus = parameters.Modulus;

                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(d);
                    Array.Reverse(modulus);
                }

                g = new BigInteger(d, true);
                n = new BigInteger(modulus, true);
            }
            BigInteger a   = RandomBigInt(nBitsInKey);
            BigInteger ang = BigInteger.ModPow(g, a, n);

            InitKeyShare initKey = new InitKeyShare(n, g, ang);

            stream.Write(ObjectToByteArray(initKey));

            byte[]     message = GetMessage();
            BigInteger gb      = ByteArrayToObject <KeyShare>(message).abgn;

            byte[] key = BigInteger.ModPow(gb, a, n).ToByteArray();
            Array.Copy(key, _Key, _Key.Length);
        }
コード例 #2
0
        private void ExchangeClient()
        {
            BigInteger b = RandomBigInt(nBitsInKey);

            byte[]       message  = GetMessage();
            InitKeyShare initData = ByteArrayToObject <InitKeyShare>(message);

            BigInteger bgn = BigInteger.ModPow(initData.g, b, initData.n);

            stream.Write(ObjectToByteArray(new KeyShare(bgn)));

            byte[] key = BigInteger.ModPow(initData.abgn, b, initData.n).ToByteArray();
            Array.Copy(key, _Key, _Key.Length);
        }