コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: SodiumTests.cs プロジェクト: crystalbyte/paranoia
        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)));
        }
コード例 #4
0
ファイル: SodiumTests.cs プロジェクト: crystalbyte/paranoia
        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);
        }
コード例 #5
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);
            }
        }