public void retreive(String pass, bool legal) { BigInteger gp = gengp(pass); BigInteger x = genx(); BigInteger Q = genQ(x, gp); List <messS1> rec = new List <messS1>(); int n = slist.Length; for (int i = 0; i < n; i++) { messC2 m = new messC2(name, Q); messS1 reply = sendrequest(slist[i], m); if (reply == null) { Console.WriteLine("\n{0}: Abort !\n", name); return; } else { rec.Add(reply); } } BigInteger Kmrec = genKrec(x, rec); BigInteger proof = rec[0].getproof(); byte[] Ukrec = rec[0].getUk(); if (verify(gp, Kmrec, proof) == true) { Console.WriteLine("\n{0}: Km retreived successfuly !\n", name); BigInteger U = decryptU(Kmrec, Ukrec); BigInteger Qu = new BigInteger(rsa.createSig(Q, U, nrsa)); messC3 mc = new messC3(Q, Qu); for (int i = 0; i < slist.Length; i++) { if (legal == true) { sendconfirm(slist[i], mc, nrsa); } else { sendconfirmFake(slist[i], mc, nrsa); } } } else { Console.WriteLine("\n{0}: Abort !\n", name); } }
public void accept(messC2 m, BigInteger p) { String c = m.getA(); if (balist[c] > 2) { Console.WriteLine("\nCLIENT {0} BLOCKED !", c); rep = null; } else { messC1 c1 = clist[c]; messL l = new messL(c, m.getQ(), c1.getV(), DateTime.Now); alist.Add(l); BigInteger R = m.getQ().modPow(c1.getyi(), p); //Console.WriteLine("\nRi: " + R); rep = new messS1(R, c1.getUk(), c1.getproof()); } }
private messS1 sendrequest(cserver cs, messC2 m) { cs.accept(m, p); return(cs.reply()); }