mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 11:32:48 -05:00
Withdraw support for SHA-512-256 in HTTP Digest.
I was dubious about it to begin with, when I found that RFC 7616's example seemed to be treating it as a 256-bit truncation of SHA-512, and not the thing FIPS 180-4 section 6.7 specifies as "SHA-512/256" (which also changes the initial hash state). Having failed to get a clarifying response from the RFC authors, I had the idea this morning of testing other HTTP clients to see what _they_ thought that hash function meant, and then at least I could go with an existing in-practice consensus. There is no in-practice consensus. Firefox doesn't support that algorithm at all (but they do support SHA-256); wget doesn't support anything that RFC 7616 added to the original RFC 2617. But the prize for weirdness goes to curl, which does accept the name "SHA-512-256" and ... treats it as an alias for SHA-256! So I think the situation among real clients is too confusing to even try to work with, and I'm going to stop adding to it. PuTTY will follow Firefox's policy: if a proxy server asks for SHA-256 digests we'll happily provide them, but if they ask for SHA-512-256 we'll refuse on the grounds that it's not clear enough what it means.
This commit is contained in:
17
proxy/http.c
17
proxy/http.c
@ -430,22 +430,35 @@ static void proxy_http_process_queue(ProxyNegotiator *pn)
|
||||
!get_token(s))
|
||||
goto bad_digest;
|
||||
bool found = false;
|
||||
size_t i;
|
||||
|
||||
for (size_t i = 0; i < N_HTTP_DIGEST_HASHES; i++) {
|
||||
for (i = 0; i < N_HTTP_DIGEST_HASHES; i++) {
|
||||
if (!stricmp(s->token->s, httphashnames[i])) {
|
||||
s->digest_hash = i;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
/* We don't even recognise the name */
|
||||
pn->error = dupprintf(
|
||||
"HTTP proxy requested Digest hash "
|
||||
"algorithm '%s' which we do not recognise",
|
||||
s->token->s);
|
||||
crStopV;
|
||||
}
|
||||
|
||||
if (!httphashaccepted[i]) {
|
||||
/* We do recognise the name but we
|
||||
* don't like it (see comment in cproxy.h) */
|
||||
pn->error = dupprintf(
|
||||
"HTTP proxy requested Digest hash "
|
||||
"algorithm '%s' which we do not support",
|
||||
s->token->s);
|
||||
crStopV;
|
||||
}
|
||||
|
||||
s->digest_hash = i;
|
||||
} else if (!stricmp(s->token->s, "qop")) {
|
||||
if (!get_separator(s, '=') ||
|
||||
!get_quoted_string(s))
|
||||
|
Reference in New Issue
Block a user