/*
* ====================================================================
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.ogt.http.impl.auth;
import org.apache.ogt.http.impl.auth.NTLMEngineImpl;
import org.junit.Test;
public class TestNTLMEngineImpl {
@Test
public void testMD4() throws Exception {
checkMD4("", "31d6cfe0d16ae931b73c59d7e0c089c0");
checkMD4("a", "bde52cb31de33e46245e05fbdbd6fb24");
checkMD4("abc", "a448017aaf21d8525fc10ae87aa6729d");
checkMD4("message digest", "d9130a8164549fe818874806e1c7014b");
checkMD4("abcdefghijklmnopqrstuvwxyz", "d79e1c308aa5bbcdeea8ed63df412da9");
checkMD4("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
"043f8582f241db351ce627e153e7f0e4");
checkMD4(
"12345678901234567890123456789012345678901234567890123456789012345678901234567890",
"e33b4ddc9c38f2199c3e7b164fcc0536");
}
/* Test suite helper */
static byte checkToNibble(char c) {
if (c >= 'a' && c <= 'f')
return (byte) (c - 'a' + 0x0a);
return (byte) (c - '0');
}
/* Test suite helper */
static byte[] checkToBytes(String hex) {
byte[] rval = new byte[hex.length() / 2];
int i = 0;
while (i < rval.length) {
rval[i] = (byte) ((checkToNibble(hex.charAt(i * 2)) << 4) | (checkToNibble(hex
.charAt(i * 2 + 1))));
i++;
}
return rval;
}
/* Test suite MD4 helper */
static void checkMD4(String input, String hexOutput) throws Exception {
NTLMEngineImpl.MD4 md4;
md4 = new NTLMEngineImpl.MD4();
md4.update(input.getBytes("ASCII"));
byte[] answer = md4.getOutput();
byte[] correctAnswer = checkToBytes(hexOutput);
if (answer.length != correctAnswer.length)
throw new Exception("Answer length disagrees for MD4('" + input + "')");
int i = 0;
while (i < answer.length) {
if (answer[i] != correctAnswer[i])
throw new Exception("Answer value for MD4('" + input + "') disagrees at position "
+ Integer.toString(i));
i++;
}
}
}