| // 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. |
| |
| #include "base/containers/span.h" |
| #include "base/test/fuzzed_data_provider.h" |
| #include "net/ntlm/ntlm_client.h" |
| #include "net/ntlm/ntlm_test_data.h" |
| #include "starboard/types.h" |
| |
| base::string16 ConsumeRandomLengthString16( |
| base::FuzzedDataProvider& data_provider, |
| size_t max_chars) { |
| std::string bytes = data_provider.ConsumeRandomLengthString(max_chars * 2); |
| return base::string16(reinterpret_cast<const base::char16*>(bytes.data()), |
| bytes.size() / 2); |
| } |
| |
| extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
| base::FuzzedDataProvider fdp(data, size); |
| bool is_v2 = fdp.ConsumeBool(); |
| uint64_t client_time = |
| (static_cast<uint64_t>(fdp.ConsumeUint32InRange(0, 0xffffffffu)) << 32) | |
| static_cast<uint64_t>(fdp.ConsumeUint32InRange(0, 0xffffffffu)); |
| net::ntlm::NtlmClient client((net::ntlm::NtlmFeatures(is_v2))); |
| |
| // Generate the input strings and challenge message. The strings will have a |
| // maximum length 1 character longer than the maximum that |NtlmClient| will |
| // accept to allow exploring the error cases. |
| base::string16 domain = |
| ConsumeRandomLengthString16(fdp, net::ntlm::kMaxFqdnLen + 1); |
| base::string16 username = |
| ConsumeRandomLengthString16(fdp, net::ntlm::kMaxUsernameLen + 1); |
| base::string16 password = |
| ConsumeRandomLengthString16(fdp, net::ntlm::kMaxPasswordLen + 1); |
| std::string hostname = |
| fdp.ConsumeRandomLengthString(net::ntlm::kMaxFqdnLen + 1); |
| std::string channel_bindings = fdp.ConsumeRandomLengthString(150); |
| std::string spn = |
| fdp.ConsumeRandomLengthString(net::ntlm::kMaxFqdnLen + 5 + 1); |
| std::string challenge_msg_bytes = fdp.ConsumeRemainingBytes(); |
| |
| client.GenerateAuthenticateMessage( |
| domain, username, password, hostname, channel_bindings, spn, client_time, |
| net::ntlm::test::kClientChallenge, |
| base::as_bytes(base::make_span(challenge_msg_bytes))); |
| return 0; |
| } |