cd9f9db41137f77b3a67aa446300154eb110cb9b
[samba.git] / auth / ntlmssp / ntlmssp_private.h
1 /*
2  *  Unix SMB/CIFS implementation.
3  *  Version 3.0
4  *  NTLMSSP Signing routines
5  *  Copyright (C) Andrew Bartlett 2003-2005
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 3 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20
21 /* For structures internal to the NTLMSSP implementation that should not be exposed */
22
23 #include "../lib/crypto/arcfour.h"
24
25 struct auth_session_info;
26
27 struct ntlmssp_crypt_direction {
28         uint32_t seq_num;
29         uint8_t sign_key[16];
30         struct arcfour_state seal_state;
31 };
32
33 union ntlmssp_crypt_state {
34         /* NTLM */
35         struct ntlmssp_crypt_direction ntlm;
36
37         /* NTLM2 */
38         struct {
39                 struct ntlmssp_crypt_direction sending;
40                 struct ntlmssp_crypt_direction receiving;
41         } ntlm2;
42 };
43
44 struct gensec_ntlmssp_context {
45         /* For GENSEC users */
46         struct gensec_security *gensec_security;
47         void *server_returned_info;
48
49         /* used by both client and server implementation */
50         struct ntlmssp_state *ntlmssp_state;
51 };
52
53 /* The following definitions come from auth/ntlmssp.c  */
54
55 NTSTATUS gensec_ntlmssp_update(struct gensec_security *gensec_security,
56                                TALLOC_CTX *out_mem_ctx,
57                                struct tevent_context *ev,
58                                const DATA_BLOB input, DATA_BLOB *out);
59
60 /* The following definitions come from auth/ntlmssp_util.c  */
61
62 void debug_ntlmssp_flags(uint32_t neg_flags);
63 void ntlmssp_handle_neg_flags(struct ntlmssp_state *ntlmssp_state,
64                               uint32_t neg_flags, bool allow_lm);
65
66 /* The following definitions come from auth/ntlmssp_server.c  */
67
68 const char *ntlmssp_target_name(struct ntlmssp_state *ntlmssp_state,
69                                 uint32_t neg_flags, uint32_t *chal_flags);
70 NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
71                                   TALLOC_CTX *out_mem_ctx,
72                                   const DATA_BLOB in, DATA_BLOB *out);
73 NTSTATUS ntlmssp_server_auth(struct ntlmssp_state *ntlmssp_state,
74                              TALLOC_CTX *out_mem_ctx,
75                              const DATA_BLOB request, DATA_BLOB *reply);
76 /* The following definitions come from auth/ntlmssp/ntlmssp_client.c  */
77
78
79 /**
80  * Next state function for the Initial packet
81  *
82  * @param ntlmssp_state NTLMSSP State
83  * @param out_mem_ctx The DATA_BLOB *out will be allocated on this context
84  * @param in A NULL data blob (input ignored)
85  * @param out The initial negotiate request to the server, as an talloc()ed DATA_BLOB, on out_mem_ctx
86  * @return Errors or NT_STATUS_OK.
87  */
88 NTSTATUS ntlmssp_client_initial(struct gensec_security *gensec_security,
89                                 TALLOC_CTX *out_mem_ctx,
90                                 DATA_BLOB in, DATA_BLOB *out) ;
91
92 /**
93  * Next state function for the Challenge Packet.  Generate an auth packet.
94  *
95  * @param gensec_security GENSEC state
96  * @param out_mem_ctx Memory context for *out
97  * @param in The server challnege, as a DATA_BLOB.  reply.data must be NULL
98  * @param out The next request (auth packet) to the server, as an allocated DATA_BLOB, on the out_mem_ctx context
99  * @return Errors or NT_STATUS_OK.
100  */
101 NTSTATUS ntlmssp_client_challenge(struct gensec_security *gensec_security,
102                                   TALLOC_CTX *out_mem_ctx,
103                                   const DATA_BLOB in, DATA_BLOB *out) ;
104 NTSTATUS gensec_ntlmssp_client_start(struct gensec_security *gensec_security);
105
106 /* The following definitions come from auth/ntlmssp/gensec_ntlmssp_server.c  */
107
108
109 /**
110  * Next state function for the Negotiate packet (GENSEC wrapper)
111  *
112  * @param gensec_security GENSEC state
113  * @param out_mem_ctx Memory context for *out
114  * @param in The request, as a DATA_BLOB.  reply.data must be NULL
115  * @param out The reply, as an allocated DATA_BLOB, caller to free.
116  * @return Errors or MORE_PROCESSING_REQUIRED if (normal) a reply is required.
117  */
118 NTSTATUS gensec_ntlmssp_server_negotiate(struct gensec_security *gensec_security,
119                                          TALLOC_CTX *out_mem_ctx,
120                                          const DATA_BLOB request, DATA_BLOB *reply);
121
122 /**
123  * Next state function for the Authenticate packet (GENSEC wrapper)
124  *
125  * @param gensec_security GENSEC state
126  * @param out_mem_ctx Memory context for *out
127  * @param in The request, as a DATA_BLOB.  reply.data must be NULL
128  * @param out The reply, as an allocated DATA_BLOB, caller to free.
129  * @return Errors or NT_STATUS_OK if authentication sucessful
130  */
131 NTSTATUS gensec_ntlmssp_server_auth(struct gensec_security *gensec_security,
132                                     TALLOC_CTX *out_mem_ctx,
133                                     const DATA_BLOB in, DATA_BLOB *out);
134
135 /**
136  * Start NTLMSSP on the server side
137  *
138  */
139 NTSTATUS gensec_ntlmssp_server_start(struct gensec_security *gensec_security);
140
141 /**
142  * Return the credentials of a logged on user, including session keys
143  * etc.
144  *
145  * Only valid after a successful authentication
146  *
147  * May only be called once per authentication.
148  *
149  */
150 NTSTATUS gensec_ntlmssp_session_info(struct gensec_security *gensec_security,
151                                      TALLOC_CTX *mem_ctx,
152                                      struct auth_session_info **session_info) ;
153
154 /* The following definitions come from auth/ntlmssp/gensec_ntlmssp.c  */
155
156 NTSTATUS gensec_ntlmssp_sign_packet(struct gensec_security *gensec_security,
157                                     TALLOC_CTX *sig_mem_ctx,
158                                     const uint8_t *data, size_t length,
159                                     const uint8_t *whole_pdu, size_t pdu_length,
160                                     DATA_BLOB *sig);
161 NTSTATUS gensec_ntlmssp_check_packet(struct gensec_security *gensec_security,
162                                      const uint8_t *data, size_t length,
163                                      const uint8_t *whole_pdu, size_t pdu_length,
164                                      const DATA_BLOB *sig);
165 NTSTATUS gensec_ntlmssp_seal_packet(struct gensec_security *gensec_security,
166                                     TALLOC_CTX *sig_mem_ctx,
167                                     uint8_t *data, size_t length,
168                                     const uint8_t *whole_pdu, size_t pdu_length,
169                                     DATA_BLOB *sig);
170 NTSTATUS gensec_ntlmssp_unseal_packet(struct gensec_security *gensec_security,
171                                       uint8_t *data, size_t length,
172                                       const uint8_t *whole_pdu, size_t pdu_length,
173                                       const DATA_BLOB *sig);
174 size_t gensec_ntlmssp_sig_size(struct gensec_security *gensec_security, size_t data_size) ;
175 NTSTATUS gensec_ntlmssp_wrap(struct gensec_security *gensec_security,
176                              TALLOC_CTX *out_mem_ctx,
177                              const DATA_BLOB *in,
178                              DATA_BLOB *out);
179 NTSTATUS gensec_ntlmssp_unwrap(struct gensec_security *gensec_security,
180                                TALLOC_CTX *out_mem_ctx,
181                                const DATA_BLOB *in,
182                                DATA_BLOB *out);
183
184 /**
185  * Return the NTLMSSP master session key
186  *
187  * @param ntlmssp_state NTLMSSP State
188  */
189 NTSTATUS gensec_ntlmssp_magic(struct gensec_security *gensec_security,
190                               const DATA_BLOB *first_packet);
191 bool gensec_ntlmssp_have_feature(struct gensec_security *gensec_security,
192                                  uint32_t feature);
193 NTSTATUS gensec_ntlmssp_session_key(struct gensec_security *gensec_security,
194                                     TALLOC_CTX *mem_ctx,
195                                     DATA_BLOB *session_key);
196 NTSTATUS gensec_ntlmssp_start(struct gensec_security *gensec_security);
197