Skip to content
Snippets Groups Projects
Commit eefeb73a authored by Steve Holme's avatar Steve Holme
Browse files

curl_sasl: Extended native DIGEST-MD5 cnonce to be a 32-byte hex string

Rather than use a short 8-byte hex string, extended the cnonce to be
32-bytes long, like Windows SSPI does.

Used a combination of random data as well as the current date and
time for the generation.
parent aa6be2ef
No related branches found
No related tags found
No related merge requests found
......@@ -403,9 +403,6 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
const char *service,
char **outptr, size_t *outlen)
{
#ifndef DEBUGBUILD
static const char table16[] = "0123456789abcdef";
#endif
CURLcode result = CURLE_OK;
size_t i;
MD5_context *ctxt;
......@@ -421,8 +418,14 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
char qop_options[64];
int qop_values;
char cnonce[33];
unsigned int cnonce1 = 0;
unsigned int cnonce2 = 0;
unsigned int cnonce3 = 0;
unsigned int cnonce4 = 0;
struct timeval now;
char nonceCount[] = "00000001";
char cnonce[] = "12345678"; /* will be changed */
char method[] = "AUTHENTICATE";
char qop[] = DIGEST_QOP_VALUE_STRING_AUTH;
char uri[128];
......@@ -449,11 +452,18 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
return CURLE_BAD_CONTENT_ENCODING;
#ifndef DEBUGBUILD
/* Generate 64 bits of random data */
for(i = 0; i < 8; i++)
cnonce[i] = table16[Curl_rand(data)%16];
/* Generate 16 bytes of random data */
cnonce1 = Curl_rand(data);
cnonce2 = Curl_rand(data);
now = Curl_tvnow();
cnonce3 = now.tv_sec;
cnonce4 = now.tv_sec;
#endif
/* Convert the random data into a 32 byte hex string */
snprintf(cnonce, sizeof(cnonce), "%08x%08x%08x%08x",
cnonce1, cnonce2, cnonce3, cnonce4);
/* So far so good, now calculate A1 and H(A1) according to RFC 2831 */
ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
if(!ctxt)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment