static void AssertNtlm2Key(SaslMechanismNtlm sasl, string challenge1, string challenge2) { var challenge = sasl.Challenge(string.Empty); Assert.AreEqual(challenge1, challenge, "Initial challenge"); Assert.IsFalse(sasl.IsAuthenticated, "IsAuthenticated"); challenge = sasl.Challenge(challenge2); var token = Convert.FromBase64String(challenge2); var type2 = new Type2Message(token, 0, token.Length); var type3 = new Type3Message(type2, null, sasl.Level, sasl.Credentials.UserName, sasl.Credentials.Password, sasl.Workstation); var ignoreLength = 48; var actual = Convert.FromBase64String(challenge); var expected = type3.Encode(); Assert.AreEqual(expected.Length, actual.Length, "Final challenge differs in length: {0} vs {1}", expected.Length, actual.Length); for (int i = 0; i < expected.Length - ignoreLength; i++) { Assert.AreEqual(expected[i], actual[i], "Final challenge differs at index {0}", i); } Assert.IsTrue(sasl.IsAuthenticated, "IsAuthenticated"); }
static void AssertNtlmv2(SaslMechanismNtlm sasl, string challenge1, string challenge2) { var challenge = sasl.Challenge(string.Empty); Assert.AreEqual(challenge1, challenge, "Initial challenge"); Assert.IsFalse(sasl.IsAuthenticated, "IsAuthenticated"); challenge = sasl.Challenge(challenge2); var token = Convert.FromBase64String(challenge2); var type2 = new Type2Message(token, 0, token.Length); var type3 = new Type3Message(type2, null, sasl.Level, sasl.Credentials.UserName, sasl.Credentials.Password, sasl.Workstation); var ignoreLength = type2.EncodedTargetInfo.Length + 28 + 16; var actual = Convert.FromBase64String(challenge); var expected = type3.Encode(); var ntlmBufferIndex = expected.Length - ignoreLength; var targetInfoIndex = ntlmBufferIndex + 16 /* md5 hash */ + 28; Assert.AreEqual(expected.Length, actual.Length, "Final challenge differs in length: {0} vs {1}", expected.Length, actual.Length); for (int i = 0; i < expected.Length - ignoreLength; i++) { Assert.AreEqual(expected[i], actual[i], "Final challenge differs at index {0}", i); } // now compare the TargetInfo blobs for (int i = targetInfoIndex; i < expected.Length; i++) { Assert.AreEqual(expected[i], actual[i], "Final challenge differs at index {0}", i); } Assert.IsTrue(sasl.IsAuthenticated, "IsAuthenticated"); }
public void TestNtlmType3MessageEncode() { const string expected = "TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAJje97h/iKpdr+Lfd5aIoXLe8Rx9XM3vE91UKLAehvTfyr6sOUlG29Q+6I95TdYyVQ=="; const string challenge2 = "TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA="; var token = Convert.FromBase64String(challenge2); var type2 = new Type2Message(token, 0, token.Length); var type3 = new Type3Message(type2, null, NtlmAuthLevel.LM_and_NTLM, "user", "password", "WORKSTATION"); var actual = Convert.ToBase64String(type3.Encode()); Assert.AreEqual(expected, actual, "The encoded Type3Message did not match the expected result."); }