private void button1_Click(object sender, EventArgs e) { long V, N; double S; ZEROPROOF.GenerateKeys(out V, out S, out N); textBoxAN.Text = Convert.ToString(N); textBoxAV.Text = Convert.ToString(V); textBoxBN.Text = Convert.ToString(N); textBoxBV.Text = Convert.ToString(V); textBoxAS.Text = Convert.ToString(S); }
private void buttonIdentif_Click(object sender, EventArgs e) { textBoxLog.Clear(); textBoxLog.AppendText("=====================" + Environment.NewLine); textBoxLog.AppendText("Начало проверки" + Environment.NewLine); textBoxLog.AppendText("=====================" + Environment.NewLine); var Rnd = new Random(); var Proof = true; var AN = Convert.ToInt64(textBoxAN.Text); var AS = Convert.ToInt64(textBoxAS.Text); var BN = Convert.ToInt64(textBoxBN.Text); var BV = Convert.ToInt64(textBoxBV.Text); var NeBudetPovtornoR = new HashSet <int>(); for (var i = 1; i <= 100; i++) { textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Сторона А(доказывает)" + Environment.NewLine); textBoxLog.AppendText("---------------------" + Environment.NewLine); var AR = 0; do { AR = Rnd.Next(1, (int)AN); }while (NeBudetPovtornoR.Contains(AR)); NeBudetPovtornoR.Add(AR); textBoxLog.AppendText("Случайное R = " + Convert.ToString(AR) + Environment.NewLine); var AX = ZEROPROOF.FastPowFunc(AR, 2, AN); textBoxLog.AppendText("X = " + Convert.ToString(AX) + Environment.NewLine); textBoxLog.AppendText("Отправка X стороне B" + Environment.NewLine); //--------------------------------------------- textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Сторона B(проверяет)" + Environment.NewLine); textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Получение X от стороны A" + Environment.NewLine); var BX = AX; textBoxLog.AppendText("X = " + Convert.ToString(BX) + Environment.NewLine); var Bb = Rnd.Next(0, 2); textBoxLog.AppendText("Случайный бит b = " + Convert.ToString(Bb) + Environment.NewLine); textBoxLog.AppendText("Отправка b стороне A" + Environment.NewLine); //--------------------------------------------- textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Сторона А(доказывает)" + Environment.NewLine); textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Получение b от стороны B" + Environment.NewLine); var Ab = Bb; textBoxLog.AppendText("b = " + Convert.ToString(Ab) + Environment.NewLine); long AY = 0; if (Ab == 0) { textBoxLog.AppendText("Отправка R стороне B" + Environment.NewLine); } else { AY = AR * AS % AN; textBoxLog.AppendText("Y = " + Convert.ToString(AY) + Environment.NewLine); textBoxLog.AppendText("Отправка Y стороне B" + Environment.NewLine); } //--------------------------------------------- textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Сторона B(проверяет)" + Environment.NewLine); textBoxLog.AppendText("---------------------" + Environment.NewLine); if (Bb == 0) { textBoxLog.AppendText("Получение R от стороны A" + Environment.NewLine); var BR = AR; textBoxLog.AppendText("R = " + Convert.ToString(BR) + Environment.NewLine); textBoxLog.AppendText("Вычисленный X = " + Convert.ToString(ZEROPROOF.FastPowFunc(BR, 2, BN)) + Environment.NewLine); textBoxLog.AppendText("Полученный X = " + Convert.ToString(BX) + Environment.NewLine); if (BX == ZEROPROOF.FastPowFunc(BR, 2, BN)) { textBoxLog.AppendText("Сторона A знает sqrt(X)" + Environment.NewLine); } else { textBoxLog.AppendText("Сторона A не знает sqrt(X). Сторона A не является подлинной!" + Environment.NewLine); Proof = false; break; } } else { textBoxLog.AppendText("Получение Y от стороны A" + Environment.NewLine); var BY = AY; textBoxLog.AppendText("Y = " + Convert.ToString(BY) + Environment.NewLine); textBoxLog.AppendText("Вычисленный X = " + (BigInteger.Pow(BY, 2) * BV % BN).ToString() + Environment.NewLine); textBoxLog.AppendText("Полученный X = " + Convert.ToString(BX) + Environment.NewLine); if (BX == Convert.ToInt64((BigInteger.Pow(BY, 2) * BV % BN).ToString())) { textBoxLog.AppendText("Сторона A знает sqrt(V-1)" + Environment.NewLine); } else { textBoxLog.AppendText("Сторона A не знает sqrt(V-1). Сторона A не является подлинной!" + Environment.NewLine); Proof = false; break; } } } if (Proof) { textBoxLog.AppendText("Сторона A идентифицирована!" + Environment.NewLine); } else { textBoxLog.AppendText("Сторона A не идентифицирована!" + Environment.NewLine); } }