Ejemplo n.º 1
0
        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;
			}
		}
Ejemplo n.º 4
0
        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;
		}