docs: @Nullable
    public static DigestAuthClientCredentials getDigestAuthClientCredentials (@Nullable final String sAuthHeader)
    {
      final ICommonsOrderedMap <String, String> aParams = getDigestAuthParams (sAuthHeader);
      if (aParams == null)
        return null;
  
      final String sUserName = aParams.remove ("username");
      if (sUserName == null)
      {
        LOGGER.error ("Digest Auth does not container 'username'");
        return null;
      }
      final String sRealm = aParams.remove ("realm");
      if (sRealm == null)
      {
        LOGGER.error ("Digest Auth does not container 'realm'");
        return null;
      }
      final String sNonce = aParams.remove ("nonce");
      if (sNonce == null)
      {
        LOGGER.error ("Digest Auth does not container 'nonce'");
        return null;
      }
      final String sDigestURI = aParams.remove ("uri");
      if (sDigestURI == null)
      {
        LOGGER.error ("Digest Auth does not container 'uri'");
        return null;
      }
      final String sResponse = aParams.remove ("response");
      if (sResponse == null)
      {
        LOGGER.error ("Digest Auth does not container 'response'");
        return null;
      }
      final String sAlgorithm = aParams.remove ("algorithm");
      final String sCNonce = aParams.remove ("cnonce");
      final String sOpaque = aParams.remove ("opaque");
      final String sMessageQOP = aParams.remove ("qop");
      final String sNonceCount = aParams.remove ("nc");
      if (aParams.isNotEmpty ())
        if (LOGGER.isWarnEnabled ())
          LOGGER.warn ("Digest Auth contains unhandled parameters: " + aParams.toString ());
  
      return new DigestAuthClientCredentials (sUserName,
                                              sRealm,
                                              sNonce,
                                              sDigestURI,
                                              sResponse,
                                              sAlgorithm,
                                              sCNonce,
                                              sOpaque,
                                              sMessageQOP,
                                              sNonceCount);
    }