private void Sign(String filename, String passphrase) { try { core.InitializeKeys(passphrase); } catch { Console.Error.WriteLine("Invalid passphrase"); return; } String outFile = filename + ".pses"; Message message = new Message(File.ReadAllText(filename, Encoding.UTF8)); message.Sign(core.PrivateKey); if (Util.Write(outFile, message.ToString())) { Console.Error.WriteLine("Output written to {0}", outFile); } }
//get public key of a user ( complete ) public String KeyObt(String email, DateTime date) { ActionLog_Write(email + ": KeyObt"); Console.WriteLine(beginProtocol); Console.WriteLine(email + ": KeyObt"); int index = email.IndexOf('@'); String domainName = email.Substring(index, email.Length - index); String publicKey = null; Core core = new Core(Server.passphrase); if (core.GetXmlNodeInnerText("domain") == domainName) { DatabaseConnection connection = new DatabaseConnection(); publicKey = connection.getPublicKey(email, date); connection.close(); } else { byte[] rawCertData = Certificate.SearchCertificate(domainName); if (rawCertData == null) { if (ConnectRootServer(core.GetXmlNodeInnerText("root_server"))) { if (GetCertificate(domainName)) { rawCertData = Certificate.SearchCertificate(domainName); } } } byte[] foreignServerCertPK = Certificate.GetPublicKey(rawCertData); String foreignServerXmlPK = Crypto.CertToXMLKey(foreignServerCertPK); Console.WriteLine("Public key of " + domainName + ":\n" + foreignServerXmlPK); String foreignServerHost = Certificate.GetHostName(rawCertData); ActionLog_Write("Connecting to foreign PractiSES server (" + foreignServerHost + ")..."); Console.WriteLine("Connecting to foreign PractiSES server ({0})...", foreignServerHost); IServer foreignServer = (IServer)Activator.GetObject(typeof(IServer), "http://" + foreignServerHost + "/PractiSES"); String signedPublicKey = foreignServer.KeyObt(email, date); if (signedPublicKey != null) { Message foreignmessage = new Message(signedPublicKey); //**************** if (foreignmessage.Verify(foreignServerXmlPK)) { publicKey = foreignmessage.getCleartext(); } //**************** } } if (publicKey == null) { ActionLog_Write("Error - " + email + ": Email does not exist!"); Console.WriteLine("Error - " + email + ": Email does not exist!"); throw new Exception("Invalid user"); } Message message = new Message(publicKey); message.AddComment("Email",email); message.Sign(core.PrivateKey); String result = message.ToString(); return result; }
/* private void WriteIdentity(String username, String email) { StreamWriter sw = new StreamWriter(Path.Combine(core.ApplicationDataFolder, "identity")); sw.WriteLine(username); sw.WriteLine(email); sw.Close(); } */ private void Encrypt(String filename, String recipient, String outfile) { String publicKey = FetchPublicKey(recipient); if (publicKey == null) return; Message message = new Message(File.ReadAllBytes(filename)); message.Encrypt(publicKey); if (Util.Write(outfile, message.ToString())) { Console.Error.WriteLine("Output written to {0}", outfile); } }
private String AskQuestions(String userID, String email) { Core core = new Core(Server.passphrase); DatabaseConnection connection = new DatabaseConnection(); String dbUserid = connection.getUserID(email); connection.close(); if (userID == null) { ErrorLog_Write(email + ": Email does not exist!"); Console.WriteLine(email + ": Email does not exist!"); throw new Exception("Invalid user"); } if (userID != dbUserid) { ErrorLog_Write(email + ": User id does not exist!"); Console.WriteLine(email + ": User id does not exist!"); throw new Exception("Invalid user"); } String questions = core.ReadSettingsFile(); Message result = new Message(questions); result.Sign(core.PrivateKey); return result.ToString(); }