示例#1
0
 public bool ChangeNick(string oldnick, string newnick, byte[] newnickhashed)
 {
     bool result = false;
     Chat instance = new Chat();
     instance.Deserialiser();
     User user = instance.SearchNick(oldnick);
     if (user != null) //si l'utilisateur actuel existe
     {
         if (instance.SearchNick(newnick) == null) //si le nouveau login choisi est bon
         {
             ASCIIEncoding encoding = new ASCIIEncoding();
             DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
             mycrypto.ImportParameters(user.Publickey);
             if (mycrypto.VerifyData(encoding.GetBytes(newnick), newnickhashed)) //verification de la provenance du message
             {
                 instance.RemoveUser(user);
                 user.Login = newnick;
                 instance.AddUser(user);
                 instance.Serialiser();
                 result = true;
             }
         }
     }
     return result;
 }
示例#2
0
        public void TestMethodSerialization()
        {
            //on simule l'ajout d'auteur
            User aut1 = new User("Toto", "mypass1");
            User aut2 = new User("JC", "mypass2");
            User aut3 = new User("Max", "mypass3");
            User aut4 = new User("Titi", "clearstream");
            User aut5 = new User("Toadd", "serie");

            DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
            DSAParameters key = mycrypto.ExportParameters(false);
            aut1.Publickey = key;
            aut2.Publickey = key;
            aut3.Publickey = key;
            aut4.Publickey = key;
            aut5.Publickey = key;

            Message mess1 = new Message(aut1.Login, "Coucou ca va?");
            Message mess2 = new Message(aut2.Login, "oue et toi?");
            Message mess3 = new Message(aut3.Login, "tranquille!");
            Message mess4 = new Message(aut1.Login, "ca va ca va");
            Message mess5 = new Message(aut5.Login, "Test fifi");
            Message mess6 = new Message(aut5.Login, "MessagePrive: cool ma poule?");

            aut1.AddPrivateMessage(mess6);

            //on simule
            Chat toTest = new Chat();
            Chat toOut =  new Chat();
            toTest.AddUser(aut1);
            toTest.AddUser(aut2);
            toTest.AddUser(aut3);
            toTest.AddUser(aut4);
            toTest.AddMessage(mess1);
            toTest.AddMessage(mess2);
            toTest.AddMessage(mess3);
            toTest.AddMessage(mess4);

            toTest.Serialiser();
            toOut.Deserialiser();
            toOut.AddUser(aut5);
            toOut.AddMessage(mess5);
            toOut.Serialiser();
            //l'analyse du test se fera manuellement dans le fichier de sortie
        }
示例#3
0
 public Message[] ReceiveAllMessage(string nick, byte[] nickhashed)
 {
     Chat instance = new Chat();
     instance.Deserialiser();
     Message[] message = null;
     User user = instance.SearchNick(nick);
     if (user != null) //on verifie si le demandeur existe
     {
         ASCIIEncoding encoding = new ASCIIEncoding();
         DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
         mycrypto.ImportParameters(user.Publickey);
         if (mycrypto.VerifyData(encoding.GetBytes(nick), nickhashed)) //on verifie la provenance de la demande
         {
             message = instance.Messages.ToArray<Message>();
         }
     }
     return message;
 }
示例#4
0
 public bool SendPrivateMessage(string nick, string recipient, string message, byte[] messagehashed)
 {
     bool result = false;
     Chat instance = new Chat();
     instance.Deserialiser();
     User user = instance.SearchNick(nick); //on verifie que l'auteur existe
     if (user != null)
     {
         ASCIIEncoding encoding = new ASCIIEncoding();
         DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
         mycrypto.ImportParameters(user.Publickey);
         if (mycrypto.VerifyData(encoding.GetBytes(message), messagehashed)) //on verifie la provenance du message
         {
             Message news = new Message(nick, message);
             User todeliver = instance.SearchNick(recipient); //on verifie la presence du destinataire
             if (todeliver != null)
             {
                 Message privatemessage = new Message(nick, message);
                 instance.RemoveUser(todeliver);
                 todeliver.AddPrivateMessage(privatemessage);
                 instance.AddUser(todeliver);
                 instance.Serialiser();
                 result = true;
             }
         }
     }
     return result;
 }
