Example #1
0
        private void decryptMsgBtn_Click(object sender, EventArgs e)
        {
            var  userId       = StudMail.UserId;
            var  msg          = CurrentLetter;
            var  books        = DBRSABooks.GetBooks(DBConnection.Connection, userId);
            var  body         = string.IsNullOrEmpty(msg.TextBody) ? msg.HtmlBody : msg.TextBody;
            var  decryptedTxt = "";
            bool isFound      = false;

            try
            {
                foreach (var book in books)
                {
                    if (book.Email == msg.From[0].ToString())
                    {
                        decryptedTxt = MailHelper.ReturnMsg(body, book.OwnPrivate);

                        if (decryptedTxt != null)
                        {
                            SaveMsgLocal(decryptedTxt);
                            isFound = true;
                        }

                        break;
                    }
                }

                MessageBox.Show(isFound ? decryptedTxt : body, "Расшифрованное сообщение");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Непредвиденная ошибка");
            }
        }
Example #2
0
        private void removeKeysBtn_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < keysTable.Rows.Count; i++)
            {
                var selected = (bool)keysTable.Rows[i].Cells["selectedKeyCol"].EditedFormattedValue;
                var email    = (string)keysTable.Rows[i].Cells["emailCol"].Value;
                var userId   = StudMail.UserId;

                if (selected)
                {
                    DBRSABooks.Remove(DBConnection.Connection, email, userId);
                }
            }

            updateBooksWorker.RunWorkerAsync();
        }
Example #3
0
 private void updateBooksWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     e.Result = DBRSABooks.GetBooks(DBConnection.Connection, StudMail.UserId);
 }
Example #4
0
        private void addKeysBtn_Click(object sender, EventArgs e)
        {
            var         email         = keysEmailTxt.Text.Trim(' ');
            var         privateKey    = keysPrivateTxt.Text.Trim(' ');
            var         publicKey     = keysPublicTxt.Text.Trim(' ');
            var         privateECPKey = keysPrivateSignTxt.Text.Trim(' ');
            var         publicECPKey  = keysPublicSignTxt.Text.Trim(' ');
            var         remoteKey     = keysRemoteTxt.Text.Trim(' ');
            var         remoteECPKey  = keysRemoteSignTxt.Text.Trim(' ');
            RSABookInfo book;

            if (string.IsNullOrEmpty(email))
            {
                checkInputPrv.SetError(keysEmailTxt, "Заполните данное поле");
                return;
            }

            if (string.IsNullOrEmpty(privateKey))
            {
                checkInputPrv.SetError(keysPrivateTxt, "Заполните данное поле");
                return;
            }

            if (string.IsNullOrEmpty(publicKey))
            {
                checkInputPrv.SetError(keysPublicTxt, "Заполните данное поле");
                return;
            }

            if (string.IsNullOrEmpty(privateECPKey))
            {
                checkInputPrv.SetError(keysPrivateSignTxt, "Заполните данное поле");
                return;
            }

            if (string.IsNullOrEmpty(publicECPKey))
            {
                checkInputPrv.SetError(keysPublicSignTxt, "Заполните данное поле");
                return;
            }

            if (string.IsNullOrEmpty(remoteKey))
            {
                checkInputPrv.SetError(keysRemoteTxt, "Заполните данное поле");
                return;
            }

            if (string.IsNullOrEmpty(remoteECPKey))
            {
                checkInputPrv.SetError(keysRemoteSignTxt, "Заполните данное поле");
                return;
            }

            book = new RSABookInfo()
            {
                UserId         = StudMail.UserId.ToString(),
                Email          = email,
                OwnPrivate     = privateKey,
                OwnPublic      = publicKey,
                OwnPrivateECP  = privateECPKey,
                OwnPublicECP   = publicECPKey,
                EmailPublic    = remoteKey,
                EmailPublicECP = remoteECPKey
            };

            if (!DBRSABooks.Add(DBConnection.Connection, book))
            {
                checkInputPrv.SetError(keysEmailTxt, "Данная запись уже существует");
                return;
            }

            updateBooksWorker.RunWorkerAsync();
        }
Example #5
0
        // TODO:
        private void letterSendBtn_Click(object sender, EventArgs e)
        {
            lock (MailClient.ObjLock)
            {
                if (MailClient.CurrentNetwork == NetworkStatus.Disconnected)
                {
                    MessageBox.Show("Отсутствует интернет! Отправка письма невозможна!");
                    return;
                }
            }

            // Зашифровать текст сообщения TripleDES
            // Получить ключ и вектор сообщения TripleDES
            // Зашифровать ключ при помощи RSA и получить ключи
            // Получить ЭЦП и ключи
            // Сформировать конечную строку - зашифрованный текст&зашифрованный ключ&вектор&ЭЦП
            // Сформировать сообщение MimeMessage
            // Отправить сообщение на сервер
            // Сохранить сообщение в БД в зашифрованном виде

            var msg       = new MimeMessage();
            var to        = receiverEmailTxt.Text.Trim();
            var subject   = themeSendTxt.Text.Trim();
            var body      = msgSendTxt.Text.Trim();
            var receivers = to.Split(';');
            var userId    = StudMail.UserId;
            var books     = DBRSABooks.GetBooks(DBConnection.Connection, userId);

            if (string.IsNullOrEmpty(to))
            {
                checkInputPrv.SetError(receiverEmailTxt, "Заполните данное поле");
                return;
            }

            try
            {
                msg.From.Add(new MailboxAddress(StudMail.CurrentUser.Email));

                foreach (var item in receivers)
                {
                    msg.To.Add(new MailboxAddress(item));
                }

                msg.Subject = subject;

                var found = false;

                // Находим для каждого адресата свой ключ
                foreach (var receiver in msg.To)
                {
                    if (!isEncryptMsg)
                    {
                        var mailMsg = MailHelper.GenMsg(msg, body, currentPaths);

                        if (StudMail.SendLetter(mailMsg))
                        {
                            MessageBox.Show($"Сообщение отправлено адресату: {receiver.ToString()}");
                        }
                        else
                        {
                            MessageBox.Show($"Не удалось отправить сообщение адресату: {receiver.ToString()}");
                        }
                    }
                    else
                    {
                        foreach (var book in books)
                        {
                            if (book.Email == receiver.ToString())
                            {
                                if (book.EmailPublic != "")
                                {
                                    var mailMsg = MailHelper.GenEncryptedMsg(msg, body, currentPaths, book);

                                    if (StudMail.SendLetter(mailMsg))
                                    {
                                        MessageBox.Show($"Сообщение отправлено адресату: {receiver.ToString()}");
                                    }
                                    else
                                    {
                                        MessageBox.Show($"Не удалось отправить сообщение адресату: {receiver.ToString()}");
                                    }

                                    found = true;
                                }

                                // Нужно ещё записать в БД в зашифрованном виде, но не хватает uid
                                break;
                            }
                        }

                        if (!found)
                        {
                            MessageBox.Show($"Вы не имеете публичного ключа {receiver.ToString()}");
                        }
                    }
                }
            }
            catch (Exception err)
            {
                MessageBox.Show("Произошла непредвиденная ошибка\n" + err.Message);
            }
        }