// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40284755): Remove this and spanify to fix the errors. #pragma allow_unsafe_buffers #endif #ifndef NET_NTLM_NTLM_BUFFER_READER_H_ #define NET_NTLM_NTLM_BUFFER_READER_H_ #include <stddef.h> #include <stdint.h> #include <vector> #include "base/check.h" #include "base/containers/span.h" #include "base/memory/raw_span.h" #include "net/base/net_export.h" #include "net/ntlm/ntlm_constants.h" namespace net::ntlm { // Supports various bounds-checked low level buffer operations required by an // NTLM implementation. // // The class supports the sequential read of a provided buffer. All reads // perform bounds checking to ensure enough space is remaining in the buffer. // // Read* methods read from the buffer at the current cursor position and // perform any necessary type conversion and provide the data in out params. // After a successful read the cursor position is advanced past the read // field. // // Failed Read*s or Match*s leave the cursor in an undefined position and the // buffer MUST be discarded with no further operations performed. // // Read*Payload methods first reads a security buffer (see // |ReadSecurityBuffer|), then reads the requested payload from the offset // and length stated in the security buffer. // // If the length and offset in the security buffer would cause a read outside // the message buffer the payload will not be read and the function will // return false. // // 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 class NET_EXPORT_PRIVATE NtlmBufferReader { … }; } // namespace net::ntlm #endif // NET_NTLM_NTLM_BUFFER_READER_H_