Crypto-Notepad/Crypto Notepad/MainForm.cs

1382 lines
47 KiB
C#
Raw Normal View History

2018-12-17 11:16:17 +00:00
using IWshRuntimeLibrary;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Security.Cryptography;
using System.Threading;
using System.Windows.Forms;
using File = System.IO.File;
namespace Crypto_Notepad
{
public partial class MainForm : Form
{
Properties.Settings ps = Properties.Settings.Default;
string filePath = "";
string[] args = Environment.GetCommandLineArgs();
int caretPos = 0;
string appName = Assembly.GetExecutingAssembly().GetName().Name + " ";
string currentFilename = "";
bool shiftPresed;
bool cancelPressed = false;
bool noExit = false;
string argsPath = "";
public MainForm()
{
InitializeComponent();
customRTB.DragDrop += new DragEventHandler(customRTB_DragDrop);
customRTB.AllowDrop = true;
}
void DecryptAES()
{
EnterKeyForm f2 = new EnterKeyForm();
f2.ShowDialog();
if (PublicVar.okPressed == false)
{
return;
}
if (panel1.Visible == true)
{
findToolStripMenuItem2_Click(this, new EventArgs());
}
try
{
string opnfile = File.ReadAllText(OpenFile.FileName);
string NameWithotPath = Path.GetFileName(OpenFile.FileName);
string de = AES.Decrypt(opnfile, TypedPassword.Value, ps.TheSalt, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
customRTB.Text = de;
this.Text = appName + NameWithotPath;
filePath = OpenFile.FileName;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
PublicVar.openFileName = Path.GetFileName(OpenFile.FileName);
currentFilename = Path.GetFileName(OpenFile.FileName);
PublicVar.encryptionKey.Set(TypedPassword.Value);
TypedPassword.Value = null;
}
catch (CryptographicException)
{
using (new CenterWinDialog(this))
{
TypedPassword.Value = null;
DialogResult dialogResult = MessageBox.Show("Invalid key!", "Crypto Notepad", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
if (dialogResult == DialogResult.Retry)
{
DecryptAES();
}
if (dialogResult == DialogResult.Cancel)
{
return;
}
}
}
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFile.FileName = "";
saveConfirm(false);
if (cancelPressed == true)
{
cancelPressed = false;
return;
}
if (OpenFile.ShowDialog() != DialogResult.OK) return;
{
PublicVar.openFileName = Path.GetFileName(OpenFile.FileName);
if (!OpenFile.FileName.Contains(".cnp"))
{
string opnfile = File.ReadAllText(OpenFile.FileName);
string NameWithotPath = Path.GetFileName(OpenFile.FileName);
customRTB.Text = opnfile;
this.Text = appName + NameWithotPath;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
return;
}
DecryptAES();
#region workaround, strange behavior with the cursor in customRTB fix
customRTB.DetectUrls = false;
customRTB.DetectUrls = true;
customRTB.Modified = false;
#endregion
if (PublicVar.okPressed == true)
{
PublicVar.okPressed = false;
}
}
}
private void openAsotiations()
{
EnterKeyForm Form2 = new EnterKeyForm();
Form2.StartPosition = FormStartPosition.CenterScreen;
string fileExtension = Path.GetExtension(args[1]);
if (fileExtension == ".cnp")
{
try
{
string NameWithotPath = Path.GetFileName(args[1]);
string opnfile = File.ReadAllText(args[1]);
Form2.ShowDialog();
if (PublicVar.okPressed == false)
{
OpenFile.FileName = "";
return;
}
PublicVar.okPressed = false;
string de = AES.Decrypt(opnfile, TypedPassword.Value, ps.TheSalt, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
customRTB.Text = de;
this.Text = appName + NameWithotPath;
filePath = args[1];
string cc = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
PublicVar.encryptionKey.Set(TypedPassword.Value);
customRTB.Select(Convert.ToInt32(cc), 0);
TypedPassword.Value = null;
}
catch (CryptographicException)
{
TypedPassword.Value = null;
DialogResult dialogResult = MessageBox.Show("Invalid key!", "Crypto Notepad", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
if (dialogResult == DialogResult.Retry)
{
openAsotiations();
}
}
}
else
{
string opnfile = File.ReadAllText(args[1]);
string NameWithotPath = Path.GetFileName(args[1]);
customRTB.Text = opnfile;
this.Text = appName + NameWithotPath;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
}
currentFilename = Path.GetFileName(args[1]);
}
private void sendTo()
{
EnterKeyForm f2 = new EnterKeyForm();
f2.StartPosition = FormStartPosition.CenterScreen;
string fileExtension = Path.GetExtension(argsPath);
if (fileExtension == ".cnp")
{
try
{
string NameWithotPath = Path.GetFileName(argsPath);
string opnfile = File.ReadAllText(argsPath);
f2.ShowDialog();
if (PublicVar.okPressed == false)
{
OpenFile.FileName = "";
return;
}
PublicVar.okPressed = false;
string de = AES.Decrypt(opnfile, TypedPassword.Value, ps.TheSalt, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
customRTB.Text = de;
this.Text = appName + NameWithotPath;
filePath = argsPath;
string cc = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc), 0);
PublicVar.encryptionKey.Set(TypedPassword.Value);
currentFilename = Path.GetFileName(argsPath);
TypedPassword.Value = null;
}
catch (CryptographicException)
{
TypedPassword.Value = null;
DialogResult dialogResult = MessageBox.Show("Invalid key!", "Crypto Notepad", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
if (dialogResult == DialogResult.Retry)
{
sendTo();
}
}
}
else
{
string opnfile = File.ReadAllText(argsPath);
string NameWithotPath = Path.GetFileName(argsPath);
customRTB.Text = opnfile;
this.Text = appName + NameWithotPath;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
}
}
private void newToolStripMenuItem_Click_1(object sender, EventArgs e)
{
saveConfirm(false);
SaveFile.FileName = "Unnamed.cnp";
PublicVar.openFileName = "Crypto Notepad";
EnterKeyForm f2 = new EnterKeyForm();
f2.ShowDialog();
PublicVar.encryptionKey.Set(TypedPassword.Value);
if (PublicVar.okPressed == false)
{
TypedPassword.Value = null;
return;
}
if (PublicVar.okPressed == true)
{
PublicVar.okPressed = false;
if (SaveFile.ShowDialog() != DialogResult.OK)
{
TypedPassword.Value = null;
return;
}
customRTB.Clear();
StreamWriter sw = new StreamWriter(SaveFile.FileName);
string NameWithotPath = Path.GetFileName(SaveFile.FileName);
this.Text = appName + NameWithotPath;
filePath = SaveFile.FileName;
currentFilename = Path.GetFileName(SaveFile.FileName);
sw.Close();
}
TypedPassword.Value = null;
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
int saveCaret = customRTB.SelectionStart;
string NameWithotPath = Path.GetFileName(OpenFile.FileName);
SaveFile.FileName = currentFilename;
EnterKeyForm f2 = new EnterKeyForm();
if (string.IsNullOrEmpty(PublicVar.encryptionKey.Get()))
{
f2.ShowDialog();
if (PublicVar.okPressed == false)
{
return;
}
PublicVar.okPressed = false;
}
if (SaveFile.ShowDialog() != DialogResult.OK)
{
return;
}
if (TypedPassword.Value == null)
{
TypedPassword.Value = PublicVar.encryptionKey.Get();
}
filePath = SaveFile.FileName;
string noenc = customRTB.Text;
string en;
if (PublicVar.randomizeSalts)
{
en = AES.Encrypt(customRTB.Text, TypedPassword.Value, null, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
}
else
{
en = AES.Encrypt(customRTB.Text, TypedPassword.Value, ps.TheSalt, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
}
customRTB.Text = en;
StreamWriter sw = new StreamWriter(filePath);
int i = customRTB.Lines.Count();
int j = 0;
i = i - 1;
while (j <= i)
{
sw.WriteLine(customRTB.Lines.GetValue(j).ToString());
j = j + 1;
}
sw.Close();
customRTB.Text = noenc;
this.Text = appName + Path.GetFileName(filePath);
customRTB.Select(Convert.ToInt32(saveCaret), 0);
PublicVar.encryptionKey.Set(TypedPassword.Value);
TypedPassword.Value = null;
currentFilename = Path.GetFileName(SaveFile.FileName);
}
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
ps.WindowSize = this.Size;
ps.WindowLocation = this.Location;
ps.WindowState = this.WindowState;
}
if (this.WindowState == FormWindowState.Maximized)
{
ps.WindowState = this.WindowState;
}
ps.Save();
saveConfirm(true);
if (noExit == true)
{
e.Cancel = true;
}
}
#region Send to Shortcut
public static void SendToShortcut()
{
string shortcutPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Windows\SendTo";
string shortcutName = "Crypto Notepad" + ".lnk";
string shortcutLocation = Path.Combine(shortcutPath, shortcutName);
string targetFileLocation = Assembly.GetEntryAssembly().Location;
WshShell shell = new WshShell();
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutLocation);
shortcut.Description = "Crypto Notepad";
shortcut.IconLocation = targetFileLocation;
shortcut.TargetPath = targetFileLocation;
shortcut.Arguments = "/s";
shortcut.Save();
}
#endregion
private void MainWindow_Load(object sender, EventArgs e)
{
string pos = ps.WindowLocation.ToString();
customRTB.Font = new Font(ps.RichTextFont, ps.RichTextSize);
customRTB.ForeColor = ps.RichForeColor;
customRTB.BackColor = ps.RichBackColor;
this.BackColor = ps.RichBackColor;
wordWrapToolStripMenuItem.Checked = ps.MenuWrap;
customRTB.WordWrap = ps.RichWrap;
panel2.Visible = ps.ShowToolbar;
if (!ps.ShowToolbar)
{
panel2.Visible = false;
int h = customRTB.Height;
h += 23;
customRTB.Height = h;
customRTB.Location = new Point(6, 29);
}
if (ps.ShowToolbar)
{
panel2.Visible = true;
}
if (ps.AutoCheckUpdate)
{
Thread up = new Thread(() => сheckForUpdates(false));
up.Start();
}
DeleteUpdateFiles();
if (args.Contains("/s")) /*send to*/
{
foreach (var arg in args)
{
argsPath = arg;
}
sendTo();
}
if (args.Contains("/o")) /*decrypt & open cnp*/
{
openAsotiations();
}
if (args.Contains("/e")) /*encrypt*/
{
ContextMenuEncrypt();
}
if (args.Contains("/er")) /*encrypt and replace*/
{
ContextMenuEncryptReplace();
}
if (pos != "{X=0,Y=0}")
{
this.Location = ps.WindowLocation;
}
this.Size = ps.WindowSize;
this.WindowState = ps.WindowState;
}
public void ContextMenuEncryptReplace()
{
PublicVar.openFileName = Path.GetFileName(args[1]);
DialogResult res = new DialogResult();
if (args[1].Contains(".cnp"))
{
MessageBox.Show("Looks like this file is already encrypted", "Crypto Notepad", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
res = MessageBox.Show("This action will delete the source file and replace it with encrypted version", "Crypto Notepad", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (res == DialogResult.Cancel)
{
2018-12-17 13:03:08 +00:00
Environment.Exit(0);
2018-12-17 11:16:17 +00:00
}
if (!args[1].Contains(".cnp"))
{
string opnfile = File.ReadAllText(args[1]);
customRTB.Text = opnfile;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
currentFilename = Path.GetFileName(args[1]);
string newFile = Path.GetDirectoryName(args[1]) + @"\" + Path.GetFileNameWithoutExtension(args[1]) + ".cnp";
EnterKeyForm f2 = new EnterKeyForm();
f2.ShowDialog();
if (PublicVar.okPressed == false)
{
Application.Exit();
}
PublicVar.okPressed = false;
File.Delete(args[1]);
string noenc = customRTB.Text;
string en;
en = AES.Encrypt(customRTB.Text, TypedPassword.Value, null, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
customRTB.Text = en;
StreamWriter sw = new StreamWriter(newFile);
int i = customRTB.Lines.Count();
int j = 0;
i = i - 1;
while (j <= i)
{
sw.WriteLine(customRTB.Lines.GetValue(j).ToString());
j = j + 1;
}
sw.Close();
PublicVar.encryptionKey.Set(TypedPassword.Value);
TypedPassword.Value = null;
filePath = newFile;
currentFilename = Path.GetFileName(newFile);
this.Text = appName + currentFilename;
customRTB.Text = noenc;
}
#region workaround, strange behavior with the cursor in customRTB fix
customRTB.DetectUrls = false;
customRTB.DetectUrls = true;
customRTB.Modified = false;
#endregion
if (PublicVar.okPressed == true)
{
PublicVar.okPressed = false;
}
}
public void ContextMenuEncrypt()
{
PublicVar.openFileName = Path.GetFileName(args[1]);
if (!args[1].Contains(".cnp"))
{
string opnfile = File.ReadAllText(args[1]);
string NameWithotPath = Path.GetFileName(args[1]);
customRTB.Text = opnfile;
this.Text = appName + NameWithotPath;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
currentFilename = Path.GetFileName(args[1]);
filePath = OpenFile.FileName;
}
#region workaround, strange behavior with the cursor in customRTB fix
customRTB.DetectUrls = false;
customRTB.DetectUrls = true;
customRTB.Modified = false;
#endregion
if (PublicVar.okPressed == true)
{
PublicVar.okPressed = false;
}
}
public void DeleteUpdateFiles()
{
string exePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @"\";
string UpdaterExe = exePath + "Updater.exe";
string UpdateZip = exePath + "Crypto-Notepad-Update.zip";
string ZipDll = exePath + "Ionic.Zip.dll";
if (File.Exists(UpdaterExe))
{
File.Delete(UpdaterExe);
}
if (File.Exists(UpdateZip))
{
File.Delete(UpdateZip);
}
if (File.Exists(ZipDll))
{
File.Delete(ZipDll);
}
}
private void clearToolStripMenuItem_Click(object sender, EventArgs e)
{
customRTB.Clear();
}
private void saveToolStripMenuItem1_Click_1(object sender, EventArgs e)
{
string noname = "Unnamed.cnp";
string NameWithotPath = Path.GetFileName(OpenFile.FileName);
int saveCaret = customRTB.SelectionStart;
if (PublicVar.encryptionKey.Get() == null)
{
SaveFile.FileName = noname;
saveAsToolStripMenuItem_Click(this, new EventArgs());
if (PublicVar.okPressed == false)
{
return;
}
PublicVar.okPressed = false;
}
string noenc = customRTB.Text;
string en;
if (PublicVar.randomizeSalts)
{
en = AES.Encrypt(customRTB.Text, PublicVar.encryptionKey.Get(), null, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
}
else
{
en = AES.Encrypt(customRTB.Text, PublicVar.encryptionKey.Get(), ps.TheSalt, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
}
customRTB.Text = en;
StreamWriter sw = new StreamWriter(filePath);
int i = customRTB.Lines.Count();
int j = 0;
i = i - 1;
while (j <= i)
{
sw.WriteLine(customRTB.Lines.GetValue(j).ToString());
j = j + 1;
}
sw.Close();
customRTB.Text = noenc;
customRTB.Select(Convert.ToInt32(saveCaret), 0);
PublicVar.keyChanged = false;
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
{
if (customRTB.Focused == true)
{
customRTB.SelectAll();
}
else
{
searchTextBox.SelectAll();
}
}
private void cutToolStripMenuItem_Click(object sender, EventArgs e)
{
if (customRTB.Focused == true)
{
customRTB.Cut();
}
else
{
searchTextBox.Cut();
}
}
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
if (customRTB.Focused == true)
{
customRTB.Copy();
}
else
{
searchTextBox.Copy();
}
}
private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
if (customRTB.Focused == true)
{
customRTB.Paste(DataFormats.GetFormat(DataFormats.Text));
}
else
{
searchTextBox.Paste();
}
}
private void deleteFileToolStripMenuItem_Click_1(object sender, EventArgs e)
{
if (filePath != "")
{
using (new CenterWinDialog(this))
{
if (MessageBox.Show("Delete file: " + "\"" + filePath + "\"" + " ?", "Crypto Notepad", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(filePath);
customRTB.Clear();
PublicVar.encryptionKey.Set(null);
pictureBox6.Enabled = false;
pictureBox7.Enabled = false;
pictureBox11.Enabled = false;
pictureBox13.Enabled = false;
filePath = "";
currentFilename = "Unnamed.cnp";
this.Text = appName.Remove(14);
return;
}
}
}
}
private void openFileLocationToolStripMenuItem_Click(object sender, EventArgs e)
{
Process.Start("explorer.exe", @"/select, " + filePath);
}
private void wordWrapToolStripMenuItem_Click(object sender, EventArgs e)
{
if (wordWrapToolStripMenuItem.Checked == true)
{
customRTB.WordWrap = true;
}
if (wordWrapToolStripMenuItem.Checked == false)
{
customRTB.WordWrap = false;
}
ps.MenuWrap = wordWrapToolStripMenuItem.Checked;
ps.RichWrap = customRTB.WordWrap;
ps.Save();
}
private void undoToolStripMenuItem1_Click(object sender, EventArgs e)
{
undoToolStripMenuItem_Click(this, new EventArgs());
}
public void undoToolStripMenuItem_Click(object sender, EventArgs e)
{
if (customRTB.CanUndo == true)
{
customRTB.Undo();
}
else customRTB.Redo();
}
private void cutToolStripMenuItem1_Click(object sender, EventArgs e)
{
customRTB.Cut();
}
private void copyToolStripMenuItem1_Click(object sender, EventArgs e)
{
customRTB.Copy();
}
private void pasteToolStripMenuItem1_Click(object sender, EventArgs e)
{
customRTB.Paste(DataFormats.GetFormat(DataFormats.Text));
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
if (customRTB.SelectionLength != 0)
{
cutToolStripMenuItem1.Enabled = true;
copyToolStripMenuItem1.Enabled = true;
deleteToolStripMenuItem1.Enabled = true;
}
if (customRTB.SelectionLength == 0)
{
cutToolStripMenuItem1.Enabled = false;
copyToolStripMenuItem1.Enabled = false;
deleteToolStripMenuItem1.Enabled = false;
}
}
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
customRTB.SelectedText = "";
}
private void deleteToolStripMenuItem1_Click(object sender, EventArgs e)
{
customRTB.SelectedText = "";
}
private void rightToLeftToolStripMenuItem_Click(object sender, EventArgs e)
{
if (rightToLeftToolStripMenuItem.Checked == true)
{
customRTB.RightToLeft = RightToLeft.Yes;
}
if (rightToLeftToolStripMenuItem.Checked == false)
{
customRTB.RightToLeft = RightToLeft.No;
}
}
private void clearToolStripMenuItem1_Click(object sender, EventArgs e)
{
customRTB.Clear();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutFrom a = new AboutFrom();
a.ShowDialog(this);
}
private void selectAllToolStripMenuItem1_Click(object sender, EventArgs e)
{
customRTB.SelectAll();
}
private void changeKeyToolStripMenuItem_Click(object sender, EventArgs e)
{
ChangeKeyForm c = new ChangeKeyForm();
c.ShowDialog(this);
}
public int FindMyTextNext(string text, int start)
{
int returnValue = -1;
if (text.Length > 0 && start >= 0)
{
int indexToText = customRTB.Find(text, start, RichTextBoxFinds.MatchCase);
if (indexToText >= 0)
{
returnValue = indexToText;
}
}
return returnValue;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
bool isexist = customRTB.Highlight(searchTextBox.Text, ps.HighlightsColor, chkMatchCase.Checked, chkMatchWholeWord.Checked);
}
private void searchTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
searchTextBox.Text = "";
panel1.Visible = false;
customRTB.Height = customRTB.Height += 27;
customRTB.Focus();
customRTB.DeselectAll();
customRTB.SelectionStart = caretPos;
e.Handled = e.SuppressKeyPress = true;
}
}
private void customRTB_SelectionChanged_1(object sender, EventArgs e)
{
if (customRTB.SelectionLength != 0)
{
pictureBox8.Enabled = true;
pictureBox9.Enabled = true;
}
if (customRTB.SelectionLength == 0)
{
pictureBox8.Enabled = false;
pictureBox9.Enabled = false;
}
}
private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
SettingsForm sf = new SettingsForm();
sf.ShowDialog();
}
private void MainWindow_Activated(object sender, EventArgs e)
{
if (PublicVar.settingsChanged == true)
{
PublicVar.settingsChanged = false;
customRTB.Font = new Font(ps.RichTextFont, ps.RichTextSize);
customRTB.ForeColor = ps.RichForeColor;
customRTB.BackColor = ps.RichBackColor;
this.BackColor = ps.RichBackColor;
if (ps.SendTo)
{
SendToShortcut();
}
else
{
string shortcutPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Windows\SendTo\Crypto Notepad.lnk";
if (File.Exists(shortcutPath))
{
File.Delete(shortcutPath);
}
}
#region workaround, unhighlight URLs fix
customRTB.DetectUrls = false;
customRTB.DetectUrls = true;
#endregion
if (ps.ShowToolbar == false && panel2.Visible == true)
{
panel2.Visible = false;
int h = customRTB.Height;
h += 23;
customRTB.Height = h;
customRTB.Location = new Point(6, 29);
}
if (ps.ShowToolbar == true && panel2.Visible == false)
{
panel2.Visible = true;
int h = customRTB.Height;
h -= 23;
customRTB.Height = h;
customRTB.Location = new Point(6, 52);
}
}
if (PublicVar.keyChanged == true)
{
customRTB.Modified = true;
}
if (PublicVar.encryptionKey.Get() == null)
{
pictureBox6.Enabled = false;
pictureBox7.Enabled = false;
pictureBox11.Enabled = false;
pictureBox13.Enabled = false;
}
if (PublicVar.encryptionKey.Get() != null)
{
pictureBox6.Enabled = true;
pictureBox7.Enabled = true;
pictureBox11.Enabled = true;
pictureBox13.Enabled = true;
}
}
private void chkMatchCase_CheckedChanged(object sender, EventArgs e)
{
bool isexist = customRTB.Highlight(searchTextBox.Text, ps.HighlightsColor, chkMatchCase.Checked, chkMatchWholeWord.Checked);
}
private void chkMatchWholeWord_CheckedChanged(object sender, EventArgs e)
{
bool isexist = customRTB.Highlight(searchTextBox.Text, ps.HighlightsColor, chkMatchCase.Checked, chkMatchWholeWord.Checked);
}
private void findToolStripMenuItem2_Click(object sender, EventArgs e)
{
if (panel1.Visible == false)
{
panel1.Visible = true;
searchTextBox.Focus();
customRTB.Height = customRTB.Height - 27;
return;
}
if (panel1.Visible == true)
{
searchTextBox.Text = "";
panel1.Visible = false;
customRTB.Height = customRTB.Height += 27;
customRTB.Focus();
customRTB.DeselectAll();
customRTB.SelectionStart = caretPos;
return;
}
}
private void documentationToolStripMenuItem_Click(object sender, EventArgs e)
{
2018-12-17 13:57:22 +00:00
Process.Start("https://github.com/Sigmanor/Crypto-Notepad/wiki/Documentation");
//MessageBox.Show("currentFilename: " + currentFilename);
//MessageBox.Show("encryptionKey: " + PublicVar.encryptionKey.Get());
//MessageBox.Show("TypedPassword: " + TypedPassword.Value);
//MessageBox.Show("filePath: " + filePath);
2018-12-17 11:16:17 +00:00
}
private void ToolsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (PublicVar.encryptionKey.Get() == null)
{
changeKeyToolStripMenuItem.Enabled = false;
lockToolStripMenuItem.Enabled = false;
}
else
{
changeKeyToolStripMenuItem.Enabled = true;
lockToolStripMenuItem.Enabled = true;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
findToolStripMenuItem2_Click(this, new EventArgs());
}
private void pictureBox2_Click(object sender, EventArgs e)
{
newToolStripMenuItem_Click_1(this, new EventArgs());
}
private void pictureBox3_Click(object sender, EventArgs e)
{
openToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox4_Click(object sender, EventArgs e)
{
saveToolStripMenuItem1_Click_1(this, new EventArgs());
}
private void pictureBox6_Click(object sender, EventArgs e)
{
openFileLocationToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox7_Click(object sender, EventArgs e)
{
deleteFileToolStripMenuItem_Click_1(this, new EventArgs());
}
private void pictureBox8_Click(object sender, EventArgs e)
{
cutToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox9_Click(object sender, EventArgs e)
{
copyToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox10_Click(object sender, EventArgs e)
{
pasteToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox11_Click(object sender, EventArgs e)
{
changeKeyToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox5_Click(object sender, EventArgs e)
{
settingsToolStripMenuItem_Click(this, new EventArgs());
}
private void pictureBox12_Click(object sender, EventArgs e)
{
panel2.Visible = false;
int h = customRTB.Height;
h += 23;
customRTB.Height = h;
customRTB.Location = new Point(6, 29);
ps.ShowToolbar = false;
ps.Save();
}
private void pictureBox12_MouseEnter(object sender, EventArgs e)
{
pictureBox12.Image = Properties.Resources.close_b;
}
private void pictureBox12_MouseLeave(object sender, EventArgs e)
{
pictureBox12.Image = Properties.Resources.close_g;
}
private void pictureBox1_MouseHover(object sender, EventArgs e)
{
pictureBox1.Image = Properties.Resources.close_b;
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
pictureBox1.Image = Properties.Resources.close_g;
}
private void pictureBox13_Click(object sender, EventArgs e)
{
AutoLock(false);
}
private void EditToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (customRTB.SelectionLength != 0)
{
cutToolStripMenuItem.Enabled = true;
copyToolStripMenuItem.Enabled = true;
deleteToolStripMenuItem.Enabled = true;
}
if (customRTB.SelectionLength == 0)
{
cutToolStripMenuItem.Enabled = false;
copyToolStripMenuItem.Enabled = false;
deleteToolStripMenuItem.Enabled = false;
}
}
private void сheckForUpdatesToolStripMenuItem_Click(object sender, EventArgs e)
{
Thread up = new Thread(() => сheckForUpdates(true));
up.Start();
}
public void сheckForUpdates(bool autoCheck)
{
try
{
WebClient client = new WebClient();
Stream stream = client.OpenRead("https://raw.githubusercontent.com/Sigmanor/Crypto-Notepad/master/version.txt");
StreamReader reader = new StreamReader(stream);
string content = reader.ReadToEnd();
string version = Application.ProductVersion;
string exePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @"\";
int appVersion = Convert.ToInt32(version.Replace(".", "")), serverVersion = Convert.ToInt32(content.Replace(".", ""));
if (serverVersion > appVersion)
{
MainMenu.Invoke((Action)delegate
{
using (new CenterWinDialog(this))
{
DialogResult res = new DialogResult();
res = MessageBox.Show("New version is available. Install it now?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (res == DialogResult.Yes)
{
File.WriteAllBytes(exePath + "Ionic.Zip.dll", Properties.Resources.Ionic_Zip);
File.WriteAllBytes(exePath + "Updater.exe", Properties.Resources.Updater);
var pr = new Process();
pr.StartInfo.FileName = exePath + "Updater.exe";
pr.StartInfo.Arguments = "/u";
pr.Start();
Application.Exit();
}
}
});
}
if (serverVersion <= appVersion && autoCheck == true)
{
MainMenu.Invoke((Action)delegate
{
using (new CenterWinDialog(this))
{
MessageBox.Show("Crypto Notepad is up to date.", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
});
}
}
catch
{
return;
}
}
void AutoLock(bool minimize)
{
EnterKeyForm f2 = new EnterKeyForm();
PublicVar.encryptionKey.Set(null);
caretPos = customRTB.SelectionStart;
f2.MinimizeBox = true;
this.Hide();
if (minimize == true)
{
f2.WindowState = FormWindowState.Minimized;
}
f2.ShowDialog();
if (PublicVar.okPressed == false)
{
PublicVar.encryptionKey.Set(null);
customRTB.Clear();
this.Text = appName.Remove(14);
OpenFile.FileName = "";
this.Show();
return;
}
PublicVar.okPressed = false;
try
{
OpenFile.FileName = filePath;
string opnfile = File.ReadAllText(OpenFile.FileName);
string NameWithotPath = Path.GetFileName(OpenFile.FileName);
string de = AES.Decrypt(opnfile, TypedPassword.Value, ps.TheSalt, ps.HashAlgorithm, ps.PasswordIterations, ps.KeySize);
this.Text = appName + NameWithotPath;
filePath = OpenFile.FileName;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.SelectionStart = caretPos;
PublicVar.encryptionKey.Set(TypedPassword.Value);
TypedPassword.Value = null;
this.Show();
}
catch (Exception ex)
{
if (ex is CryptographicException)
{
TypedPassword.Value = null;
DialogResult dialogResult = MessageBox.Show("Invalid key!", "Crypto Notepad", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
if (dialogResult == DialogResult.Retry)
{
AutoLock(false);
}
if (dialogResult == DialogResult.Cancel)
{
PublicVar.encryptionKey.Set(null);
customRTB.Clear();
this.Text = appName.Remove(14);
OpenFile.FileName = "";
this.Show();
return;
}
}
}
}
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x112;
const int SC_MINIMIZE = 0xF020;
if (m.Msg == WM_SYSCOMMAND && m.WParam.ToInt32() == SC_MINIMIZE && ps.AutoLock == true && PublicVar.encryptionKey.Get() != null)
{
AutoLock(true);
return;
}
base.WndProc(ref m);
}
private void lockToolStripMenuItem_Click(object sender, EventArgs e)
{
if (ps.AutoSave)
{
saveToolStripMenuItem1_Click_1(this, new EventArgs());
}
else
{
saveConfirm(false);
}
AutoLock(false);
}
private void FileToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (currentFilename == "")
{
openFileLocationToolStripMenuItem.Enabled = false;
deleteFileToolStripMenuItem.Enabled = false;
}
else
{
openFileLocationToolStripMenuItem.Enabled = true;
deleteFileToolStripMenuItem.Enabled = true;
}
}
private void customRTB_Click(object sender, EventArgs e)
{
caretPos = customRTB.SelectionStart;
}
private void customRTB_KeyDown(object sender, KeyEventArgs e)
{
caretPos = customRTB.SelectionStart;
if (e.KeyCode == Keys.ShiftKey)
{
shiftPresed = true;
}
}
private void customRTB_LinkClicked(object sender, LinkClickedEventArgs e)
{
if (shiftPresed)
{
shiftPresed = false;
Process.Start(e.LinkText);
}
}
private void customRTB_DragDrop(object sender, DragEventArgs e)
{
saveConfirm(false);
if (cancelPressed == true)
{
cancelPressed = false;
return;
}
string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
foreach (string file in FileList) OpenFile.FileName = file;
object fname = e.Data.GetData("FileDrop");
if (fname != null)
{
var list = fname as string[];
if (list != null && !string.IsNullOrWhiteSpace(list[0]))
{
if (!OpenFile.FileName.Contains(".cnp"))
{
string opnfile = File.ReadAllText(OpenFile.FileName);
string NameWithotPath = Path.GetFileName(OpenFile.FileName);
customRTB.Text = opnfile;
this.Text = appName + NameWithotPath;
string cc2 = customRTB.Text.Length.ToString(CultureInfo.InvariantCulture);
customRTB.Select(Convert.ToInt32(cc2), 0);
currentFilename = Path.GetFileName(OpenFile.FileName);
filePath = OpenFile.FileName;
return;
}
PublicVar.openFileName = Path.GetFileName(OpenFile.FileName);
DecryptAES();
if (PublicVar.okPressed == true)
{
PublicVar.okPressed = false;
}
}
}
}
public void saveConfirm(bool exit)
{
if (customRTB.Modified == false)
{
if (exit == true)
{
Environment.Exit(0);
}
}
if (customRTB.Modified == true)
{
if (currentFilename == "")
{
currentFilename = "Unnamed.cnp";
}
if (customRTB.Text != "")
{
DialogResult res = new DialogResult();
string messageBoxText = "";
if (PublicVar.keyChanged == false)
{
messageBoxText = "Save file: " + "\"" + currentFilename + "\"" + " ? ";
}
if (PublicVar.keyChanged == true)
{
messageBoxText = "Save file: " + "\"" + currentFilename + "\"" + " with a new key? ";
}
using (new CenterWinDialog(this))
{
res = MessageBox.Show(messageBoxText, "Crypto Notepad",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
saveToolStripMenuItem1_Click_1(this, new EventArgs());
if (exit == true)
{
Environment.Exit(0);
}
}
if (res == DialogResult.No)
{
if (exit == true)
{
Environment.Exit(0);
}
}
if (res == DialogResult.Cancel)
{
noExit = true;
cancelPressed = true;
return;
}
}
}
}
}
private void customRTB_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey)
{
shiftPresed = false;
}
}
}
}