307e90e585cbaf56d04729e7b143f735a6e13ab7
[bbaumbach/samba-autobuild/.git] / source3 / include / smb_crypt.h
1 /*
2    Unix SMB/CIFS implementation.
3    SMB Transport encryption code.
4    Copyright (C) Jeremy Allison 2007.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef _HEADER_SMB_CRYPT_H
21 #define _HEADER_SMB_CRYPT_H
22
23 #if HAVE_GSSAPI_GSSAPI_H
24 #include <gssapi/gssapi.h>
25 #elif HAVE_GSSAPI_GSSAPI_GENERIC_H
26 #include <gssapi/gssapi_generic.h>
27 #elif HAVE_GSSAPI_H
28 #include <gssapi.h>
29 #endif
30
31 #if HAVE_COM_ERR_H
32 #include <com_err.h>
33 #endif
34
35 /* Transport encryption state. */
36 enum smb_trans_enc_type {
37                 SMB_TRANS_ENC_NTLM
38 #if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
39                 , SMB_TRANS_ENC_GSS
40 #endif
41 };
42
43 #if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
44 struct smb_tran_enc_state_gss {
45         gss_ctx_id_t gss_ctx;
46         gss_cred_id_t creds;
47 };
48 #endif
49
50 struct smb_trans_enc_state {
51         enum smb_trans_enc_type smb_enc_type;
52         uint16_t enc_ctx_num;
53         bool enc_on;
54         union {
55                 struct gensec_security *gensec_security;
56 #if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
57                 struct smb_tran_enc_state_gss *gss_state;
58 #endif
59         } s;
60 };
61
62 /* The following definitions come from libsmb/smb_seal.c  */
63
64 NTSTATUS get_enc_ctx_num(const uint8_t *buf, uint16_t *p_enc_ctx_num);
65 bool common_encryption_on(struct smb_trans_enc_state *es);
66 NTSTATUS common_encrypt_buffer(struct smb_trans_enc_state *es, char *buffer, char **buf_out);
67 NTSTATUS common_decrypt_buffer(struct smb_trans_enc_state *es, char *buf);
68 void common_free_encryption_state(struct smb_trans_enc_state **pp_es);
69 void common_free_enc_buffer(struct smb_trans_enc_state *es, char *buf);
70
71 #endif /* _HEADER_SMB_CRYPT_H */