1/*
2 * Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of the Institute nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34/* $Id$ */
35
36#ifndef NTLM_NTLM_H
37#define NTLM_NTLM_H
38
39#include <config.h>
40
41#include <stdio.h>
42#include <stdlib.h>
43#include <assert.h>
44#include <string.h>
45#include <errno.h>
46
47#include <roken.h>
48
49#include <gssapi.h>
50#include <gssapi_ntlm.h>
51#include <gssapi_mech.h>
52#include <gssapi_oid.h>
53
54#include <krb5.h>
55#include <kcm.h>
56#include <heim_threads.h>
57
58#include <heimntlm.h>
59
60#define HC_DEPRECATED_CRYPTO
61#include "crypto-headers.h"
62
63typedef OM_uint32
64(*ntlm_interface_init)(OM_uint32 *, void **);
65
66typedef OM_uint32
67(*ntlm_interface_destroy)(OM_uint32 *, void *);
68
69typedef int
70(*ntlm_interface_probe)(OM_uint32 *, void *, const char *);
71
72typedef OM_uint32
73(*ntlm_interface_type2)(OM_uint32 *, void *, uint32_t, const char *,
74			const char *, uint32_t *, struct ntlm_buf *);
75
76typedef OM_uint32
77(*ntlm_interface_type3)(OM_uint32 *, void *, const struct ntlm_type3 *,
78			struct ntlm_buf *);
79
80typedef void
81(*ntlm_interface_free_buffer)(struct ntlm_buf *);
82
83struct ntlm_server_interface {
84    ntlm_interface_init nsi_init;
85    ntlm_interface_destroy nsi_destroy;
86    ntlm_interface_probe nsi_probe;
87    ntlm_interface_type2 nsi_type2;
88    ntlm_interface_type3 nsi_type3;
89    ntlm_interface_free_buffer nsi_free_buffer;
90};
91
92
93struct ntlmv2_key {
94    uint32_t seq;
95    RC4_KEY sealkey;
96    RC4_KEY *signsealkey;
97    unsigned char signkey[16];
98};
99
100extern struct ntlm_server_interface ntlmsspi_kdc_digest;
101
102typedef struct ntlm_cred {
103    gss_cred_usage_t usage;
104    char *username;
105    char *domain;
106    struct ntlm_buf key;
107} *ntlm_cred;
108
109typedef struct {
110    struct ntlm_server_interface *server;
111    void *ictx;
112    ntlm_cred client;
113    OM_uint32 gssflags;
114    uint32_t kcmflags;
115    uint32_t flags;
116    uint32_t status;
117#define STATUS_OPEN 1
118#define STATUS_CLIENT 2
119#define STATUS_SESSIONKEY 4
120    krb5_data sessionkey;
121
122    gss_buffer_desc pac;
123
124    union {
125	struct {
126	    struct {
127		uint32_t seq;
128		RC4_KEY key;
129	    } crypto_send, crypto_recv;
130	} v1;
131	struct {
132	    struct ntlmv2_key send, recv;
133	} v2;
134    } u;
135} *ntlm_ctx;
136
137typedef struct {
138    char *user;
139    char *domain;
140} *ntlm_name;
141
142#include <ntlm-private.h>
143
144
145#endif /* NTLM_NTLM_H */
146