tidying
[exim.git] / src / src / auths / auth-spa.h
CommitLineData
0756eb3c
PH
1/*************************************************
2* Exim - an Internet mail transport agent *
3*************************************************/
4
5/*
6 * This file provides the necessary methods for authenticating with
7 * Microsoft's Secure Password Authentication.
8
9 * All the code used here was torn by Marc Prud'hommeaux out of the
10 * Samba project (by Andrew Tridgell, Jeremy Allison, and others).
11 */
8e669ac1
PH
12
13/* December 2004: The spa_base64_to_bits() function has no length checking in
14it. I have added a check. PH */
0756eb3c
PH
15
16/* It seems that some systems have existing but different definitions of some
17of the following types. I received a complaint about "int16" causing
18compilation problems. So I (PH) have renamed them all, to be on the safe side.
19
20typedef signed short int16;
21typedef unsigned short uint16;
22typedef unsigned uint32;
23typedef unsigned char uint8;
24*/
25
26typedef signed short int16x;
27typedef unsigned short uint16x;
28typedef unsigned uint32x;
29typedef unsigned char uint8x;
30
31typedef struct
32{
384152a6
TK
33 uint16x len;
34 uint16x maxlen;
35 uint32x offset;
0756eb3c
PH
36} SPAStrHeader;
37
38typedef struct
39{
384152a6
TK
40 char ident[8];
41 uint32x msgType;
0756eb3c 42 SPAStrHeader uDomain;
384152a6
TK
43 uint32x flags;
44 uint8x challengeData[8];
45 uint8x reserved[8];
0756eb3c 46 SPAStrHeader emptyString;
384152a6
TK
47 uint8x buffer[1024];
48 uint32x bufIndex;
0756eb3c
PH
49} SPAAuthChallenge;
50
51
52typedef struct
53{
384152a6
TK
54 char ident[8];
55 uint32x msgType;
56 uint32x flags;
0756eb3c
PH
57 SPAStrHeader user;
58 SPAStrHeader domain;
384152a6
TK
59 uint8x buffer[1024];
60 uint32x bufIndex;
0756eb3c
PH
61} SPAAuthRequest;
62
63typedef struct
64{
384152a6
TK
65 char ident[8];
66 uint32x msgType;
0756eb3c
PH
67 SPAStrHeader lmResponse;
68 SPAStrHeader ntResponse;
69 SPAStrHeader uDomain;
70 SPAStrHeader uUser;
71 SPAStrHeader uWks;
72 SPAStrHeader sessionKey;
384152a6
TK
73 uint32x flags;
74 uint8x buffer[1024];
75 uint32x bufIndex;
0756eb3c
PH
76} SPAAuthResponse;
77
78#define spa_request_length(ptr) (((ptr)->buffer - (uint8x*)(ptr)) + (ptr)->bufIndex)
79
80void spa_bits_to_base64 (unsigned char *, const unsigned char *, int);
85b87bc2 81int spa_base64_to_bits(char *, int, const char *);
0756eb3c
PH
82void spa_build_auth_response (SPAAuthChallenge *challenge,
83 SPAAuthResponse *response, char *user, char *password);
84void spa_build_auth_request (SPAAuthRequest *request, char *user,
85 char *domain);
86extern void spa_smb_encrypt (unsigned char * passwd, unsigned char * c8,
87 unsigned char * p24);
88extern void spa_smb_nt_encrypt (unsigned char * passwd, unsigned char * c8,
89 unsigned char * p24);
90extern char *unicodeToString(char *p, size_t len);
91extern void spa_build_auth_challenge(SPAAuthRequest *, SPAAuthChallenge *);
92