blob: 5130ed51ad25f188e07790f3e335957066c371ad [file] [log] [blame]
/**
* 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.
*
*/
package org.apache.kerby.kerberos.kerb.crypto;
import org.apache.kerby.kerberos.kerb.crypto.fast.FastUtil;
import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
import org.apache.kerby.kerberos.kerb.type.base.EncryptionType;
import org.apache.kerby.util.EncryptoUtil;
import org.apache.kerby.util.HexUtil;
import org.junit.Test;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.fail;
import static org.junit.Assume.assumeTrue;
public class FastUtilTest {
static class TestCase {
EncryptionType encType;
String keyData1;
String keyData2;
String pepper1;
String pepper2;
String answer;
TestCase(EncryptionType encType, String keyData1, String keyData2,
String pepper1, String pepper2, String answer) {
this.encType = encType;
this.keyData1 = keyData1;
this.keyData2 = keyData2;
this.pepper1 = pepper1;
this.pepper2 = pepper2;
this.answer = answer;
}
}
@Test
public void testFastUtil_DES_CBC_CRC() throws Exception {
performTest(new TestCase(
EncryptionType.DES_CBC_CRC,
"key1",
"key2",
"a",
"b",
"43bae3738c9467e6"
));
}
@Test
public void testFastUtil_DES_CBC_MD4() throws Exception {
performTest(new TestCase(
EncryptionType.DES_CBC_MD4,
"key1",
"key2",
"a",
"b",
"43bae3738c9467e6"
));
}
@Test
public void testFastUtil_DES_CBC_MD5() throws Exception {
performTest(new TestCase(
EncryptionType.DES_CBC_MD5,
"key1",
"key2",
"a",
"b",
"43bae3738c9467e6"
));
}
@Test
public void testFastUtil_CAMELLIA128_CTS_CMAC() throws Exception {
performTest(new TestCase(
EncryptionType.CAMELLIA128_CTS_CMAC,
"key1",
"key2",
"a",
"b",
"403e44c30ee42525b8b4c8c379a4573c"
));
}
@Test
public void testFastUtil_CAMELLIA256_CTS_CMAC() throws Exception {
performTest(new TestCase(
EncryptionType.CAMELLIA256_CTS_CMAC,
"key1",
"key2",
"a",
"b",
"e0595b675a8b082b11b28c2ab9a94988fbc7ddc7ea29ecb5637ea25aff5134db"
));
}
@Test
public void testFastUtil_AES128_CTS_HMAC_SHA1() throws Exception {
performTest(new TestCase(
EncryptionType.AES128_CTS_HMAC_SHA1_96,
"key1",
"key2",
"a",
"b",
"97df97e4b798b29eb31ed7280287a92a"
));
}
@Test
public void testFastUtil_AES256_CTS_HMAC_SHA1() throws Exception {
assumeTrue(EncryptoUtil.isAES256Enabled());
performTest(new TestCase(
EncryptionType.AES256_CTS_HMAC_SHA1_96,
"key1",
"key2",
"a",
"b",
"4d6ca4e629785c1f01baf55e2e548566b9617ae3a96868c337cb93b5e72b1c7b"
));
}
@Test
public void testFastUtil_DES3_CBC_SHA1() throws Exception {
performTest(new TestCase(
EncryptionType.DES3_CBC_SHA1,
"key1",
"key2",
"a",
"b",
"e58f9eb643862c13ad38e529313462a7f73e62834fe54a01"
));
}
@Test
public void testFastUtil_RC4_HMAC() throws Exception {
performTest(new TestCase(
EncryptionType.RC4_HMAC,
"key1",
"key2",
"a",
"b",
"24d7f6b6bae4e5c00d2082c5ebab3672"
));
}
@Test
public void testFastUtil_RC4_HMAC_EXP() throws Exception {
performTest(new TestCase(
EncryptionType.RC4_HMAC_EXP,
"key1",
"key2",
"a",
"b",
"24d7f6b6bae4e5c00d2082c5ebab3672"
));
}
private static void performTest(TestCase testCase) throws Exception {
EncryptionKey key, key1, key2;
byte[] keyData1, keyData2;
String pepper1, pepper2, answer;
keyData1 = EncryptionHandler.getEncHandler(testCase.encType).str2key(testCase.keyData1,
testCase.keyData1, null);
key1 = new EncryptionKey(testCase.encType, keyData1);
keyData2 = EncryptionHandler.getEncHandler(testCase.encType).str2key(testCase.keyData2,
testCase.keyData2, null);
key2 = new EncryptionKey(testCase.encType, keyData2);
pepper1 = testCase.pepper1;
pepper2 = testCase.pepper2;
answer = testCase.answer;
key = FastUtil.cf2(key1, pepper1, key2, pepper2);
if (!Arrays.equals(key.getKeyData(), HexUtil.hex2bytes(answer))) {
System.err.println("Failed with:");
System.err.println("outKey:" + HexUtil.bytesToHex(key.getKeyData()));
System.err.println("answer:" + testCase.answer);
fail("CF2Test failed for " + testCase.encType.getName());
}
}
}