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