Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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());
            }
        }
Beispiel #3
0
 private messS1 sendrequest(cserver cs, messC2 m)
 {
     cs.accept(m, p);
     return(cs.reply());
 }