private void button1_Click(object sender, EventArgs e) { long[] V; double[] S; long N; ZEROPROOF.GenerateKeys(out V, out S, out N); var Tmpstr = ""; foreach (var a in V) { Tmpstr += a.ToString() + " "; } textBoxAN.Text = Convert.ToString(N); textBoxAV.Text = Convert.ToString(Tmpstr); textBoxBN.Text = Convert.ToString(N); textBoxBV.Text = Convert.ToString(Tmpstr); Tmpstr = ""; foreach (var a in S) { Tmpstr += a.ToString() + " "; } textBoxAS.Text = Convert.ToString(Tmpstr); }
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 TmpStr = textBoxAS.Text.Split(' '); var AS = new List <int>(); foreach (var s in TmpStr) { if (s != "") { AS.Add(Convert.ToInt32(s)); } } var BN = Convert.ToInt64(textBoxBN.Text); TmpStr = textBoxBV.Text.Split(' '); var BV = new List <long>(); foreach (var s in TmpStr) { if (s != "") { BV.Add(Convert.ToInt32(s)); } } var NeBudetPovtornoR = new HashSet <int>(); textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Сторона А(доказывает)" + Environment.NewLine); textBoxLog.AppendText("---------------------" + Environment.NewLine); var AXMass = new List <long>(); var ARMass = new List <long>(); for (var i = 0; i < AS.Count; i++) { 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); AXMass.Add(AX); ARMass.Add(AR); 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 = AXMass; foreach (var X in BX) { textBoxLog.AppendText("X = " + Convert.ToString(X) + Environment.NewLine); } var BbArr = new List <int>(); for (var i = 0; i < AS.Count; i++) { var Bb = Rnd.Next(0, 2); BbArr.Add(Bb); 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 = BbArr; foreach (var B in Ab) { textBoxLog.AppendText("b = " + Convert.ToString(B) + Environment.NewLine); } var Otpravka = new List <long>(); for (var i = 0; i < AS.Count; i++) { long AY = 0; if (Ab[i] == 0) { textBoxLog.AppendText("Отправка R стороне B" + Environment.NewLine); Otpravka.Add(ARMass[i]); } else { AY = ARMass[i] * AS[i] % AN; textBoxLog.AppendText("Y = " + Convert.ToString(AY) + Environment.NewLine); textBoxLog.AppendText("Отправка Y стороне B" + Environment.NewLine); Otpravka.Add(AY); } } //--------------------------------------------- textBoxLog.AppendText("---------------------" + Environment.NewLine); textBoxLog.AppendText("Сторона B(проверяет)" + Environment.NewLine); textBoxLog.AppendText("---------------------" + Environment.NewLine); for (var i = 0; i < AS.Count; i++) { if (BbArr[i] == 0) { textBoxLog.AppendText("Получение R от стороны A" + Environment.NewLine); var BR = Otpravka[i]; 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[i] == 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 = Otpravka[i]; textBoxLog.AppendText("Y = " + Convert.ToString(BY) + Environment.NewLine); textBoxLog.AppendText("Вычисленный X = " + (BigInteger.Pow(BY, 2) * BV[i] % BN).ToString() + Environment.NewLine); textBoxLog.AppendText("Полученный X = " + Convert.ToString(BX) + Environment.NewLine); if (BX[i] == Convert.ToInt64((BigInteger.Pow(BY, 2) * BV[i] % 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) { break; } } if (Proof) { textBoxLog.AppendText("Сторона A идентифицирована!" + Environment.NewLine); } else { textBoxLog.AppendText("Сторона A не идентифицирована!" + Environment.NewLine); } }