The IETF SASL WG recently decided to drop the RFC 2831bis draft from their agenda. Therefore I've removed the code handling <quoted-pair> (backslashes) from the MD5 test suite 1.0 (REXX script).
RFC 4590 contains four examples for Auth Digest. That's in essence the same as Digest-MD5 defined in RFC 2831, only based on the older RFC 2617. The examples were apparently copied as is to RFC 4590bis drafts. I've added the 2*2 (INVITE+rspauth, GET+rspauth) examples to md5.cmd (1.1).
The RFC 4590 examples still fail in my MD5 test suite, or rather my attempt to guess the used password failed. There's also an oddity in these examples not yet supported by the REXX script:
RFC 2617 states that a client sending any qop=
parameter, for the RFC 4590 examples that's qop=auth
, MUST also send a cnonce=
(client nonce) together with a NC=
(nonce counter). In the RFC 4590 examples the client doesn't do that, causing a trap in my REXX script.
There are two plausible ways to fix this, either use the RFC 2069 fallback algorithm, or simply omit the missing NC and CNONCE. In simplified REXX the second solution would be:
return MD5( HA1 || ':' || NONCE || ':auth:' || MD5( XURL ))
The first (2069) solution would use a colon : instead of :auth:. The "official" RFC 2617 string instead of :auth: is:
':' || NC || ':' || CNONCE || ':' || QOP || ':'
Other variants of what RFC 4590 actually wants could be to use an empty CNONCE with a dummy NC in the direction of :00000001::auth:. As always Digest-MD5 is messy.
Related, an old 2069-erratum still rots in the pending errata mbox. I'm now confident that the 2069-code in md5.cmd works at least with the IETF tools server. I've not yet submitted an erratum for RFC 2983, three out of four 2983-examples are fine.