1178825Sdfr/*
2233294Sstas * Copyright (c) 2006 - 2007 Kungliga Tekniska H��gskolan
3233294Sstas * (Royal Institute of Technology, Stockholm, Sweden).
4233294Sstas * All rights reserved.
5178825Sdfr *
6233294Sstas * Redistribution and use in source and binary forms, with or without
7233294Sstas * modification, are permitted provided that the following conditions
8233294Sstas * are met:
9178825Sdfr *
10233294Sstas * 1. Redistributions of source code must retain the above copyright
11233294Sstas *    notice, this list of conditions and the following disclaimer.
12178825Sdfr *
13233294Sstas * 2. Redistributions in binary form must reproduce the above copyright
14233294Sstas *    notice, this list of conditions and the following disclaimer in the
15233294Sstas *    documentation and/or other materials provided with the distribution.
16178825Sdfr *
17233294Sstas * 3. Neither the name of the Institute nor the names of its contributors
18233294Sstas *    may be used to endorse or promote products derived from this software
19233294Sstas *    without specific prior written permission.
20178825Sdfr *
21233294Sstas * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22233294Sstas * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23233294Sstas * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24233294Sstas * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25233294Sstas * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26233294Sstas * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27233294Sstas * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28233294Sstas * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29233294Sstas * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30233294Sstas * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31233294Sstas * SUCH DAMAGE.
32178825Sdfr */
33178825Sdfr
34233294Sstas/* $Id$ */
35178825Sdfr
36178825Sdfr#ifndef NTLM_NTLM_H
37178825Sdfr#define NTLM_NTLM_H
38178825Sdfr
39178825Sdfr#include <config.h>
40178825Sdfr
41178825Sdfr#include <stdio.h>
42178825Sdfr#include <stdlib.h>
43178825Sdfr#include <assert.h>
44178825Sdfr#include <string.h>
45178825Sdfr#include <errno.h>
46178825Sdfr
47233294Sstas#include <roken.h>
48233294Sstas
49178825Sdfr#include <gssapi.h>
50233294Sstas#include <gssapi_ntlm.h>
51178825Sdfr#include <gssapi_mech.h>
52233294Sstas#include <gssapi_oid.h>
53178825Sdfr
54178825Sdfr#include <krb5.h>
55233294Sstas#include <kcm.h>
56178825Sdfr#include <heim_threads.h>
57178825Sdfr
58178825Sdfr#include <heimntlm.h>
59178825Sdfr
60233294Sstas#define HC_DEPRECATED_CRYPTO
61178825Sdfr#include "crypto-headers.h"
62178825Sdfr
63178825Sdfrtypedef OM_uint32
64178825Sdfr(*ntlm_interface_init)(OM_uint32 *, void **);
65178825Sdfr
66178825Sdfrtypedef OM_uint32
67178825Sdfr(*ntlm_interface_destroy)(OM_uint32 *, void *);
68178825Sdfr
69178825Sdfrtypedef int
70178825Sdfr(*ntlm_interface_probe)(OM_uint32 *, void *, const char *);
71178825Sdfr
72178825Sdfrtypedef OM_uint32
73178825Sdfr(*ntlm_interface_type2)(OM_uint32 *, void *, uint32_t, const char *,
74178825Sdfr			const char *, uint32_t *, struct ntlm_buf *);
75178825Sdfr
76178825Sdfrtypedef OM_uint32
77178825Sdfr(*ntlm_interface_type3)(OM_uint32 *, void *, const struct ntlm_type3 *,
78178825Sdfr			struct ntlm_buf *);
79178825Sdfr
80178825Sdfrtypedef void
81178825Sdfr(*ntlm_interface_free_buffer)(struct ntlm_buf *);
82178825Sdfr
83178825Sdfrstruct ntlm_server_interface {
84178825Sdfr    ntlm_interface_init nsi_init;
85178825Sdfr    ntlm_interface_destroy nsi_destroy;
86178825Sdfr    ntlm_interface_probe nsi_probe;
87178825Sdfr    ntlm_interface_type2 nsi_type2;
88178825Sdfr    ntlm_interface_type3 nsi_type3;
89178825Sdfr    ntlm_interface_free_buffer nsi_free_buffer;
90178825Sdfr};
91178825Sdfr
92178825Sdfr
93178825Sdfrstruct ntlmv2_key {
94178825Sdfr    uint32_t seq;
95178825Sdfr    RC4_KEY sealkey;
96178825Sdfr    RC4_KEY *signsealkey;
97178825Sdfr    unsigned char signkey[16];
98178825Sdfr};
99178825Sdfr
100178825Sdfrextern struct ntlm_server_interface ntlmsspi_kdc_digest;
101178825Sdfr
102178825Sdfrtypedef struct ntlm_cred {
103178825Sdfr    gss_cred_usage_t usage;
104178825Sdfr    char *username;
105178825Sdfr    char *domain;
106178825Sdfr    struct ntlm_buf key;
107178825Sdfr} *ntlm_cred;
108178825Sdfr
109178825Sdfrtypedef struct {
110178825Sdfr    struct ntlm_server_interface *server;
111178825Sdfr    void *ictx;
112178825Sdfr    ntlm_cred client;
113178825Sdfr    OM_uint32 gssflags;
114233294Sstas    uint32_t kcmflags;
115178825Sdfr    uint32_t flags;
116178825Sdfr    uint32_t status;
117178825Sdfr#define STATUS_OPEN 1
118178825Sdfr#define STATUS_CLIENT 2
119178825Sdfr#define STATUS_SESSIONKEY 4
120178825Sdfr    krb5_data sessionkey;
121178825Sdfr
122233294Sstas    gss_buffer_desc pac;
123233294Sstas
124178825Sdfr    union {
125178825Sdfr	struct {
126178825Sdfr	    struct {
127178825Sdfr		uint32_t seq;
128178825Sdfr		RC4_KEY key;
129178825Sdfr	    } crypto_send, crypto_recv;
130178825Sdfr	} v1;
131178825Sdfr	struct {
132178825Sdfr	    struct ntlmv2_key send, recv;
133178825Sdfr	} v2;
134178825Sdfr    } u;
135178825Sdfr} *ntlm_ctx;
136178825Sdfr
137178825Sdfrtypedef struct {
138178825Sdfr    char *user;
139178825Sdfr    char *domain;
140178825Sdfr} *ntlm_name;
141178825Sdfr
142233294Sstas#include <ntlm-private.h>
143178825Sdfr
144178825Sdfr
145178825Sdfr#endif /* NTLM_NTLM_H */
146