public void ExportPublicKey() { var expectedOutput = @"-----BEGIN PGP PUBLIC KEY BLOCK----- mQENBFY1R3kBCADPO0yyqcHmBt7tXs28sjiXW+xnSoqgD7x63f5ePUsJ2emDff/Z FwvmW+EAlgQ17AYBetz8uuFHgo41uNfOEVDphzBVOuZ9r/wtNOzhaT2fXyo4HTA0 6K5/c5/WcyXg/AnvM2SHQ1WfqV4MZ3l/umrKawFLZVuRKmQQmcuMvPJTq5lI6nDz L98b62DUXb/3pZCVFuJNjdoxAy2KsTKl5g0rxDM/I6V7t4t4udWZ08Gk0iuOSRON aG91C/H63KIOEwHtxpjQmS7QCb6H9BUKsO0JwvQYvfUYFQxPjL1GU7Wpg9xY6mT3 qJJLQ4XTlwcUENbeOzgnyqUnlGNibxmB1JFrABEBAAG0F1JzYSBKaWxsIDxyc2FA amlsbC5jb20+iQE4BBMBAgAiBQJWNUd5AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIe AQIXgAAKCRD7Oy0tkscDmvBACACFsrLKVJ1bOMMNGmXWwyy6ftnlpNIUI1D02tKN ZD4sR1sRHQT79TBaYG39DeJjZpXPNBpKqFV6Ux6R9xPnr0oyschxSFj855Cu08Ls 7MHIzM+CGGsF//mxPzJoNQWLsYWeoDnwHSqAMj4ApdTENZQoOZK2jBM68V/fwQKB c9FhE5I26Sc2/fkH+CqCfkqh1MIzbz2Me6QPEVDVmYwwHkKmKfB6HTL1o/+iNeFb 9/813HhvpUK+iYKsIW3A17bANr3ex4j4gFS6nnGSd4zm5RvHxcp0iZW08SiaEgrF dUXA3GVNMgjJbxdp9t1NulolXPcDiO5yfjIgouj3oVdM+lF8sAIAA7kBDQRWNUd5 AQgAzDaJVBd1Yh3GchXpVmYPQOFK7HHX7D1/Yn+YvfkbO4EKEzVZ1iIoekCzXeZl Q5hO0cpyhblXaJJAUGNJmKLL5z/OkcfG7FUsZgnhdkXNVejVXWJZv+HoHKDHXdjJ i3c4no2cqzzeLBut3fsqThargLLqrWyadvGQRkxOtTsQVHLrgnID33Jdh9hsYMvB 3/mHUT4g+ZU98ekA5vTKZii/dcy2160GKOMP1PmvcKrOm0m399OZgyh0sTeQylZu MPrVFU6KxA+g5708OpLrpasFkWDnzwfCAl6l+GdU29QfW1rfLOPj81Ip39ppanhQ xkjmgqgpARK96cnfZ126HWx1GwARAQABiQEfBBgBAgAJBQJWNUd5AhsMAAoJEPs7 LS2SxwOav9MIAJyfqlXPTrxtnXvB85/qXyhB6KWkhOT9TPR3H9UHzSDyZVus0aza W/Qe59QqpSjLPBvKJs+FhhLPHjS4qPjExHIo/jSWZ5nKW15UPdQdhj+JGRKXLZRd 7ENvjw9Md922G+M/z9V0mqSZlwDwnMLy5/dQmduZdysIXeqvPQk3ZDQbH2kyPxHF oa3UhjC8/UZYVfD0EmO6b9wtWDCfgr0z47TMr7myn1NMwWSn13ZXYvwXdlpSx1Ps l1ISDLDE94wcCDzbnPvXXCFJ26ATYlX8PPI6jmp9VHU/FdQtfVd9+3TprboR9JVl qVpBT5OoBs9xe9FVirifzbAZ4JCrWcAJ1eKwAgAD =uWzT -----END PGP PUBLIC KEY BLOCK----- "; var context = new CryptoContext( GetPasswordCallback, @"C:\projects\OutlookPrivacyPlugin\Deja.Crypto.Test\pubring.gpg", @"C:\projects\OutlookPrivacyPlugin\Deja.Crypto.Test\secring.gpg", "rsa", "sha-1"); var crypto = new PgpCrypto(context); var key = crypto.PublicKey("*****@*****.**", new Dictionary <string, string>()); Assert.AreEqual(expectedOutput, key); }
private string EncryptEmail(byte[] data, IList<string> recipients) { try { var context = new CryptoContext(); var crypto = new PgpCrypto(context); var headers = GetEncryptedMailHeaders(); return crypto.Encrypt(data, recipients, headers); } catch (Exception e) { Passphrase = null; WriteErrorData("EncryptEmail", e); ShowErrorBox(e.Message); return null; } }
private string SignAndEncryptAttachment(byte[] data, string key, IList<string> recipients) { try { if (!PromptForPasswordAndKey()) return null; var context = new CryptoContext(Passphrase); var crypto = new PgpCrypto(context); var headers = GetEncryptedMailHeaders(); return crypto.SignAndEncryptBinary(data, key, recipients, headers); } catch (Exception ex) { Passphrase = null; ShowErrorBox(ex.Message); throw; } }
public void VerifyEmail() { var asc = @"-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 i think i have found the issue. I write this mail as - only text - message. If another receive this email, my signature email and webaddress are i nterpreted as links and will be changed by outlook to html elements. Mit freundlichen Grüßen, Sebastian Lutz Baebeca Solutions - Lutz E-Mail: [email protected] <mailto:[email protected]> Tel. Büro: 02261 - 9202935 Tel. Mobil: 0171 - 6431821 Web: https://www.baebeca.de <https://www.baebeca.de> PGP Key: 0x5AD0240C -----BEGIN PGP SIGNATURE----- iQEcBAEBCAAGBQJWPGGdAAoJEEKN+AfqKr312lEIAJ6i2C/8ZWoU3K2T0JWUXLRJ Rycl2f9IqZkTOA4/x39QX+MuJ8N20ek5YDDeljZZdZnuEkBKvWZUZ/E6f49JJv6p MBpNZgPua13fjERPIlNNV5CLxXDqhaH+jFaP8hCzthuNMKuW4iPy2wppX4f+EXbH O5NMNUOtwD149S8y3DDx90Y6RdvQL9HYijDzHHpko1RqRL2lrkxrzOyTk0R0JoS2 C4h6ab6bixbmV6QBCtzOFpp6nkxWT27CFRIN0yz9t6psGZQgEVYP7RQlmFqS0jr4 9pTfjB6djoxrLxNiQMHsaH0UKeC+3AQdfvAloaIljULuBfa9BV8U5CXJBy1JUiM= =K83z -----END PGP SIGNATURE----- "; var context = new CryptoContext(GetPasswordCallback, Pubring, Secring, "rsa", "sha-1"); var crypto = new PgpCrypto(context); var encoding = Encoding.GetEncoding(28591); var ret = crypto.VerifyClear(encoding.GetBytes(asc)); Assert.IsTrue(ret); }
private string SignEmail(string data, string key) { try { if (!PromptForPasswordAndKey()) return null; var context = new CryptoContext(Passphrase); var crypto = new PgpCrypto(context); var headers = new Dictionary<string, string>(); headers["Version"] = MailHeaderVersion; return crypto.SignClear(data, key, _encoding, headers); } catch (CryptoException ex) { Passphrase = null; WriteErrorData("SignEmail", ex); ShowErrorBox(ex.Message); return null; } }
MailModel HandlePgpMime(Outlook.MailItem mailItem, Outlook.Attachment encryptedMime, Outlook.Attachment sigMime, string sigHash = "sha1") { Logger.Trace("> HandlePgpMime"); CryptoContext context = null; var cleartext = mailItem.Body; // 1. Decrypt attachement if (encryptedMime != null) { if (DecryptMime(mailItem, encryptedMime, ref context, ref cleartext)) { return null; } } // 2. Verify signature Signature signature = null; if (sigMime != null) { context = new CryptoContext(Passphrase); signature = VerifySignature(mailItem, sigMime, sigHash, ref context); } if (context == null) return null; // Extract files from MIME data MailModel mailModel = null; var msg = new SharpMessage(cleartext); string body = mailItem.Body; if (mailItem.BodyFormat == Outlook.OlBodyFormat.olFormatPlain) { mailModel = new PlainMailModel { Body = msg.Body }; } else if (mailItem.BodyFormat == Outlook.OlBodyFormat.olFormatHTML) { if (!msg.Body.TrimStart().ToLower().StartsWith("<html")) { body = msg.Body; body = System.Net.WebUtility.HtmlEncode(body); body = body.Replace("\n", "<br />"); mailModel = new HtmlMailModel { Body = "<html><head></head><body>" + body + "</body></html>" }; } else { mailModel = new HtmlMailModel { Body = msg.Body }; } } else { // May cause mail item not to open correctly mailModel = new PlainMailModel { Body = msg.Body, Signature = signature }; } foreach (SharpAttachment mimeAttachment in msg.Attachments) { mimeAttachment.Stream.Position = 0; var fileName = mimeAttachment.Name; var tempFile = Path.Combine(Path.GetTempPath(), fileName); using (var fout = File.OpenWrite(tempFile)) { mimeAttachment.Stream.CopyTo(fout); } if (fileName == "signature.asc") { var detachedsig = File.ReadAllText(tempFile); var clearsig = CreateClearSignatureFromDetachedSignature(mailItem, sigHash, detachedsig); var crypto = new PgpCrypto(context); signature = VerifyClearSignature(ref context, crypto, clearsig); } mailModel.Attachments.Add(new Attachment { TempFile = tempFile, AttachmentType = Outlook.OlAttachmentType.olByValue, FileName = fileName }); } mailModel.Body = mailModel.Body; mailModel.Signature = signature; return mailModel; }