void mnuFileSystemSign_Click(Object sender, System.EventArgs e) { // Check if we have some secret keys at all. XmlNodeList xnlSecretKeys = SharpPrivacy.SecretKeyRing.GetElementsByTagName("SecretKey"); if (xnlSecretKeys.Count == 0) { MessageBox.Show("You cannot sign data because you do not own a private key. Please generate a new key pair, before you sign data.", "Action not possible...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); return; } System.Windows.Forms.OpenFileDialog ofdOpen = new System.Windows.Forms.OpenFileDialog(); ofdOpen.Multiselect = true; ofdOpen.Filter = "All Files (*.*)|*.*"; ofdOpen.ShowDialog(); if (ofdOpen.FileNames.Length == 0) { return; } QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMultiKeyDialog(SharpPrivacy.SecretKeyRing); ulong lSignatureKeyID = qpPassphrase.SelectedKey; string strPassphrase = qpPassphrase.Passphrase; for (int i = 0; i < ofdOpen.FileNames.Length; i++) { string strPath = ofdOpen.FileNames[i]; SharpPrivacy.ReloadKeyRing(); SharpPrivacy.Instance.SignFile(strPath, strPath + ".asc", lSignatureKeyID, strPassphrase); } }
private void cmdAdd_Click(object sender, EventArgs e) { if (this.txtEmail.Text.Length < 3 || this.txtName.Text.Length < 1) { MessageBox.Show("You must enter your full name as well as your email address!", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); return; } QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowSingleKeyDialog(xmlSecretKey); string strPassphrase = qpPassphrase.Passphrase; string strKeyID = xmlPublicKey.GetAttribute("keyid"); ulong lKeyID = UInt64.Parse(strKeyID.Substring(2), System.Globalization.NumberStyles.HexNumber); try { SharpPrivacy.Instance.AddUserID(lKeyID, txtName.Text, txtEmail.Text, strPassphrase); } catch (Exception ex) { MessageBox.Show("Something went wrong while trying to add a new UserID: " + ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } bIsCanceled = false; this.Close(); }
void mnuClipboardSign_Click(Object sender, System.EventArgs e) { // Check if we have some secret keys at all. XmlNodeList xnlSecretKeys = SharpPrivacy.SecretKeyRing.GetElementsByTagName("SecretKey"); if (xnlSecretKeys.Count == 0) { MessageBox.Show("You cannot sign data because you do not own a private key. Please generate a new key pair, before you sign data.", "Action not possible...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); return; } string strMessage = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString(); QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMultiKeyDialog(SharpPrivacy.SecretKeyRing); ulong lSignatureKeyID = qpPassphrase.SelectedKey; string strPassphrase = qpPassphrase.Passphrase; try { SharpPrivacy.ReloadKeyRing(); string strReturn = SharpPrivacy.Instance.SignText(strMessage, lSignatureKeyID, strPassphrase); Clipboard.SetDataObject(strReturn); } catch (Exception ex) { MessageBox.Show("An error occured while encrypting the message: " + ex.Message + "\n\n" + ex.StackTrace, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); } }
void cmdParse_Click(Object sender, System.EventArgs e) { Packet[] pKeys = Packet.ParsePackets(txtBase64Key.Text); string strKeys = ""; for (int i = 0; i < pKeys.Length; i++) { /* As soon as all Packets are implemented, replace * this by a simple pKeys[i].ToString(); * For now we need all the ifs */ if (pKeys[i] is PublicKeyPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is UserIDPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SignaturePacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SymmetricallyEncryptedDataPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is AsymSessionKeyPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SymSessionKeyPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is LiteralDataPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is CompressedDataPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SecretKeyPacket) { QueryPassphrase queryPassphrase = new QueryPassphrase(); queryPassphrase.ShowMyDialog(); string strPassphrase = queryPassphrase.Passphrase; SecretKeyPacket skpPacket = (SecretKeyPacket)pKeys[i]; skpPacket.GetDecryptedKeyMaterial(strPassphrase); strKeys += pKeys[i].ToString(); } } this.txtKeyProperties.Lines = strKeys.Split('\n'); }
private void cmdSign_Click(object sender, System.EventArgs e) { int nIntroducerDepth = 0; try { nIntroducerDepth = Convert.ToInt32(this.txtIntroducer.Text); } catch (Exception) { MessageBox.Show("Introducer depth must be a number between 0 and 8!", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } if (nIntroducerDepth < 0 || nIntroducerDepth > 8) { MessageBox.Show("Introducer depth must be a number between 0 and 8!", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } if ((string)cmbUserID.SelectedItem == "") { MessageBox.Show("Please select the user ID you want to sign!", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } int nType = 0; if (this.rbCasualVerification.Checked) { nType = 0x12; } if (this.rbNoVerification.Checked) { nType = 0x11; } if (this.rbPositivVerification.Checked) { nType = 0x13; } QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMultiKeyDialog(SharpPrivacy.SecretKeyRing); string strKeyID = xmlKey.GetAttribute("keyid"); ulong lSignedKeyID = UInt64.Parse(strKeyID.Substring(2), System.Globalization.NumberStyles.HexNumber); ulong lSigningKeyID = qpPassphrase.SelectedKey; string strPassphrase = qpPassphrase.Passphrase; try { SharpPrivacy.Instance.SignKey(lSignedKeyID, lSigningKeyID, this.cmbUserID.Text, nIntroducerDepth, chkExportable.Checked, nType, strPassphrase); } catch (Exception ex) { MessageBox.Show("Something went wrong signing the key: " + ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } this.bSigned = true; this.Close(); }
public static string ClearTextSign(string strMessage, SecretKeyRing skrKeyRing) { SignaturePacket spSign = new SignaturePacket(); strMessage = Radix64.TrimMessage(strMessage); QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMyDialog(skrKeyRing); string strPassphrase = qpPassphrase.Passphrase; TransportableSecretKey tskKey = qpPassphrase.SelectedKey; SecretKeyPacket skpKey = tskKey.FindKey(AsymActions.Sign); Working wWorking = new Working(); wWorking.Show(); spSign.HashAlgorithm = HashAlgorithms.SHA1; spSign.Format = PacketFormats.New; wWorking.Progress(10); SignatureSubPacket sspCreator = new SignatureSubPacket(); sspCreator.Type = SignatureSubPacketTypes.IssuerKeyID; sspCreator.KeyID = skpKey.PublicKey.KeyID; SignatureSubPacket sspCreationTime = new SignatureSubPacket(); sspCreationTime.Type = SignatureSubPacketTypes.SignatureCreationTime; sspCreationTime.TimeCreated = DateTime.Now; spSign.HashedSubPackets = new SignatureSubPacket[2]; spSign.HashedSubPackets[0] = sspCreator; spSign.HashedSubPackets[1] = sspCreationTime; wWorking.Progress(20); //spSign.KeyID = skpKey.PublicKey.KeyID; //spSign.TimeCreated = DateTime.Now; spSign.SignatureAlgorithm = skpKey.PublicKey.Algorithm; spSign.SignatureType = SignatureTypes.TextSignature; spSign.Version = SignaturePacketVersionNumbers.v4; wWorking.Progress(10); byte[] bMessage = System.Text.Encoding.UTF8.GetBytes(strMessage); spSign.Sign(bMessage, skpKey, strPassphrase); wWorking.Progress(40); byte[] bSignature = spSign.Generate(); string strSignature = Radix64.Encode(bSignature, true); wWorking.Progress(20); string strFinal = Armor.WrapCleartextSignature(strMessage, strSignature); wWorking.Hide(); return strFinal; }
void mnuClipboardDecryptVerify_Click(Object sender, System.EventArgs e) { string strMessage = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString(); bool bAskForPassphrase = true; ulong lDecryptionKey = 0; try { SharpPrivacy.ReloadKeyRing(); lDecryptionKey = SharpPrivacy.Instance.GetDecryptionKey(strMessage); } catch (Exception ex) { bAskForPassphrase = false; Console.WriteLine(ex.Message); } string strPassphrase = ""; if (bAskForPassphrase) { QueryPassphrase qpPassphrase = new QueryPassphrase(); if (lDecryptionKey > 0) { //Find the fitting key XmlElement xmlKey = FindSecretKey(lDecryptionKey); if (xmlKey == null) { MessageBox.Show("An unexpected error occured: The secret key used to decrypt the message could not be found.", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } qpPassphrase.ShowSingleKeyDialog(xmlKey); strPassphrase = qpPassphrase.Passphrase; } else { qpPassphrase.ShowMyDialog(); strPassphrase = qpPassphrase.Passphrase; } } try { PlaintextViewer pvPlaintext = new PlaintextViewer(); SharpPrivacy.ReloadKeyRing(); pvPlaintext.XmlMessage = SharpPrivacy.Instance.DecryptAndVerify(strMessage, strPassphrase); pvPlaintext.ShowPlaintext(); } catch (Exception ex) { MessageBox.Show("An error occured while decrypting the message: " + ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); } }
void mnuFileSystemDecryptVerify_Click(Object sender, System.EventArgs e) { System.Windows.Forms.OpenFileDialog ofdOpen = new System.Windows.Forms.OpenFileDialog(); ofdOpen.Multiselect = false; ofdOpen.Filter = "OpenPGP Files (*.asc;*.enc)|*.asc;*.enc|All Files (*.*)|*.*"; ofdOpen.ShowDialog(); bool bAskForPassphrase = true; ulong lDecryptionKey = 0; try { SharpPrivacy.ReloadKeyRing(); lDecryptionKey = SharpPrivacy.Instance.GetDecryptionKeyFromFile(ofdOpen.FileName); } catch (Exception) { bAskForPassphrase = false; } string strPassphrase = ""; if (bAskForPassphrase) { QueryPassphrase qpPassphrase = new QueryPassphrase(); if (lDecryptionKey > 0) { //Find the fitting key XmlElement xmlKey = FindSecretKey(lDecryptionKey); qpPassphrase.ShowSingleKeyDialog(xmlKey); strPassphrase = qpPassphrase.Passphrase; } else { qpPassphrase.ShowMyDialog(); strPassphrase = qpPassphrase.Passphrase; } } try { PlaintextViewer pvPlaintext = new PlaintextViewer(); SharpPrivacy.ReloadKeyRing(); pvPlaintext.XmlMessage = SharpPrivacy.Instance.DecryptAndVerifyFile(ofdOpen.FileName, strPassphrase); pvPlaintext.ShowPlaintext(); } catch (Exception ex) { MessageBox.Show("An error occured while decrypting the message: " + ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); } }
void mnuKeyMenuCopy_Click(Object sender, System.EventArgs e) { IEnumerator ieItem = tlvKeys.SelectedNodes.GetEnumerator(); string strKey = ""; while (ieItem.MoveNext()) { TreeListNode tlnItem = (TreeListNode)ieItem.Current; try { XmlElement xmlKey = (XmlElement)tlnItem.Tag; string strKeyID = xmlKey.GetAttribute("keyid"); ulong lKeyID = UInt64.Parse(strKeyID.Substring(2), System.Globalization.NumberStyles.HexNumber); if (xmlKey.Name == "PublicKey") { string strThisKey = SharpPrivacy.Instance.GetPublicKey(lKeyID); strKey += strThisKey; } else if (xmlKey.Name == "SecretKey") { QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowSingleKeyDialog(xmlKey); string strPassphrase = qpPassphrase.Passphrase; string strThisKey = SharpPrivacy.Instance.GetSecretKey(lKeyID, strPassphrase); strKey += strThisKey; } } catch (Exception ex) { MessageBox.Show("An Error occured: " + ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); return; } } if (strKey.Length > 0) { Clipboard.SetDataObject(strKey); this.stbStatus.Text = "Selection saved in clipboard"; } }
private static void DecryptAndVerify(SecretKeyRing skrSecretKeyRing, PublicKeyRing pkrPublicKeyRing, byte[] bData) { string strMessage = System.Text.Encoding.UTF8.GetString(bData); ArmorTypes atType = new ArmorTypes(); string strRest = ""; string strRadix64 = Armor.RemoveArmor(strMessage, ref atType, ref strRest); if (strRadix64.Length > 0) bData = Radix64.Decode(strRadix64); SharpPrivacy.OpenPGP.Messages.Message mContent = null; if (atType == ArmorTypes.OpenPGPSignature) { string strSignature = ""; string strSignedMessage = Armor.RemoveClearSignatureArmor(strMessage, ref atType, ref strSignature); strSignedMessage = Radix64.DashUnescape(strSignedMessage); strSignedMessage = Radix64.TrimMessage(strSignedMessage); SignedMessage smMessage = new SignedMessage(); Packet[] pPackets = Packet.ParsePackets(strSignature); if (!(pPackets[0] is SignaturePacket)) { MessageBox.Show("Not a valid cleartext signature!"); return; } smMessage.Signature = (SignaturePacket)pPackets[0]; LiteralMessage lmMessage = new LiteralMessage(DataFormatTypes.Text); lmMessage.Text = strSignedMessage; smMessage.MessageSigned = lmMessage; mContent = smMessage; } else { // let us see what kind of message this is EncryptedMessage emMessage = new EncryptedMessage(); try { Packet[] pPackets = Packet.ParsePackets(bData); emMessage.ParseMessage(pPackets); if (emMessage.SymmetricallyEncrypted) { // Query passphrase for symmetrically encrypted message QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMyDialog(); string strPassphrase = qpPassphrase.Passphrase; mContent = emMessage.Decrypt(strPassphrase); } else { ulong lKeyID = emMessage.GetFittingKeyID(skrSecretKeyRing); QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMyDialog(skrSecretKeyRing.Find(lKeyID)); string strPassphrase = qpPassphrase.Passphrase; mContent = emMessage.Decrypt(skrSecretKeyRing, strPassphrase); } while ((!(mContent is LiteralMessage)) && (!(mContent is SignedMessage))) { if (mContent is CompressedMessage) { mContent = ((CompressedMessage)mContent).Uncompress(); } else { MessageBox.Show("This is not a valid OpenPGP message!"); return; } } } catch (Exception ee) { MessageBox.Show("There was an error decrypting your message: " + ee.Message); return; } } LiteralMessage lmContent = new LiteralMessage(); string strDisplay = ""; if (mContent is SignedMessage) { SignedMessage smContent = (SignedMessage)mContent; lmContent = smContent.MessageSigned; strDisplay += "*** OpenPGP Signed Message ***\r\n"; strDisplay += "*** Signature Status: " + smContent.Verify(pkrPublicKeyRing) + " ***\r\n"; strDisplay += "*** Signing Key: " + smContent.Signature.KeyID.ToString("x") + " ***\r\n"; strDisplay += "*** Signing Date: " + smContent.Signature.TimeCreated.ToString() + "***\r\n\r\n"; } else if (mContent is LiteralMessage) { lmContent = (LiteralMessage)mContent; strDisplay += "*** OpenPGP Encrypted Message ***\r\n\r\n"; } else { MessageBox.Show("An error occured: Could not find an encrypted or signed message!", "Error..."); return; } if (lmContent.DataFormat == DataFormatTypes.Text) { strDisplay += lmContent.Text; strDisplay += "\r\n\r\n*** End OpenPGP Message ***\r\n"; PlaintextViewer pvViewer = new PlaintextViewer(); pvViewer.MessageText = strDisplay; pvViewer.Show(); } else { if (MessageBox.Show(strDisplay, "Signature Status...", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1) == DialogResult.OK) { System.Windows.Forms.SaveFileDialog sfdSave = new SaveFileDialog(); sfdSave.OverwritePrompt = true; sfdSave.Filter = "All Files (*.*)|*.*"; sfdSave.FileName = lmContent.Filename; sfdSave.ShowDialog(); if (sfdSave.FileName.Length > 0) { System.IO.FileStream fsOut = new FileStream(sfdSave.FileName, FileMode.CreateNew); System.IO.BinaryWriter bwOut = new BinaryWriter(fsOut); bwOut.Write(lmContent.Binary); bwOut.Close(); fsOut.Close(); } } } }
public static string EncryptText(string strMessage, PublicKeyRing pkrPublicKeyRing, SecretKeyRing skrSecretKeyRing, bool bSign) { PublicKeySelector pksSelectKeys = new PublicKeySelector(pkrPublicKeyRing); pksSelectKeys.ShowDialog(); TransportableSecretKey tskKey = new TransportableSecretKey(); string strPassphrase = ""; if (bSign) { QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMyDialog(skrSecretKeyRing); tskKey = qpPassphrase.SelectedKey; strPassphrase = qpPassphrase.Passphrase; } if (pksSelectKeys.SelectedKeys.Count == 0) return strMessage; Working wWorking = new Working(); wWorking.Show(); LiteralMessage lmMessage = new LiteralMessage(DataFormatTypes.Text); lmMessage.Text = strMessage; lmMessage.TimeCreated = DateTime.Now; lmMessage.Filename = ""; SharpPrivacy.OpenPGP.Messages.Message mEncryptionMessage = lmMessage; if (bSign) { SignedMessage smMessage = new SignedMessage(); smMessage.MessageSigned = lmMessage; SignaturePacket spPacket = new SignaturePacket(); spPacket.Version = SignaturePacketVersionNumbers.v3; SecretKeyPacket skpKey = tskKey.FindKey(AsymActions.Sign); spPacket.KeyID = skpKey.PublicKey.KeyID; spPacket.HashAlgorithm = HashAlgorithms.SHA1; spPacket.SignatureAlgorithm = skpKey.PublicKey.Algorithm; spPacket.TimeCreated = DateTime.Now; spPacket.SignatureType = SignatureTypes.TextSignature; spPacket.Sign(lmMessage.Binary, skpKey, strPassphrase); smMessage.Signature = spPacket; mEncryptionMessage = smMessage; } CompressedMessage cmMessage = new CompressedMessage(); cmMessage.Compress(mEncryptionMessage); wWorking.Progress(20); SymAlgorithms saAlgo = GetSymAlgorithmPreferences(pksSelectKeys.SelectedKeys); SymmetricallyEncryptedDataPacket sedpEncrypted = new SymmetricallyEncryptedDataPacket(); SymmetricAlgorithm saEncrypt = CipherHelper.CreateSymAlgorithm(saAlgo); saEncrypt.Mode = CipherMode.OpenPGP_CFB; saEncrypt.GenerateKey(); byte[] bKey = saEncrypt.Key; wWorking.Progress(10); ESKSequence esksKeys = new ESKSequence(); try { esksKeys = CreateESKSequence(pksSelectKeys.SelectedKeys, AsymActions.Encrypt, saAlgo, bKey); } catch (Exception e) { wWorking.Hide(); MessageBox.Show("The following error occured: " + e.Message, "Error..."); return strMessage; } wWorking.Progress(50); ICryptoTransform ictEncryptor = saEncrypt.CreateEncryptor(); byte[] bMessage = cmMessage.GetEncoded(); byte[] bOutput = new byte[bMessage.Length]; ictEncryptor.TransformBlock(bMessage, 0, bMessage.Length, ref bOutput, 0); bKey.Initialize(); wWorking.Progress(10); int iOutLength = (saEncrypt.BlockSize >> 3) + 2 + bMessage.Length; sedpEncrypted.Body = new byte[iOutLength]; Array.Copy(bOutput, 0, sedpEncrypted.Body, 0, iOutLength); byte[] bESK = esksKeys.GetEncoded(); byte[] bEncrypted = sedpEncrypted.Generate(); byte[] bReturn = new byte[bESK.Length + bEncrypted.Length]; bESK.CopyTo(bReturn, 0); bEncrypted.CopyTo(bReturn, bESK.Length); wWorking.Progress(10); string strReturn = Radix64.Encode(bReturn, true); strReturn = Armor.WrapMessage(strReturn); wWorking.Hide(); return strReturn; }
public static void EncryptFiles(String[] strFiles, PublicKeyRing pkrPublicKeyRing, SecretKeyRing skrSecretKeyRing, bool bEncrypt, bool bSign) { PublicKeySelector pksSelectKeys = new PublicKeySelector(pkrPublicKeyRing); if (bEncrypt) { pksSelectKeys.ShowDialog(); if (pksSelectKeys.SelectedKeys.Count == 0) { MessageBox.Show("You did not select a public key to encrypt to. Doing nothing...", "Nothing Done..."); return; } } TransportableSecretKey tskKey = new TransportableSecretKey(); string strPassphrase = ""; if (bSign) { QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMyDialog(skrSecretKeyRing); tskKey = qpPassphrase.SelectedKey; strPassphrase = qpPassphrase.Passphrase; } Working wWorking = new Working(); wWorking.Show(); for (int i=0; i<strFiles.Length; i++) { byte[] bFileContent = new byte[0]; try { System.IO.FileStream fsFile = new FileStream(strFiles[i], FileMode.Open); BinaryReader brReader = new BinaryReader(fsFile); bFileContent = brReader.ReadBytes((int)fsFile.Length); brReader.Close(); fsFile.Close(); } catch (Exception e) { wWorking.Hide(); MessageBox.Show("An error occured while opening the file " + strFiles[i] + ": " + e.Message, "Error..."); return; } LiteralMessage lmMessage = new LiteralMessage(DataFormatTypes.Binary); lmMessage.Binary = bFileContent; lmMessage.TimeCreated = DateTime.Now; int iLastBackslash = strFiles[i].LastIndexOf("\\"); lmMessage.Filename = strFiles[i].Substring(iLastBackslash + 1, strFiles[i].Length - iLastBackslash - 1); SharpPrivacy.OpenPGP.Messages.Message mEncryptionMessage = lmMessage; if (bSign) { SignedMessage smMessage = new SignedMessage(); smMessage.MessageSigned = lmMessage; SignaturePacket spPacket = new SignaturePacket(); spPacket.Version = SignaturePacketVersionNumbers.v3; SecretKeyPacket skpKey = tskKey.FindKey(AsymActions.Sign); spPacket.KeyID = skpKey.PublicKey.KeyID; spPacket.HashAlgorithm = HashAlgorithms.SHA1; spPacket.SignatureAlgorithm = skpKey.PublicKey.Algorithm; spPacket.TimeCreated = DateTime.Now; spPacket.SignatureType = SignatureTypes.TextSignature; spPacket.Sign(lmMessage.Binary, skpKey, strPassphrase); smMessage.Signature = spPacket; mEncryptionMessage = smMessage; } CompressedMessage cmMessage = new CompressedMessage(); cmMessage.Compress(mEncryptionMessage); wWorking.Progress(20/strFiles.Length); SymAlgorithms saAlgo = GetSymAlgorithmPreferences(pksSelectKeys.SelectedKeys); wWorking.Progress(10/strFiles.Length); byte[] bReturn = new byte[0]; if (bEncrypt) { SymmetricallyEncryptedDataPacket sedpEncrypted = new SymmetricallyEncryptedDataPacket(); SymmetricAlgorithm saEncrypt = CipherHelper.CreateSymAlgorithm(saAlgo); saEncrypt.Mode = CipherMode.OpenPGP_CFB; saEncrypt.GenerateKey(); byte[] bKey = saEncrypt.Key; ESKSequence esksKeys = new ESKSequence(); try { esksKeys = CreateESKSequence(pksSelectKeys.SelectedKeys, AsymActions.Encrypt, saAlgo, bKey); } catch (Exception e) { wWorking.Hide(); MessageBox.Show("The following error occured: " + e.Message, "Error..."); return; } wWorking.Progress(50/strFiles.Length); ICryptoTransform ictEncryptor = saEncrypt.CreateEncryptor(); byte[] bMessage = cmMessage.GetEncoded(); byte[] bOutput = new byte[bMessage.Length]; ictEncryptor.TransformBlock(bMessage, 0, bMessage.Length, ref bOutput, 0); bKey.Initialize(); wWorking.Progress(10/strFiles.Length); int iOutLength = (saEncrypt.BlockSize >> 3) + 2 + bMessage.Length; sedpEncrypted.Body = new byte[iOutLength]; Array.Copy(bOutput, 0, sedpEncrypted.Body, 0, iOutLength); byte[] bESK = esksKeys.GetEncoded(); byte[] bEncrypted = sedpEncrypted.Generate(); bReturn = new byte[bESK.Length + bEncrypted.Length]; bESK.CopyTo(bReturn, 0); bEncrypted.CopyTo(bReturn, bESK.Length); } else { wWorking.Progress(60/strFiles.Length); bReturn = cmMessage.GetEncoded(); } wWorking.Progress(10/strFiles.Length); try { FileStream fsOut = new FileStream(strFiles[i] + ".asc", FileMode.CreateNew); BinaryWriter bwWrite = new BinaryWriter(fsOut); bwWrite.Write(bReturn); bwWrite.Close(); fsOut.Close(); } catch (IOException io) { MessageBox.Show("Could not write to file. The following error occured: " + io.Message, "Error..."); } } wWorking.Hide(); }
void cmdParse_Click(Object sender, System.EventArgs e) { Packet[] pKeys = Packet.ParsePackets(txtBase64Key.Text); string strKeys = ""; for (int i=0; i<pKeys.Length; i++) { /* As soon as all Packets are implemented, replace * this by a simple pKeys[i].ToString(); * For now we need all the ifs */ if (pKeys[i] is PublicKeyPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is UserIDPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SignaturePacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SymmetricallyEncryptedDataPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is AsymSessionKeyPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SymSessionKeyPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is LiteralDataPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is CompressedDataPacket) { strKeys += pKeys[i].ToString(); } else if (pKeys[i] is SecretKeyPacket) { QueryPassphrase queryPassphrase = new QueryPassphrase(); queryPassphrase.ShowMyDialog(); string strPassphrase = queryPassphrase.Passphrase; SecretKeyPacket skpPacket = (SecretKeyPacket)pKeys[i]; skpPacket.GetDecryptedKeyMaterial(strPassphrase); strKeys += pKeys[i].ToString(); } } this.txtKeyProperties.Lines = strKeys.Split('\n'); }
void mnuFileSystemSign_Click(Object sender, System.EventArgs e) { // Check if we have some secret keys at all. XmlNodeList xnlSecretKeys = SharpPrivacy.SecretKeyRing.GetElementsByTagName("SecretKey"); if (xnlSecretKeys.Count == 0) { MessageBox.Show("You cannot sign data because you do not own a private key. Please generate a new key pair, before you sign data.", "Action not possible...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); return; } System.Windows.Forms.OpenFileDialog ofdOpen = new System.Windows.Forms.OpenFileDialog(); ofdOpen.Multiselect = true; ofdOpen.Filter = "All Files (*.*)|*.*"; ofdOpen.ShowDialog(); if (ofdOpen.FileNames.Length == 0) return; QueryPassphrase qpPassphrase = new QueryPassphrase(); qpPassphrase.ShowMultiKeyDialog(SharpPrivacy.SecretKeyRing); ulong lSignatureKeyID = qpPassphrase.SelectedKey; string strPassphrase = qpPassphrase.Passphrase; for (int i=0; i<ofdOpen.FileNames.Length; i++) { string strPath = ofdOpen.FileNames[i]; SharpPrivacy.ReloadKeyRing(); SharpPrivacy.Instance.SignFile(strPath, strPath + ".asc", lSignatureKeyID, strPassphrase); } }