private async Task <MailMessage> EncryptMessageAsync(MailAccountContext account, IEnumerable <PublicKeyModel> keys, string recipient, string content) { var message = CreateMailMessage(account, recipient, content); var mime = await message.ToMimeAsync(); var bytes = Encoding.UTF8.GetBytes(mime); var wrapper = CreateMailMessage(account, recipient, "blubbi"); var publicKey = Convert.ToBase64String(App.Context.KeyContainer.PublicKey); wrapper.Headers.Add(ParanoiaHeaderKeys.PublicKey, publicKey); foreach (var key in keys) { var keyBytes = Convert.FromBase64String(key.Data); var nonceBytes = PublicKeyCrypto.GenerateNonce(); var encryptedBytes = await Task.Factory.StartNew(() => App.Context.KeyContainer.EncryptWithPublicKey(bytes, keyBytes, nonceBytes)); var writer = new BinaryWriter(new MemoryStream()); writer.Write(nonceBytes); writer.Write(encryptedBytes); writer.Flush(); writer.BaseStream.Seek(0, SeekOrigin.Begin); var view = new AlternateView(writer.BaseStream, new ContentType("application/x-setolicious")); wrapper.AlternateViews.Add(view); } return(wrapper); }
internal async Task InitKeysAsync() { var info = GetKeyDirectory(); var publicKey = Path.Combine(info.FullName, Settings.Default.PublicKeyFile); var privateKey = Path.Combine(info.FullName, Settings.Default.PrivateKeyFile); KeyContainer = new PublicKeyCrypto(); await KeyContainer.InitFromFileAsync(publicKey, privateKey); }
public void TestKeyGeneration() { Sodium.InitNativeLibrary(); var pkc1 = new PublicKeyCrypto(); pkc1.Init(); Assert.IsFalse(String.IsNullOrEmpty(Encoding.UTF8.GetString(pkc1.PublicKey))); Assert.IsFalse(String.IsNullOrEmpty(Encoding.UTF8.GetString(pkc1.PrivateKey))); }
public void TestPublicKeyEncrypt() { Sodium.InitNativeLibrary(); var pkc1 = new PublicKeyCrypto(); var pkc2 = new PublicKeyCrypto(); pkc1.Init(); pkc2.Init(); var message = "test"; var nonce = PublicKeyCrypto.GenerateNonce(); var encMessage = pkc1.EncryptWithPublicKey(Encoding.ASCII.GetBytes(message), pkc2.PublicKey, nonce); var decryptedMessage = pkc2.DecryptWithPrivateKey(encMessage, pkc1.PublicKey, nonce); Assert.IsTrue(String.Compare(message, Encoding.ASCII.GetString(decryptedMessage)) == 0); }
private static async void OnCreateKeyPair(object obj) { try { App.Context.ClosePopup(); using (var crypto = new PublicKeyCrypto()) { crypto.Init(); var dir = AppContext.GetKeyDirectory().FullName; var publicKey = Path.Combine(dir, Settings.Default.PublicKeyFile); await crypto.SavePublicKeyAsync(publicKey); var privateKey = Path.Combine(dir, Settings.Default.PrivateKeyFile); await crypto.SavePrivateKeyAsync(privateKey); await App.Context.InitKeysAsync(); await App.Context.RunAsync(); } } catch (Exception ex) { Logger.Error(ex); } }