1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 *
19 */
20 package org.apache.mina.proxy.handlers.http.ntlm;
21
22 /**
23 * NTLMConstants.java - All NTLM constants.
24 *
25 * @author <a href="http://mina.apache.org">Apache MINA Project</a>
26 * @since MINA 2.0.0-M3
27 */
28 public interface NTLMConstants {
29 // Signature "NTLMSSP"+{0}
30 public final static byte[] NTLM_SIGNATURE = new byte[] { 0x4E, 0x54, 0x4C,
31 0x4D, 0x53, 0x53, 0x50, 0 };
32
33 // Version 5.1.2600 a Windows XP version (ex: Build 2600.xpsp_sp2_gdr.050301-1519 : Service Pack 2)
34 public final static byte[] DEFAULT_OS_VERSION = new byte[] { 0x05, 0x01,
35 0x28, 0x0A, 0, 0, 0, 0x0F };
36
37 /**
38 * Message types
39 */
40
41 public final static int MESSAGE_TYPE_1 = 1;
42
43 public final static int MESSAGE_TYPE_2 = 2;
44
45 public final static int MESSAGE_TYPE_3 = 3;
46
47 /**
48 * Message flags
49 */
50
51 // Indicates that Unicode strings are supported for use in security buffer data
52 public final static int FLAG_NEGOTIATE_UNICODE = 0x00000001;
53
54 // Indicates that OEM strings are supported for use in security buffer data
55 public final static int FLAG_NEGOTIATE_OEM = 0x00000002;
56
57 // Requests that the server's authentication realm be included in the Type 2 message
58 public final static int FLAG_REQUEST_SERVER_AUTH_REALM = 0x00000004;
59
60 // Specifies that authenticated communication between the client
61 // and server should carry a digital signature (message integrity)
62 public final static int FLAG_NEGOTIATE_SIGN = 0x00000010;
63
64 // Specifies that authenticated communication between the client
65 // and server should be encrypted (message confidentiality)
66 public final static int FLAG_NEGOTIATE_SEAL = 0x00000020;
67
68 // Indicates that datagram authentication is being used
69 public final static int FLAG_NEGOTIATE_DATAGRAM_STYLE = 0x00000040;
70
71 // Indicates that the Lan Manager Session Key should be used for signing and
72 // sealing authenticated communications
73 public final static int FLAG_NEGOTIATE_LAN_MANAGER_KEY = 0x00000080;
74
75 // Indicates that NTLM authentication is being used
76 public final static int FLAG_NEGOTIATE_NTLM = 0x00000200;
77
78 // Sent by the client in the Type 3 message to indicate that an anonymous context
79 // has been established. This also affects the response fields
80 public final static int FLAG_NEGOTIATE_ANONYMOUS = 0x00000800;
81
82 // Sent by the client in the Type 1 message to indicate that the name of the domain in which
83 // the client workstation has membership is included in the message. This is used by the
84 // server to determine whether the client is eligible for local authentication
85 public final static int FLAG_NEGOTIATE_DOMAIN_SUPPLIED = 0x00001000;
86
87 // Sent by the client in the Type 1 message to indicate that the client workstation's name
88 // is included in the message. This is used by the server to determine whether the client
89 // is eligible for local authentication
90 public final static int FLAG_NEGOTIATE_WORKSTATION_SUPPLIED = 0x00002000;
91
92 // Sent by the server to indicate that the server and client are on the same machine.
93 // Implies that the client may use the established local credentials for authentication
94 // instead of calculating a response to the challenge
95 public final static int FLAG_NEGOTIATE_LOCAL_CALL = 0x00004000;
96
97 // Indicates that authenticated communication between the client and server should
98 // be signed with a "dummy" signature
99 public final static int FLAG_NEGOTIATE_ALWAYS_SIGN = 0x00008000;
100
101 // Sent by the server in the Type 2 message to indicate that the target authentication
102 // realm is a domain
103 public final static int FLAG_TARGET_TYPE_DOMAIN = 0x00010000;
104
105 // Sent by the server in the Type 2 message to indicate that the target authentication
106 // realm is a server
107 public final static int FLAG_TARGET_TYPE_SERVER = 0x00020000;
108
109 // Sent by the server in the Type 2 message to indicate that the target authentication
110 // realm is a share. Presumably, this is for share-level authentication. Usage is unclear
111 public final static int FLAG_TARGET_TYPE_SHARE = 0x00040000;
112
113 // Indicates that the NTLM2 signing and sealing scheme should be used for protecting
114 // authenticated communications. Note that this refers to a particular session security
115 // scheme, and is not related to the use of NTLMv2 authentication. This flag can, however,
116 // have an effect on the response calculations
117 public final static int FLAG_NEGOTIATE_NTLM2 = 0x00080000;
118
119 // Sent by the server in the Type 2 message to indicate that it is including a Target
120 // Information block in the message. The Target Information block is used in the
121 // calculation of the NTLMv2 response
122 public final static int FLAG_NEGOTIATE_TARGET_INFO = 0x00800000;
123
124 // Indicates that 128-bit encryption is supported
125 public final static int FLAG_NEGOTIATE_128_BIT_ENCRYPTION = 0x20000000;
126
127 // Indicates that the client will provide an encrypted master key in the "Session Key"
128 // field of the Type 3 message
129 public final static int FLAG_NEGOTIATE_KEY_EXCHANGE = 0x40000000;
130
131 // Indicates that 56-bit encryption is supported
132 public final static int FLAG_NEGOTIATE_56_BIT_ENCRYPTION = 0x80000000;
133
134 // WARN : These flags usage has not been identified
135 public final static int FLAG_UNIDENTIFIED_1 = 0x00000008;
136
137 public final static int FLAG_UNIDENTIFIED_2 = 0x00000100; // Negotiate Netware ??!
138
139 public final static int FLAG_UNIDENTIFIED_3 = 0x00000400;
140
141 public final static int FLAG_UNIDENTIFIED_4 = 0x00100000; // Request Init Response ??!
142
143 public final static int FLAG_UNIDENTIFIED_5 = 0x00200000; // Request Accept Response ??!
144
145 public final static int FLAG_UNIDENTIFIED_6 = 0x00400000; // Request Non-NT Session Key ??!
146
147 public final static int FLAG_UNIDENTIFIED_7 = 0x01000000;
148
149 public final static int FLAG_UNIDENTIFIED_8 = 0x02000000;
150
151 public final static int FLAG_UNIDENTIFIED_9 = 0x04000000;
152
153 public final static int FLAG_UNIDENTIFIED_10 = 0x08000000;
154
155 public final static int FLAG_UNIDENTIFIED_11 = 0x10000000;
156
157 // Default minimal flag set
158 public final static int DEFAULT_FLAGS = FLAG_NEGOTIATE_OEM
159 | FLAG_NEGOTIATE_UNICODE | FLAG_NEGOTIATE_WORKSTATION_SUPPLIED
160 | FLAG_NEGOTIATE_DOMAIN_SUPPLIED;
161
162 /**
163 * Target Information sub blocks types. It may be that there are other
164 * as-yet-unidentified sub block types as well.
165 */
166
167 // Sub block terminator
168 public final static short TARGET_INFORMATION_SUBBLOCK_TERMINATOR_TYPE = 0x0000;
169
170 // Server name
171 public final static short TARGET_INFORMATION_SUBBLOCK_SERVER_TYPE = 0x0100;
172
173 // Domain name
174 public final static short TARGET_INFORMATION_SUBBLOCK_DOMAIN_TYPE = 0x0200;
175
176 // Fully-qualified DNS host name (i.e., server.domain.com)
177 public final static short TARGET_INFORMATION_SUBBLOCK_FQDNS_HOSTNAME_TYPE = 0x0300;
178
179 // DNS domain name (i.e., domain.com)
180 public final static short TARGET_INFORMATION_SUBBLOCK_DNS_DOMAIN_NAME_TYPE = 0x0400;
181
182 // Apparently the "parent" DNS domain for servers in sub domains
183 public final static short TARGET_INFORMATION_SUBBLOCK_PARENT_DNS_DOMAIN_NAME_TYPE = 0x0500;
184 }