| /** |
| * 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()); |
| } |
| } |
| } |