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