public static void GetPublicKey(AdvanceStream stream) { stream.Write("0"); byte[] inStream; inStream = stream.ReadBytes(); KeyManager.serverRSAPublicKey = Encoding.UTF8.GetString(inStream, 0, inStream.Length); MainWindow.instance.Log("Server AES Public Key", KeyManager.serverAESPublicKey); MainWindow.instance.Log("Server AES Public Key", KeyManager.serverRSAPublicKey); MainWindow.instance.Log(); }
public static Server.Models.Client Login(AdvanceStream stream, string loginData) { // To generate private key for RSA if not exist RSA rsa = new RSA(LoginObject.newLoginObject(loginData).username); KeyManager.generateRSAPublicKey(rsa.rsaSP); KeyManager.generateRSAPrivateKey(rsa.rsaSP); stream.Write("1"); stream.Write(KeyManager.RSAPublicKey); AES aes = AES.getInstance(); byte[] msg = Encoding.UTF8.GetBytes(loginData); byte[] EncreptedLoginData = rsa.encrypte(msg, KeyManager.serverRSAPublicKey); MainWindow.instance.Log("Login Data", loginData); MainWindow.instance.Log("Encrypted Login Data", Encoding.UTF8.GetString(EncreptedLoginData)); stream.Write(EncreptedLoginData); string response = stream.ReadString(); if (response.Equals("0")) { //no user MainWindow.instance.Log("No such user"); MainWindow.instance.Log(); return(null); } else if (response.Equals("1")) { //wrong password MainWindow.instance.Log("Wrong Password"); MainWindow.instance.Log(); return(null); } else { //ok response = stream.ReadString(); Server.Models.Client loginClient = Server.Models.Client.newClientObject(response); MainWindow.instance.Log(response); 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); return(loginClient); } }
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); }