summaryrefslogtreecommitdiffstats
path: root/third_party/heimdal/lib/ntlm/heim-auth.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/heimdal/lib/ntlm/heim-auth.h')
-rw-r--r--third_party/heimdal/lib/ntlm/heim-auth.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/third_party/heimdal/lib/ntlm/heim-auth.h b/third_party/heimdal/lib/ntlm/heim-auth.h
new file mode 100644
index 0000000..a828de3
--- /dev/null
+++ b/third_party/heimdal/lib/ntlm/heim-auth.h
@@ -0,0 +1,135 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Generate challange for APOP and CRAM-MD5
+ */
+
+char *
+heim_generate_challenge(const char *hostname); /* hostname can be NULL, the local hostname is used */
+
+/*
+ * APOP
+ */
+
+char *
+heim_apop_create(const char *challenge, const char *password);
+
+int
+heim_apop_verify(const char *challenge, const char *password, const char *response);
+
+/*
+ * CRAM-MD5
+ */
+
+typedef struct heim_HMAC_MD5_STATE_s {
+ uint32_t istate[4];
+ uint32_t ostate[4];
+} heim_CRAM_MD5_STATE;
+
+typedef struct heim_cram_md5_data *heim_cram_md5;
+
+char *
+heim_cram_md5_create(const char *challenge, const char *password);
+
+int
+heim_cram_md5_verify(const char *challenge, const char *password, const char *response);
+
+void
+heim_cram_md5_export(const char *password, heim_CRAM_MD5_STATE *state);
+
+heim_cram_md5
+heim_cram_md5_import(void *data, size_t len);
+
+int
+heim_cram_md5_verify_ctx(heim_cram_md5 ctx, const char *challenge, const char *response);
+
+void
+heim_cram_md5_free(heim_cram_md5 ctx);
+
+/*
+ * DIGEST-MD5
+ *
+ * heim_digest_t d;
+ *
+ * d = heim_digest_create(1, HEIM_DIGEST_TYPE_DIGEST_MD5_HTTP);
+ *
+ * if ((s = heim_digest_generate_challange(d)) != NULL) abort();
+ * send_to_client(s);
+ * response = read_from_client();
+ *
+ * heim_digest_parse_response(d, response);
+ * const char *user = heim_digest_get_key(d, "username");
+ * heim_digest_set_key(d, "password", "sommar17");
+ *
+ * if (heim_digest_verify(d, &response)) abort();
+ *
+ * send_to_client(response);
+ *
+ * heim_digest_release(d);
+ */
+
+typedef struct heim_digest_desc *heim_digest_t;
+
+heim_digest_t
+heim_digest_create(int server, int type);
+
+#define HEIM_DIGEST_TYPE_AUTO 0
+#define HEIM_DIGEST_TYPE_RFC2069 1
+#define HEIM_DIGEST_TYPE_RFC2617_MD5 2
+#define HEIM_DIGEST_TYPE_RFC2617_MD5_SESS 4
+#define HEIM_DIGEST_TYPE_RFC2831 8
+
+#define HEIM_DIGEST_TYPE_RFC2617_OR_RFC2831 12
+
+/* old deprecated names, use the two above instead */
+#define HEIM_DIGEST_TYPE_MD5 2
+#define HEIM_DIGEST_TYPE_MD5_SESS 4
+
+void
+heim_digest_init_set_key(heim_digest_t context, const char *key, const char *value);
+
+const char *
+heim_digest_generate_challenge(heim_digest_t context);
+
+int
+heim_digest_parse_challenge(heim_digest_t context, const char *challenge);
+
+int
+heim_digest_parse_response(heim_digest_t context, const char *response);
+
+const char *
+heim_digest_get_key(heim_digest_t context, const char *key);
+
+int
+heim_digest_set_key(heim_digest_t context, const char *key, const char *value);
+
+void
+heim_digest_set_user_password(heim_digest_t context, const char *password);
+
+void
+heim_digest_set_user_h1hash(heim_digest_t context, void *ptr, size_t size);
+
+int
+heim_digest_verify(heim_digest_t context, char **response);
+
+const char *
+heim_digest_create_response(heim_digest_t context, char **response);
+
+void
+heim_digest_get_session_key(heim_digest_t context, void **key, size_t *keySize);
+
+void
+heim_digest_release(heim_digest_t context);
+
+char *
+heim_digest_userhash(const char *user, const char *realm, const char *password);
+
+const char *
+heim_digest_server_response(heim_digest_t context);
+
+#ifdef __cplusplus
+}
+#endif