Exemple #1
0
 public bool checkVoice(BigInteger voice_n, BigInteger voice_s)
 {
     checkLeft  = new BigInteger(Math.Abs(voice_n.GetHashCode()) + "");
     checkRight = new BigInteger(MyModPowBigInteger
                                 .FastModuloExponentiation(voice_s, server.d, server.n) + "");
     if (checkLeft.CompareTo(checkRight) == 0)
     {
         return(true);
     }
     return(false);
 }
Exemple #2
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);
        }
Exemple #3
0
 public void generateV(string password)
 {
     if (password == null || password == "" || !checkOnSymbol(password))
     {
         s = new BigInteger("2");
     }
     else
     {
         s = new BigInteger(password);
     }
     v = MyModPowBigInteger.FastModuloExponentiation(s, BigInteger.Two, n);
 }
Exemple #4
0
 public BigInteger sendY()
 {
     if (e == 0)
     {
         return(r);
     }
     else if (e == 1)
     {
         return(MyModPowBigInteger.FastModuloExponentiation(
                    r.Multiply(MyModPowBigInteger.FastModuloExponentiation(s, BigInteger.One, n)),
                    BigInteger.One,
                    n));
     }
     return(BigInteger.Zero);
 }
        public void takeCardReferee()
        {
            Player referee = Model.players.Last();

            foreach (Player p_iter in Model.players)
            {
                if (p_iter == referee)
                {
                    continue;
                }
                Model.deck[0] = MyModPowBigInteger.FastModuloExponentiation(Model.deck[0], p_iter.d, Model.p);
            }

            referee.cards.Add(MyModPowBigInteger.FastModuloExponentiation(Model.deck[0], referee.d, Model.p));
            Model.deck.RemoveAt(0);
        }
        public void takeCards(Player player)
        {
            List <BigInteger> cards = new List <BigInteger>();

            foreach (Player p_iter in Model.players)
            {
                if (p_iter == player)
                {
                    continue;
                }
                Model.deck[0] = MyModPowBigInteger.FastModuloExponentiation(Model.deck[0], p_iter.d, Model.p);
                Model.deck[1] = MyModPowBigInteger.FastModuloExponentiation(Model.deck[1], p_iter.d, Model.p);
            }
            cards.Add(MyModPowBigInteger.FastModuloExponentiation(Model.deck[0], player.d, Model.p));
            cards.Add(MyModPowBigInteger.FastModuloExponentiation(Model.deck[1], player.d, Model.p));
            Model.deck.RemoveAt(0);
            Model.deck.RemoveAt(0);

            player.cards = cards;
        }
Exemple #7
0
        public bool responseY(BigInteger y)
        {
            if (y.CompareTo(BigInteger.Zero) == 0)
            {
                check++;
                return(false);
            }
            BigInteger left  = y.Multiply(y);
            BigInteger right = MyModPowBigInteger.FastModuloExponentiation(
                x.Multiply(MyModPowBigInteger.FastModuloExponentiation(v, new BigInteger(e.ToString()), n)),
                BigInteger.One,
                n);

            left_check  = left.ToString();
            right_check = right.ToString();
            if (left.CompareTo(right) == 0)
            {
                return(true);
            }
            return(false);
        }
 public void encrypt()
 {
     foreach (Player player in Model.players)
     {
         Model.deck = Model.deck.Select(x => MyModPowBigInteger.FastModuloExponentiation(x, player.c, Model.p)).ToList();
         //Model.deck = Model.deck.OrderBy().ToList();
         BigInteger min = Model.deck[0];
         int        num = 0;
         for (int i = 0; i < Model.deck.Count; i++)
         {
             min = Model.deck[i];
             num = i;
             for (int j = i + 1; j < Model.deck.Count - 1; j++)
             {
                 if (min.CompareTo(Model.deck[j]) > 0)
                 {
                     min = Model.deck[j];
                     num = j;
                 }
             }
             BigInteger tmp = Model.deck[i]; Model.deck[i] = Model.deck[num]; Model.deck[num] = tmp;
         }
     }
 }
Exemple #9
0
 public BigInteger getTicket(BigInteger _h)
 {
     return(MyModPowBigInteger.FastModuloExponentiation(_h, server.c, server.n));
 }
Exemple #10
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);
            }
        }
Exemple #11
0
 public BigInteger sendX()
 {
     generateR();
     return(MyModPowBigInteger.FastModuloExponentiation(r, BigInteger.Two, n));
 }