public void TestArgumentExceptions () { var credentials = new NetworkCredential ("username", "password"); var uri = new Uri ("smtp://localhost"); SaslMechanism sasl; Assert.Throws<ArgumentNullException> (() => new SaslException (null, SaslErrorCode.MissingChallenge, "message")); sasl = new SaslMechanismCramMd5 (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismCramMd5 (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismCramMd5 (uri, null)); Assert.Throws<NotSupportedException> (() => sasl.Challenge (null)); sasl = new SaslMechanismDigestMd5 (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismDigestMd5 (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismDigestMd5 (uri, null)); Assert.Throws<NotSupportedException> (() => sasl.Challenge (null)); sasl = new SaslMechanismLogin (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (uri, null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (uri, null)); Assert.Throws<NotSupportedException> (() => sasl.Challenge (null)); sasl = new SaslMechanismNtlm (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismNtlm (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismNtlm (uri, null)); Assert.DoesNotThrow (() => sasl.Challenge (null)); sasl = new SaslMechanismOAuth2 (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismOAuth2 (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismOAuth2 (uri, null)); Assert.DoesNotThrow (() => sasl.Challenge (null)); sasl = new SaslMechanismPlain (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (uri, null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (uri, null)); Assert.DoesNotThrow (() => sasl.Challenge (null)); sasl = new SaslMechanismScramSha1 (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1 (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1 (uri, null)); Assert.DoesNotThrow (() => sasl.Challenge (null)); sasl = new SaslMechanismScramSha256 (uri, credentials); Assert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256 (null, credentials)); Assert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256 (uri, null)); Assert.DoesNotThrow (() => sasl.Challenge (null)); }
public void TestScramSha1 () { const string cnonce = "fyko+d2lbbFgONRv9qkxdawL"; var uri = new Uri ("imap://elwood.innosoft.com"); var credentials = new NetworkCredential ("user", "pencil"); var sasl = new SaslMechanismScramSha1 (uri, credentials, cnonce); string token; var challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null))); Assert.AreEqual ("n,,n=user,r=" + cnonce, challenge, "Initial SCRAM-SHA-1 challenge response does not match the expected string."); Assert.IsFalse (sasl.IsAuthenticated, "SCRAM-SHA-1 should not be authenticated yet."); token = Convert.ToBase64String (Encoding.UTF8.GetBytes ("r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096")); challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token))); const string expected = "c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts="; Assert.AreEqual (expected, challenge, "Second SCRAM-SHA-1 challenge response does not match the expected string."); Assert.IsFalse (sasl.IsAuthenticated, "SCRAM-SHA-1 should not be authenticated yet."); token = Convert.ToBase64String (Encoding.UTF8.GetBytes ("v=rmF9pqV8S7suAoZWja4dJRkFsKQ=")); challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token))); Assert.AreEqual (string.Empty, challenge, "Third SCRAM-SHA-1 challenge should be an empty string."); Assert.IsTrue (sasl.IsAuthenticated, "SCRAM-SHA-1 should be authenticated now."); }