1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00
samba-mirror/third_party/heimdal/lib/ntlm/heim-auth.h
Stefan Metzmacher 7055827b8f HEIMDAL: move code from source4/heimdal* to third_party/heimdal*
This makes it clearer that we always want to do heimdal changes
via the lorikeet-heimdal repository.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Joseph Sutton <josephsutton@catalyst.net.nz>

Autobuild-User(master): Joseph Sutton <jsutton@samba.org>
Autobuild-Date(master): Wed Jan 19 21:41:59 UTC 2022 on sn-devel-184
2022-01-19 21:41:59 +00:00

136 lines
3.0 KiB
C

#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