xref: /aosp_15_r20/external/cronet/net/ntlm/ntlm_test_data.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker // This file contains common input and result values use to verify the NTLM
6*6777b538SAndroid Build Coastguard Worker // implementation. They are defined in [MS-NLMP] Section 4.2 [1].
7*6777b538SAndroid Build Coastguard Worker //
8*6777b538SAndroid Build Coastguard Worker // [MS-NLMP] has no test data for Extended Protection for Authentication (EPA).
9*6777b538SAndroid Build Coastguard Worker // Test vectors related to EPA (aka Channel Binding) have been taken from
10*6777b538SAndroid Build Coastguard Worker // a Microsoft blog post [2].
11*6777b538SAndroid Build Coastguard Worker //
12*6777b538SAndroid Build Coastguard Worker // [1] https://msdn.microsoft.com/en-us/library/cc236621.aspx
13*6777b538SAndroid Build Coastguard Worker // [2] https://blogs.msdn.microsoft.com/openspecification/2013/03/26/ntlm-and-
14*6777b538SAndroid Build Coastguard Worker //         channel-binding-hash-aka-extended-protection-for-authentication/
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker #ifndef NET_NTLM_NTLM_TEST_DATA_H_
17*6777b538SAndroid Build Coastguard Worker #define NET_NTLM_NTLM_TEST_DATA_H_
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker #include "net/ntlm/ntlm_constants.h"
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker namespace net::ntlm::test {
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker // Common input values defined in [MS-NLMP] Section 4.2.1.
24*6777b538SAndroid Build Coastguard Worker constexpr char16_t kPassword[] = {'P', 'a', 's', 's', 'w', 'o', 'r', 'd', '\0'};
25*6777b538SAndroid Build Coastguard Worker constexpr char16_t kNtlmDomain[] = {'D', 'o', 'm', 'a', 'i', 'n', '\0'};
26*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kNtlmDomainRaw[] = {'D', 0x00, 'o', 0x00, 'm', 0x00,
27*6777b538SAndroid Build Coastguard Worker                                       'a', 0x00, 'i', 0x00, 'n', 0x00};
28*6777b538SAndroid Build Coastguard Worker constexpr char16_t kUser[] = {'U', 's', 'e', 'r', '\0'};
29*6777b538SAndroid Build Coastguard Worker constexpr char16_t kDomainUserCombined[] = {'D',  'o', 'm', 'a', 'i', 'n',
30*6777b538SAndroid Build Coastguard Worker                                             '\\', 'U', 's', 'e', 'r', '\0'};
31*6777b538SAndroid Build Coastguard Worker constexpr char16_t kHostname[] = {'C', 'O', 'M', 'P', 'U', 'T', 'E', 'R', '\0'};
32*6777b538SAndroid Build Coastguard Worker constexpr char16_t kServer[] = {'S', 'e', 'r', 'v', 'e', 'r', '\0'};
33*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kServerRaw[] = {'S', 0x00, 'e', 0x00, 'r', 0x00,
34*6777b538SAndroid Build Coastguard Worker                                   'v', 0x00, 'e', 0x00, 'r', 0x00};
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker // ASCII Versions of the above strings.
37*6777b538SAndroid Build Coastguard Worker constexpr char kNtlmDomainAscii[] = "Domain";
38*6777b538SAndroid Build Coastguard Worker constexpr char kUserAscii[] = "User";
39*6777b538SAndroid Build Coastguard Worker constexpr char kHostnameAscii[] = "COMPUTER";
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker // Test data obtained from [2].
42*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kChannelBindings[] = {
43*6777b538SAndroid Build Coastguard Worker     't',  'l',  's',  '-',  's',  'e',  'r',  'v',  'e',  'r',  '-',
44*6777b538SAndroid Build Coastguard Worker     'e',  'n',  'd',  '-',  'p',  'o',  'i',  'n',  't',  ':',  0xea,
45*6777b538SAndroid Build Coastguard Worker     0x05, 0xfe, 0xfe, 0xcc, 0x6b, 0x0b, 0xd5, 0x71, 0xdb, 0xbc, 0x5b,
46*6777b538SAndroid Build Coastguard Worker     0xaa, 0x3e, 0xd4, 0x53, 0x86, 0xd0, 0x44, 0x68, 0x35, 0xf7, 0xb7,
47*6777b538SAndroid Build Coastguard Worker     0x4c, 0x85, 0x62, 0x1b, 0x99, 0x83, 0x47, 0x5f, 0x95, '\0'};
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker constexpr char kNtlmSpn[] = {'H', 'T', 'T', 'P', '/', 'S',
50*6777b538SAndroid Build Coastguard Worker                              'e', 'r', 'v', 'e', 'r', '\0'};
51*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kNtlmSpnRaw[] = {'H', 0x00, 'T', 0x00, 'T', 0x00, 'P', 0x00,
52*6777b538SAndroid Build Coastguard Worker                                    '/', 0x00, 'S', 0x00, 'e', 0x00, 'r', 0x00,
53*6777b538SAndroid Build Coastguard Worker                                    'v', 0x00, 'e', 0x00, 'r', 0x00};
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker // Input value defined in [MS-NLMP] Section 4.2.1.
56*6777b538SAndroid Build Coastguard Worker constexpr uint64_t kServerTimestamp = 0;
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker // Arbitrary value for client timestamp. The spec does not provide test data
59*6777b538SAndroid Build Coastguard Worker // or scenarios involving the client timestamp. The relevant thing is that it
60*6777b538SAndroid Build Coastguard Worker // is not equal to |kServerTimestamp| so it can be determined which timestamp
61*6777b538SAndroid Build Coastguard Worker // is within the message.
62*6777b538SAndroid Build Coastguard Worker // Tue, 23 May 2017 20:13:07 +0000
63*6777b538SAndroid Build Coastguard Worker constexpr uint64_t kClientTimestamp = 131400439870000000;
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker // Challenge vectors defined in [MS-NLMP] Section 4.2.1.
66*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kServerChallenge[kChallengeLen] = {0x01, 0x23, 0x45, 0x67,
67*6777b538SAndroid Build Coastguard Worker                                                      0x89, 0xab, 0xcd, 0xef};
68*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kClientChallenge[kChallengeLen] = {0xaa, 0xaa, 0xaa, 0xaa,
69*6777b538SAndroid Build Coastguard Worker                                                      0xaa, 0xaa, 0xaa, 0xaa};
70*6777b538SAndroid Build Coastguard Worker 
71*6777b538SAndroid Build Coastguard Worker // Test input defined in [MS-NLMP] Section 4.2.3.3.
72*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kChallengeMsgV1[] = {
73*6777b538SAndroid Build Coastguard Worker     0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00,
74*6777b538SAndroid Build Coastguard Worker     0x0c, 0x00, 0x0c, 0x00, 0x38, 0x00, 0x00, 0x00, 0x33, 0x82, 0x0a, 0x82,
75*6777b538SAndroid Build Coastguard Worker     0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00,
76*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77*6777b538SAndroid Build Coastguard Worker     0x06, 0x00, 0x70, 0x17, 0x00, 0x00, 0x00, 0x0f, 0x53, 0x00, 0x65, 0x00,
78*6777b538SAndroid Build Coastguard Worker     0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00};
79*6777b538SAndroid Build Coastguard Worker 
80*6777b538SAndroid Build Coastguard Worker // Test input defined in [MS-NLMP] Section 4.2.4.3.
81*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kChallengeMsgFromSpecV2[] = {
82*6777b538SAndroid Build Coastguard Worker     0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00,
83*6777b538SAndroid Build Coastguard Worker     0x0c, 0x00, 0x0c, 0x00, 0x38, 0x00, 0x00, 0x00, 0x33, 0x82, 0x8a, 0xe2,
84*6777b538SAndroid Build Coastguard Worker     0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00,
85*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x24, 0x00, 0x44, 0x00, 0x00, 0x00,
86*6777b538SAndroid Build Coastguard Worker     0x06, 0x00, 0x70, 0x17, 0x00, 0x00, 0x00, 0x0f, 0x53, 0x00, 0x65, 0x00,
87*6777b538SAndroid Build Coastguard Worker     0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x02, 0x00, 0x0c, 0x00,
88*6777b538SAndroid Build Coastguard Worker     0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00,
89*6777b538SAndroid Build Coastguard Worker     0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00,
90*6777b538SAndroid Build Coastguard Worker     0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,
91*6777b538SAndroid Build Coastguard Worker };
92*6777b538SAndroid Build Coastguard Worker 
93*6777b538SAndroid Build Coastguard Worker // A minimal challenge message for tests. For NTLMv1 this implementation only
94*6777b538SAndroid Build Coastguard Worker // reads the smallest required version of the message (32 bytes). Some
95*6777b538SAndroid Build Coastguard Worker // servers may still send messages this small. The only relevant flags
96*6777b538SAndroid Build Coastguard Worker // that affect behavior are that both NTLMSSP_NEGOTIATE_UNICODE and
97*6777b538SAndroid Build Coastguard Worker // NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY are set.
98*6777b538SAndroid Build Coastguard Worker //
99*6777b538SAndroid Build Coastguard Worker // [0-7]    - "NTLMSSP\0"                        (Signature)
100*6777b538SAndroid Build Coastguard Worker // [9-11]   - |MessageType::kChallenge|          (Message Type = 0x00000002)
101*6777b538SAndroid Build Coastguard Worker // [12-19]  - |SecBuf(kNegotiateMessageLen, 0)|  (Target Name - Not Used)
102*6777b538SAndroid Build Coastguard Worker // [20-23]  - |kNegotiateMessageFlags|           (Flags = 0x00088207)
103*6777b538SAndroid Build Coastguard Worker // [24-31]  - |kServerChallenge|                 (Server Challenge)
104*6777b538SAndroid Build Coastguard Worker //
105*6777b538SAndroid Build Coastguard Worker // See [MS-NLMP] Section 2.2.2.2 for more information about the Challenge
106*6777b538SAndroid Build Coastguard Worker // message.
107*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kMinChallengeMessage[kChallengeHeaderLen] = {
108*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x02, 0x00, 0x00,
109*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x07, 0x82,
110*6777b538SAndroid Build Coastguard Worker     0x08, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
111*6777b538SAndroid Build Coastguard Worker 
112*6777b538SAndroid Build Coastguard Worker // The same message as |kMinChallengeMessage| but with the
113*6777b538SAndroid Build Coastguard Worker // NTLMSSP_NEGOTIATE_UNICODE flag cleared.
114*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kMinChallengeMessageNoUnicode[kChallengeHeaderLen] = {
115*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x02, 0x00, 0x00,
116*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x82,
117*6777b538SAndroid Build Coastguard Worker     0x08, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
118*6777b538SAndroid Build Coastguard Worker 
119*6777b538SAndroid Build Coastguard Worker // The same message as |kMinChallengeMessage| but with the
120*6777b538SAndroid Build Coastguard Worker // NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY flag cleared.
121*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kMinChallengeMessageNoSS[kChallengeHeaderLen] = {
122*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x02, 0x00, 0x00,
123*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x07, 0x82,
124*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
125*6777b538SAndroid Build Coastguard Worker 
126*6777b538SAndroid Build Coastguard Worker // Test result value for NTOWFv1() defined in [MS-NLMP] Section 4.2.2.1.2.
127*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedNtlmHashV1[kNtlmHashLen] = {
128*6777b538SAndroid Build Coastguard Worker     0xa4, 0xf4, 0x9c, 0x40, 0x65, 0x10, 0xbd, 0xca,
129*6777b538SAndroid Build Coastguard Worker     0xb6, 0x82, 0x4e, 0xe7, 0xc3, 0x0f, 0xd8, 0x52};
130*6777b538SAndroid Build Coastguard Worker 
131*6777b538SAndroid Build Coastguard Worker // Test result value for NTOWFv2() defined in [MS-NLMP] Section 4.2.4.1.1.
132*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedNtlmHashV2[kNtlmHashLen] = {
133*6777b538SAndroid Build Coastguard Worker     0x0c, 0x86, 0x8a, 0x40, 0x3b, 0xfd, 0x7a, 0x93,
134*6777b538SAndroid Build Coastguard Worker     0xa3, 0x00, 0x1e, 0xf2, 0x2e, 0xf0, 0x2e, 0x3f};
135*6777b538SAndroid Build Coastguard Worker 
136*6777b538SAndroid Build Coastguard Worker // Test result value defined in [MS-NLMP] Section 4.2.2.1.
137*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedNtlmResponseV1[kResponseLenV1] = {
138*6777b538SAndroid Build Coastguard Worker     0x67, 0xc4, 0x30, 0x11, 0xf3, 0x02, 0x98, 0xa2, 0xad, 0x35, 0xec, 0xe6,
139*6777b538SAndroid Build Coastguard Worker     0x4f, 0x16, 0x33, 0x1c, 0x44, 0xbd, 0xbe, 0xd9, 0x27, 0x84, 0x1f, 0x94};
140*6777b538SAndroid Build Coastguard Worker 
141*6777b538SAndroid Build Coastguard Worker // Test result value defined in [MS-NLMP] Section 4.2.3.2.2.
142*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedNtlmResponseWithV1SS[kResponseLenV1] = {
143*6777b538SAndroid Build Coastguard Worker     0x75, 0x37, 0xf8, 0x03, 0xae, 0x36, 0x71, 0x28, 0xca, 0x45, 0x82, 0x04,
144*6777b538SAndroid Build Coastguard Worker     0xbd, 0xe7, 0xca, 0xf8, 0x1e, 0x97, 0xed, 0x26, 0x83, 0x26, 0x72, 0x32};
145*6777b538SAndroid Build Coastguard Worker 
146*6777b538SAndroid Build Coastguard Worker // Test result value defined in [MS-NLMP] Section 4.2.3.2.1.
147*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedLmResponseWithV1SS[kResponseLenV1] = {
148*6777b538SAndroid Build Coastguard Worker     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
149*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
150*6777b538SAndroid Build Coastguard Worker 
151*6777b538SAndroid Build Coastguard Worker // Test result value defined in [MS-NLMP] Section 4.2.4.1.3.
152*6777b538SAndroid Build Coastguard Worker //
153*6777b538SAndroid Build Coastguard Worker // "temp" is defined in Section 3.3.2 and is part of the data to be hashed
154*6777b538SAndroid Build Coastguard Worker // to generate the NTLMv2 Proof. It is composed of 3 parts;
155*6777b538SAndroid Build Coastguard Worker //
156*6777b538SAndroid Build Coastguard Worker // 1) [0-27] A fixed length part in the first 28 (|kProofInputLenV2|) bytes
157*6777b538SAndroid Build Coastguard Worker // which in this implementation is generated by |GenerateProofInputV2|.
158*6777b538SAndroid Build Coastguard Worker //
159*6777b538SAndroid Build Coastguard Worker // 2) [28-63] A variable length part which the spec calls "ServerName" but
160*6777b538SAndroid Build Coastguard Worker // defines as the AV Pairs (aka Target Information) from the Authenticate
161*6777b538SAndroid Build Coastguard Worker // message. See |kExpectedTargetInfoFromSpecV2| for more information.
162*6777b538SAndroid Build Coastguard Worker //
163*6777b538SAndroid Build Coastguard Worker // 3) [64-68] 4 zero bytes.
164*6777b538SAndroid Build Coastguard Worker //
165*6777b538SAndroid Build Coastguard Worker // NOTE: The timestamp (bytes [8-15]) should not actually be 0 here. In order
166*6777b538SAndroid Build Coastguard Worker // to use the test data from the spec some lower level tests do generate this
167*6777b538SAndroid Build Coastguard Worker // value. The target info sent by the server does not contain a timestamp
168*6777b538SAndroid Build Coastguard Worker // AvPair, and section 3.1.5.1.2 states that the client should populate the
169*6777b538SAndroid Build Coastguard Worker // timestamp with the servers timestamp if it exists, otherwise with the
170*6777b538SAndroid Build Coastguard Worker // client's local time. For end to end tests the alternate value
171*6777b538SAndroid Build Coastguard Worker // |kExpectedTempWithClientTimestampV2| below is used for end to end tests.
172*6777b538SAndroid Build Coastguard Worker // Having different test data for the server and client time allows testing
173*6777b538SAndroid Build Coastguard Worker // the logic more correctly.
174*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedTempFromSpecV2[] = {
175*6777b538SAndroid Build Coastguard Worker     0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
176*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
177*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00,
178*6777b538SAndroid Build Coastguard Worker     0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x01, 0x00, 0x0c, 0x00,
179*6777b538SAndroid Build Coastguard Worker     0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00,
180*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
181*6777b538SAndroid Build Coastguard Worker 
182*6777b538SAndroid Build Coastguard Worker // This value is the same as |kExpectedTempFromSpecV2| but with the timestamp
183*6777b538SAndroid Build Coastguard Worker // field at bytes [8-15] populated with |kClientTimestamp|.
184*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedTempWithClientTimestampV2[] = {
185*6777b538SAndroid Build Coastguard Worker     0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0xc8, 0xfd,
186*6777b538SAndroid Build Coastguard Worker     0x00, 0xd4, 0xd2, 0x01, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
187*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00,
188*6777b538SAndroid Build Coastguard Worker     0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x01, 0x00, 0x0c, 0x00,
189*6777b538SAndroid Build Coastguard Worker     0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00,
190*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
191*6777b538SAndroid Build Coastguard Worker 
192*6777b538SAndroid Build Coastguard Worker // Test result value defined (indirectly) in [MS-NLMP] Section 4.2.4.
193*6777b538SAndroid Build Coastguard Worker //
194*6777b538SAndroid Build Coastguard Worker // This is part 2 (bytes [28-63]) of |kExpectedTempFromSpecV2|. Additional
195*6777b538SAndroid Build Coastguard Worker // notes;
196*6777b538SAndroid Build Coastguard Worker //
197*6777b538SAndroid Build Coastguard Worker // a) The spec defines the AV Pairs to be in the opposite order to which they
198*6777b538SAndroid Build Coastguard Worker //    actually appear in the output in Section 4.2.4.1.3.
199*6777b538SAndroid Build Coastguard Worker //
200*6777b538SAndroid Build Coastguard Worker // b) The implicit presence of a terminating AV Pair is not mentioned.
201*6777b538SAndroid Build Coastguard Worker //
202*6777b538SAndroid Build Coastguard Worker // c) Section 4.2.4 does not show the byte sequences of the AV Pair Headers.
203*6777b538SAndroid Build Coastguard Worker //
204*6777b538SAndroid Build Coastguard Worker // NOTE: The real implementation in default settings would not have such a
205*6777b538SAndroid Build Coastguard Worker // simple set of AV Pairs since a flags field to indicate the presence of a
206*6777b538SAndroid Build Coastguard Worker // MIC, and a channel bindings field would also have been added.
207*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedTargetInfoFromSpecV2[] = {
208*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,
209*6777b538SAndroid Build Coastguard Worker     0x69, 0x00, 0x6e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00,
210*6777b538SAndroid Build Coastguard Worker     0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00};
211*6777b538SAndroid Build Coastguard Worker 
212*6777b538SAndroid Build Coastguard Worker // This target info is to test the behavior when a server timestamp is
213*6777b538SAndroid Build Coastguard Worker // present. It is the same as |kExpectedTargetInfoFromSpecV2| but with
214*6777b538SAndroid Build Coastguard Worker // an additional timestamp AvPair.
215*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedTargetInfoFromSpecPlusServerTimestampV2[] = {
216*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,
217*6777b538SAndroid Build Coastguard Worker     0x69, 0x00, 0x6e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00,
218*6777b538SAndroid Build Coastguard Worker     0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x07, 0x00, 0x08, 0x00,
219*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
220*6777b538SAndroid Build Coastguard Worker 
221*6777b538SAndroid Build Coastguard Worker // The target info after being updated by the client when the server sends
222*6777b538SAndroid Build Coastguard Worker // |kExpectedTargetInfoFromSpecV2| in the challenge message with both EPA and
223*6777b538SAndroid Build Coastguard Worker // MIC enabled.
224*6777b538SAndroid Build Coastguard Worker //
225*6777b538SAndroid Build Coastguard Worker // When MIC and EPA are enabled, 3 additional AvPairs are added.
226*6777b538SAndroid Build Coastguard Worker // 1) A flags AVPair with the MIC_PRESENT bit set.
227*6777b538SAndroid Build Coastguard Worker // 2) A channel bindings AVPair containing the channel bindings hash.
228*6777b538SAndroid Build Coastguard Worker // 3) A target name AVPair containing the SPN of the server.
229*6777b538SAndroid Build Coastguard Worker //
230*6777b538SAndroid Build Coastguard Worker // AvPair 1 [0-1]    |TargetInfoAvId::kDomainName|      Av ID = 0x0002
231*6777b538SAndroid Build Coastguard Worker // AvPair 1 [2-3]    |len(kNtlmDomainRaw)|              Av Length = 0x000c
232*6777b538SAndroid Build Coastguard Worker // AvPair 1 [4-15]   |kNtlmDomainRaw|                   Av Payload = L"Domain"
233*6777b538SAndroid Build Coastguard Worker //
234*6777b538SAndroid Build Coastguard Worker // AvPair 2 [16-17]  |TargetInfoAvId::kServerName|      Av ID = 0x0001
235*6777b538SAndroid Build Coastguard Worker // AvPair 2 [18-19]  |len(kServerRaw)|                  Av Length = 0x000c
236*6777b538SAndroid Build Coastguard Worker // AvPair 2 [20-31]  |kServerRaw|                       Av Payload = L"Server"
237*6777b538SAndroid Build Coastguard Worker //
238*6777b538SAndroid Build Coastguard Worker // AvPair 3 [32-33]  |TargetInfoAvId::kFlags|           Av ID = 0x0006
239*6777b538SAndroid Build Coastguard Worker // AvPair 3 [34-35]  |sizeof(uint32_t)|                 Av Length = 0x0004
240*6777b538SAndroid Build Coastguard Worker // AvPair 3 [36-39]  |TargetInfoAvFlags::kMicPresent|   Av Payload = 0x00000002
241*6777b538SAndroid Build Coastguard Worker //
242*6777b538SAndroid Build Coastguard Worker // AvPair 4 [40-41]  |TargetInfoAvId::kChannelBindings| Av ID = 0x000a
243*6777b538SAndroid Build Coastguard Worker // AvPair 4 [42-43]  |kChannelBindingsHashLen|          Av Length = 0x0010
244*6777b538SAndroid Build Coastguard Worker // AvPair 4 [44-59]  |kExpectedChannelBindingHashV2|    Av Payload
245*6777b538SAndroid Build Coastguard Worker //
246*6777b538SAndroid Build Coastguard Worker // AvPair 5 [60-61]  |TargetInfoAvId::kTargetName|      Av ID = 0x0009
247*6777b538SAndroid Build Coastguard Worker // AvPair 5 [62-63]  |len(kNtlmSpnRaw)|                 Av Length = 0x0016
248*6777b538SAndroid Build Coastguard Worker // AvPair 5 [64-85]  |kNtlmSpnRaw|                      Av Payload =
249*6777b538SAndroid Build Coastguard Worker //                                                          L"HTTP/Server"
250*6777b538SAndroid Build Coastguard Worker //
251*6777b538SAndroid Build Coastguard Worker // AvPair 6 [86-87]  |TargetInfoAvId::kEol|             Av ID = 0x0000
252*6777b538SAndroid Build Coastguard Worker // AvPair 6 [88-89]                                     Av Length = 0x0000
253*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedTargetInfoSpecResponseV2[] = {
254*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x0c, 0x00, 'D',  0x00, 'o',  0x00, 'm',  0x00, 'a',  0x00,
255*6777b538SAndroid Build Coastguard Worker     'i',  0x00, 'n',  0x00, 0x01, 0x00, 0x0c, 0x00, 'S',  0x00, 'e',  0x00,
256*6777b538SAndroid Build Coastguard Worker     'r',  0x00, 'v',  0x00, 'e',  0x00, 'r',  0x00, 0x06, 0x00, 0x04, 0x00,
257*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x65, 0x86, 0xE9, 0x9D,
258*6777b538SAndroid Build Coastguard Worker     0x81, 0xC2, 0xFC, 0x98, 0x4E, 0x47, 0x17, 0x2F, 0xD4, 0xDD, 0x03, 0x10,
259*6777b538SAndroid Build Coastguard Worker     0x09, 0x00, 0x16, 0x00, 'H',  0x00, 'T',  0x00, 'T',  0x00, 'P',  0x00,
260*6777b538SAndroid Build Coastguard Worker     '/',  0x00, 'S',  0x00, 'e',  0x00, 'r',  0x00, 'v',  0x00, 'e',  0x00,
261*6777b538SAndroid Build Coastguard Worker     'r',  0x00, 0x00, 0x00, 0x00, 0x00};
262*6777b538SAndroid Build Coastguard Worker 
263*6777b538SAndroid Build Coastguard Worker // Test result value defined in [MS-NLMP] Section 4.2.4.2.2.
264*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedProofFromSpecV2[kNtlmProofLenV2] = {
265*6777b538SAndroid Build Coastguard Worker     0x68, 0xcd, 0x0a, 0xb8, 0x51, 0xe5, 0x1c, 0x96,
266*6777b538SAndroid Build Coastguard Worker     0xaa, 0xbc, 0x92, 0x7b, 0xeb, 0xef, 0x6a, 0x1c};
267*6777b538SAndroid Build Coastguard Worker 
268*6777b538SAndroid Build Coastguard Worker // The value of the NTLMv2 proof when |kExpectedTargetInfoSpecResponseV2| is
269*6777b538SAndroid Build Coastguard Worker // the updated target info in the Authenticate message.
270*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedProofSpecResponseV2[kNtlmProofLenV2] = {
271*6777b538SAndroid Build Coastguard Worker     0x01, 0x0c, 0x0b, 0xd1, 0x4e, 0xf7, 0xa2, 0x96,
272*6777b538SAndroid Build Coastguard Worker     0x89, 0xc0, 0xc1, 0x9c, 0xea, 0xe8, 0xb7, 0xdf};
273*6777b538SAndroid Build Coastguard Worker 
274*6777b538SAndroid Build Coastguard Worker // The value of the NTLMv2 proof when |kExpectedTargetInfoSpecResponseV2| is
275*6777b538SAndroid Build Coastguard Worker // the updated target info, and |kClientTimestamp| is correctly set in the
276*6777b538SAndroid Build Coastguard Worker // Authenticate message.
277*6777b538SAndroid Build Coastguard Worker constexpr uint8_t
278*6777b538SAndroid Build Coastguard Worker     kExpectedProofSpecResponseWithClientTimestampV2[kNtlmProofLenV2] = {
279*6777b538SAndroid Build Coastguard Worker         0x8c, 0x02, 0x60, 0xdb, 0xef, 0x69, 0x06, 0x62,
280*6777b538SAndroid Build Coastguard Worker         0xaf, 0x9c, 0x42, 0xd5, 0x07, 0x82, 0xd2, 0xed};
281*6777b538SAndroid Build Coastguard Worker 
282*6777b538SAndroid Build Coastguard Worker // Test result data obtained from [2].
283*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedChannelBindingHashV2[kChannelBindingsHashLen] = {
284*6777b538SAndroid Build Coastguard Worker     0x65, 0x86, 0xE9, 0x9D, 0x81, 0xC2, 0xFC, 0x98,
285*6777b538SAndroid Build Coastguard Worker     0x4E, 0x47, 0x17, 0x2F, 0xD4, 0xDD, 0x03, 0x10};
286*6777b538SAndroid Build Coastguard Worker 
287*6777b538SAndroid Build Coastguard Worker // Test result value defined in [MS-NLMP] Section 4.2.4.1.2.
288*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedSessionBaseKeyFromSpecV2[kSessionKeyLenV2] = {
289*6777b538SAndroid Build Coastguard Worker     0x8d, 0xe4, 0x0c, 0xca, 0xdb, 0xc1, 0x4a, 0x82,
290*6777b538SAndroid Build Coastguard Worker     0xf1, 0x5c, 0xb0, 0xad, 0x0d, 0xe9, 0x5c, 0xa3};
291*6777b538SAndroid Build Coastguard Worker 
292*6777b538SAndroid Build Coastguard Worker // The session base key when the proof is
293*6777b538SAndroid Build Coastguard Worker // |kExpectedProofSpecResponseWithClientTimestampV2|.
294*6777b538SAndroid Build Coastguard Worker constexpr uint8_t
295*6777b538SAndroid Build Coastguard Worker     kExpectedSessionBaseKeyWithClientTimestampV2[kSessionKeyLenV2] = {
296*6777b538SAndroid Build Coastguard Worker         0x62, 0x3d, 0xbd, 0x07, 0x1b, 0xe7, 0xa5, 0x30,
297*6777b538SAndroid Build Coastguard Worker         0xb6, 0xa9, 0x5c, 0x2e, 0xb4, 0x98, 0x24, 0x70};
298*6777b538SAndroid Build Coastguard Worker 
299*6777b538SAndroid Build Coastguard Worker // The Message Integrity Check (MIC) using
300*6777b538SAndroid Build Coastguard Worker // |kExpectedSessionBaseKeyWithClientTimestampV2| over the following 3
301*6777b538SAndroid Build Coastguard Worker // messages; |kExpectedNegotiateMsg|, |kChallengeMsgFromSpecV2|, and
302*6777b538SAndroid Build Coastguard Worker // |kExpectedAuthenticateMsgSpecResponseV2|.
303*6777b538SAndroid Build Coastguard Worker // The MIC field in |kExpectedAuthenticateMsgSpecResponseV2| is set to all
304*6777b538SAndroid Build Coastguard Worker // zeros while calculating the hash.
305*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedMicV2[kMicLenV2] = {
306*6777b538SAndroid Build Coastguard Worker     0xf7, 0x36, 0x16, 0x33, 0xf0, 0xad, 0x9b, 0xdf,
307*6777b538SAndroid Build Coastguard Worker     0x4a, 0x7c, 0x42, 0x1b, 0xc6, 0xb8, 0x24, 0xa3};
308*6777b538SAndroid Build Coastguard Worker 
309*6777b538SAndroid Build Coastguard Worker // Expected negotiate message from this implementation.
310*6777b538SAndroid Build Coastguard Worker // [0-7]    - "NTLMSSP\0"                       (Signature)
311*6777b538SAndroid Build Coastguard Worker // [9-11]   - |MessageType::kNegotiate|         (Message Type = 0x00000001)
312*6777b538SAndroid Build Coastguard Worker // [12-15]  - |kNegotiateMessageFlags|          (Flags = 0x00088207)
313*6777b538SAndroid Build Coastguard Worker // [16-23]  - |SecBuf(kNegotiateMessageLen, 0)| (Domain)
314*6777b538SAndroid Build Coastguard Worker // [24-32]  - |SecBuf(kNegotiateMessageLen, 0)| (Workstation)
315*6777b538SAndroid Build Coastguard Worker //
316*6777b538SAndroid Build Coastguard Worker // NOTE: Message does not include Version field. Since
317*6777b538SAndroid Build Coastguard Worker // NTLMSSP_NEGOTIATE_VERSION is never sent, it is not required, and the server
318*6777b538SAndroid Build Coastguard Worker // won't try to read it. The field is currently omitted for test compatibility
319*6777b538SAndroid Build Coastguard Worker // with the existing implementation. When NTLMv2 is implemented this field
320*6777b538SAndroid Build Coastguard Worker // will be present for both NTLMv1 and NTLMv2, however it will always be set to
321*6777b538SAndroid Build Coastguard Worker // all zeros. The version field is only used for debugging and only defines
322*6777b538SAndroid Build Coastguard Worker // a mapping to Windows operating systems.
323*6777b538SAndroid Build Coastguard Worker //
324*6777b538SAndroid Build Coastguard Worker // Similarly both Domain and Workstation fields are are not strictly required
325*6777b538SAndroid Build Coastguard Worker // either (though are included here) since neither
326*6777b538SAndroid Build Coastguard Worker // NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED nor
327*6777b538SAndroid Build Coastguard Worker // NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED are ever sent. A compliant server
328*6777b538SAndroid Build Coastguard Worker // should never read past the 16th byte in this message.
329*6777b538SAndroid Build Coastguard Worker //
330*6777b538SAndroid Build Coastguard Worker // See [MS-NLMP] Section 2.2.2.5 for more detail on flags and 2.2.2.1 for the
331*6777b538SAndroid Build Coastguard Worker // Negotiate message in general.
332*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedNegotiateMsg[kNegotiateMessageLen] = {
333*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x01, 0x00, 0x00,
334*6777b538SAndroid Build Coastguard Worker     0x00, 0x07, 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
335*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00};
336*6777b538SAndroid Build Coastguard Worker 
337*6777b538SAndroid Build Coastguard Worker // Expected V1 Authenticate message from this implementation when sent
338*6777b538SAndroid Build Coastguard Worker // |kChallengeMsgV1| as the challenge.
339*6777b538SAndroid Build Coastguard Worker //
340*6777b538SAndroid Build Coastguard Worker // [0-7]    - "NTLMSSP\0"                         (Signature)
341*6777b538SAndroid Build Coastguard Worker // [9-11]   - |MessageType::kAuthenticate|        (Message Type = 0x00000003)
342*6777b538SAndroid Build Coastguard Worker // [12-19]  - |SecBuf(64, kResponseLenV1)|        (LM Response)
343*6777b538SAndroid Build Coastguard Worker // [20-27]  - |SecBuf(88, kResponseLenV1)|       (NTLM Response)
344*6777b538SAndroid Build Coastguard Worker // [28-35]  - |SecBuf(112, 12)|                   (Target Name = L"Domain")
345*6777b538SAndroid Build Coastguard Worker // [36-43]  - |SecBuf(124, 8)|                    (User = L"User")
346*6777b538SAndroid Build Coastguard Worker // [44-51]  - |SecBuf(132, 16)|                   (Workstation = L"COMPUTER")
347*6777b538SAndroid Build Coastguard Worker // [52-59]  - |SecBuf(64, 0)|                     (Session Key (empty))
348*6777b538SAndroid Build Coastguard Worker // [60-63]  - 0x00088203                          (Flags)
349*6777b538SAndroid Build Coastguard Worker // [64-87]  - |EXPECTED_V1_WITH_SS_LM_RESPONSE|   (LM Response Payload)
350*6777b538SAndroid Build Coastguard Worker // [88-111] - |EXPECTED_V1_WITH_SS_NTLM_RESPONSE| (NTLM Response Payload)
351*6777b538SAndroid Build Coastguard Worker // [112-123]- L"Domain"                           (Target Name Payload)
352*6777b538SAndroid Build Coastguard Worker // [124-132]- L"User"                             (User Payload)
353*6777b538SAndroid Build Coastguard Worker // [132-147]- L"COMPUTER"                         (Workstation Payload)
354*6777b538SAndroid Build Coastguard Worker //
355*6777b538SAndroid Build Coastguard Worker // NOTE: This is not identical to the message in [MS-NLMP] Section 4.2.2.3 for
356*6777b538SAndroid Build Coastguard Worker // several reasons.
357*6777b538SAndroid Build Coastguard Worker //
358*6777b538SAndroid Build Coastguard Worker // 1) The flags are different because this implementation does not support
359*6777b538SAndroid Build Coastguard Worker // the flags related to version, key exchange, signing and sealing. These
360*6777b538SAndroid Build Coastguard Worker // flags are not relevant to implementing the NTLM scheme in HTTP.
361*6777b538SAndroid Build Coastguard Worker // 2) Since key exchange is not required nor supported, the session base key
362*6777b538SAndroid Build Coastguard Worker // payload is not required nor present.
363*6777b538SAndroid Build Coastguard Worker // 3) The specification allows payloads to be in any order. This (and the
364*6777b538SAndroid Build Coastguard Worker // prior) implementation uses a different payload order than the example.
365*6777b538SAndroid Build Coastguard Worker // 4) The version field is Windows specific and there is no provision for
366*6777b538SAndroid Build Coastguard Worker // non-Windows OS information. This message does not include a version field.
367*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedAuthenticateMsgSpecResponseV1[] = {
368*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x03, 0x00, 0x00, 0x00,
369*6777b538SAndroid Build Coastguard Worker     0x18, 0x00, 0x18, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00,
370*6777b538SAndroid Build Coastguard Worker     0x58, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x70, 0x00, 0x00, 0x00,
371*6777b538SAndroid Build Coastguard Worker     0x08, 0x00, 0x08, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,
372*6777b538SAndroid Build Coastguard Worker     0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
373*6777b538SAndroid Build Coastguard Worker     0x03, 0x82, 0x08, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
374*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x75, 0x37, 0xf8, 0x03, 0xae, 0x36, 0x71, 0x28,
376*6777b538SAndroid Build Coastguard Worker     0xca, 0x45, 0x82, 0x04, 0xbd, 0xe7, 0xca, 0xf8, 0x1e, 0x97, 0xed, 0x26,
377*6777b538SAndroid Build Coastguard Worker     0x83, 0x26, 0x72, 0x32, 'D',  0x00, 'o',  0x00, 'm',  0x00, 'a',  0x00,
378*6777b538SAndroid Build Coastguard Worker     'i',  0x00, 'n',  0x00, 'U',  0x00, 's',  0x00, 'e',  0x00, 'r',  0x00,
379*6777b538SAndroid Build Coastguard Worker     'C',  0x00, 'O',  0x00, 'M',  0x00, 'P',  0x00, 'U',  0x00, 'T',  0x00,
380*6777b538SAndroid Build Coastguard Worker     'E',  0x00, 'R',  0x00,
381*6777b538SAndroid Build Coastguard Worker };
382*6777b538SAndroid Build Coastguard Worker 
383*6777b538SAndroid Build Coastguard Worker // Expected V2 Authenticate message from this implementation when sent
384*6777b538SAndroid Build Coastguard Worker // |kChallengeMsgFromSpecV2| as the challenge using default features.
385*6777b538SAndroid Build Coastguard Worker //
386*6777b538SAndroid Build Coastguard Worker // [0-7]    - "NTLMSSP\0"                          (Signature)
387*6777b538SAndroid Build Coastguard Worker // [9-11]   - |MessageType::kAuthenticate|         (Message Type = 0x00000003)
388*6777b538SAndroid Build Coastguard Worker // [12-19]  - |SecBuf(88, kResponseLenV1)|         (LM Response)
389*6777b538SAndroid Build Coastguard Worker // [20-27]  - |SecBuf(112, 138)|                   (NTLM Response)
390*6777b538SAndroid Build Coastguard Worker // [28-35]  - |SecBuf(250, 12)|                    (Target Name = L"Domain")
391*6777b538SAndroid Build Coastguard Worker // [36-43]  - |SecBuf(262, 8)|                     (User = L"User")
392*6777b538SAndroid Build Coastguard Worker // [44-51]  - |SecBuf(270, 16)|                    (Workstation = L"COMPUTER")
393*6777b538SAndroid Build Coastguard Worker // [52-59]  - |SecBuf(88, 0)|                      (Session Key (empty))
394*6777b538SAndroid Build Coastguard Worker // [60-63]  - 0x00088203                           (Flags)
395*6777b538SAndroid Build Coastguard Worker // [64-71]  - All zero                             (Version)
396*6777b538SAndroid Build Coastguard Worker // [72-87]  - |kExpectedMicV2|                     (MIC)
397*6777b538SAndroid Build Coastguard Worker // [88-111] - All zero                             (LM Response Payload)
398*6777b538SAndroid Build Coastguard Worker // [112-249]-------------------------------------- (NTLM Response Payload)
399*6777b538SAndroid Build Coastguard Worker //   [112-127]-|kExpectedProofSpecResponseWithClientTimestampV2|
400*6777b538SAndroid Build Coastguard Worker //                                                 (NTLMv2 Proof)
401*6777b538SAndroid Build Coastguard Worker //   [128-155]-|kExpectedTempWithClientTimestampV2[0-27]|
402*6777b538SAndroid Build Coastguard Worker //                                                 (Proof Input)
403*6777b538SAndroid Build Coastguard Worker //   [156-245]-|kExpectedTargetInfoSpecResponseV2| (Updated target info)
404*6777b538SAndroid Build Coastguard Worker //   [246-249]-0x00000000                          (Reserved - zeros)
405*6777b538SAndroid Build Coastguard Worker // -----------------------------------------------------------------------
406*6777b538SAndroid Build Coastguard Worker // [250-261]- L"Domain"                            (Target Name Payload)
407*6777b538SAndroid Build Coastguard Worker // [262-269]- L"User"                              (User Payload)
408*6777b538SAndroid Build Coastguard Worker // [270-285]- L"COMPUTER"                          (Workstation Payload)
409*6777b538SAndroid Build Coastguard Worker //
410*6777b538SAndroid Build Coastguard Worker // NOTE: This is not identical to the message in [MS-NLMP] Section TODO(X) for
411*6777b538SAndroid Build Coastguard Worker // several reasons.
412*6777b538SAndroid Build Coastguard Worker //
413*6777b538SAndroid Build Coastguard Worker // 1) The flags are different because this implementation does not support
414*6777b538SAndroid Build Coastguard Worker // the flags related to version, key exchange, signing and sealing. These
415*6777b538SAndroid Build Coastguard Worker // flags are not relevant to implementing the NTLM scheme in HTTP.
416*6777b538SAndroid Build Coastguard Worker // 2) Since key exchange is not required nor supported, the session base key
417*6777b538SAndroid Build Coastguard Worker // payload is not required nor present.
418*6777b538SAndroid Build Coastguard Worker // 3) The specification allows payloads to be in any order. This (and the
419*6777b538SAndroid Build Coastguard Worker // prior) implementation uses a different payload order than the example.
420*6777b538SAndroid Build Coastguard Worker // 4) The version field is Windows specific and there is no provision for a
421*6777b538SAndroid Build Coastguard Worker // non-Windows OS information. This message does not include a version field.
422*6777b538SAndroid Build Coastguard Worker // 5) The example in the spec does not use Extended Protection for
423*6777b538SAndroid Build Coastguard Worker // Authentication (EPA). This message includes an extra AV Pair containing
424*6777b538SAndroid Build Coastguard Worker // the hashed channel bindings.
425*6777b538SAndroid Build Coastguard Worker // 6) The example in the spec does not use Message Integrity Check (MIC).
426*6777b538SAndroid Build Coastguard Worker // The optional field is not present, nor is the flags AV Pair that indicates
427*6777b538SAndroid Build Coastguard Worker // it's presence.
428*6777b538SAndroid Build Coastguard Worker // 7) Since the server does not provide a timestamp, the client should
429*6777b538SAndroid Build Coastguard Worker // provide one.
430*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedAuthenticateMsgSpecResponseV2[] = {
431*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x03, 0x00, 0x00, 0x00,
432*6777b538SAndroid Build Coastguard Worker     0x18, 0x00, 0x18, 0x00, 0x58, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x8a, 0x00,
433*6777b538SAndroid Build Coastguard Worker     0x70, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0xfa, 0x00, 0x00, 0x00,
434*6777b538SAndroid Build Coastguard Worker     0x08, 0x00, 0x08, 0x00, 0x06, 0x01, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,
435*6777b538SAndroid Build Coastguard Worker     0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
436*6777b538SAndroid Build Coastguard Worker     0x03, 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
437*6777b538SAndroid Build Coastguard Worker     0xf7, 0x36, 0x16, 0x33, 0xf0, 0xad, 0x9b, 0xdf, 0x4a, 0x7c, 0x42, 0x1b,
438*6777b538SAndroid Build Coastguard Worker     0xc6, 0xb8, 0x24, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
440*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x8c, 0x02, 0x60, 0xdb, 0xef, 0x69, 0x06, 0x62,
441*6777b538SAndroid Build Coastguard Worker     0xaf, 0x9c, 0x42, 0xd5, 0x07, 0x82, 0xd2, 0xed, 0x01, 0x01, 0x00, 0x00,
442*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0xc8, 0xfd, 0x00, 0xd4, 0xd2, 0x01,
443*6777b538SAndroid Build Coastguard Worker     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
444*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x0c, 0x00, 'D',  0x00, 'o',  0x00, 'm',  0x00, 'a',  0x00,
445*6777b538SAndroid Build Coastguard Worker     'i',  0x00, 'n',  0x00, 0x01, 0x00, 0x0c, 0x00, 'S',  0x00, 'e',  0x00,
446*6777b538SAndroid Build Coastguard Worker     'r',  0x00, 'v',  0x00, 'e',  0x00, 'r',  0x00, 0x06, 0x00, 0x04, 0x00,
447*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x65, 0x86, 0xE9, 0x9D,
448*6777b538SAndroid Build Coastguard Worker     0x81, 0xC2, 0xFC, 0x98, 0x4E, 0x47, 0x17, 0x2F, 0xD4, 0xDD, 0x03, 0x10,
449*6777b538SAndroid Build Coastguard Worker     0x09, 0x00, 0x16, 0x00, 'H',  0x00, 'T',  0x00, 'T',  0x00, 'P',  0x00,
450*6777b538SAndroid Build Coastguard Worker     '/',  0x00, 'S',  0x00, 'e',  0x00, 'r',  0x00, 'v',  0x00, 'e',  0x00,
451*6777b538SAndroid Build Coastguard Worker     'r',  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'D',  0x00,
452*6777b538SAndroid Build Coastguard Worker     'o',  0x00, 'm',  0x00, 'a',  0x00, 'i',  0x00, 'n',  0x00, 'U',  0x00,
453*6777b538SAndroid Build Coastguard Worker     's',  0x00, 'e',  0x00, 'r',  0x00, 'C',  0x00, 'O',  0x00, 'M',  0x00,
454*6777b538SAndroid Build Coastguard Worker     'P',  0x00, 'U',  0x00, 'T',  0x00, 'E',  0x00, 'R',  0x00,
455*6777b538SAndroid Build Coastguard Worker };
456*6777b538SAndroid Build Coastguard Worker 
457*6777b538SAndroid Build Coastguard Worker // Expected V2 Authenticate message from this implementation when sent
458*6777b538SAndroid Build Coastguard Worker // |kChallengeMsgV1| as the challenge using default features. This scenario
459*6777b538SAndroid Build Coastguard Worker // can occur because some older implementations (Windows 2003 and earlier),
460*6777b538SAndroid Build Coastguard Worker // do not send NTLMSSP_NEGOTIATE_TARGET_INFO, nor a Target Info payload in
461*6777b538SAndroid Build Coastguard Worker // the challenge message.
462*6777b538SAndroid Build Coastguard Worker //
463*6777b538SAndroid Build Coastguard Worker // [0-7]    - "NTLMSSP\0"                          (Signature)
464*6777b538SAndroid Build Coastguard Worker // [9-11]   - |MessageType::kAuthenticate|         (Message Type = 0x00000003)
465*6777b538SAndroid Build Coastguard Worker // [12-19]  - |SecBuf(88, kResponseLenV1)|         (LM Response)
466*6777b538SAndroid Build Coastguard Worker // [20-27]  - |SecBuf(112, 106)|                   (NTLM Response)
467*6777b538SAndroid Build Coastguard Worker // [28-35]  - |SecBuf(218, 12)|                    (Target Name = L"Domain")
468*6777b538SAndroid Build Coastguard Worker // [36-43]  - |SecBuf(230, 8)|                     (User = L"User")
469*6777b538SAndroid Build Coastguard Worker // [44-51]  - |SecBuf(238, 16)|                    (Workstation = L"COMPUTER")
470*6777b538SAndroid Build Coastguard Worker // [52-59]  - |SecBuf(88, 0)|                      (Session Key (empty))
471*6777b538SAndroid Build Coastguard Worker // [60-63]  - 0x00088203                           (Flags)
472*6777b538SAndroid Build Coastguard Worker // [64-71]  - All zero                             (Version)
473*6777b538SAndroid Build Coastguard Worker // [72-87]  -                                      (MIC)
474*6777b538SAndroid Build Coastguard Worker // [88-111] - All zero                             (LM Response Payload)
475*6777b538SAndroid Build Coastguard Worker // [112-217]-------------------------------------- (NTLM Response Payload)
476*6777b538SAndroid Build Coastguard Worker //   [112-127]-                                    (NTLMv2 Proof)
477*6777b538SAndroid Build Coastguard Worker //   [128-155]-|kExpectedTempWithClientTimestampV2[0-27]|
478*6777b538SAndroid Build Coastguard Worker //                                                 (Proof Input)
479*6777b538SAndroid Build Coastguard Worker //   [156-213]-|kExpectedTargetInfoSpecResponseV2[32-89]|
480*6777b538SAndroid Build Coastguard Worker //                                                 (Updated target info)
481*6777b538SAndroid Build Coastguard Worker //   [214-217]-0x00000000                          (Reserved - zeros)
482*6777b538SAndroid Build Coastguard Worker // -----------------------------------------------------------------------
483*6777b538SAndroid Build Coastguard Worker // [218-229]- L"Domain"                            (Target Name Payload)
484*6777b538SAndroid Build Coastguard Worker // [230-237]- L"User"                              (User Payload)
485*6777b538SAndroid Build Coastguard Worker // [238-253]- L"COMPUTER"                          (Workstation Payload)
486*6777b538SAndroid Build Coastguard Worker //
487*6777b538SAndroid Build Coastguard Worker // NOTE: This is message is almost the same as
488*6777b538SAndroid Build Coastguard Worker // |kExpectedAuthenticateMsgSpecResponseV2| with the following changes.
489*6777b538SAndroid Build Coastguard Worker // 1) The target info within the NTLM response is missing the first 32
490*6777b538SAndroid Build Coastguard Worker // bytes, which represent the 2 AvPairs that the server does not send in
491*6777b538SAndroid Build Coastguard Worker // this case.
492*6777b538SAndroid Build Coastguard Worker // 2) The NTLM Response security buffer length is reduced by 32 and therefore
493*6777b538SAndroid Build Coastguard Worker // all subsequent security buffer offsets are reduced by 32.
494*6777b538SAndroid Build Coastguard Worker // 3) The NTLMv2 Proof is different since the different target info changes
495*6777b538SAndroid Build Coastguard Worker // the hash.
496*6777b538SAndroid Build Coastguard Worker // 4) As with the NTLMv2 Proof, the MIC is different because the message is
497*6777b538SAndroid Build Coastguard Worker // different.
498*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedAuthenticateMsgToOldV1ChallegeV2[] = {
499*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x03, 0x00, 0x00, 0x00,
500*6777b538SAndroid Build Coastguard Worker     0x18, 0x00, 0x18, 0x00, 0x58, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x6a, 0x00,
501*6777b538SAndroid Build Coastguard Worker     0x70, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0xda, 0x00, 0x00, 0x00,
502*6777b538SAndroid Build Coastguard Worker     0x08, 0x00, 0x08, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,
503*6777b538SAndroid Build Coastguard Worker     0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
504*6777b538SAndroid Build Coastguard Worker     0x03, 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
505*6777b538SAndroid Build Coastguard Worker     0x31, 0x37, 0xd6, 0x9e, 0x5c, 0xc8, 0x7d, 0x7a, 0x9f, 0x7c, 0xf4, 0x1a,
506*6777b538SAndroid Build Coastguard Worker     0x5a, 0x19, 0xdc, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
507*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
508*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xbe, 0xd9, 0xa9, 0x42, 0x20, 0xc2, 0x25, 0x2b,
509*6777b538SAndroid Build Coastguard Worker     0x91, 0x6e, 0x9c, 0xe3, 0x9d, 0x97, 0x3a, 0x2d, 0x01, 0x01, 0x00, 0x00,
510*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0xc8, 0xfd, 0x00, 0xd4, 0xd2, 0x01,
511*6777b538SAndroid Build Coastguard Worker     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
512*6777b538SAndroid Build Coastguard Worker     0x06, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00,
513*6777b538SAndroid Build Coastguard Worker     0x65, 0x86, 0xE9, 0x9D, 0x81, 0xC2, 0xFC, 0x98, 0x4E, 0x47, 0x17, 0x2F,
514*6777b538SAndroid Build Coastguard Worker     0xD4, 0xDD, 0x03, 0x10, 0x09, 0x00, 0x16, 0x00, 'H',  0x00, 'T',  0x00,
515*6777b538SAndroid Build Coastguard Worker     'T',  0x00, 'P',  0x00, '/',  0x00, 'S',  0x00, 'e',  0x00, 'r',  0x00,
516*6777b538SAndroid Build Coastguard Worker     'v',  0x00, 'e',  0x00, 'r',  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 'D',  0x00, 'o',  0x00, 'm',  0x00, 'a',  0x00, 'i',  0x00,
518*6777b538SAndroid Build Coastguard Worker     'n',  0x00, 'U',  0x00, 's',  0x00, 'e',  0x00, 'r',  0x00, 'C',  0x00,
519*6777b538SAndroid Build Coastguard Worker     'O',  0x00, 'M',  0x00, 'P',  0x00, 'U',  0x00, 'T',  0x00, 'E',  0x00,
520*6777b538SAndroid Build Coastguard Worker     'R',  0x00,
521*6777b538SAndroid Build Coastguard Worker };
522*6777b538SAndroid Build Coastguard Worker 
523*6777b538SAndroid Build Coastguard Worker // Expected V2 Authenticate message from this implementation when sent
524*6777b538SAndroid Build Coastguard Worker // |kChallengeMsgFromSpecV2|, no channel bindings exist, and the remote
525*6777b538SAndroid Build Coastguard Worker // server is named 'server' (with lowercase 's'). All the test data from the
526*6777b538SAndroid Build Coastguard Worker // spec uses 'Server' with an uppercase 'S'. Chrome lower cases the hostname
527*6777b538SAndroid Build Coastguard Worker // so this result vector is needed for an end to end test in
528*6777b538SAndroid Build Coastguard Worker // |HttpNetworkTransactionUnitTest|.
529*6777b538SAndroid Build Coastguard Worker //
530*6777b538SAndroid Build Coastguard Worker // The response is the same as |kExpectedAuthenticateMsgSpecResponseV2| with
531*6777b538SAndroid Build Coastguard Worker // the following differences.
532*6777b538SAndroid Build Coastguard Worker //
533*6777b538SAndroid Build Coastguard Worker // [72-87]   - The MIC (hash of all messages) is different because the
534*6777b538SAndroid Build Coastguard Worker //     message is different.
535*6777b538SAndroid Build Coastguard Worker // [112-127] - The cryptographic proof is different due to the changed
536*6777b538SAndroid Build Coastguard Worker //     AvPairs below, which are inputs to the hash.
537*6777b538SAndroid Build Coastguard Worker // [225]- The 's' in the  SPN AvPair is lowercase.
538*6777b538SAndroid Build Coastguard Worker // [200-215] - The channel binding AvPair in the target info is all zero. See
539*6777b538SAndroid Build Coastguard Worker //     |kExpectedTargetInfoSpecResponseV2| for more information.
540*6777b538SAndroid Build Coastguard Worker constexpr uint8_t kExpectedAuthenticateMsgEmptyChannelBindingsV2[] = {
541*6777b538SAndroid Build Coastguard Worker     'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x03, 0x00, 0x00, 0x00,
542*6777b538SAndroid Build Coastguard Worker     0x18, 0x00, 0x18, 0x00, 0x58, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x8a, 0x00,
543*6777b538SAndroid Build Coastguard Worker     0x70, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0xfa, 0x00, 0x00, 0x00,
544*6777b538SAndroid Build Coastguard Worker     0x08, 0x00, 0x08, 0x00, 0x06, 0x01, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,
545*6777b538SAndroid Build Coastguard Worker     0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
546*6777b538SAndroid Build Coastguard Worker     0x03, 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
547*6777b538SAndroid Build Coastguard Worker     0xa7, 0x37, 0x50, 0x69, 0x59, 0xfe, 0xea, 0x74, 0xaa, 0x77, 0xa1, 0xc0,
548*6777b538SAndroid Build Coastguard Worker     0x5b, 0xe2, 0x39, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
549*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
550*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xfe, 0x4d, 0xec, 0x67, 0xcf, 0x4d, 0xbd, 0xf8,
551*6777b538SAndroid Build Coastguard Worker     0xc7, 0xa7, 0x80, 0x89, 0xb1, 0xc5, 0x46, 0xa7, 0x01, 0x01, 0x00, 0x00,
552*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0xc8, 0xfd, 0x00, 0xd4, 0xd2, 0x01,
553*6777b538SAndroid Build Coastguard Worker     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
554*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x0c, 0x00, 'D',  0x00, 'o',  0x00, 'm',  0x00, 'a',  0x00,
555*6777b538SAndroid Build Coastguard Worker     'i',  0x00, 'n',  0x00, 0x01, 0x00, 0x0c, 0x00, 'S',  0x00, 'e',  0x00,
556*6777b538SAndroid Build Coastguard Worker     'r',  0x00, 'v',  0x00, 'e',  0x00, 'r',  0x00, 0x06, 0x00, 0x04, 0x00,
557*6777b538SAndroid Build Coastguard Worker     0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
558*6777b538SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
559*6777b538SAndroid Build Coastguard Worker     0x09, 0x00, 0x16, 0x00, 'H',  0x00, 'T',  0x00, 'T',  0x00, 'P',  0x00,
560*6777b538SAndroid Build Coastguard Worker     '/',  0x00, 's',  0x00, 'e',  0x00, 'r',  0x00, 'v',  0x00, 'e',  0x00,
561*6777b538SAndroid Build Coastguard Worker     'r',  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'D',  0x00,
562*6777b538SAndroid Build Coastguard Worker     'o',  0x00, 'm',  0x00, 'a',  0x00, 'i',  0x00, 'n',  0x00, 'U',  0x00,
563*6777b538SAndroid Build Coastguard Worker     's',  0x00, 'e',  0x00, 'r',  0x00, 'C',  0x00, 'O',  0x00, 'M',  0x00,
564*6777b538SAndroid Build Coastguard Worker     'P',  0x00, 'U',  0x00, 'T',  0x00, 'E',  0x00, 'R',  0x00,
565*6777b538SAndroid Build Coastguard Worker };
566*6777b538SAndroid Build Coastguard Worker 
567*6777b538SAndroid Build Coastguard Worker }  // namespace net::ntlm::test
568*6777b538SAndroid Build Coastguard Worker 
569*6777b538SAndroid Build Coastguard Worker #endif  // NET_NTLM_NTLM_TEST_DATA_H_
570