コード例 #1
0
        private static void signUp(AdvanceStream stream, MainWindow mainWindow)
        {
            string             digCer = stream.ReadString();
            DigitalCertificate dc     = DigitalCertificate.newClientObject(digCer);

            MainWindow.instance.Log("Get client certificate.....");
            string publicKey = "";

            MainWindow.instance.Log("connect to CA.....");


            MainWindow.clientForCertificate.connect((e) =>
            {
                e.Write("2");
            });

            publicKey = getCApublicKey(MainWindow.clientForCertificate.stream);



            KeysManager.RSAPcublicKeyOfCA = publicKey;
            MainWindow.instance.Log("CA public key", publicKey);

            if (dc.verviy())
            {
                stream.Write("1");
                byte[] encrSingUpdata   = stream.ReadBytes();
                RSA    rsa              = new RSA("Server");
                byte[] decrypSingUpData = rsa.decrypt(encrSingUpdata, KeysManager.RSAPrivateKey);

                MainWindow.instance.Log("Encrypted SignUp Data", Encoding.UTF8.GetString(encrSingUpdata));
                MainWindow.instance.Log("Decrypted SignUp Data", Encoding.UTF8.GetString(decrypSingUpData));

                SignUpObject signUpObject = SignUpObject.newLoginObject(Encoding.UTF8.GetString(decrypSingUpData));
                var          user         = DBContext.getInstace().Clients.SingleOrDefault(item => item.Username == signUpObject.username);
                if (user != null)
                {
                    if (user.Username.Equals(signUpObject.username))
                    {
                        stream.Write("0");
                        MainWindow.instance.Log("Error username already taken ", signUpObject.username);
                    }
                    else
                    {
                        stream.Write("1");
                        MainWindow.instance.Log("Error password already taken");
                    }
                }
                else
                {
                    DBContext.getInstace().Clients.Add(new Models.Client(signUpObject.name, signUpObject.username, signUpObject.password));
                    DBContext.getInstace().SaveChanges();
                    stream.Write("2");
                    user = DBContext.getInstace().Clients.SingleOrDefault(item => item.Username == signUpObject.username);
                    stream.Write(user.toJsonObject() + '\t' + "");
                    byte[] encryptKey = rsa.encrypte(KeysManager.AESkey, dc.SubjectPublicKey);
                    stream.Write(encryptKey);
                    MainWindow.instance.Log("Sign Up Successfully", user.Name);
                }
            }
            else
            {
                stream.Write("0");
            }

            MainWindow.instance.Log();
        }
コード例 #2
0
        public static bool SignUp(AdvanceStream stream, string signUpData)
        {
            bool         result       = false;
            bool         signUpResult = false;
            SignUpObject signUp       = SignUpObject.newLoginObject(signUpData);

            MainWindow.clientForCertificate.connectUntilSuss((e) =>
            {
                RequestsManager.connectToCA(e);
            });
            RSA rsa = new RSA(signUp.name);

            KeyManager.generateRSAPublicKey(rsa.rsaSP);
            KeyManager.generateRSAPrivateKey(rsa.rsaSP);
            Models.DigitalCertificate dc = new Models.DigitalCertificate();
            result = getCertificate(MainWindow.clientForCertificate.stream, signUp.name, KeyManager.RSAPublicKey, out dc);

            stream.Write("5");
            if (result)

            {
                stream.Write(dc.toJsonObject());
                string checkResult = stream.ReadString();
                if (checkResult == "1")
                {
                    MainWindow.instance.Log("Certificate has been checked\nreciving Server Public Key");
                    byte[] signUpByte             = Encoding.UTF8.GetBytes(signUpData);
                    byte[] EncreptedLoginDataByte = rsa.encrypte(signUpByte, KeyManager.serverRSAPublicKey);

                    MainWindow.instance.Log("Sign Up Data", signUpData);
                    MainWindow.instance.Log("Encrypted Sign Up Data", Encoding.UTF8.GetString(EncreptedLoginDataByte));

                    stream.Write(EncreptedLoginDataByte);
                    string response = stream.ReadString();
                    if (response.Equals("0"))
                    {
                        //no user
                        MainWindow.instance.Log("User name is taken");
                        signUpResult = false;
                    }
                    else if (response.Equals("1"))
                    {
                        //wrong password
                        MainWindow.instance.Log("Password is takten");
                        signUpResult = false;
                    }
                    else
                    {
                        //ok
                        response = stream.ReadString();
                        string[] words = response.Split('\t');
                        MainWindow.user = Server.Models.Client.newClientObject(words[0]);
                        MainWindow.instance.Log(words[0]);
                        byte[] inStream  = stream.ReadBytes();
                        byte[] decrypKey = rsa.decrypt(inStream, KeyManager.RSAPrivateKey);
                        MainWindow.instance.Log("Encrypted AES Key", Convert.ToBase64String(inStream, 0, inStream.Length));
                        KeyManager.serverAESPublicKey = Convert.ToBase64String(decrypKey, 0, decrypKey.Length);
                        MainWindow.instance.Log("AES Key", KeyManager.serverAESPublicKey);
                        signUpResult = true;
                    }
                }
                else
                {
                    MessageBox.Show("Not a vailed certificate");
                }
                MainWindow.instance.Log();
            }
            else
            {
                MessageBox.Show("Can't get a certificate");
            }
            return(signUpResult);
        }