public static bool getCertificate(AdvanceStream stream, string userName, string publicKey, out Models.DigitalCertificate dc) { stream.Write("0"); stream.Write(userName + '\t'); stream.Write(publicKey); string result = stream.ReadString(); if (result == "1") { string certificateString = stream.ReadString(); Models.DigitalCertificate certificate = Models.DigitalCertificate.newClientObject(certificateString); dc = certificate; MainWindow.instance.Log(certificate.ToString()); MessageBox.Show(certificate.ToString()); return(true); } else { dc = null; return(false); } }
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); }