1/*	$NetBSD$	*/
2
3/*
4 * Copyright (c) 2006 - 2007 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 NTLM_NTLM_H
39#define NTLM_NTLM_H
40
41#include <config.h>
42
43#include <stdio.h>
44#include <stdlib.h>
45#include <assert.h>
46#include <string.h>
47#include <errno.h>
48
49#include <krb5/roken.h>
50
51#include <gssapi/gssapi.h>
52#include <gssapi/gssapi_ntlm.h>
53#include <gssapi_mech.h>
54#include <gssapi/gssapi_oid.h>
55
56#include <krb5/krb5.h>
57#include <krb5/kcm.h>
58#include <heim_threads.h>
59
60#include <krb5/heimntlm.h>
61
62#define HC_DEPRECATED_CRYPTO
63#include "crypto-headers.h"
64
65typedef OM_uint32
66(*ntlm_interface_init)(OM_uint32 *, void **);
67
68typedef OM_uint32
69(*ntlm_interface_destroy)(OM_uint32 *, void *);
70
71typedef int
72(*ntlm_interface_probe)(OM_uint32 *, void *, const char *);
73
74typedef OM_uint32
75(*ntlm_interface_type2)(OM_uint32 *, void *, uint32_t, const char *,
76			const char *, uint32_t *, struct ntlm_buf *);
77
78typedef OM_uint32
79(*ntlm_interface_type3)(OM_uint32 *, void *, const struct ntlm_type3 *,
80			struct ntlm_buf *);
81
82typedef void
83(*ntlm_interface_free_buffer)(struct ntlm_buf *);
84
85struct ntlm_server_interface {
86    ntlm_interface_init nsi_init;
87    ntlm_interface_destroy nsi_destroy;
88    ntlm_interface_probe nsi_probe;
89    ntlm_interface_type2 nsi_type2;
90    ntlm_interface_type3 nsi_type3;
91    ntlm_interface_free_buffer nsi_free_buffer;
92};
93
94
95struct ntlmv2_key {
96    uint32_t seq;
97    RC4_KEY sealkey;
98    RC4_KEY *signsealkey;
99    unsigned char signkey[16];
100};
101
102extern struct ntlm_server_interface ntlmsspi_kdc_digest;
103
104typedef struct ntlm_cred {
105    gss_cred_usage_t usage;
106    char *username;
107    char *domain;
108    struct ntlm_buf key;
109} *ntlm_cred;
110
111typedef struct {
112    struct ntlm_server_interface *server;
113    void *ictx;
114    ntlm_cred client;
115    OM_uint32 gssflags;
116    uint32_t kcmflags;
117    uint32_t flags;
118    uint32_t status;
119#define STATUS_OPEN 1
120#define STATUS_CLIENT 2
121#define STATUS_SESSIONKEY 4
122    krb5_data sessionkey;
123
124    gss_buffer_desc pac;
125
126    union {
127	struct {
128	    struct {
129		uint32_t seq;
130		RC4_KEY key;
131	    } crypto_send, crypto_recv;
132	} v1;
133	struct {
134	    struct ntlmv2_key send, recv;
135	} v2;
136    } u;
137} *ntlm_ctx;
138
139typedef struct {
140    char *user;
141    char *domain;
142} *ntlm_name;
143
144#include <ntlm-private.h>
145
146
147#endif /* NTLM_NTLM_H */
148