protected String newResponse( String cnonce, HttpExchange exchange, Realm securityRealm, Map details) { try { MessageDigest md = MessageDigest.getInstance("MD5"); // calc A1 digest md.update(securityRealm.getPrincipal().getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(String.valueOf(details.get("realm")).getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(securityRealm.getCredentials().getBytes(StringUtil.__ISO_8859_1)); byte[] ha1 = md.digest(); // calc A2 digest md.reset(); md.update(exchange.getMethod().getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(exchange.getURI().getBytes(StringUtil.__ISO_8859_1)); byte[] ha2 = md.digest(); md.update(TypeUtil.toString(ha1, 16).getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(String.valueOf(details.get("nonce")).getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(NC.getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(cnonce.getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(String.valueOf(details.get("qop")).getBytes(StringUtil.__ISO_8859_1)); md.update((byte) ':'); md.update(TypeUtil.toString(ha2, 16).getBytes(StringUtil.__ISO_8859_1)); byte[] digest = md.digest(); // check digest return encode(digest); } catch (Exception e) { throw new RuntimeException(e); } }