/*
* Copyright (c) 2010. The Codehaus. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.httpcache4j.auth.digest;
import org.codehaus.httpcache4j.*;
import org.codehaus.httpcache4j.auth.AuthScheme;
import org.codehaus.httpcache4j.util.AuthDirectivesParser;
import org.junit.Assert;
import org.junit.Test;
import java.net.URI;
import static org.junit.Assert.assertEquals;
/**
* @author <a href="mailto:hamnis@codehaus.org">Erlend Hamnaberg</a>
* @version $Revision: $
*/
public class RequestDigestTest {
@Test
public void testCalculateHashA1() {
AuthScheme scheme = new AuthScheme(AuthDirectivesParser.parse("Digest realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"").iterator().next());
Digest digest = new Digest(new HTTPHost("http", "localhost", -1), scheme);
assertEquals("f2a3f18799759d4f1a1c068b92b573cb", digest.getNonce());
RequestDigest requestDigest = new RequestDigest(
new UsernamePasswordChallenge("username", "password"),
HTTPMethod.GET,
URI.create("/"),
digest
);
assertEquals("37ddcec9c022371a3dd7d500dfc81297", requestDigest.calculateHashA1());
}
@Test
public void testCalculateHashA2() {
AuthScheme scheme = new AuthScheme(AuthDirectivesParser.parse("Digest realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"").iterator().next());
Digest digest = new Digest(new HTTPHost("http", "localhost", -1), scheme);
assertEquals("f2a3f18799759d4f1a1c068b92b573cb", digest.getNonce());
RequestDigest requestDigest = new RequestDigest(
new UsernamePasswordChallenge("username", "password"),
HTTPMethod.GET,
URI.create("/"),
digest
);
assertEquals("71998c64aea37ae77020c49c00f73fa8", requestDigest.calculateHashA2());
}
@Test
public void testDigestAuthenticationFromRFC() {
AuthScheme scheme = new AuthScheme(AuthDirectivesParser.parse("Digest realm=\"testrealm@host.com\", qop=\"auth\", nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", opaque=\"5ccc069c403ebaf9f0171e9517f40e41\"").iterator().next());
Digest digest = new Digest(new HTTPHost("http", "localhost", -1), scheme);
assertEquals("dcd98b7102dd2f0e8b11d0f600bfb0c093", digest.getNonce());
assertEquals("5ccc069c403ebaf9f0171e9517f40e41", digest.getOpaque());
RequestDigest requestDigest = new RequestDigest(
new UsernamePasswordChallenge("Mufasa", "Circle Of Life"),
HTTPMethod.GET,
URI.create("/dir/index.html"),
digest
) {
@Override
String calculateCNonce() {
return "0a4f113b";
}
};
assertEquals("939e7578ed9e3c518a452acee763bce9", requestDigest.calculateHashA1());
assertEquals("39aff3a2bab6126f332b942af96d3366", requestDigest.calculateHashA2());
assertEquals("0a4f113b", requestDigest.calculateCNonce());
assertEquals("6629fae49393a05397450978507c4ef1", requestDigest.calculateResponse());
assertEquals("Digest username=\"Mufasa\"," +
" realm=\"testrealm@host.com\"," +
" nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\"," +
" uri=\"/dir/index.html\"," +
" qop=auth," +
" nc=00000001," +
" cnonce=\"0a4f113b\"," +
" response=\"6629fae49393a05397450978507c4ef1\"," +
" opaque=\"5ccc069c403ebaf9f0171e9517f40e41\"", requestDigest.toHeaderValue());
/**
* Authorization: Digest username="Mufasa", realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/dir/index.html", qop=auth, nc=00000001, cnonce="0a4f113b", response="6629fae49393a05397450978507c4ef1", opaque="5ccc069c403ebaf9f0171e9517f40e41"
*/
}
@Test
public void testDigestAuthenticationFromLocalApache() {
AuthScheme scheme = new AuthScheme(AuthDirectivesParser.parse("Digest realm=\"The Shit\", nonce=\"74x09bV+BAA=00c61ef4d62ad0b8616a45d0714b47a39f833e91\", algorithm=MD5, qop=\"auth\"").iterator().next());
Digest digest = new Digest(new HTTPHost("http", "localhost", -1), scheme);
assertEquals("74x09bV+BAA=00c61ef4d62ad0b8616a45d0714b47a39f833e91", digest.getNonce());
RequestDigest requestDigest = new RequestDigest(
new UsernamePasswordChallenge("username", "password"),
HTTPMethod.GET,
URI.create("/private/"),
digest
) {
@Override
String calculateCNonce() {
return "MDA4MDQ1";
}
};
assertEquals("cca57e64ed1bbf0056100e2662326d85", requestDigest.calculateResponse());
}
}