private void Main_Load(object sender, EventArgs e)// A ve B kişileri için klasor oluşturma ve public private anahtarlarını yaratma
 {
     Directory.CreateDirectory(aPath);
     Directory.CreateDirectory(bPath);
     Asymmetric_Crypto.generateKeys(aPath + "\\pub.cert", aPath + "\\priv.cert");
     Asymmetric_Crypto.generateKeys(bPath + "\\pub.cert", bPath + "\\priv.cert");
 }
        private void make_Click(object sender, EventArgs e)
        {
            string path = "";           //dosya yolu

            byte[] signedData;          // alınan dosyanın imzalı hali
            byte[] key;                 // şifrelemek için oluşturlan anahtar
            byte[] encrypted;           //şifreli metin
            byte[] hash;                //  Giden hash
            byte[] signedHash;          // Giden imzalı hash
            byte[] encryptedSignedHash; // Giden şifreli imzalı hash
            byte[] decryptedSignedHash; //Çözülmüş imzalı hash
            byte[] encryptedKey;        //Giden şifreli anahtar
            byte[] decryptedKey;        //Çözülmüş anahtar
            if (dosyaIslem.Text == "Dosya Gönder")
            {
                if (signature.Checked == false && crypto.Checked == false)
                {
                    MessageBox.Show("Lütfen işlem seçiniz");
                }
                else
                {
                    hash = Hashing.getSha512Hash(file);               //gönderilecek dosyanın hası alınıyor
                    if (signature.Checked && crypto.Checked == false) //Dosya imzalama
                    {
                        try
                        {
                            path = receiver + "\\" + userr + " Gelen Imzali";
                            Directory.CreateDirectory(path);
                            signedData = Asymmetric_Crypto.signData(file, senderPriv);//Asimetrik kripto sınıfından
                            File.WriteAllBytes(path + "\\Signed.s", signedData);
                            File.WriteAllBytes(path + "\\" + fName, file);
                            MessageBox.Show("Dosya imzalanıp gönderildi");
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Dosya İmzalamada HATA:", ex.Message);
                        }
                    }
                    else if (signature.Checked == false && crypto.Checked)//Dosya şifreleme
                    {
                        try
                        {
                            path = receiver + "\\" + userr + " Gelen Sifreli";

                            Directory.CreateDirectory(path);
                            signedHash          = Asymmetric_Crypto.signData(hash, senderPriv); //imzalı hash
                            key                 = Symmetric_Crypto.generateKey();               //key
                            encryptedSignedHash = Symmetric_Crypto.encrypt(signedHash, key);    //şifreli imzalı hash
                            encryptedKey        = Asymmetric_Crypto.encrypt(key, receiverPub);  // Sadece alıcının okuyabilecegi key
                            encrypted           = Symmetric_Crypto.encrypt(file, key);          //Simetrik sınıfından
                            File.WriteAllBytes(path + "\\Key.key", encryptedKey);
                            File.WriteAllBytes(path + "\\" + fName.Split('.')[0] + ".cr", encrypted);
                            File.WriteAllBytes(path + "\\" + fName.Split('.')[0] + ".esHash", encryptedSignedHash);
                            File.WriteAllBytes(path + "\\" + fName.Split('.')[0] + ".hash", hash);
                            MessageBox.Show("Dosya şifrelenip gönderildi.");
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Dosya şifrelemede HATA:", ex.Message);
                        }
                    }
                    else if (signature.Checked && crypto.Checked)//Dosyayı hem imzalama hem şifreleme
                    {
                        try
                        {
                            path = receiver + "\\" + userr + " Gelen Imzali Sifreli";
                            Directory.CreateDirectory(path);
                            signedData = Asymmetric_Crypto.signData(file, senderPriv);          //imzalı dosya

                            signedHash          = Asymmetric_Crypto.signData(hash, senderPriv); //imzalı hash
                            key                 = Symmetric_Crypto.generateKey();               //key
                            encryptedSignedHash = Symmetric_Crypto.encrypt(signedHash, key);    //şifreli imzalı hash
                            encryptedKey        = Asymmetric_Crypto.encrypt(key, receiverPub);  // Sadece alıcının okuyabilecegi key
                            encrypted           = Symmetric_Crypto.encrypt(file, key);          //Simetrik sınıfından
                            File.WriteAllBytes(path + "\\Key.key", encryptedKey);
                            File.WriteAllBytes(path + "\\" + fName.Split('.')[0] + ".sc", encrypted);
                            File.WriteAllBytes(path + "\\Signed.s", signedData);
                            File.WriteAllBytes(path + "\\" + fName.Split('.')[0] + ".esHash", encryptedSignedHash);
                            File.WriteAllBytes(path + "\\" + fName.Split('.')[0] + ".hash", hash);
                            MessageBox.Show("Dosya şifrelenip imzalanıp gönderildi.");
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Dosya imzalama ve şifrelemede HATA:", ex.Message);
                        }
                    }
                }
            }
            else if (dosyaIslem.Text == "Dosya Al")
            {
                path = receiver + "\\ Gelen Dosya";
                if (signature.Checked && crypto.Checked == false)//Dosya İmza doğrulama
                {
                    try
                    {
                        if (Asymmetric_Crypto.verifyData(file, signedFile, senderPub))
                        {
                            MessageBox.Show("İmza doğrulandı");
                        }
                        else
                        {
                            MessageBox.Show("İmza doğrulanamadı. Gelen klasor siliniyor.");
                            Directory.Delete(receiver + "\\" + userr + " Gelen Imzali", true);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Dosya imza doğrulamada HATA:", ex.Message);
                    }
                }
                else if (signature.Checked == false && crypto.Checked)//Dosya şifre çözme
                {
                    try
                    {
                        Directory.CreateDirectory(path);
                        decryptedKey        = Asymmetric_Crypto.decrypt(outKey, receiverPriv);   //dosya şifreleme anahtarını sadece alıcı açabilir.
                        decryptedSignedHash = Symmetric_Crypto.decrypt(encryptedSignedHashF, decryptedKey);
                        if (Asymmetric_Crypto.verifyData(hashF, decryptedSignedHash, senderPub)) //göndericinin public anahtarı ile hashin değişmediği dogrulanıyor
                        {
                            byte[] plainText = Symmetric_Crypto.decrypt(encryptedFile, decryptedKey);
                            File.WriteAllBytes(path + "\\" + fName, plainText);
                        }
                        else
                        {
                            MessageBox.Show("Dosyanın hashi doğrulanamadı. Klasor siliniyor.");
                            Directory.Delete(path, true);
                            Directory.Delete(receiver + "\\" + userr + " Gelen Sifreli", true);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Dosya deşifrelemede HATA:", ex.Message);
                    }
                }
                else if (signature.Checked && crypto.Checked)//Dosya şifre çözme ve imza onaylama
                {
                    try
                    {
                        Directory.CreateDirectory(path);
                        decryptedKey        = Asymmetric_Crypto.decrypt(outKey, receiverPriv);   //dosya şifreleme anahtarını sadece alıcı açabilir.
                        decryptedSignedHash = Symmetric_Crypto.decrypt(encryptedSignedHashF, decryptedKey);
                        if (Asymmetric_Crypto.verifyData(hashF, decryptedSignedHash, senderPub)) //göndericinin public anahtarı ile hashin değişmediği dogrulanıyor
                        {
                            byte[] plainText = Symmetric_Crypto.decrypt(encryptedFile, decryptedKey);
                            if (Asymmetric_Crypto.verifyData(plainText, signedFile, senderPub))
                            {
                                MessageBox.Show("Dosya deşifrelenip İmza doğrulandı");
                                File.WriteAllBytes(path + "\\" + fName, plainText);
                            }
                            else
                            {
                                MessageBox.Show("Dosya deşifrelendi fakat imza doğrulanamadı. Gelen klasor siliniyor.");
                                Directory.Delete(path, true);
                                Directory.Delete(receiver + "\\" + userr + " Gelen Imzali Sifreli", true);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Dosyanın hashi doğrulanamadı. Klasor siliniyor.");
                            Directory.Delete(path, true);
                            Directory.Delete(receiver + "\\" + userr + " Gelen Imzali Sifreli", true);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Dosya deşifreleme ve imza doğrulamada HATA:", ex.Message);
                    }
                }
            }
        }