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); }
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); }
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); }
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; }
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; } } }
public BigInteger getTicket(BigInteger _h) { return(MyModPowBigInteger.FastModuloExponentiation(_h, server.c, server.n)); }
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); } }
public BigInteger sendX() { generateR(); return(MyModPowBigInteger.FastModuloExponentiation(r, BigInteger.Two, n)); }