示例#5
0
 public bool SendMessage(string nick, string message, byte[] messagehashed)
 {
     bool result = false;
     Chat instance = new Chat();
     instance.Deserialiser();
     User user = instance.SearchNick(nick); //verification de l'utilisateur
     if (user != null)
     {
         ASCIIEncoding encoding = new ASCIIEncoding();
         DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
         mycrypto.ImportParameters(user.Publickey);
         if(mycrypto.VerifyData(encoding.GetBytes(message), messagehashed)) //on verifie que le message provient bien de l'utilisateur
         {
             Message news = new Message(nick, message);
             instance.AddMessage(news);
             instance.Serialiser();
             result = true;
         }
     }
     return result;
 }
示例#6
0
 public bool Register(string nick, string password,byte[] nickhashed, int counter, byte[] G, byte[] J, byte[] P, byte[] Q, byte[] Seed, byte[] X, byte[] Y)
 {
     bool result = false;
     Chat instance = new Chat();
     instance.Deserialiser();
     User user = instance.SearchNick(nick);
     if (user == null) //si l'utilisateur n'existe deja pas
     {
         DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
         DSAParameters key = Security.RecreateKey(counter, G, J, P, Q, Seed, X, Y);
         mycrypto.ImportParameters(key);
         ASCIIEncoding encoding = new ASCIIEncoding();
         if (mycrypto.VerifyData(encoding.GetBytes(nick), nickhashed)) //verifie la cle publique recue
         {
             User newcommer = new User(nick, password, key);
             instance.AddUser(newcommer);
             instance.Serialiser();
             result = true;
         }
     }
     return result;
 }
示例#7
0
 public Message[] ReceivePrivateMessage(string nick, byte[] nickhashed)
 {
     Chat instance = new Chat();
     instance.Deserialiser();
     User user = instance.SearchNick(nick);
     Message[] privatemessage = null;
     if (user != null) //si l'utilisateur existe
     {
         ASCIIEncoding encoding = new ASCIIEncoding();
         DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
         mycrypto.ImportParameters(user.Publickey);
         if (mycrypto.VerifyData(encoding.GetBytes(nick), nickhashed)) //verification de la provenance du message
         {
             privatemessage = user.PrivateMessage.ToArray<Message>();
         }
     }
     return privatemessage;
 }
示例#8
0
        public Message[] ReceiveMessageNonRead(string nick, byte[] nickhashed)
        {
            Chat instance = new Chat();
            instance.Deserialiser();
            User user = instance.SearchNick(nick);
            Message[] unread = null;
            if (user != null) //on verifie si l'utilisateur existe
            {
                ASCIIEncoding encoding = new ASCIIEncoding();
                DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
                mycrypto.ImportParameters(user.Publickey);
                if (mycrypto.VerifyData(encoding.GetBytes(nick), nickhashed)) //on verifie la provenance de la demande
                {
                    //requete LINQ pour recuperer les messages a lire
                    unread = (from Message m in instance.Messages
                              where m.Creation > user.LastRead
                              select m).ToArray<Message>();

                    instance.RemoveUser(user);
                    user.LastRead = DateTime.Now; //on modifie la date de derniere lecture
                    instance.AddUser(user);
                    instance.Serialiser();
                }
            }
            return unread;
        }
示例#9
-1
 public bool LogIn(string nick, string password,byte[] nickhashed, int counter, byte[] G, byte[] J, byte[] P, byte[] Q, byte[] Seed, byte[] X, byte[] Y)
 {
     bool result = false;
     Chat instance = new Chat();
     instance.Deserialiser();
     User user = instance.SearchNick(nick);
     if (user != null) //si l'utilisateur existe
     {
         if (user.CheckPassword(password)) //si le mot de passe de l'utilisateur est bon
         {
             DSACryptoServiceProvider mycrypto = new DSACryptoServiceProvider();
             DSAParameters key = Security.RecreateKey(counter, G, J, P, Q, Seed, X, Y);
             mycrypto.ImportParameters(key);
             ASCIIEncoding encoding = new ASCIIEncoding();
             if (mycrypto.VerifyData(encoding.GetBytes(nick), nickhashed)) //verification de la cle publique recue
             {
                 result = true;
                 instance.RemoveUser(user);
                 user.Publickey = key; //on stocke la cle publique pour la reception prochaine de message
                 instance.AddUser(user);
                 instance.Serialiser();
             }
         }
     }
     return result;
 }