コード例 #1
0
        private void generate()
        {
            EvklidBigInteger evklid = new EvklidBigInteger();

            do
            {
                server.q = BigInteger.ProbablePrime(server.bitLength, new Random());
            } while (!server.q.IsProbablePrime(10));

            do
            {
                server.p = BigInteger.ProbablePrime(server.bitLength, new Random());
            } while (!server.p.IsProbablePrime(10));

            server.n = server.q.Multiply(server.p);

            server.f = (server.p.Subtract(BigInteger.One).Multiply(server.q.Subtract(BigInteger.One)));

            while (true)
            {
                server.d = BigInteger.ProbablePrime(server.bitLength, new Random());
                if (evklid.gcd(server.d, server.f).CompareTo(BigInteger.One) == 0)
                {
                    if (evklid.mY.CompareTo(BigInteger.Zero) < 0)
                    {
                        server.c = evklid.mY.Add(server.f);
                    }
                    else
                    {
                        server.c = evklid.mY;
                    }
                    break;
                }
            }
        }
コード例 #2
0
        protected void CreateKey()
        {
            EvklidBigInteger evklid = new EvklidBigInteger();
            Random           Rand   = new Random();
            int bit = 512;

            do
            {
                Q = BigInteger.ProbablePrime(bit, new Random());
            } while (Q.IsProbablePrime(1 << 10) == false);

            do
            {
                P = BigInteger.ProbablePrime(bit, new Random());
            } while (P.IsProbablePrime(1 << 10) == false);
            N = P.Multiply(Q);
            F = (P.Subtract(BigInteger.One)).Multiply((Q.Subtract(BigInteger.One)));
            while (true)
            {
                var dCount = Rand.Next(1, F.ToString().Length - 1);
                d = new BigInteger(dCount, Rand);
                var gcd = F.Gcd(d);
                if (gcd.CompareTo(BigInteger.One) == 0)
                {
                    break;
                }
            }

            c = d.ModInverse(F);
        }
コード例 #3
0
        public void generateSV()
        {
            EvklidBigInteger evklid = new EvklidBigInteger();
            BigInteger       tmp_s;

            do
            {
                tmp_s = BigInteger.ProbablePrime(bitLength, new Random());
            } while (!tmp_s.IsProbablePrime(10) && evklid.gcd(tmp_s, n).CompareTo(BigInteger.One) != 0);
            s = tmp_s;
            v = MyModPowBigInteger.FastModuloExponentiation(s, BigInteger.Two, n);
        }
コード例 #4
0
        /*
         * Generate P and Q
         */
        private void generate()
        {
            EvklidBigInteger evklid = new EvklidBigInteger();
            BigInteger       tmp_p, tmp_q;

            do
            {
                do
                {
                    tmp_p = BigInteger.ProbablePrime(bitLength, new Random());
                    tmp_q = BigInteger.ProbablePrime(bitLength, new Random());
                } while (!tmp_p.IsProbablePrime(10) && !tmp_q.IsProbablePrime(10));
            } while (evklid.gcd(tmp_q, tmp_p).CompareTo(BigInteger.One) != 0);
            p = tmp_p;
            q = tmp_q;
            n = q.Multiply(p);
            t = 10;
        }
コード例 #5
0
        public Player(BigInteger p_prev)
        {
            EvklidBigInteger evklid = new EvklidBigInteger();

            do
            {
                c = BigInteger.ProbablePrime(bitLength, new Random());
                if (evklid.gcd(c, p_prev).CompareTo(BigInteger.One) == 0)
                {
                    if (evklid.mY.CompareTo(BigInteger.Zero) < 0)
                    {
                        d = evklid.mY.Add(p_prev);
                    }
                    else
                    {
                        d = evklid.mY;
                    }
                    break;
                }
            } while (true);
        }
コード例 #6
0
        protected void Vote()
        {
            EvklidBigInteger evklid = new EvklidBigInteger();

            if (string.IsNullOrEmpty(voice.name))
            {
                titleName   = "Введите имя";
                checkResult = "Голосуйте, мы вам не мешаем";
                destruct();
                return;
            }
            else
            {
                titleName = "Здравствуйте, " + voice.name;
            }

            if (Voise == 0)
            {
                Text = "Введите свой голос!";
                return;
            }

            string filename = "Resource/people.txt";

            try {
                using (StreamReader reader = new StreamReader(filename)) {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (voice.name == line)
                        {
                            checkResult = "Не голосуйте повторно";
                            return;
                        }
                    }
                    reader.Close();
                }
                using (StreamWriter writer = new StreamWriter(filename, true)) {
                    string line = voice.name + "\n";
                    writer.Write(line);
                    writer.Close();
                }
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);
            }


            voice.bitLength = 512;
            voice.n         = BigInteger.ProbablePrime(voice.bitLength, new Random());

            int h_key = key[Voise].GetHashCode();

            voice.n = voice.n.Add(new BigInteger(h_key.ToString()));

            BigInteger tmp_r;

            do
            {
                tmp_r = BigInteger.ProbablePrime(32, new Random());
            } while (evklid.gcd(tmp_r, server.getN()).CompareTo(BigInteger.One) != 0);
            voice.r = tmp_r;

            voice.h  = new BigInteger(Math.Abs(voice.n.GetHashCode()) + "");
            voice._h = voice.h.Multiply(MyModPowBigInteger.FastModuloExponentiation(voice.r, server.getD(), server.getN()));

            voice._s = server.getTicket(voice._h);
            voice.s  = voice._s.Multiply(voice.r.ModInverse(server.getN()));


            if (server.checkVoice(voice.n, voice.s))
            {
                checkResult = "Благодарим, вы успешно проголосовали";
            }
            else
            {
                checkResult = "Ошибка";
            }

            filename = "Resource/resultVoises.txt";
            try {
                using (StreamReader reader = new StreamReader(filename)) {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        string lineInput = voice.n.ToString() + " " + voice.s.ToString();
                        if (lineInput == line)
                        {
                            checkResult = "У разных Имен совпали подписи";
                            return;
                        }
                    }
                    reader.Close();
                }
                using (StreamWriter writer = new StreamWriter(filename, true)) {
                    string line = voice.n + " " + voice.s + "\n";
                    writer.Write(line);
                    writer.Close();
                }
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);
            }
        }