1 /* $NetBSD: heimntlm.h,v 1.1.1.3 2017/01/28 20:46:52 christos Exp $ */ 2 3 /* 4 * Copyright (c) 2006 Kungliga Tekniska Högskolan 5 * (Royal Institute of Technology, Stockholm, Sweden). 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * 3. Neither the name of the Institute nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 /* Id */ 37 38 #ifndef HEIM_NTLM_H 39 #define HEIM_NTLM_H 40 41 /** 42 * Buffer for storing data in the NTLM library. When filled in by the 43 * library it should be freed with heim_ntlm_free_buf(). 44 */ 45 struct ntlm_buf { 46 size_t length; /**< length buffer data */ 47 void *data; /**< pointer to the data itself */ 48 }; 49 50 #define NTLM_NEG_UNICODE 0x00000001 51 #define NTLM_NEG_OEM 0x00000002 52 #define NTLM_NEG_TARGET 0x00000004 53 #define NTLM_MBZ9 0x00000008 54 55 #define NTLM_NEG_SIGN 0x00000010 56 #define NTLM_NEG_SEAL 0x00000020 57 #define NTLM_NEG_DATAGRAM 0x00000040 58 #define NTLM_NEG_LM_KEY 0x00000080 59 #define NTLM_NEG_NTLM 0x00000200 60 #define NTLM_NEG_ANONYMOUS 0x00000800 61 62 #define NTLM_MBZ8 0x00000100 63 #define NTLM_NEG_NTLM 0x00000200 64 #define NTLM_NEG_NT_ONLY 0x00000400 65 #define NTLM_MBZ7 0x00000800 /* anon ? */ 66 67 #define NTLM_OEM_SUPPLIED_DOMAIN 0x00001000 68 #define NTLM_OEM_SUPPLIED_WORKSTATION 0x00002000 69 #define NTLM_MBZ6 0x00004000 /* local call ? */ 70 #define NTLM_NEG_ALWAYS_SIGN 0x00008000 71 72 #define NTLM_TARGET_DOMAIN 0x00010000 73 #define NTLM_TARGET_SERVER 0x00020000 74 75 #define NTLM_TARGET_SHARE 0x00040000 /* mbz */ 76 #define NTLM_NEG_NTLM2_SESSION 0x00080000 /* EXTENDED_SESSIONSECURITY */ 77 #define NTLM_NEG_NTLM2 0x00080000 78 79 #define NTLM_NEG_IDENTIFY 0x00100000 80 #define NTLM_MBZ5 0x00200000 81 #define NTLM_NON_NT_SESSION_KEY 0x00400000 82 #define NTLM_NEG_TARGET_INFO 0x00800000 83 84 #define NTLM_MBZ4 0x01000000 85 #define NTLM_NEG_VERSION 0x02000000 86 #define NTLM_MBZ3 0x04000000 87 #define NTLM_MBZ2 0x08000000 88 89 #define NTLM_MBZ1 0x10000000 90 #define NTLM_ENC_128 0x20000000 91 #define NTLM_NEG_KEYEX 0x40000000 92 #define NTLM_ENC_56 0x80000000 93 94 /** 95 * Struct for the NTLM target info, the strings is assumed to be in 96 * UTF8. When filled in by the library it should be freed with 97 * heim_ntlm_free_targetinfo(). 98 */ 99 100 /* avflags */ 101 #define NTLM_TI_AV_FLAG_GUEST 0x00000001 102 #define NTLM_TI_AV_FLAG_MIC 0x00000002 103 104 struct ntlm_targetinfo { 105 char *servername; /**< */ 106 char *domainname; /**< */ 107 char *dnsdomainname; /**< */ 108 char *dnsservername; /**< */ 109 char *dnstreename; /**< */ 110 uint32_t avflags; /**< */ 111 char *targetname; 112 struct ntlm_buf channel_bindings; 113 uint64_t timestamp; 114 }; 115 116 /** 117 * Struct for the NTLM type1 message info, the strings is assumed to 118 * be in UTF8. When filled in by the library it should be freed with 119 * heim_ntlm_free_type1(). 120 */ 121 122 struct ntlm_type1 { 123 uint32_t flags; /**< */ 124 char *domain; /**< */ 125 char *hostname; /**< */ 126 uint32_t os[2]; /**< */ 127 }; 128 129 /** 130 * Struct for the NTLM type2 message info, the strings is assumed to 131 * be in UTF8. When filled in by the library it should be freed with 132 * heim_ntlm_free_type2(). 133 */ 134 135 struct ntlm_type2 { 136 uint32_t flags; /**< */ 137 char *targetname; /**< */ 138 struct ntlm_buf targetinfo; /**< */ 139 unsigned char challenge[8]; /**< */ 140 uint32_t context[2]; /**< */ 141 uint32_t os[2]; /**< */ 142 }; 143 144 /** 145 * Struct for the NTLM type3 message info, the strings is assumed to 146 * be in UTF8. When filled in by the library it should be freed with 147 * heim_ntlm_free_type3(). 148 */ 149 150 struct ntlm_type3 { 151 uint32_t flags; /**< */ 152 char *username; /**< */ 153 char *targetname; /**< */ 154 struct ntlm_buf lm; /**< */ 155 struct ntlm_buf ntlm; /**< */ 156 struct ntlm_buf sessionkey; /**< */ 157 char *ws; /**< */ 158 uint32_t os[2]; /**< */ 159 size_t mic_offset; 160 uint8_t mic[16]; 161 }; 162 163 extern time_t heim_ntlm_time_skew; 164 165 #include <krb5/ntlm_err.h> 166 #include <krb5/heimntlm-protos.h> 167 168 #endif /* NTLM_NTLM_H */ 169