public Sign ( MimeKit.Cryptography.CryptographyContext ctx ) : void | ||
ctx | MimeKit.Cryptography.CryptographyContext | The cryptography context. |
return | void |
public void TestMimeMessageSign () { var body = new TextPart ("plain") { Text = "This is some cleartext that we'll end up signing..." }; var self = new MailboxAddress ("MimeKit UnitTests", "*****@*****.**"); var message = new MimeMessage { Subject = "Test of signing with OpenPGP" }; message.From.Add (self); message.Body = body; using (var ctx = new DummyOpenPgpContext ()) { message.Sign (ctx); Assert.IsInstanceOf<MultipartSigned> (message.Body); var multipart = (MultipartSigned) message.Body; Assert.AreEqual (2, multipart.Count, "The multipart/signed has an unexpected number of children."); var protocol = multipart.ContentType.Parameters["protocol"]; Assert.AreEqual (ctx.SignatureProtocol, protocol, "The multipart/signed protocol does not match."); Assert.IsInstanceOf<TextPart> (multipart[0], "The first child is not a text part."); Assert.IsInstanceOf<ApplicationPgpSignature> (multipart[1], "The second child is not a detached signature."); var signatures = multipart.Verify (ctx); Assert.AreEqual (1, signatures.Count, "Verify returned an unexpected number of signatures."); foreach (var signature in signatures) { try { bool valid = signature.Verify (); Assert.IsTrue (valid, "Bad signature from {0}", signature.SignerCertificate.Email); } catch (DigitalSignatureVerifyException ex) { Assert.Fail ("Failed to verify signature: {0}", ex); } } } }
static void TestDkimSignVerify (MimeMessage message, DkimSignatureAlgorithm signatureAlgorithm, DkimCanonicalizationAlgorithm headerAlgorithm, DkimCanonicalizationAlgorithm bodyAlgorithm) { var headers = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date }; var signer = CreateSigner (signatureAlgorithm); message.Sign (signer, headers, headerAlgorithm, bodyAlgorithm); var dkim = message.Headers[0]; Assert.IsTrue (message.Verify (dkim, new DummyPublicKeyLocator (DkimKeys.Public)), "Failed to verify DKIM-Signature."); message.Headers.RemoveAt (0); }
static void TestUnicode (DkimSignatureAlgorithm signatureAlgorithm, DkimCanonicalizationAlgorithm bodyAlgorithm, string expectedHash) { var headers = new [] { HeaderId.From, HeaderId.To, HeaderId.Subject, HeaderId.Date }; var signer = CreateSigner (signatureAlgorithm); var message = new MimeMessage (); message.From.Add (new MailboxAddress ("", "*****@*****.**")); message.To.Add (new MailboxAddress ("", "*****@*****.**")); message.Subject = "This is a unicode message"; message.Date = DateTimeOffset.Now; var builder = new BodyBuilder (); builder.TextBody = " تست "; builder.HtmlBody = " <div> تست </div> "; message.Body = builder.ToMessageBody (); ((Multipart) message.Body).Boundary = "=-MultipartAlternativeBoundary"; ((Multipart) message.Body)[1].ContentId = null; message.Body.Prepare (EncodingConstraint.EightBit); message.Sign (signer, headers, DkimCanonicalizationAlgorithm.Simple, bodyAlgorithm); var dkim = message.Headers[0]; Console.WriteLine ("{0}", dkim.Value); VerifyDkimBodyHash (message, signatureAlgorithm, expectedHash); Assert.IsTrue (message.Verify (dkim, new DummyPublicKeyLocator (DkimKeys.Public)), "Failed to verify DKIM-Signature."); }
public void TestArgumentExceptions () { var locator = new DummyPublicKeyLocator (DkimKeys.Public); var dkimHeader = new Header (HeaderId.DkimSignature, "value"); var message = new MimeMessage (); Assert.Throws<ArgumentNullException> (() => message.Sign (null, new HeaderId[] { HeaderId.From })); Assert.Throws<ArgumentNullException> (() => message.Sign (CreateSigner (DkimSignatureAlgorithm.RsaSha1), null)); Assert.Throws<ArgumentNullException> (() => message.Verify (null, locator)); Assert.Throws<ArgumentNullException> (() => message.Verify (dkimHeader, null)); Assert.Throws<ArgumentNullException> (() => message.Verify (null, dkimHeader, locator)); Assert.Throws<ArgumentNullException> (() => message.Verify (FormatOptions.Default, null, locator)); Assert.Throws<ArgumentNullException> (() => message.Verify (FormatOptions.Default, dkimHeader, null)); }
static void TestEmptyBody (DkimSignatureAlgorithm signatureAlgorithm, DkimCanonicalizationAlgorithm bodyAlgorithm, string expectedHash) { var headers = new [] { HeaderId.From, HeaderId.To, HeaderId.Subject, HeaderId.Date }; var signer = CreateSigner (signatureAlgorithm); var message = new MimeMessage (); message.From.Add (new MailboxAddress ("", "*****@*****.**")); message.To.Add (new MailboxAddress ("", "*****@*****.**")); message.Subject = "This is an empty message"; message.Date = DateTimeOffset.Now; message.Body = new TextPart ("plain") { Text = "" }; message.Body.Prepare (EncodingConstraint.SevenBit); message.Sign (signer, headers, DkimCanonicalizationAlgorithm.Simple, bodyAlgorithm); VerifyDkimBodyHash (message, signatureAlgorithm, expectedHash); var dkim = message.Headers[0]; Assert.IsTrue (message.Verify (dkim, new DummyPublicKeyLocator (DkimKeys.Public)), "Failed to verify DKIM-Signature."); }
public void TestSecureMimeSigning () { var body = new TextPart ("plain") { Text = "This is some cleartext that we'll end up signing..." }; var self = new MailboxAddress ("MimeKit UnitTests", "*****@*****.**"); var message = new MimeMessage { Subject = "Test of signing with S/MIME" }; message.From.Add (self); message.Body = body; using (var ctx = CreateContext ()) { message.Sign (ctx); Assert.IsInstanceOf<MultipartSigned> (message.Body, "The message body should be a multipart/signed."); var multipart = (MultipartSigned) message.Body; Assert.AreEqual (2, multipart.Count, "The multipart/signed has an unexpected number of children."); var protocol = multipart.ContentType.Parameters["protocol"]; Assert.AreEqual (ctx.SignatureProtocol, protocol, "The multipart/signed protocol does not match."); Assert.IsInstanceOf<TextPart> (multipart[0], "The first child is not a text part."); Assert.IsInstanceOf<ApplicationPkcs7Signature> (multipart[1], "The second child is not a detached signature."); var signatures = multipart.Verify (ctx); Assert.AreEqual (1, signatures.Count, "Verify returned an unexpected number of signatures."); foreach (var signature in signatures) { try { bool valid = signature.Verify (); Assert.IsTrue (valid, "Bad signature from {0}", signature.SignerCertificate.Email); } catch (DigitalSignatureVerifyException ex) { Assert.Fail ("Failed to verify signature: {0}", ex); } var algorithms = ((SecureMimeDigitalSignature) signature).EncryptionAlgorithms; Assert.AreEqual (EncryptionAlgorithm.Camellia256, algorithms[0], "Expected Camellia-256 capability"); Assert.AreEqual (EncryptionAlgorithm.Aes256, algorithms[1], "Expected AES-256 capability"); Assert.AreEqual (EncryptionAlgorithm.Camellia192, algorithms[2], "Expected Camellia-192 capability"); Assert.AreEqual (EncryptionAlgorithm.Aes192, algorithms[3], "Expected AES-192 capability"); Assert.AreEqual (EncryptionAlgorithm.Camellia128, algorithms[4], "Expected Camellia-128 capability"); Assert.AreEqual (EncryptionAlgorithm.Aes128, algorithms[5], "Expected AES-128 capability"); Assert.AreEqual (EncryptionAlgorithm.Idea, algorithms[6], "Expected IDEA capability"); Assert.AreEqual (EncryptionAlgorithm.Cast5, algorithms[7], "Expected Cast5 capability"); Assert.AreEqual (EncryptionAlgorithm.TripleDes, algorithms[8], "Expected Triple-DES capability"); //Assert.AreEqual (EncryptionAlgorithm.RC2128, algorithms[9], "Expected RC2-128 capability"); //Assert.AreEqual (EncryptionAlgorithm.RC264, algorithms[10], "Expected RC2-64 capability"); //Assert.AreEqual (EncryptionAlgorithm.Des, algorithms[11], "Expected DES capability"); //Assert.AreEqual (EncryptionAlgorithm.RC240, algorithms[12], "Expected RC2-40 capability"); } } }