private string ValidatePassword(string password) { if (!string.IsNullOrWhiteSpace(password)) { return(password); } if (_pwdExpiration.Ticks < DateTime.Now.Ticks) { __pwd = ""; } if (string.IsNullOrWhiteSpace(__pwd) || _invalidPassword) { _pwdExpiration = new TimeSpan(DateTime.Now.AddMinutes(15).Ticks); PasswordInputDialog.Show(LocalizationHelper.GetString("PasswordBoxTitle"), LocalizationHelper.GetString("PasswordBoxMessage"), out password); __pwd = password; _invalidPassword = false; } return(__pwd); }
async void Controller_OnRequestPassword(Controller sender, PasswordEventArgs args) { // It is essential the we call `Complete()` on the Deferral at the end. var deferral = args.Deferral; try { var passwordEntryDialog = new PasswordInputDialog(); var result = await passwordEntryDialog.ShowAsync(); switch (result) { case ContentDialogResult.Primary: args.Response = new PasswordRequestResponse(true, passwordEntryDialog.Password, true); break; default: args.Response = new PasswordRequestResponse(false, null, false); break; } } finally { deferral.Complete(); } }
private void butProvest_Click(object sender, EventArgs e) { // TODO allow file import // todo make async byte[] content = Encoding.UTF8.GetBytes(textBox_main.Text); Keypair chosenKeypair = ucKeychain_mainTab.SelectedItems.FirstOrDefault(); IArmorProvider armorProvider = new HitaiArmorProvider(); Message message; PasswordInputDialog passwordDialog; Signature signature; bool correctSignature; switch (comboBox_actions.SelectedIndex) { case 0: // šifrovat if (chosenKeypair == null) { MessageBox.Show("Musíte vybrat klíč adresáta."); return; } message = AsymmetricEncryptionController.Encrypt(chosenKeypair, content); byte[] armor = armorProvider.ToArmor(LZ4MessagePackSerializer.Serialize(message), ArmorType.Message); string result = Encoding.UTF8.GetString(armor); Clipboard.SetText(result); MessageBox.Show("Výsledek byl zkopírován do schránky."); break; case 1: // dešifrovat Type armorClass = ArmorRecognizer.RecognizeArmor(content); armorProvider = (IArmorProvider)Activator.CreateInstance(armorClass); (byte[] bytes, ArmorType armorType) = armorProvider.FromArmor(content); // TODO nechat rozpoznat akci podle ArmorType if (armorType != ArmorType.Message) { MessageBox.Show("Obsah není zprávou."); return; } message = LZ4MessagePackSerializer.Deserialize <Message>(bytes); Keypair recipient = Keychain.Keys.FirstOrDefault(x => x.ShortId == message.RecipientId); if (recipient == null) { MessageBox.Show("Nebyl nalezen odpovídající soukromý klíč."); return; } passwordDialog = new PasswordInputDialog("Dešifrování"); if (passwordDialog.ShowDialog() != DialogResult.OK) { return; } byte[] data; try { data = AsymmetricEncryptionController.Decrypt(message, passwordDialog.Password, recipient); } catch (Exception ex) { while (ex is AggregateException) { ex = ex.InnerException; } if (!(ex is CryptographicException)) { throw; } MessageBox.Show("Nesprávné heslo."); return; } string clearText = Encoding.UTF8.GetString(data); textBox_main.Text = clearText; break; case 2: // podepsat if (!chosenKeypair.IsPrivate) { MessageBox.Show("Podepisující klíč musí být soukromý."); return; } passwordDialog = new PasswordInputDialog("Podepisování"); if (passwordDialog.ShowDialog() != DialogResult.OK) { return; } try { signature = AsymmetricEncryptionController.Sign( Encoding.UTF8.GetBytes(textBox_main.Text), passwordDialog.Password, chosenKeypair); } catch (Exception ex) { while (ex is AggregateException) { ex = ex.InnerException; } if (!(ex is CryptographicException)) { throw; } MessageBox.Show("Nesprávné heslo."); return; } Clipboard.SetText(Encoding.UTF8.GetString(armorProvider.ToArmor( LZ4MessagePackSerializer.Serialize(signature), ArmorType.Signature))); MessageBox.Show("Výsledek byl zkopírován do schránky"); break; case 3: // ověřit armorProvider = (IArmorProvider)Activator.CreateInstance( ArmorRecognizer.RecognizeArmor(content)); (byte[] bytes2, ArmorType armorType2) = armorProvider.FromArmor(content); if (armorType2 != ArmorType.Signature) { MessageBox.Show("Vstup neobsahuje podpis."); return; } signature = LZ4MessagePackSerializer.Deserialize <Signature>(bytes2); correctSignature = AsymmetricEncryptionController.Verify(signature, Keychain); string clearText2; try { clearText2 = signature.GetCleartext(); } catch { clearText2 = null; } MessageBox.Show((correctSignature ? "Správný podpis" : "Nesprávný podpis") + (string.IsNullOrEmpty(clearText2) ? "." : " pro zprávu:\n" + clearText2)); break; case 4: // šifrovat a podepsat var chooseKeyDialog = new ChooseKeyDialog("Vyberte klíč, kterým chcete zprávu podepsat.") { Keychain = Keychain }; if (chooseKeyDialog.ShowDialog() != DialogResult.OK) { return; } message = AsymmetricEncryptionController.Encrypt(chosenKeypair, content); passwordDialog = new PasswordInputDialog("Podepisování"); if (passwordDialog.ShowDialog() != DialogResult.OK) { return; } try { signature = AsymmetricEncryptionController.Sign(message, passwordDialog.Password, chooseKeyDialog.ChosenKeypair); } catch (Exception ex) { while (ex is AggregateException) { ex = ex.InnerException; } if (!(ex is CryptographicException)) { throw; } MessageBox.Show("Nesprávné heslo."); return; } result = Encoding.UTF8.GetString(armorProvider.ToArmor( LZ4MessagePackSerializer.Serialize(signature), ArmorType.SignedMessage)); Clipboard.SetText(result); MessageBox.Show("Výsledek byl zkopírován do schránky"); break; case 5: // dešifrovat a ověřit armorProvider = (IArmorProvider)Activator.CreateInstance( ArmorRecognizer.RecognizeArmor(content)); (byte[] bytes3, ArmorType armorType3) = armorProvider.FromArmor(content); if (armorType3 != ArmorType.SignedMessage) { MessageBox.Show("Vstup neobsahuje podepsanou zprávu."); return; } signature = LZ4MessagePackSerializer.Deserialize <Signature>(bytes3); correctSignature = AsymmetricEncryptionController.Verify(signature, Keychain); if (!correctSignature) { MessageBox.Show( "Podpis není správný. Zpráva nebude dešifrována z bezpečnostních důvodů."); return; } if (!signature.ContainsMessage()) { MessageBox.Show( "Podpis neobsahuje zašifrovanou zprávu. Chyba."); return; } passwordDialog = new PasswordInputDialog("Dešifrování"); if (passwordDialog.ShowDialog() != DialogResult.OK) { return; } try { result = Encoding.UTF8.GetString( AsymmetricEncryptionController.Decrypt(signature.GetMessage(), passwordDialog.Password, Keychain)); } catch (Exception ex) { while (ex is AggregateException) { ex = ex.InnerException; } if (!(ex is CryptographicException)) { throw; } MessageBox.Show("Nesprávné heslo."); return; } MessageBox.Show( "Podpis byl úspěšně ověřen a dešifrovaná zpráva bude zobrazena."); textBox_main.Text = result; break; default: throw new NotImplementedException(); } }