directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dran...@apache.org
Subject [17/50] [abbrv] directory-kerberos git commit: Many changes with newname
Date Thu, 22 Jan 2015 00:56:41 GMT
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DecryptionTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DecryptionTest.java b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DecryptionTest.java
new file mode 100644
index 0000000..76a91ee
--- /dev/null
+++ b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DecryptionTest.java
@@ -0,0 +1,985 @@
+/**
+ *  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.spec.common.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionType;
+import org.apache.kerby.kerberos.kerb.spec.common.KeyUsage;
+import org.haox.util.HexUtil;
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Decryption test with known ciphertexts.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DecryptionTest {
+    /**
+     * The class used to store the test values
+     */
+    private static class TestCase {
+        EncryptionType encType;
+        String plainText;
+        int keyUsage;
+        String key;
+        String cipher;
+
+        TestCase(EncryptionType encType, String plainText,
+                 int keyUsage, String key, String cipher) {
+            this.encType = encType;
+            this.plainText = plainText;
+            this.keyUsage = keyUsage;
+            this.key = key;
+            this.cipher = cipher;
+        }
+    }
+
+    /**
+     * Actually do the test
+     */
+    private boolean testDecrypt(TestCase testCase) throws Exception {
+        KeyUsage ku = KeyUsage.fromValue(testCase.keyUsage);
+
+        byte[] cipherBytes = HexUtil.hex2bytes(testCase.cipher);
+        byte[] keyBytes = HexUtil.hex2bytes(testCase.key);
+
+        EncryptionKey encKey = new EncryptionKey(testCase.encType, keyBytes);
+        byte[] decrypted = EncryptionHandler.decrypt(cipherBytes, encKey, ku);
+        String plainText = new String(decrypted);
+
+        return plainText.startsWith(testCase.plainText);
+    }
+
+    /**
+     * Perform all the checks for a testcase
+     */
+    private void performTestDecrypt(TestCase testCase) {
+        //assertTrue(EncryptionHandler.isImplemented(testCase.encType));
+        if (! EncryptionHandler.isImplemented(testCase.encType)) {
+            System.err.println("Not implemented yet: " + testCase.encType.getDisplayName());
+            return;
+        }
+
+        try {
+            assertTrue(testDecrypt(testCase));
+        } catch (Exception e) {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Test for DES_CBC_CRC encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_CRC_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "", 0,
+                "45E6087CDF138FB5",
+                "28F6B09A012BCCF72FB05122B2839E6E");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_CRC encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_CRC_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "1", 1,
+                "92A7155810586B2F",
+                "B4C871C2F3E7BF7605EFD62F2EEEC205");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_CRC encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_CRC_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "9 bytesss", 2,
+                "A4B9514A61646423",
+                "5F14C35178D33D7CDE0EC169C623CC83" +
+                        "21B7B8BD34EA7EFE");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_CRC encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_CRC_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "13 bytes byte", 3,
+                "2F16A2A7FDB05768",
+                "0B588E38D971433C9D86D8BAEBF63E4C" +
+                        "1A01666E76D8A54A3293F72679ED88C9");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_CRC encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_CRC_30() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "30 bytes bytes bytes bytes byt", 4,
+                "BC8F70FD2097D67C",
+                "38D632D2C20A7C2EA250FC8ECE42938E" +
+                        "92A9F5D302502665C1A33729C1050DC2" +
+                        "056298FBFB1682CEEB65E59204FDA7DF");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD4 encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_MD4_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD4,
+                "", 0,
+                "13EF45D0D6D9A15D",
+                "1FB202BF07AF3047FB7801E588568686" +
+                        "BA63D78BE3E87DC7");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD4 encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_MD4_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD4,
+                "1", 1,
+                "64688654DC269E67",
+                "1F6CB9CECB73F755ABFDB3D565BD31D5" +
+                        "A2E64BFE44C491E20EEBE5BD20E4D2A9");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD4 encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_MD4_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD4,
+                "9 bytesss", 2,
+                "6804FB26DF8A4C32",
+                "08A53D62FEC3338AD1D218E60DBDD3B2" +
+                        "12940679D125E0621B3BAB4680CE0367" +
+                        "6A2C420E9BE784EB");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD4 encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_MD4_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD4,
+                "13 bytes byte", 3,
+                "234A436EC72FA80B",
+                "17CD45E14FF06B2840A6036E9AA7A414" +
+                        "4E29768144A0C1827D8C4BC7C9906E72" +
+                        "CD4DC328F6648C99");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD4 encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_MD4_30()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD4,
+                "30 bytes bytes bytes bytes byt", 4,
+                "1FD5F74334C4FB8C",
+                "51134CD8951E9D57C0A36053E04CE03E" +
+                        "CB8422488FDDC5C074C4D85E60A2AE42" +
+                        "3C3C701201314F362CB07448091679C6" +
+                        "A496C11D7B93C71B");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD5 encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_MD5_0()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD5,
+                "", 0,
+                "4A545E0BF7A22631",
+                "784CD81591A034BE82556F56DCA3224B" +
+                        "62D9956FA90B1B93");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD5 encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_MD5_1()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD5,
+                "1", 1,
+                "D5804A269DC4E645",
+                "FFA25C7BE287596BFE58126E90AAA0F1" +
+                        "2D9A82A0D86DF6D5F9074B6B399E7FF1");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD5 encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_MD5_9()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD5,
+                "9 bytesss", 2,
+                "C8312F7F83EA4640",
+                "E7850337F2CC5E3F35CE3D69E2C32986" +
+                        "38A7AA44B878031E39851E47C15B5D0E" +
+                        "E7E7AC54DE111D80");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD5 encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_MD5_13()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD5,
+                "13 bytes byte", 3,
+                "7FDA3E62AD8AF18C",
+                "D7A8032E19994C928777506595FBDA98" +
+                        "83158A8514548E296E911C29F465C672" +
+                        "366000558BFC2E88");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_MD5 encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_MD5_30()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES_CBC_MD5,
+                "30 bytes bytes bytes bytes byt", 4,
+                "D3D6832970A73752",
+                "8A48166A4C6FEAE607A8CF68B381C075" +
+                        "5E402B19DBC0F81A7D7CA19A25E05223" +
+                        "F6064409BF5A4F50ACD826639FFA7673" +
+                        "FD324EC19E429502");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_SHA1 encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_SHA1_0()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "", 0,
+                "7A25DF8992296DCEDA0E135BC4046E23" +
+                        "75B3C14C98FBC162",
+                "548AF4D504F7D723303F12175FE8386B" +
+                        "7B5335A967BAD61F3BF0B143");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_SHA1 encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptDES_CBC_SHA1_1()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "1", 1,
+                "BC0783891513D5CE57BC138FD3C11AE6" +
+                        "40452385322962B6",
+                "9C3C1DBA4747D85AF2916E4745F2DCE3" +
+                        "8046796E5104BCCDFB669A91D44BC356" +
+                        "660945C7");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_SHA1 encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_SHA1_9()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "9 bytesss", 2,
+                "2FD0F725CE04100D2FC8A18098831F85" +
+                        "0B45D9EF850BD920",
+                "CF9144EBC8697981075A8BAD8D74E5D7" +
+                        "D591EB7D9770C7ADA25EE8C5B3D69444" +
+                        "DFEC79A5B7A01482D9AF74E6");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_SHA1 encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_SHA1_13()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "13 bytes byte", 3,
+                "0DD52094E0F41CECCB5BE510A764B351" +
+                        "76E3981332F1E598",
+                "839A17081ECBAFBCDC91B88C6955DD3C" +
+                        "4514023CF177B77BF0D0177A16F705E8" +
+                        "49CB7781D76A316B193F8D30");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for DES_CBC_SHA1 encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptDES_CBC_SHA1_30()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "30 bytes bytes bytes bytes byt", 4,
+                "F11686CBBC9E23EA54FECD2A3DCDFB20" +
+                        "B6FE98BF2645C4C4",
+                "89433E83FD0EA3666CFFCD18D8DEEBC5" +
+                        "3B9A34EDBEB159D9F667C6C2B9A96440" +
+                        "1D55E7E9C68D648D65C3AA84FFA3790C" +
+                        "14A864DA8073A9A95C4BA2BC");
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptARC_FOUR_0()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC,
+                "", 0,
+                "F81FEC39255F5784E850C4377C88BD85",
+                "02C1EB15586144122EC717763DD348BF" +
+                        "00434DDC6585954C"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptARC_FOUR_1()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC,
+                "1", 1,
+                "67D1300D281223867F9647FF48721273",
+                "6156E0CC04E0A0874F9FDA008F498A7A" +
+                        "DBBC80B70B14DDDBC0"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptARC_FOUR_9()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC,
+                "9 bytesss", 2,
+                "3E40AB6093695281B3AC1A9304224D98",
+                "0F9AD121D99D4A09448E4F1F718C4F5C" +
+                        "BE6096262C66F29DF232A87C9F98755D" +
+                        "55"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptARC_FOUR_13()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC,
+                "13 bytes byte", 3,
+                "4BA2FBF0379FAED87A254D3B353D5A7E",
+                "612C57568B17A70352BAE8CF26FB9459" +
+                        "A6F3353CD35FD439DB3107CBEC765D32" +
+                        "6DFC04C1DD"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptARC_FOUR_30()
+    {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC,
+                "30 bytes bytes bytes bytes byt", 4,
+                "68F263DB3FCE15D031C9EAB02D67107A",
+                "95F9047C3AD75891C2E9B04B16566DC8" +
+                        "B6EB9CE4231AFB2542EF87A7B5A0F260" +
+                        "A99F0460508DE0CECC632D07C354124E" +
+                        "46C5D2234EB8"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC_EXP encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptARCFOUR_HMAC_EXP_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC_EXP,
+                "", 0,
+                "F7D3A155AF5E238A0B7A871A96BA2AB2",
+                "2827F0E90F62E7460C4E2FB39F9657BA" +
+                        "8BFAA991D7FDADFF"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptARCFOUR_HMAC_EXP_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC_EXP,
+                "1", 1,
+                "DEEAA0607DB799E2FDD6DB2986BB8D65",
+                "3DDA392E2E275A4D75183FA6328A0A4E" +
+                        "6B752DF6CD2A25FA4E"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptARCFOUR_HMAC_EXP_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC_EXP,
+                "9 bytesss", 2,
+                "33AD7FC2678615569B2B09836E0A3AB6",
+                "09D136AC485D92644EC6701D6A0D03E8" +
+                        "982D7A3CA7EFD0F8F4F83660EF4277BB" +
+                        "81"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptARCFOUR_HMAC_EXP_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC_EXP,
+                "13 bytes byte", 3,
+                "39F25CD4F0D41B2B2D9D300FCB2981CB",
+                "912388D7C07612819E3B640FF5CECDAF" +
+                        "72E5A59DF10F1091A6BEC39CAAD748AF" +
+                        "9BD2D8D546"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for ARCFOUR_HMAC encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptARCFOUR_HMAC_EXP_30() {
+        TestCase testCase = new TestCase(
+                EncryptionType.ARCFOUR_HMAC_EXP,
+                "30 bytes bytes bytes bytes byt", 4,
+                "9F725542D9F72AA1F386CBE7896984FC",
+                "78B35A08B08BE265AEB4145F076513B6" +
+                        "B56EFED3F7526574AF74F7D2F9BAE96E" +
+                        "ABB76F2D87386D2E93E3A77B99919F1D" +
+                        "976490E2BD45"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES128_CTS_HMAC_SHA1_96 encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptAES128_CTS_HMAC_SHA1_96_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "", 0,
+                "5A5C0F0BA54F3828B2195E66CA24A289",
+                "49FF8E11C173D9583A3254FBE7B1F1DF" +
+                        "36C538E8416784A1672E6676"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES128_CTS_HMAC_SHA1_96 encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptAES128_CTS_HMAC_SHA1_96_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "1", 1,
+                "98450E3F3BAA13F5C99BEB936981B06F",
+                "F86742F537B35DC2174A4DBAA920FAF9" +
+                        "042090B065E1EBB1CAD9A65394"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES128_CTS_HMAC_SHA1_96 encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptAES128_CTS_HMAC_SHA1_96_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "9 bytesss", 2,
+                "9062430C8CDA3388922E6D6A509F5B7A",
+                "68FB9679601F45C78857B2BF820FD6E5" +
+                        "3ECA8D42FD4B1D7024A09205ABB7CD2E" +
+                        "C26C355D2F"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES128_CTS_HMAC_SHA1_96 encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptAES128_CTS_HMAC_SHA1_96_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "13 bytes byte", 3,
+                "033EE6502C54FD23E27791E987983827",
+                "EC366D0327A933BF49330E650E49BC6B" +
+                        "974637FE80BF532FE51795B4809718E6" +
+                        "194724DB948D1FD637"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES128_CTS_HMAC_SHA1_96 encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptAES128_CTS_HMAC_SHA1_96_30() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "30 bytes bytes bytes bytes byt", 4,
+                "DCEEB70B3DE76562E689226C76429148",
+                "C96081032D5D8EEB7E32B4089F789D0F" +
+                        "AA481DEA74C0F97CBF3146DDFCF8E800" +
+                        "156ECB532FC203E30FF600B63B350939" +
+                        "FECE510F02D7FF1E7BAC"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES256_CTS_HMAC_SHA1_96 encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptAES256_CTS_HMAC_SHA1_96_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "", 0,
+                "17F275F2954F2ED1F90C377BA7F4D6A3" +
+                        "69AA0136E0BF0C927AD6133C693759A9",
+                "E5094C55EE7B38262E2B044280B06937" +
+                        "9A95BF95BD8376FB3281B435"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES256_CTS_HMAC_SHA1_96 encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptAES256_CTS_HMAC_SHA1_96_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "1", 1,
+                "B9477E1FF0329C0050E20CE6C72D2DFF" +
+                        "27E8FE541AB0954429A9CB5B4F7B1E2A",
+                "406150B97AEB76D43B36B62CC1ECDFBE" +
+                        "6F40E95755E0BEB5C27825F3A4"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES256_CTS_HMAC_SHA1_96 encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptAES256_CTS_HMAC_SHA1_96_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "9 bytesss", 2,
+                "B1AE4CD8462AFF1677053CC9279AAC30" +
+                        "B796FB81CE21474DD3DDBCFEA4EC76D7",
+                "09957AA25FCAF88F7B39E4406E633012" +
+                        "D5FEA21853F6478DA7065CAEF41FD454" +
+                        "A40824EEC5"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES256_CTS_HMAC_SHA1_96 encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptAES256_CTS_HMAC_SHA1_96_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "13 bytes byte", 3,
+                "E5A72BE9B7926C1225BAFEF9C1872E7B" +
+                        "A4CDB2B17893D84ABD90ACDD8764D966",
+                "D8F1AAFEEC84587CC3E700A774E56651" +
+                        "A6D693E174EC4473B5E6D96F80297A65" +
+                        "3FB818AD893E719F96"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for AES256_CTS_HMAC_SHA1_96 encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptAES256_CTS_HMAC_SHA1_96_30() {
+        TestCase testCase = new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "30 bytes bytes bytes bytes byt", 4,
+                "F1C795E9248A09338D82C3F8D5B56704" +
+                        "0B0110736845041347235B1404231398",
+                "D1137A4D634CFECE924DBC3BF6790648" +
+                        "BD5CFF7DE0E7B99460211D0DAEF3D79A" +
+                        "295C688858F3B34B9CBD6EEBAE81DAF6" +
+                        "B734D4D498B6714F1C1D"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA128_CTS_CMAC encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptCAMELIA128_CTS_CMAC_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "", 0,
+                "1DC46A8D763F4F93742BCBA3387576C3",
+                "C466F1871069921EDB7C6FDE244A52DB" +
+                        "0BA10EDC197BDB8006658CA3CCCE6EB8"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA128_CTS_CMAC encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptCAMELIA128_CTS_CMAC_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "1", 1,
+                "5027BC231D0F3A9D23333F1CA6FDBE7C",
+                "842D21FD950311C0DD464A3F4BE8D6DA" +
+                        "88A56D559C9B47D3F9A85067AF661559" +
+                        "B8"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA128_CTS_CMAC encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptCAMELIA128_CTS_CMAC_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "9 bytesss", 2,
+                "A1BB61E805F9BA6DDE8FDBDDC05CDEA0",
+                "619FF072E36286FF0A28DEB3A352EC0D" +
+                        "0EDF5C5160D663C901758CCF9D1ED33D" +
+                        "71DB8F23AABF8348A0"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA128_CTS_CMAC encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptCAMELIA128_CTS_CMAC_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "13 bytes byte", 3,
+                "2CA27A5FAF5532244506434E1CEF6676",
+                "B8ECA3167AE6315512E59F98A7C50020" +
+                        "5E5F63FF3BB389AF1C41A21D640D8615" +
+                        "C9ED3FBEB05AB6ACB67689B5EA"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA128_CTS_CMAC encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptCAMELIA128_CTS_CMAC_30() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "30 bytes bytes bytes bytes byt", 4,
+                "7824F8C16F83FF354C6BF7515B973F43",
+                "A26A3905A4FFD5816B7B1E27380D0809" +
+                        "0C8EC1F304496E1ABDCD2BDCD1DFFC66" +
+                        "0989E117A713DDBB57A4146C1587CBA4" +
+                        "356665591D2240282F5842B105A5"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA256_CTS_CMAC encryption type, with 0 byte
+     */
+    @Test
+    public void testDecryptCAMELIA256_CTS_CMAC_0() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "", 0,
+                "B61C86CC4E5D2757545AD423399FB703" +
+                        "1ECAB913CBB900BD7A3C6DD8BF92015B",
+                "03886D03310B47A6D8F06D7B94D1DD83" +
+                        "7ECCE315EF652AFF620859D94A259266"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA256_CTS_CMAC encryption type, with 1 byte
+     */
+    @Test
+    public void testDecryptCAMELIA256_CTS_CMAC_1() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "1", 1,
+                "1B97FE0A190E2021EB30753E1B6E1E77" +
+                        "B0754B1D684610355864104963463833",
+                "2C9C1570133C99BF6A34BC1B0212002F" +
+                        "D194338749DB4135497A347CFCD9D18A12"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA256_CTS_CMAC encryption type, with 9 bytes
+     */
+    @Test
+    public void testDecryptCAMELIA256_CTS_CMAC_9() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "9 bytesss", 2,
+                "32164C5B434D1D1538E4CFD9BE8040FE" +
+                        "8C4AC7ACC4B93D3314D2133668147A05",
+                "9C6DE75F812DE7ED0D28B2963557A115" +
+                        "640998275B0AF5152709913FF52A2A9C" +
+                        "8E63B872F92E64C839"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA256_CTS_CMAC encryption type, with 13 bytes
+     */
+    @Test
+    public void testDecryptCAMELIA256_CTS_CMAC_13() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "13 bytes byte", 3,
+                "B038B132CD8E06612267FAB7170066D8" +
+                        "8AECCBA0B744BFC60DC89BCA182D0715",
+                "EEEC85A9813CDC536772AB9B42DEFC57" +
+                        "06F726E975DDE05A87EB5406EA324CA1" +
+                        "85C9986B42AABE794B84821BEE"
+        );
+
+        performTestDecrypt(testCase);
+    }
+
+
+    /**
+     * Test for CAMELLIA256_CTS_CMAC encryption type, with 30 bytes
+     */
+    @Test
+    public void testDecryptCAMELIA256_CTS_CMAC_30() {
+        TestCase testCase = new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "30 bytes bytes bytes bytes byt", 4,
+                "CCFCD349BF4C6677E86E4B02B8EAB924" +
+                        "A546AC731CF9BF6989B996E7D6BFBBA7",
+                "0E44680985855F2D1F1812529CA83BFD" +
+                        "8E349DE6FD9ADA0BAAA048D68E265FEB" +
+                        "F34AD1255A344999AD37146887A6C684" +
+                        "5731AC7F46376A0504CD06571474"
+        );
+
+        performTestDecrypt(testCase);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DesKeyMakerTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DesKeyMakerTest.java b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DesKeyMakerTest.java
new file mode 100644
index 0000000..95a1827
--- /dev/null
+++ b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/DesKeyMakerTest.java
@@ -0,0 +1,64 @@
+package org.apache.kerby.kerberos.kerb.crypto;
+
+import org.apache.kerby.kerberos.kerb.crypto.key.DesKeyMaker;
+import org.haox.util.HexUtil;
+import org.junit.Assert;
+
+/**
+ * This is just for my experimental tweaking, so pleas bear it.
+ */
+public class DesKeyMakerTest {
+
+    /**
+     * The class used to store the test values
+     */
+    private static class TestCase {
+        String salt;
+        String passwd;
+        String passwdSaltBytes;
+        String fanFoldedKey;
+        String intermediateKey;
+        String finalKey;
+
+        private TestCase(String salt, String passwd, String passwdSaltBytes,
+                         String fanFoldedKey, String intermediateKey, String finalKey) {
+            this.salt = salt;
+            this.passwd = passwd;
+            this.passwdSaltBytes = passwdSaltBytes;
+            this.fanFoldedKey = fanFoldedKey;
+            this.intermediateKey = intermediateKey;
+            this.finalKey = finalKey;
+        }
+    }
+
+    /**
+     * Actually do the test
+     */
+    private void test(TestCase tc) {
+        byte[] expectedValue = HexUtil.hex2bytes(tc.passwdSaltBytes);
+        byte[] value = DesKeyMaker.makePasswdSalt(tc.passwd, tc.salt);
+        Assert.assertArrayEquals("PasswdSalt bytes", expectedValue, value);
+
+        expectedValue = HexUtil.hex2bytes(tc.fanFoldedKey);
+        value = DesKeyMaker.fanFold(tc.passwd, tc.salt, null);
+        Assert.assertArrayEquals("FanFold result", expectedValue, value);
+
+        expectedValue = HexUtil.hex2bytes(tc.intermediateKey);
+        value = DesKeyMaker.intermediateKey(value);
+        Assert.assertArrayEquals("IntermediateKey result", expectedValue, value);
+
+        // finalKey check ignored here and it's done in String2keyTest.
+    }
+
+    /**
+     * This is just for my experimental tweaking, so pleas bear it.
+     */
+    //@Test
+    public void testCase1() {
+        TestCase tc = new TestCase("ATHENA.MIT.EDUraeburn",
+                "password", "70617373776f7264415448454e412e4d49542e4544557261656275726e",
+                "c01e38688ac86c2e", "c11f38688ac86d2f", "cbc22fae235298e3");
+
+        test(tc);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/KeyDeriveTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/KeyDeriveTest.java b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/KeyDeriveTest.java
new file mode 100644
index 0000000..a9105fd
--- /dev/null
+++ b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/KeyDeriveTest.java
@@ -0,0 +1,228 @@
+/**
+ *  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.enc.provider.*;
+import org.apache.kerby.kerberos.kerb.crypto.key.AesKeyMaker;
+import org.apache.kerby.kerberos.kerb.crypto.key.CamelliaKeyMaker;
+import org.apache.kerby.kerberos.kerb.crypto.key.Des3KeyMaker;
+import org.apache.kerby.kerberos.kerb.crypto.key.DkKeyMaker;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionType;
+import org.haox.util.HexUtil;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+/**
+ * Key derivation test with known values.
+ */
+public class KeyDeriveTest {
+
+    static class TestCase {
+        EncryptionType encType;
+        String inkey;
+        String constant;
+        String answer;
+
+        TestCase(EncryptionType encType, String inkey,
+                 String constant, String answer) {
+            this.encType = encType;
+            this.inkey = inkey;
+            this.constant = constant;
+            this.answer = answer;
+        }
+    }
+
+    static TestCase[] testCases = new TestCase[] {
+    /* Kc, Ke, Kei for a DES3 key */
+            new TestCase(
+                    EncryptionType.DES3_CBC_SHA1,
+                    "850BB51358548CD05E86768C313E3BFE" +
+                            "F7511937DCF72C3E",
+                    "0000000299",
+                    "F78C496D16E6C2DAE0E0B6C24057A84C" +
+                            "0426AEEF26FD6DCE"
+            ),
+            new TestCase(
+                    EncryptionType.DES3_CBC_SHA1,
+                    "850BB51358548CD05E86768C313E3BFE" +
+                            "F7511937DCF72C3E",
+                    "00000002AA",
+                    "5B5723D0B634CB684C3EBA5264E9A70D" +
+                            "52E683231AD3C4CE"
+            ),
+            new TestCase(
+                    EncryptionType.DES3_CBC_SHA1,
+                    "850BB51358548CD05E86768C313E3BFE" +
+                            "F7511937DCF72C3E",
+                    "0000000255",
+                    "A77C94980E9B7345A81525C423A737CE" +
+                            "67F4CD91B6B3DA45"
+            ),
+
+    /* Kc, Ke, Ki for an AES-128 key */
+            new TestCase(
+                    EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                    "42263C6E89F4FC28B8DF68EE09799F15",
+                    "0000000299",
+                    "34280A382BC92769B2DA2F9EF066854B"
+            ),
+            new TestCase(
+                    EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                    "42263C6E89F4FC28B8DF68EE09799F15",
+                    "00000002AA",
+                    "5B14FC4E250E14DDF9DCCF1AF6674F53"
+            ),
+            new TestCase(
+                    EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                    "42263C6E89F4FC28B8DF68EE09799F15",
+                    "0000000255",
+                    "4ED31063621684F09AE8D89991AF3E8F"
+            ),
+
+    /* Kc, Ke, Ki for an AES-256 key */
+            new TestCase(
+                    EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                    "FE697B52BC0D3CE14432BA036A92E65B" +
+                            "BB52280990A2FA27883998D72AF30161",
+                    "0000000299",
+                    "BFAB388BDCB238E9F9C98D6A878304F0" +
+                            "4D30C82556375AC507A7A852790F4674"
+            ),
+            new TestCase(
+                    EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                    "FE697B52BC0D3CE14432BA036A92E65B" +
+                            "BB52280990A2FA27883998D72AF30161",
+                    "00000002AA",
+                    "C7CFD9CD75FE793A586A542D87E0D139" +
+                            "6F1134A104BB1A9190B8C90ADA3DDF37"
+            ),
+            new TestCase(
+                    EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                    "FE697B52BC0D3CE14432BA036A92E65B" +
+                            "BB52280990A2FA27883998D72AF30161",
+                    "0000000255",
+                    "97151B4C76945063E2EB0529DC067D97" +
+                            "D7BBA90776D8126D91F34F3101AEA8BA"
+            ),
+
+    /* Kc, Ke, Ki for a Camellia-128 key */
+            new TestCase(
+                    EncryptionType.CAMELLIA128_CTS_CMAC,
+                    "57D0297298FFD9D35DE5A47FB4BDE24B",
+                    "0000000299",
+                    "D155775A209D05F02B38D42A389E5A56"
+            ),
+            new TestCase(
+                    EncryptionType.CAMELLIA128_CTS_CMAC,
+                    "57D0297298FFD9D35DE5A47FB4BDE24B",
+                    "00000002AA",
+                    "64DF83F85A532F17577D8C37035796AB"
+            ),
+            new TestCase(
+                    EncryptionType.CAMELLIA128_CTS_CMAC,
+                    "57D0297298FFD9D35DE5A47FB4BDE24B",
+                    "0000000255",
+                    "3E4FBDF30FB8259C425CB6C96F1F4635"
+            ),
+
+    /* Kc, Ke, Ki for a Camellia-256 key */
+            new TestCase(
+                    EncryptionType.CAMELLIA256_CTS_CMAC,
+                    "B9D6828B2056B7BE656D88A123B1FAC6" +
+                            "8214AC2B727ECF5F69AFE0C4DF2A6D2C",
+                    "0000000299",
+                    "E467F9A9552BC7D3155A6220AF9C1922" +
+                            "0EEED4FF78B0D1E6A1544991461A9E50"
+            ),
+            new TestCase(
+                    EncryptionType.CAMELLIA256_CTS_CMAC,
+                    "B9D6828B2056B7BE656D88A123B1FAC6" +
+                            "8214AC2B727ECF5F69AFE0C4DF2A6D2C",
+                    "00000002AA",
+                    "412AEFC362A7285FC3966C6A5181E760" +
+                            "5AE675235B6D549FBFC9AB6630A4C604"
+            ),
+            new TestCase(
+                    EncryptionType.CAMELLIA256_CTS_CMAC,
+                    "B9D6828B2056B7BE656D88A123B1FAC6" +
+                            "8214AC2B727ECF5F69AFE0C4DF2A6D2C",
+                    "0000000255",
+                    "FA624FA0E523993FA388AEFDC67E67EB" +
+                            "CD8C08E8A0246B1D73B0D1DD9FC582B0"
+            )
+    };
+
+    static DkKeyMaker getKeyMaker(EncryptionType encType) {
+        switch (encType) {
+            case DES3_CBC_SHA1:
+                return new Des3KeyMaker(new Des3Provider());
+            case AES128_CTS_HMAC_SHA1_96:
+                return new AesKeyMaker(new Aes128Provider());
+            case AES256_CTS_HMAC_SHA1_96:
+                return new AesKeyMaker(new Aes256Provider());
+            case CAMELLIA128_CTS_CMAC:
+                return new CamelliaKeyMaker(new Camellia128Provider());
+            case CAMELLIA256_CTS_CMAC:
+                return new CamelliaKeyMaker(new Camellia256Provider());
+            default:
+                return null;
+        }
+    }
+
+    @Test
+    public void testDeriveKeys() {
+        boolean overallResult = true;
+
+        for (TestCase tc : testCases) {
+            System.err.println("Key deriving test for " + tc.encType.getName());
+            try {
+                if (! testWith(tc)) {
+                    overallResult = false;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                overallResult = false;
+            }
+        }
+
+        if (!overallResult) {
+            Assert.fail();
+        }
+    }
+
+    private boolean testWith(TestCase testCase) throws Exception {
+        byte[] answer = HexUtil.hex2bytes(testCase.answer);
+        byte[] inkey = HexUtil.hex2bytes(testCase.inkey);
+        byte[] constant = HexUtil.hex2bytes(testCase.constant);
+        byte[] outkey;
+
+        DkKeyMaker km = getKeyMaker(testCase.encType);
+        outkey = km.dk(inkey, constant);
+        if (! Arrays.equals(answer, outkey)) {
+            System.err.println("failed with:");
+            System.err.println("outKey:" + HexUtil.bytesToHex(outkey));
+            System.err.println("answer:" + testCase.answer);
+            return false;
+        }
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/String2keyTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/String2keyTest.java b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/String2keyTest.java
new file mode 100644
index 0000000..d8377d8
--- /dev/null
+++ b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/String2keyTest.java
@@ -0,0 +1,583 @@
+/**
+ *  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.spec.common.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionType;
+import org.haox.util.HexUtil;
+import org.junit.Test;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * By ref. MIT krb5 t_str2key.c and RFC3961 test vectors
+ *
+ * String 2 key test with known values.
+ */
+public class String2keyTest {
+
+    static class TestCase {
+        EncryptionType encType;
+        String password;
+        String salt;
+        String param;
+        String answer;
+        boolean allowWeak;
+
+        TestCase(EncryptionType encType, String password, String salt, String param,
+                 String answer, boolean allowWeak) {
+            this.encType = encType;
+            this.password = password;
+            this.salt = salt;
+            this.param = param;
+            this.answer = answer;
+            this.allowWeak = allowWeak;
+        }
+    }
+
+    /**
+     *  Test vectors from RFC 3961 appendix A.2.
+     */
+
+    @Test
+    public void test_DES_CBC_CRC_0() {
+        performTest(new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00",
+                "CBC22FAE235298E3",
+                false));
+    }
+
+    @Test
+    public void test_DES_CBC_CRC_1() {
+        performTest(new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "potatoe",
+                "WHITEHOUSE.GOVdanny",
+                "00",
+                "DF3D32A74FD92A01",
+                false));
+    }
+
+    @Test
+    public void test_DES_CBC_CRC_2() {
+        performTest(new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                toUtf8("F09D849E"),
+                "EXAMPLE.COMpianist",
+                "00",
+                "4FFB26BAB0CD9413",
+                false));
+    }
+
+    @Test
+    public void test_DES_CBC_CRC_3() {
+        performTest(new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                toUtf8("C39F"),
+                "ATHENA.MIT.EDUJuri" + toUtf8("C5A169C487"),
+                "00",
+                "62C81A5232B5E69D",
+                false));
+    }
+
+    @Test
+    public void test_DES_CBC_CRC_4() {
+        performTest(new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "11119999",
+                "AAAAAAAA",
+                "00",
+                "984054d0f1a73e31",
+                false));
+    }
+
+    @Test
+    public void test_DES_CBC_CRC_5() {
+        performTest(new TestCase(
+                EncryptionType.DES_CBC_CRC,
+                "NNNN6666",
+                "FFFFAAAA",
+                "00",
+                "C4BF6B25ADF7A4F8",
+                false));
+    }
+
+    // Test vectors from RFC 3961 appendix A.4.
+
+    @Test
+    public void test_DES3_CBC_SHA1_0() {
+        performTest(new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                null,
+                "850BB51358548CD05E86768C" +
+                        "313E3BFEF7511937DCF72C3E",
+                false));
+    }
+
+    @Test
+    public void test_DES3_CBC_SHA1_1() {
+        performTest(new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "potatoe",
+                "WHITEHOUSE.GOVdanny",
+                null,
+                "DFCD233DD0A43204EA6DC437" +
+                        "FB15E061B02979C1F74F377A",
+                false));
+    }
+
+    @Test
+    public void test_DES3_CBC_SHA1_2() {
+        performTest(new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                "penny",
+                "EXAMPLE.COMbuckaroo",
+                null,
+                "6D2FCDF2D6FBBC3DDCADB5DA" +
+                        "5710A23489B0D3B69D5D9D4A",
+                false));
+    }
+
+    @Test
+    public void test_DES3_CBC_SHA1_3() {
+        performTest(new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                toUtf8("C39F"),
+                "ATHENA.MIT.EDUJuri" + toUtf8("C5A169C487"),
+                null,
+                "16D5A40E1CE3BACB61B9DCE0" +
+                        "0470324C831973A7B952FEB0",
+                false));
+    }
+
+    @Test
+    public void test_DES3_CBC_SHA1_4() {
+        performTest(new TestCase(
+                EncryptionType.DES3_CBC_SHA1,
+                toUtf8("F09D849E"),
+                "EXAMPLE.COMpianist",
+                null,
+                "85763726585DBC1CCE6EC43E" +
+                        "1F751F07F1C4CBB098F40B19",
+                false));
+    }
+
+    // Test vectors from RFC 3962 appendix B.
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_0() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000001",
+                "42263C6E89F4FC28B8DF68EE09799F15",
+                true));
+    }
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_1() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000002",
+                "C651BF29E2300AC27FA469D693BDDA13",
+                true));
+    }
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_2() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "000004B0", // 1200
+                "4C01CD46D632D01E6DBE230A01ED642A",
+                true));
+    }
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_3() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "password",
+                toUtf8("1234567878563412"),
+                "00000005",
+                "E9B23D52273747DD5C35CB55BE619D8E",
+                true));
+    }
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_4() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase exceeds block size",
+                "000004B0", // 1200
+                "CB8005DC5F90179A7F02104C0018751D",
+                true));
+    }
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_5() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                toUtf8("F09D849E"),
+                "EXAMPLE.COMpianist",
+                "00000032", // 50
+                "F149C1F2E154A73452D43E7FE62A56E5",
+                true));
+    }
+
+    @Test
+    public void test_AES128_CTS_HMAC_SHA1_96_6() {
+        performTest(new TestCase(
+                EncryptionType.AES128_CTS_HMAC_SHA1_96,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase equals block size",
+                "000004B0", // 1200
+                "59D1BB789A828B1AA54EF9C2883F69ED",
+                true));
+    }
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_0() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000001",
+                "FE697B52BC0D3CE14432BA036A92E65B" +
+                        "BB52280990A2FA27883998D72AF30161",
+                true));
+    }
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_1() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000002",
+                "A2E16D16B36069C135D5E9D2E25F8961" +
+                        "02685618B95914B467C67622225824FF",
+                true));
+    }
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_2() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "000004B0", // 1200
+                "55A6AC740AD17B4846941051E1E8B0A7" +
+                        "548D93B0AB30A8BC3FF16280382B8C2A",
+                true));
+    }
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_3() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "password",
+                toUtf8("1234567878563412"),
+                "00000005",
+                "97A4E786BE20D81A382D5EBC96D5909C" +
+                        "ABCDADC87CA48F574504159F16C36E31",
+                true));
+    }
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_4() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase equals block size",
+                "000004B0", // 1200
+                "89ADEE3608DB8BC71F1BFBFE459486B0" +
+                        "5618B70CBAE22092534E56C553BA4B34",
+                true));
+    }
+
+
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_5() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase exceeds block size",
+                "000004B0", // 1200
+                "D78C5C9CB872A8C9DAD4697F0BB5B2D2" +
+                        "1496C82BEB2CAEDA2112FCEEA057401B",
+                true));
+    }
+
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_6() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                toUtf8("F09D849E"),
+                "EXAMPLE.COMpianist",
+                "00000032", // 50
+                "4B6D9839F84406DF1F09CC166DB4B83C" +
+                        "571848B784A3D6BDC346589A3E393F9E",
+                true));
+    }
+
+    // Check for KRB5_ERR_BAD_S2K_PARAMS return when weak iteration counts are forbidden
+    @Test
+    public void test_AES256_CTS_HMAC_SHA1_96_7() {
+        performTest(new TestCase(
+                EncryptionType.AES256_CTS_HMAC_SHA1_96,
+                toUtf8("F09D849E"),
+                "EXAMPLE.COMpianist",
+                "00000032", // 50
+                "4B6D9839F84406DF1F09CC166DB4B83C" +
+                        "571848B784A3D6BDC346589A3E393F9E",
+                false));
+    }
+
+    // The same inputs applied to Camellia enctypes.
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_0() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000001",
+                "57D0297298FFD9D35DE5A47FB4BDE24B",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_1() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000002",
+                "73F1B53AA0F310F93B1DE8CCAA0CB152",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_2() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "000004B0", // 1200
+                "8E571145452855575FD916E7B04487AA",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_3() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "password",
+                toUtf8("1234567878563412"),
+                "00000005",
+                "00498FD916BFC1C2B1031C170801B381",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_4() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase equals block size",
+                "000004B0", // 1200
+                "8BF6C3EF709B981DBB585D086843BE05",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_5() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase exceeds block size",
+                "000004B0", // 1200
+                "5752AC8D6AD1CCFE8430B312871C2F74",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA128_CTS_CMAC_6() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA128_CTS_CMAC,
+                toUtf8("f09d849e"),
+                "EXAMPLE.COMpianist",
+                "00000032", // 50
+                "CC75C7FD260F1C1658011FCC0D560616",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_1() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000001",
+                "B9D6828B2056B7BE656D88A123B1FAC6" +
+                        "8214AC2B727ECF5F69AFE0C4DF2A6D2C",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_2() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "00000002",
+                "83FC5866E5F8F4C6F38663C65C87549F" +
+                        "342BC47ED394DC9D3CD4D163ADE375E3",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_3() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "password",
+                "ATHENA.MIT.EDUraeburn",
+                "000004B0", // 1200
+                "77F421A6F25E138395E837E5D85D385B" +
+                        "4C1BFD772E112CD9208CE72A530B15E6",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_4() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "password",
+                toUtf8("1234567878563412"),
+                "00000005",
+                "11083A00BDFE6A41B2F19716D6202F0A" +
+                        "FA94289AFE8B27A049BD28B1D76C389A",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_5() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase equals block size",
+                "000004B0", // 1200
+                "119FE2A1CB0B1BE010B9067A73DB63ED" +
+                        "4665B4E53A98D178035DCFE843A6B9B0",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_6() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+                "pass phrase exceeds block size",
+                "000004B0", // 1200
+                "614D5DFC0BA6D390B412B89AE4D5B088" +
+                        "B612B316510994679DDB4383C7126DDF",
+                true));
+    }
+
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_7() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                toUtf8("f09d849e"),
+                "EXAMPLE.COMpianist",
+                "00000032", // 50
+                "163B768C6DB148B4EEC7163DF5AED70E" +
+                        "206B68CEC078BC069ED68A7ED36B1ECC",
+                true));
+    }
+
+    // Check for KRB5_ERR_BAD_S2K_PARAMS return when weak iteration counts are forbidden.
+    @Test
+    public void test_CAMELLIA256_CTS_CMAC_8() {
+        performTest(new TestCase(
+                EncryptionType.CAMELLIA256_CTS_CMAC,
+                toUtf8("f09d849e"),
+                "EXAMPLE.COMpianist",
+                "00000032", // 50
+                "163B768C6DB148B4EEC7163DF5AED70E" +
+                        "206B68CEC078BC069ED68A7ED36B1ECC",
+                false));
+    }
+
+    /**
+     * Convert hex string into password
+     */
+    private static String toUtf8(String string) {
+        return new String(HexUtil.hex2bytes(string), StandardCharsets.UTF_8); // Per spec
+    }
+
+    /**
+     * Perform all the checks for a testcase
+     */
+    private void performTest(TestCase testCase) {
+        //assertTrue(EncryptionHandler.isImplemented(testCase.encType));
+        if (! EncryptionHandler.isImplemented(testCase.encType)) {
+            System.err.println("Not implemented yet: " + testCase.encType.getDisplayName());
+            return;
+        }
+
+        try {
+            assertTrue(testWith(testCase));
+        } catch (Exception e) {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Do the actual test work
+     */
+    private boolean testWith(TestCase tc) throws Exception {
+        byte[] answer = HexUtil.hex2bytes(tc.answer);
+        byte[] params = tc.param != null ? HexUtil.hex2bytes(tc.param) : null;
+        EncryptionKey outkey = EncryptionHandler.string2Key(tc.password, tc.salt, params, tc.encType);
+        if (! Arrays.equals(answer, outkey.getKeyData())) {
+            System.err.println("failed with:" + tc.salt);
+            System.err.println("outKey:" + HexUtil.bytesToHex(outkey.getKeyData()));
+            System.err.println("answer:" + tc.answer);
+            return false;
+        }
+        return true;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-crypto/src/test/resources/camellia-expect-vt.txt
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-crypto/src/test/resources/camellia-expect-vt.txt b/kerby-kerb/kerb-crypto/src/test/resources/camellia-expect-vt.txt
new file mode 100644
index 0000000..e6ebe8a
--- /dev/null
+++ b/kerby-kerb/kerb-crypto/src/test/resources/camellia-expect-vt.txt
@@ -0,0 +1,1036 @@
+
+KEYSIZE=128
+
+KEY=00000000000000000000000000000000
+
+I=1
+PT=80000000000000000000000000000000
+CT=07923A39EB0A817D1C4D87BDB82D1F1C
+
+I=2
+PT=40000000000000000000000000000000
+CT=48CD6419809672D2349260D89A08D3D3
+
+I=3
+PT=20000000000000000000000000000000
+CT=D07493CCB2E95CE0B4945A05ACC97D82
+
+I=4
+PT=10000000000000000000000000000000
+CT=5DBE1EAC9F7080A88DBED7F6DA101448
+
+I=5
+PT=08000000000000000000000000000000
+CT=F01EE477D199DF2701027034B229622F
+
+I=6
+PT=04000000000000000000000000000000
+CT=C841587ABD9A912E563774CB569D051E
+
+I=7
+PT=02000000000000000000000000000000
+CT=1D9BC0C04546F0915C8CCD11391A455C
+
+I=8
+PT=01000000000000000000000000000000
+CT=05E6EBB4BA167F5C479CEFF3152F943B
+
+I=9
+PT=00800000000000000000000000000000
+CT=93211E0F788845B9FC0E4551FFE92AC9
+
+I=10
+PT=00400000000000000000000000000000
+CT=B6D35701CD8FADDE383BBE8E6B70BAF7
+
+I=11
+PT=00200000000000000000000000000000
+CT=8358F9F4EBCFEE348CB30551ACB151A0
+
+I=12
+PT=00100000000000000000000000000000
+CT=D57516EB5AD93C523E40521BF447AFCE
+
+I=13
+PT=00080000000000000000000000000000
+CT=66B2534C279C439133F52E5AD8B439A9
+
+I=14
+PT=00040000000000000000000000000000
+CT=A71C69184A9F63C2992A5F18F77C1FE9
+
+I=15
+PT=00020000000000000000000000000000
+CT=1ADCBE49AEACB9ECEBBD492B10E82C7B
+
+I=16
+PT=00010000000000000000000000000000
+CT=27E3BCFB227C5561DB6CF7FC30387036
+
+I=17
+PT=00008000000000000000000000000000
+CT=F4AE20365CC9D06B0CAE6B695ED2CEC1
+
+I=18
+PT=00004000000000000000000000000000
+CT=3DD682F0B641ED32AD3D43EA2A0456E4
+
+I=19
+PT=00002000000000000000000000000000
+CT=6E5D14A95ECC290B509EA6B673652E3A
+
+I=20
+PT=00001000000000000000000000000000
+CT=F1CDF0F8D7B3FFD95422D7CC0CF40B7B
+
+I=21
+PT=00000800000000000000000000000000
+CT=A9253D459A34C385A1F1B2CFFA3935C5
+
+I=22
+PT=00000400000000000000000000000000
+CT=291024D99FF09A47A1DEE45BA700AE52
+
+I=23
+PT=00000200000000000000000000000000
+CT=49241D9459B277187BB10081C60361C0
+
+I=24
+PT=00000100000000000000000000000000
+CT=AD9BA365CC4DD5553D2D9FE303841D88
+
+I=25
+PT=00000080000000000000000000000000
+CT=C2ECA616664A249DC622CC11196B4AE1
+
+I=26
+PT=00000040000000000000000000000000
+CT=6E1A2D4794BB0DC08777A0BC7523E70E
+
+I=27
+PT=00000020000000000000000000000000
+CT=6DB1F0CF59656BDD235E82B8CEF0BE8E
+
+I=28
+PT=00000010000000000000000000000000
+CT=52F239C5EAF401EBDC54D2F011FF4B6A
+
+I=29
+PT=00000008000000000000000000000000
+CT=6B58A08F648414B67FD6847D2AA51CBF
+
+I=30
+PT=00000004000000000000000000000000
+CT=2959DD5367885A75EB48053CF3251A36
+
+I=31
+PT=00000002000000000000000000000000
+CT=630B292E3B88EF641CDFD531E206605E
+
+I=32
+PT=00000001000000000000000000000000
+CT=4BBB88EF82B70593FCC56AFD91540FDB
+
+I=33
+PT=00000000800000000000000000000000
+CT=0A13055B118A45C606999257BD191426
+
+I=34
+PT=00000000400000000000000000000000
+CT=5CF8E5C9F15D7E4F865020224853EB77
+
+I=35
+PT=00000000200000000000000000000000
+CT=3898805042C7A4315C5EE51AF2DE47E2
+
+I=36
+PT=00000000100000000000000000000000
+CT=8D3F96372E87CBB0B375425B3A10B9E7
+
+I=37
+PT=00000000080000000000000000000000
+CT=4D9510A378BD784A70A66BCC75B7D3C8
+
+I=38
+PT=00000000040000000000000000000000
+CT=70DB1902D37CFBDFB98F7C516F79D416
+
+I=39
+PT=00000000020000000000000000000000
+CT=383C6C2AABEF7FDE25CD470BF774A331
+
+I=40
+PT=00000000010000000000000000000000
+CT=47CBCB5288349B1A15DC9F81FBEE6B8F
+
+I=41
+PT=00000000008000000000000000000000
+CT=21DA34D4468EEB13AED95DAE0FF48310
+
+I=42
+PT=00000000004000000000000000000000
+CT=021C9A8E6BD36FBD036411E5D852A80F
+
+I=43
+PT=00000000002000000000000000000000
+CT=6A459E2F839AF60ACDE83774D0BB5574
+
+I=44
+PT=00000000001000000000000000000000
+CT=C19255121F1B933CAE09E58AEC0E9977
+
+I=45
+PT=00000000000800000000000000000000
+CT=7BA949E27B2BE148A6B801F9305F43D5
+
+I=46
+PT=00000000000400000000000000000000
+CT=E8CEB1026BCF7BCEA32E8A380EA76DB7
+
+I=47
+PT=00000000000200000000000000000000
+CT=63F97747ED56A8F521B20CC65F6F9465
+
+I=48
+PT=00000000000100000000000000000000
+CT=2091CFDC629819106188424AC694F75B
+
+I=49
+PT=00000000000080000000000000000000
+CT=A91BDF8E8B88407942423CCE000527C4
+
+I=50
+PT=00000000000040000000000000000000
+CT=73F9B44B9635A3FD683DBF8D49E9825B
+
+I=51
+PT=00000000000020000000000000000000
+CT=9DC64B2133FAD5069FD9A7CC2FFFD1CC
+
+I=52
+PT=00000000000010000000000000000000
+CT=28240F81FEC36B71E13F1FEA7A7641E3
+
+I=53
+PT=00000000000008000000000000000000
+CT=20DD39FEE96CD2EFF972872A692B28FD
+
+I=54
+PT=00000000000004000000000000000000
+CT=47A9E40483EC1925B635E47E964E8E93
+
+I=55
+PT=00000000000002000000000000000000
+CT=9C0EBD822C49FB3D853DF5B315A87BA0
+
+I=56
+PT=00000000000001000000000000000000
+CT=C18D813FDB45A594C6DC24E5A1F6CE32
+
+I=57
+PT=00000000000000800000000000000000
+CT=7E5467FF245ECF80CB55C2D8E91F0711
+
+I=58
+PT=00000000000000400000000000000000
+CT=394D4365B77954FDEA4145FCF7A7A041
+
+I=59
+PT=00000000000000200000000000000000
+CT=B1D8311A492ED11F11E57B29221610C4
+
+I=60
+PT=00000000000000100000000000000000
+CT=E5FBB947A63AEA90163AF04AD6951EF8
+
+I=61
+PT=00000000000000080000000000000000
+CT=CA0627DDF580F0E7D59562825C9D0492
+
+I=62
+PT=00000000000000040000000000000000
+CT=EF98FFD1AED295AAE1860F0274C8F555
+
+I=63
+PT=00000000000000020000000000000000
+CT=8C698E5CFFF08FACE10C2DC5FF1E2A81
+
+I=64
+PT=00000000000000010000000000000000
+CT=35A7767E02032C35B5CE1A6F49C57C28
+
+I=65
+PT=00000000000000008000000000000000
+CT=AB36F8734E76EBA306CF00D6763D90B0
+
+I=66
+PT=00000000000000004000000000000000
+CT=E854EB66D4EC66889B5E6CD4F44A5806
+
+I=67
+PT=00000000000000002000000000000000
+CT=15B66DF1455ACD640B8716BCF5DB2D69
+
+I=68
+PT=00000000000000001000000000000000
+CT=4C57AB5333E5C2D4B7E30A007E449F48
+
+I=69
+PT=00000000000000000800000000000000
+CT=BA3E7FF28EB38EA09D8DB1440A9A3552
+
+I=70
+PT=00000000000000000400000000000000
+CT=64E60227AFD80C40C70186CC94804C1A
+
+I=71
+PT=00000000000000000200000000000000
+CT=CEB4423C20B4C91C2551F6FC227C9514
+
+I=72
+PT=00000000000000000100000000000000
+CT=F736894B843EF32DA28576DE500D448C
+
+I=73
+PT=00000000000000000080000000000000
+CT=58FDA98B678D15053D4B6C060368108C
+
+I=74
+PT=00000000000000000040000000000000
+CT=E28CAE384E578F47657755EBCD97996C
+
+I=75
+PT=00000000000000000020000000000000
+CT=0A64617BD4B5B166668240D105B7B6A2
+
+I=76
+PT=00000000000000000010000000000000
+CT=4BD090C7E3D365B5EA80F19B4798881E
+
+I=77
+PT=00000000000000000008000000000000
+CT=BC7B6CB9BFF4F72973BB2CD20A512C06
+
+I=78
+PT=00000000000000000004000000000000
+CT=4C7ADDC5C867594E9EE75F0AA6AB9C23
+
+I=79
+PT=00000000000000000002000000000000
+CT=1FBD05C71A36691AC6566A5298101D53
+
+I=80
+PT=00000000000000000001000000000000
+CT=42D7D6B1F499D412F8793972BD968DA2
+
+I=81
+PT=00000000000000000000800000000000
+CT=260EC86E2786FC68824576B934F32814
+
+I=82
+PT=00000000000000000000400000000000
+CT=576C26DFD7046F9357F34BEA7DFB26A0
+
+I=83
+PT=00000000000000000000200000000000
+CT=6D55E54BFB6F927174A02294C95E0F8F
+
+I=84
+PT=00000000000000000000100000000000
+CT=1A6CE91DD458229C7675A34950D10E23
+
+I=85
+PT=00000000000000000000080000000000
+CT=DAD0D5E7E000652825AA34D228EA8D8F
+
+I=86
+PT=00000000000000000000040000000000
+CT=E68013F48D75EAD2BBC0B0BDA5E690BF
+
+I=87
+PT=00000000000000000000020000000000
+CT=A07D92312FBAE37BFE8A834210AE4F9C
+
+I=88
+PT=00000000000000000000010000000000
+CT=6EEE5F8544CD7D456366EB448813989A
+
+I=89
+PT=00000000000000000000008000000000
+CT=F8E5C7FF4B79D7ABE8BFA2DD148820A8
+
+I=90
+PT=00000000000000000000004000000000
+CT=C6349D75C7472BBD66F95B3A07C79C91
+
+I=91
+PT=00000000000000000000002000000000
+CT=B85713C12D8658951CD1AD21C74D2CD2
+
+I=92
+PT=00000000000000000000001000000000
+CT=907AA00B9F7D47A97623FB55BA911F29
+
+I=93
+PT=00000000000000000000000800000000
+CT=DC3CD0ED23D11776FAB43A2A6A8F3557
+
+I=94
+PT=00000000000000000000000400000000
+CT=4BFE58A8FD69179C14765B09AB70B705
+
+I=95
+PT=00000000000000000000000200000000
+CT=A23996E0EA67EC280356E5F77130A551
+
+I=96
+PT=00000000000000000000000100000000
+CT=CDEADE859B3AACD273CCA85A3E2E45F2
+
+I=97
+PT=00000000000000000000000080000000
+CT=E0FC78489857D84DA03F40CE97147174
+
+I=98
+PT=00000000000000000000000040000000
+CT=7615EA6351F6BB12855E8579C6995D8E
+
+I=99
+PT=00000000000000000000000020000000
+CT=13E184344FE28C2E70ED0E4D0A8037F9
+
+I=100
+PT=00000000000000000000000010000000
+CT=A5FE395F568482B87BC3EB208C81C942
+
+I=101
+PT=00000000000000000000000008000000
+CT=B3103E11AF06C85565823F8CAA3159F6
+
+I=102
+PT=00000000000000000000000004000000
+CT=7EBC2234D271B89C519C396985300030
+
+I=103
+PT=00000000000000000000000002000000
+CT=0661D338F2E0C939BA1687820A768467
+
+I=104
+PT=00000000000000000000000001000000
+CT=EC2B42667C0195A90715499617884DA5
+
+I=105
+PT=00000000000000000000000000800000
+CT=AE077BA19D24E7188DDD3682FF196892
+
+I=106
+PT=00000000000000000000000000400000
+CT=98823C24B9C65A66073C7952DC2B4B5E
+
+I=107
+PT=00000000000000000000000000200000
+CT=6AB58432CBB3C2F503DA2D16796CC297
+
+I=108
+PT=00000000000000000000000000100000
+CT=EEB5EBB3A53E4196C2F22BC1A4DDF5E8
+
+I=109
+PT=00000000000000000000000000080000
+CT=33DC40AC5FDC126D38878416AF6C0FA6
+
+I=110
+PT=00000000000000000000000000040000
+CT=38EDDC08E18B4AD982CEA921D2765A9A
+
+I=111
+PT=00000000000000000000000000020000
+CT=7D6BEA038E9347C642E18631660A9558
+
+I=112
+PT=00000000000000000000000000010000
+CT=FDA57921A473B5EE3700AD5ADF035019
+
+I=113
+PT=00000000000000000000000000008000
+CT=699B4812E200337E9C1D2C397F0DFE4E
+
+I=114
+PT=00000000000000000000000000004000
+CT=7A1EADF68B0807145D6C414852DECFC8
+
+I=115
+PT=00000000000000000000000000002000
+CT=1645FFAA8AD76689C01DA8C40882781F
+
+I=116
+PT=00000000000000000000000000001000
+CT=BA0C053BE702FA62FC66D8FEB12FC97E
+
+I=117
+PT=00000000000000000000000000000800
+CT=841FD8AF69CF2C31F7D4D7B6959662B5
+
+I=118
+PT=00000000000000000000000000000400
+CT=F675D59BDB33231861268F539829DA0B
+
+I=119
+PT=00000000000000000000000000000200
+CT=A4967F45ABB4E8C7DC5E3806680F35E0
+
+I=120
+PT=00000000000000000000000000000100
+CT=4D7E08081CC82F92ABA7C58C99F8343F
+
+I=121
+PT=00000000000000000000000000000080
+CT=9AEFDB287C119B82353612B60ECCBFD8
+
+I=122
+PT=00000000000000000000000000000040
+CT=979BB6A1553A17592A86E78DF144A699
+
+I=123
+PT=00000000000000000000000000000020
+CT=A6FA8CAB06FD2E5BF3A858983C01757A
+
+I=124
+PT=00000000000000000000000000000010
+CT=BE8511254C31E25420B91D6FEF1710ED
+
+I=125
+PT=00000000000000000000000000000008
+CT=F589A908D18A21894971C0433581E1A5
+
+I=126
+PT=00000000000000000000000000000004
+CT=4237585130E7C9F715235EB1D8C94DE7
+
+I=127
+PT=00000000000000000000000000000002
+CT=DEFE3E0B5C54C94B4F2A0F5A46F6210D
+
+I=128
+PT=00000000000000000000000000000001
+CT=F5574ACC3148DFCB9015200631024DF9
+
+==========
+
+KEYSIZE=256
+
+KEY=0000000000000000000000000000000000000000000000000000000000000000
+
+I=1
+PT=80000000000000000000000000000000
+CT=B0C6B88AEA518AB09E847248E91B1B9D
+
+I=2
+PT=40000000000000000000000000000000
+CT=B8D7684E35FA1DB15BDCEE7A48659858
+
+I=3
+PT=20000000000000000000000000000000
+CT=F0CAD59AF92FBB79F36951E697492750
+
+I=4
+PT=10000000000000000000000000000000
+CT=117100F6635389560DC4A2DA24EBA70F
+
+I=5
+PT=08000000000000000000000000000000
+CT=DBDD62355553019ED84C35886421E532
+
+I=6
+PT=04000000000000000000000000000000
+CT=9CB8D04FA506F19848F7B9110518BFC8
+
+I=7
+PT=02000000000000000000000000000000
+CT=E4308E253BC3444D293500701BA82C6A
+
+I=8
+PT=01000000000000000000000000000000
+CT=EA2FAE53F7F30C0170A20E95A068503E
+
+I=9
+PT=00800000000000000000000000000000
+CT=14B14839EA221880B2C64D1FE000B93D
+
+I=10
+PT=00400000000000000000000000000000
+CT=A5CFC075B342D5101AACC334E73058BB
+
+I=11
+PT=00200000000000000000000000000000
+CT=477EA56B2EBAD0F8AC5E1936866560FF
+
+I=12
+PT=00100000000000000000000000000000
+CT=107E8598418404196EC59F63E45B7F6D
+
+I=13
+PT=00080000000000000000000000000000
+CT=FF6A891E7C1C074A68FEC291928FDD8D
+
+I=14
+PT=00040000000000000000000000000000
+CT=F64C250A13F45D377ADB7545B2B157A9
+
+I=15
+PT=00020000000000000000000000000000
+CT=FAD0F252086F11C830C65B63197CBC38
+
+I=16
+PT=00010000000000000000000000000000
+CT=9DCB89B209441F02AD0D25C6AB826629
+
+I=17
+PT=00008000000000000000000000000000
+CT=E62E4ED4E4F34EDC563710D960E09D4C
+
+I=18
+PT=00004000000000000000000000000000
+CT=98A1B926BA06895C3F2E84CCBACBC356
+
+I=19
+PT=00002000000000000000000000000000
+CT=29BE0BE4DB7F4D196718AEA38F3B0BFD
+
+I=20
+PT=00001000000000000000000000000000
+CT=F670C4EBECBA0B43E71F6D752BFD4854
+
+I=21
+PT=00000800000000000000000000000000
+CT=7D7666B4484CDB7E3605468E093A787C
+
+I=22
+PT=00000400000000000000000000000000
+CT=562D06B181C091DA6C43642AE99460C6
+
+I=23
+PT=00000200000000000000000000000000
+CT=AB0EFB5975E6186B7D76BC9672453488
+
+I=24
+PT=00000100000000000000000000000000
+CT=10C0756538E7BFF88D19AE2B1F7B859A
+
+I=25
+PT=00000080000000000000000000000000
+CT=AF7FCD5248F8C72F1695AA05DD1CADE0
+
+I=26
+PT=00000040000000000000000000000000
+CT=9841E555655609A75D7BE20B8A90EF1E
+
+I=27
+PT=00000020000000000000000000000000
+CT=27F9546E6A1B7464780000561783569C
+
+I=28
+PT=00000010000000000000000000000000
+CT=8671D935D7A8354EECB7288803D42D7A
+
+I=29
+PT=00000008000000000000000000000000
+CT=0DA44F508DEBC6F044394624FCEB8EBE
+
+I=30
+PT=00000004000000000000000000000000
+CT=AB137369BE6D93FBB18006BDB236EC09
+
+I=31
+PT=00000002000000000000000000000000
+CT=EB90C4E597A7E1779FFA260886E26F75
+
+I=32
+PT=00000001000000000000000000000000
+CT=618CF3588D5C128EAF252616230E08F7
+
+I=33
+PT=00000000800000000000000000000000
+CT=98DC4DB49D197AB9152D12B9DE2D73CA
+
+I=34
+PT=00000000400000000000000000000000
+CT=5BDDE24B15702A35E1F140C57D206443
+
+I=35
+PT=00000000200000000000000000000000
+CT=CF755809882BED8BA2F9F1A4ED296A2B
+
+I=36
+PT=00000000100000000000000000000000
+CT=F1A8DBB999538AE89D16F92A7F4D1DF1
+
+I=37
+PT=00000000080000000000000000000000
+CT=775222FDDAAECB81CF675C4E0B98179E
+
+I=38
+PT=00000000040000000000000000000000
+CT=12A648CADCD153C760A965826683119A
+
+I=39
+PT=00000000020000000000000000000000
+CT=0503FB10AB241E7CF45D8CDEEE474335
+
+I=40
+PT=00000000010000000000000000000000
+CT=3D299C0070CBBD831B802690B8E7CA24
+
+I=41
+PT=00000000008000000000000000000000
+CT=33105BD4D11D66753DC34D128BEFE3F4
+
+I=42
+PT=00000000004000000000000000000000
+CT=5EFCE2B4B987C0F77D27B44836881682
+
+I=43
+PT=00000000002000000000000000000000
+CT=7835449454128035D7F0EA99E327577B
+
+I=44
+PT=00000000001000000000000000000000
+CT=27BEDDA0601BE35122FB1D272D73AB3E
+
+I=45
+PT=00000000000800000000000000000000
+CT=54C3F99FF48E318CC515EDE75800C4B3
+
+I=46
+PT=00000000000400000000000000000000
+CT=C627C329F8E48299F6FDB23B9DBEA0BB
+
+I=47
+PT=00000000000200000000000000000000
+CT=1B6578F9E23BD8C1845A02431C5F9AA3
+
+I=48
+PT=00000000000100000000000000000000
+CT=6DB2FB8C0B9344D0547C0FF1292020C6
+
+I=49
+PT=00000000000080000000000000000000
+CT=4FAD9B2C37C131493FBEF53581FA4F83
+
+I=50
+PT=00000000000040000000000000000000
+CT=47502A01E93D2C87BD5584F6AFD3D99D
+
+I=51
+PT=00000000000020000000000000000000
+CT=056E1C6F651BFE50271B3B7A18E76D84
+
+I=52
+PT=00000000000010000000000000000000
+CT=5632BAF6627B3D96AD4E06FA6A561F55
+
+I=53
+PT=00000000000008000000000000000000
+CT=E29807CAACDFA2D41A7D9E91FA7FD8EB
+
+I=54
+PT=00000000000004000000000000000000
+CT=81DD44BB5D1822DEE605F9E6FF01D7B3
+
+I=55
+PT=00000000000002000000000000000000
+CT=5C3649925E47D7FF96482A8FBD9666FD
+
+I=56
+PT=00000000000001000000000000000000
+CT=695415A836E66E737887845EC08A1ADB
+
+I=57
+PT=00000000000000800000000000000000
+CT=F5416BCE292D9E2CEA5D1CC70BBAEED1
+
+I=58
+PT=00000000000000400000000000000000
+CT=7AEC4F1388FC29C47F7FED74ADDE8485
+
+I=59
+PT=00000000000000200000000000000000
+CT=82A9F1A6CE08BC4876E649D8A8EA7EB6
+
+I=60
+PT=00000000000000100000000000000000
+CT=B6296C88ADF1A792908B065EEB04BFC2
+
+I=61
+PT=00000000000000080000000000000000
+CT=E766A39AECCA40BDBFBE6FF3FA292913
+
+I=62
+PT=00000000000000040000000000000000
+CT=C6D081454EA00D83C23B5A62C84359E1
+
+I=63
+PT=00000000000000020000000000000000
+CT=85D259A79CCA80484504D1603F7A8F53
+
+I=64
+PT=00000000000000010000000000000000
+CT=D8291FA1C6DC250078824B2D0A20883F
+
+I=65
+PT=00000000000000008000000000000000
+CT=95387CB74C48FFBD1F8D64A6CC45E074
+
+I=66
+PT=00000000000000004000000000000000
+CT=A17F975F538F56CDF629B516011DE837
+
+I=67
+PT=00000000000000002000000000000000
+CT=B50B615A1654C6E1CB6AB33716C097FE
+
+I=68
+PT=00000000000000001000000000000000
+CT=7BBB2CBB874DF6C8B821DA7FB0F9011B
+
+I=69
+PT=00000000000000000800000000000000
+CT=E9EFE074D096A275E47CD2E6206DF6A1
+
+I=70
+PT=00000000000000000400000000000000
+CT=88F2F8D5A836406AE8BBB98C65BBDA55
+
+I=71
+PT=00000000000000000200000000000000
+CT=F64620D8D87585A3EF038B9AD58F5EA0
+
+I=72
+PT=00000000000000000100000000000000
+CT=694438EC141C8ED5F2F898B4554A298F
+
+I=73
+PT=00000000000000000080000000000000
+CT=3E6226EC7726A1EE5F5FA9B18CCE8C44
+
+I=74
+PT=00000000000000000040000000000000
+CT=8AB6949E79911647800B9E87362AB97A
+
+I=75
+PT=00000000000000000020000000000000
+CT=093C5CF24EDAF7F9F1C8A80DE4FF50A9
+
+I=76
+PT=00000000000000000010000000000000
+CT=28A36E50061F19E240351ED0E378CBF4
+
+I=77
+PT=00000000000000000008000000000000
+CT=B93BB36CB88BF26EA79198652AA51D3C
+
+I=78
+PT=00000000000000000004000000000000
+CT=DE4948083D044FAC9BCA6DA8CD67B8A6
+
+I=79
+PT=00000000000000000002000000000000
+CT=6E778B5BDA6CA118117E47470D080D3C
+
+I=80
+PT=00000000000000000001000000000000
+CT=0A9107324DA32B4281D032A3487EF875
+
+I=81
+PT=00000000000000000000800000000000
+CT=18ED5635312D71ABD123CCE779D4D68A
+
+I=82
+PT=00000000000000000000400000000000
+CT=2E3C63F95C4BC1F944BAB06DEDC9AA8E
+
+I=83
+PT=00000000000000000000200000000000
+CT=ACCC869EF07004C8C3C709083BE7BA2F
+
+I=84
+PT=00000000000000000000100000000000
+CT=DF60B34FB1A59147CC1FB049C1578206
+
+I=85
+PT=00000000000000000000080000000000
+CT=4228DC636C08E41021054AA0E1E2227A
+
+I=86
+PT=00000000000000000000040000000000
+CT=7CE27F66EFD735FFD6B3E1738C50495B
+
+I=87
+PT=00000000000000000000020000000000
+CT=F8E74B33A9CDE351DA0BBC06D69093D7
+
+I=88
+PT=00000000000000000000010000000000
+CT=AE0D22A5B37B8DC5D81CC641EED334D0
+
+I=89
+PT=00000000000000000000008000000000
+CT=C181C6CA5E163743458B9167A0B6A16A
+
+I=90
+PT=00000000000000000000004000000000
+CT=5171F4F6095E4B276CFBA1F07223FBE6
+
+I=91
+PT=00000000000000000000002000000000
+CT=2732F4D3A8C9D1D8D493840D6E0B864F
+
+I=92
+PT=00000000000000000000001000000000
+CT=3EF04E0059A061D973532CA5C1DFBE7B
+
+I=93
+PT=00000000000000000000000800000000
+CT=6D9A8F23579E4978EBAA87B5ADEB77E5
+
+I=94
+PT=00000000000000000000000400000000
+CT=BBD08873CC44BA4253C0C41FEEB7F124
+
+I=95
+PT=00000000000000000000000200000000
+CT=72E4B2437CBD283F3809CE686F6A591E
+
+I=96
+PT=00000000000000000000000100000000
+CT=6E5580514B92512B1BF4B1B987B9AA1B
+
+I=97
+PT=00000000000000000000000080000000
+CT=5EF5D0C5BCBDCB604D3A083B68CE0FA3
+
+I=98
+PT=00000000000000000000000040000000
+CT=9D991FDD723AD2182777A15CA0E0F665
+
+I=99
+PT=00000000000000000000000020000000
+CT=24440626EFC8F86BEA7DE78085AB8A22
+
+I=100
+PT=00000000000000000000000010000000
+CT=17C3630D62D13C1E826C0FCCBD74A864
+
+I=101
+PT=00000000000000000000000008000000
+CT=4CF5AB86A56AB134A7FE46CCE3F9FCE9
+
+I=102
+PT=00000000000000000000000004000000
+CT=3E6B9C0388F6D9B8F458F30221907607
+
+I=103
+PT=00000000000000000000000002000000
+CT=AD9C926B8A5CD98EEE88200617E59958
+
+I=104
+PT=00000000000000000000000001000000
+CT=AFF8AED5E075E02AF720CA4BF0028B3B
+
+I=105
+PT=00000000000000000000000000800000
+CT=D90EAFF909202BB209BB3BB8C7F9A954
+
+I=106
+PT=00000000000000000000000000400000
+CT=2C709B00E6A22F00F64A7D8EE341853F
+
+I=107
+PT=00000000000000000000000000200000
+CT=CCEC598F0D9F0BF201B2F487136D54A4
+
+I=108
+PT=00000000000000000000000000100000
+CT=73B2883A0A166AAE1BF14E60A5195FA3
+
+I=109
+PT=00000000000000000000000000080000
+CT=E676867BD9AD5EF915143388496779D7
+
+I=110
+PT=00000000000000000000000000040000
+CT=CDCB73D1BFCFD4BE7F1DAA9B1C6A4055
+
+I=111
+PT=00000000000000000000000000020000
+CT=02A3A5C89DAA24CD2C517F7A73286A89
+
+I=112
+PT=00000000000000000000000000010000
+CT=C0FA2AC9E92EE58C2DD12D6D43AB7035
+
+I=113
+PT=00000000000000000000000000008000
+CT=EDC2CB1F7291353BDBF2385519E6AE16
+
+I=114
+PT=00000000000000000000000000004000
+CT=B4B62D16D197A98CD3B978812B9D9884
+
+I=115
+PT=00000000000000000000000000002000
+CT=5CDFC95A529A905101CEA26BC1B891ED
+
+I=116
+PT=00000000000000000000000000001000
+CT=CC7150CD3650B98363296C7C4ED368D1
+
+I=117
+PT=00000000000000000000000000000800
+CT=CC57706B0C6526B8E25A5DBD32EACBDB
+
+I=118
+PT=00000000000000000000000000000400
+CT=30D30456AD98B182D64C649648F6AEC9
+
+I=119
+PT=00000000000000000000000000000200
+CT=D7E9DA7F631938EB649A08AF82FBD75F
+
+I=120
+PT=00000000000000000000000000000100
+CT=B8DA2AF6600B07895B5D0FFAF4991469
+
+I=121
+PT=00000000000000000000000000000080
+CT=0F6F64F930BA6C178943322B98114599
+
+I=122
+PT=00000000000000000000000000000040
+CT=8B1F247802E47C91BEE2AA34ECFD7A01
+
+I=123
+PT=00000000000000000000000000000020
+CT=7A6985778D3A66E97F23E01F0D0E45E7
+
+I=124
+PT=00000000000000000000000000000010
+CT=BA664AC39855518DFDEE10D1B3111FAE
+
+I=125
+PT=00000000000000000000000000000008
+CT=7C92854D801A1648F65CA81813DDBF83
+
+I=126
+PT=00000000000000000000000000000004
+CT=6A3F25AAB7E92D9CF378E5D9C040F26B
+
+I=127
+PT=00000000000000000000000000000002
+CT=3D4B2CDE666761BA5DFB305178E667FB
+
+I=128
+PT=00000000000000000000000000000001
+CT=9CDB269B5D293BC5DB9C55B057D9B591
+
+==========

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-identity/pom.xml
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-identity/pom.xml b/kerby-kerb/kerb-identity/pom.xml
new file mode 100644
index 0000000..edf2f93
--- /dev/null
+++ b/kerby-kerb/kerb-identity/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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. See accompanying LICENSE file.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.kerby</groupId>
+    <artifactId>kerby-kerb</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>kerb-identity</artifactId>
+
+  <name>Kerby-kerb Identity</name>
+  <description>Kerby-kerb Identity</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.kerby</groupId>
+      <artifactId>kerby-config</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.kerby</groupId>
+      <artifactId>kerb-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.kerby</groupId>
+      <artifactId>kerb-crypto</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-identity/src/main/java/org/apache/kerby/kerberos/kerb/identity/Attribute.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-identity/src/main/java/org/apache/kerby/kerberos/kerb/identity/Attribute.java b/kerby-kerb/kerb-identity/src/main/java/org/apache/kerby/kerberos/kerb/identity/Attribute.java
new file mode 100644
index 0000000..2174c33
--- /dev/null
+++ b/kerby-kerb/kerb-identity/src/main/java/org/apache/kerby/kerberos/kerb/identity/Attribute.java
@@ -0,0 +1,36 @@
+/**
+ *  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.identity;
+
+public abstract class Attribute {
+    private String name;
+
+    public Attribute(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}


Mime
View raw message