78 const char *authzid,
const char *digesturi,
int rspauth,
80 char *kic,
char *kis,
char *kcc,
char *kcs)
84 char a1hexhash[2 *
MD5LEN];
85 char a2hexhash[2 *
MD5LEN];
95 strlen (
COLON) + strlen (cnonce);
96 if (authzid && strlen (authzid) > 0)
97 tmplen += strlen (
COLON) + strlen (authzid);
99 p = tmp = malloc (tmplen);
103 memcpy (p, secret,
MD5LEN);
107 memcpy (p, nonce, strlen (nonce));
111 memcpy (p, cnonce, strlen (cnonce));
112 p += strlen (cnonce);
113 if (authzid && strlen (authzid) > 0)
117 memcpy (p, authzid, strlen (authzid));
120 rc = gc_md5 (tmp, tmplen, hash);
135 rc = gc_md5 (q, qlen, hash2);
139 memcpy (kic, hash2,
MD5LEN);
152 rc = gc_md5 (q, qlen, hash2);
156 memcpy (kis, hash2,
MD5LEN);
181 memcpy (kcc, hash2,
MD5LEN);
206 memcpy (kcs, hash2,
MD5LEN);
209 for (i = 0; i <
MD5LEN; i++)
211 a1hexhash[2 * i + 1] =
HEXCHAR (hash[i]);
212 a1hexhash[2 * i + 0] =
HEXCHAR (hash[i] >> 4);
217 tmplen = strlen (a2string) + strlen (digesturi);
221 p = tmp = malloc (tmplen);
225 memcpy (p, a2string, strlen (a2string));
226 p += strlen (a2string);
227 memcpy (p, digesturi, strlen (digesturi));
228 p += strlen (digesturi);
232 rc = gc_md5 (tmp, tmplen, hash);
237 for (i = 0; i <
MD5LEN; i++)
239 a2hexhash[2 * i + 1] =
HEXCHAR (hash[i]);
240 a2hexhash[2 * i + 0] =
HEXCHAR (hash[i] >> 4);
245 sprintf (nchex,
"%08lx", nc);
248 strlen (nchex) + strlen (
COLON) + strlen (cnonce) + strlen (
COLON);
257 p = tmp = malloc (tmplen);
261 memcpy (p, a1hexhash, 2 *
MD5LEN);
265 memcpy (p, nonce, strlen (nonce));
269 memcpy (p, nchex, strlen (nchex));
273 memcpy (p, cnonce, strlen (cnonce));
274 p += strlen (cnonce);
294 memcpy (p, a2hexhash, 2 *
MD5LEN);
296 rc = gc_md5 (tmp, tmplen, hash);
301 for (i = 0; i <
MD5LEN; i++)
303 output[2 * i + 1] =
HEXCHAR (hash[i]);
304 output[2 * i + 0] =
HEXCHAR (hash[i] >> 4);
int digest_md5_hmac(char *output, char secret[MD5LEN], const char *nonce, unsigned long nc, const char *cnonce, digest_md5_qop qop, const char *authzid, const char *digesturi, int rspauth, digest_md5_cipher cipher, char *kic, char *kis, char *kcc, char *kcs)