diff options
Diffstat (limited to 'third_party/heimdal/lib/ntlm/heim-auth.h')
-rw-r--r-- | third_party/heimdal/lib/ntlm/heim-auth.h | 135 |
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 |