xref: /minix3/crypto/external/bsd/heimdal/dist/lib/ntlm/heim-auth.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	$NetBSD: heim-auth.h,v 1.1.1.2 2014/04/24 12:45:51 pettai Exp $	*/
2ebfedea0SLionel Sambuc 
3ebfedea0SLionel Sambuc /*
4ebfedea0SLionel Sambuc  * Generate challange for APOP and CRAM-MD5
5ebfedea0SLionel Sambuc  */
6ebfedea0SLionel Sambuc 
7ebfedea0SLionel Sambuc char *
8ebfedea0SLionel Sambuc heim_generate_challenge(const char *hostname); /* hostname can be NULL, the local hostname is used */
9ebfedea0SLionel Sambuc 
10ebfedea0SLionel Sambuc /*
11ebfedea0SLionel Sambuc  * APOP
12ebfedea0SLionel Sambuc  */
13ebfedea0SLionel Sambuc 
14ebfedea0SLionel Sambuc char *
15ebfedea0SLionel Sambuc heim_apop_create(const char *challenge, const char *password);
16ebfedea0SLionel Sambuc 
17ebfedea0SLionel Sambuc int
18ebfedea0SLionel Sambuc heim_apop_verify(const char *challenge, const char *password, const char *response);
19ebfedea0SLionel Sambuc 
20ebfedea0SLionel Sambuc /*
21ebfedea0SLionel Sambuc  * CRAM-MD5
22ebfedea0SLionel Sambuc  */
23ebfedea0SLionel Sambuc 
24ebfedea0SLionel Sambuc typedef struct heim_HMAC_MD5_STATE_s {
25ebfedea0SLionel Sambuc     uint32_t istate[4];
26ebfedea0SLionel Sambuc     uint32_t ostate[4];
27ebfedea0SLionel Sambuc } heim_CRAM_MD5_STATE;
28ebfedea0SLionel Sambuc 
29ebfedea0SLionel Sambuc typedef struct heim_cram_md5 *heim_cram_md5;
30ebfedea0SLionel Sambuc 
31ebfedea0SLionel Sambuc char *
32ebfedea0SLionel Sambuc heim_cram_md5_create(const char *challenge, const char *password);
33ebfedea0SLionel Sambuc 
34ebfedea0SLionel Sambuc int
35ebfedea0SLionel Sambuc heim_cram_md5_verify(const char *challenge, const char *password, const char *response);
36ebfedea0SLionel Sambuc 
37ebfedea0SLionel Sambuc void
38ebfedea0SLionel Sambuc heim_cram_md5_export(const char *password, heim_CRAM_MD5_STATE *state);
39ebfedea0SLionel Sambuc 
40ebfedea0SLionel Sambuc heim_cram_md5
41ebfedea0SLionel Sambuc heim_cram_md5_import(void *data, size_t len);
42ebfedea0SLionel Sambuc 
43ebfedea0SLionel Sambuc int
44ebfedea0SLionel Sambuc heim_cram_md5_verify_ctx(heim_cram_md5 ctx, const char *challenge, const char *response);
45ebfedea0SLionel Sambuc 
46ebfedea0SLionel Sambuc void
47ebfedea0SLionel Sambuc heim_cram_md5_free(heim_cram_md5 ctx);
48ebfedea0SLionel Sambuc 
49ebfedea0SLionel Sambuc /*
50ebfedea0SLionel Sambuc  * DIGEST-MD5
51ebfedea0SLionel Sambuc  *
52ebfedea0SLionel Sambuc  * heim_digest_t d;
53ebfedea0SLionel Sambuc  *
54ebfedea0SLionel Sambuc  * d = heim_digest_create(1, HEIM_DIGEST_TYPE_DIGEST_MD5_HTTP);
55ebfedea0SLionel Sambuc  *
56ebfedea0SLionel Sambuc  * if ((s = heim_digest_generate_challange(d)) != NULL) abort();
57ebfedea0SLionel Sambuc  * send_to_client(s);
58ebfedea0SLionel Sambuc  * response = read_from_client();
59ebfedea0SLionel Sambuc  *
60ebfedea0SLionel Sambuc  * heim_digest_parse_response(d, response);
61ebfedea0SLionel Sambuc  *
62ebfedea0SLionel Sambuc  * const char *user = heim_digest_get_key(d, "username");
63ebfedea0SLionel Sambuc  * heim_digest_set_key(d, "password", "sommar17");
64ebfedea0SLionel Sambuc  *
65ebfedea0SLionel Sambuc  * if (heim_digest_verify(d, &response)) abort();
66ebfedea0SLionel Sambuc  *
67ebfedea0SLionel Sambuc  * send_to_client(response);
68ebfedea0SLionel Sambuc  *
69ebfedea0SLionel Sambuc  * heim_digest_release(d);
70ebfedea0SLionel Sambuc  */
71ebfedea0SLionel Sambuc 
72ebfedea0SLionel Sambuc typedef struct heim_digest_desc *heim_digest_t;
73ebfedea0SLionel Sambuc 
74ebfedea0SLionel Sambuc heim_digest_t
75ebfedea0SLionel Sambuc heim_digest_create(int server, int type);
76ebfedea0SLionel Sambuc 
77ebfedea0SLionel Sambuc #define HEIM_DIGEST_TYPE_AUTO				0
78ebfedea0SLionel Sambuc #define HEIM_DIGEST_TYPE_RFC2069			1
79ebfedea0SLionel Sambuc #define HEIM_DIGEST_TYPE_MD5				2
80ebfedea0SLionel Sambuc #define HEIM_DIGEST_TYPE_MD5_SESS			3
81ebfedea0SLionel Sambuc 
82ebfedea0SLionel Sambuc void
83ebfedea0SLionel Sambuc heim_digest_init_set_key(heim_digest_t context, const char *key, const char *value);
84ebfedea0SLionel Sambuc 
85ebfedea0SLionel Sambuc const char *
86ebfedea0SLionel Sambuc heim_digest_generate_challenge(heim_digest_t context);
87ebfedea0SLionel Sambuc 
88ebfedea0SLionel Sambuc int
89ebfedea0SLionel Sambuc heim_digest_parse_challenge(heim_digest_t context, const char *challenge);
90ebfedea0SLionel Sambuc 
91ebfedea0SLionel Sambuc int
92ebfedea0SLionel Sambuc heim_digest_parse_response(heim_digest_t context, const char *response);
93ebfedea0SLionel Sambuc 
94ebfedea0SLionel Sambuc const char *
95ebfedea0SLionel Sambuc heim_digest_get_key(heim_digest_t context, const char *key);
96ebfedea0SLionel Sambuc 
97ebfedea0SLionel Sambuc int
98ebfedea0SLionel Sambuc heim_digest_set_key(heim_digest_t context, const char *key, const char *value);
99ebfedea0SLionel Sambuc 
100ebfedea0SLionel Sambuc void
101ebfedea0SLionel Sambuc heim_digest_set_user_password(heim_digest_t context, const char *password);
102ebfedea0SLionel Sambuc 
103ebfedea0SLionel Sambuc void
104ebfedea0SLionel Sambuc heim_digest_set_user_h1hash(heim_digest_t context, void *ptr, size_t size);
105ebfedea0SLionel Sambuc 
106ebfedea0SLionel Sambuc int
107ebfedea0SLionel Sambuc heim_digest_verify(heim_digest_t context, char **response);
108ebfedea0SLionel Sambuc 
109ebfedea0SLionel Sambuc const char *
110ebfedea0SLionel Sambuc heim_digest_create_response(heim_digest_t context);
111ebfedea0SLionel Sambuc 
112ebfedea0SLionel Sambuc void
113ebfedea0SLionel Sambuc heim_digest_get_session_key(heim_digest_t context, void **key, size_t *keySize);
114ebfedea0SLionel Sambuc 
115ebfedea0SLionel Sambuc void
116ebfedea0SLionel Sambuc heim_digest_release(heim_digest_t context);
117