Ejemplo n.º 1
0
        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));
 }