예제 #1
0
        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");
        }
예제 #2
0
        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");
        }
예제 #3
0
        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.");
        }