| Index: net/ntlm/ntlm_client.h
|
| diff --git a/net/ntlm/ntlm_client.h b/net/ntlm/ntlm_client.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..94dd8c95714dec158cce5b616cf015c67ff83391
|
| --- /dev/null
|
| +++ b/net/ntlm/ntlm_client.h
|
| @@ -0,0 +1,93 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Based on [MS-NLMP]: NT LAN Manager (NTLM) Authentication Protocol
|
| +// Specification version 28.0 [1]. Additional NTLM reference [2].
|
| +//
|
| +// [1] https://msdn.microsoft.com/en-us/library/cc236621.aspx
|
| +// [2] http://davenport.sourceforge.net/ntlm.html
|
| +
|
| +#ifndef NET_BASE_NTLM_CLIENT_H_
|
| +#define NET_BASE_NTLM_CLIENT_H_
|
| +
|
| +#include <stddef.h>
|
| +#include <stdint.h>
|
| +
|
| +#include <memory>
|
| +#include <string>
|
| +
|
| +#include "base/strings/string16.h"
|
| +#include "base/strings/string_piece.h"
|
| +#include "net/base/net_export.h"
|
| +#include "net/ntlm/ntlm_constants.h"
|
| +
|
| +namespace net {
|
| +namespace ntlm {
|
| +
|
| +// Provides an implementation of an NTLMv1 Client.
|
| +//
|
| +// The implementation supports NTLMv1 with extended session security (NTLM2).
|
| +class NET_EXPORT_PRIVATE NtlmClient {
|
| + public:
|
| + NtlmClient();
|
| + ~NtlmClient();
|
| +
|
| + // Returns a |Buffer| containing the Negotiate message.
|
| + Buffer GetNegotiateMessage() const;
|
| +
|
| + // Returns a |Buffer| containing the Authenticate message. If the method
|
| + // fails an empty |Buffer| is returned.
|
| + //
|
| + // |hostname| can be a short NetBIOS name or an FQDN, however the server will
|
| + // only inspect this field if the default domain policy is to restrict NTLM.
|
| + // In this case the hostname will be compared to a whitelist stored in this
|
| + // group policy [1].
|
| + // |client_challenge| must contain 8 bytes of random data.
|
| + // |server_challenge_message| is the full content of the challenge message
|
| + // sent by the server.
|
| + //
|
| + // [1] - https://technet.microsoft.com/en-us/library/jj852267(v=ws.11).aspx
|
| + Buffer GenerateAuthenticateMessage(
|
| + const base::string16& domain,
|
| + const base::string16& username,
|
| + const base::string16& password,
|
| + const std::string& hostname,
|
| + const uint8_t* client_challenge,
|
| + const Buffer& server_challenge_message) const;
|
| +
|
| + private:
|
| + // Calculates the lengths and offset for all the payloads in the message.
|
| + void CalculatePayloadLayout(bool is_unicode,
|
| + const base::string16& domain,
|
| + const base::string16& username,
|
| + const std::string& hostname,
|
| + SecurityBuffer* lm_info,
|
| + SecurityBuffer* ntlm_info,
|
| + SecurityBuffer* domain_info,
|
| + SecurityBuffer* username_info,
|
| + SecurityBuffer* hostname_info,
|
| + size_t* authenticate_message_len) const;
|
| +
|
| + // Returns the length of the header part of the Authenticate message.
|
| + // NOTE: When NTLMv2 support is added this is no longer a fixed value.
|
| + size_t GetAuthenticateHeaderLength() const;
|
| +
|
| + // Returns the length of the NTLM response.
|
| + // NOTE: When NTLMv2 support is added this is no longer a fixed value.
|
| + size_t GetNtlmResponseLength() const;
|
| +
|
| + // Generates the negotiate message (which is always the same) into
|
| + // |negotiate_message_|.
|
| + void GenerateNegotiateMessage();
|
| +
|
| + NegotiateFlags negotiate_flags_;
|
| + Buffer negotiate_message_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NtlmClient);
|
| +};
|
| +
|
| +} // namespace ntlm
|
| +} // namespace net
|
| +
|
| +#endif // NET_BASE_NTLM_CLIENT_H_
|
|
|