internal static bool TryParse(byte[] data, NtlmNegotiateFlags flags, string domain, string username, string workstation, byte[] lm_response, byte[] nt_response, byte[] session_key, byte[] mic, int mic_offset, Version version, out NtlmAuthenticationToken token) { token = null; if (nt_response?.Length < 44) { return(false); } try { BinaryReader reader = new BinaryReader(new MemoryStream(nt_response)); byte[] nt_proof = reader.ReadBytes(16); byte challenge_ver = reader.ReadByte(); byte max_challenge_ver = reader.ReadByte(); ushort reserved_1 = reader.ReadUInt16(); uint reserved_2 = reader.ReadUInt32(); long timestamp = reader.ReadInt64(); byte[] client_challenge = reader.ReadBytes(8); uint reserved_3 = reader.ReadUInt32(); if (!NtlmUtils.TryParseAvPairs(reader, out List <NtlmAvPair> av_pairs)) { return(false); } token = new NtlmAuthenticateAuthenticationTokenV2(data, flags, domain, username, workstation, lm_response, nt_response, session_key, mic, mic_offset, version, nt_proof, challenge_ver, max_challenge_ver, reserved_1, reserved_2, timestamp, client_challenge, reserved_3, av_pairs); return(true); } catch (EndOfStreamException) { return(false); } }
private static bool TryParseAvPairs(byte[] data, out List <NtlmAvPair> av_pairs) { return(NtlmUtils.TryParseAvPairs(new BinaryReader(new MemoryStream(data)), out av_pairs)); }