Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(901)

Unified Diff: net/ntlm/ntlm_client.h

Issue 2904633002: Replace NTLMv1 implementation with a functionally equivalent one.
Patch Set: Fix uninitialized read Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/data/fuzzer_dictionaries/net_ntlm_ntlm_client_fuzzer.dict ('k') | net/ntlm/ntlm_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « net/data/fuzzer_dictionaries/net_ntlm_ntlm_client_fuzzer.dict ('k') | net/ntlm/ntlm_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698