1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.auth.tests.javax.security.auth.kerberos;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetAddress;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.UnknownHostException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Date;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.SecretKey;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.DestroyFailedException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.RefreshFailedException;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.kerberos.KerberosKey;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.kerberos.KerberosPrincipal;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.kerberos.KerberosTicket;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.tests.support.TestUtils;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class KerberosTicketTest extends TestCase {
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String ENV_KDC = "java.security.krb5.kdc";
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String ENV_REALM = "java.security.krb5.realm";
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // ticket's ASN.1 encoding
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[] ticket = { 0x01, 0x02, 0x03, 0x04 };
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // client's principal
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final KerberosPrincipal pClient = new KerberosPrincipal(
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            "client@apache.org");
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // server's principal
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final KerberosPrincipal pServer = new KerberosPrincipal(
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            "server@apache.org");
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // session key
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[] sessionKey = { 0x01, 0x04, 0x03, 0x02 };
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int KEY_TYPE = 1;
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // number of flags used by Kerberos protocol
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int FLAGS_NUM = 32;
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final boolean[] flags = { true, false, true, false, true,
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            false, true, false, true, false, true, false, };
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int AUTH_TIME = 0;
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Date authTime = new Date(AUTH_TIME);
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int START_TIME = 1;
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Date startTime = new Date(START_TIME);
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int END_TIME = 2;
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Date endTime = new Date(END_TIME);
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Date renewTill = new Date(3);
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final InetAddress[] addesses;
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static {
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addesses = new InetAddress[] { InetAddress.getLocalHost() };
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnknownHostException e) {
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new RuntimeException(e);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getAuthTime()
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getAuthTime() throws Exception {
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date newAuthTime = new Date(AUTH_TIME);
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, newAuthTime, startTime, endTime,
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial value is not copied
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        newAuthTime.setTime(AUTH_TIME + 1);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(AUTH_TIME + 1, krbTicket.getAuthTime().getTime());
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // returned value is copied
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(krbTicket.getAuthTime(), krbTicket.getAuthTime());
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // auth time: null value is illegal for constructor
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosTicket(ticket, pClient, pServer, sessionKey, KEY_TYPE,
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    flags, null, startTime, endTime, renewTill, addesses);
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getClient()
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getClient() throws Exception {
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(pClient, krbTicket.getClient());
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // client principal: null value is illegal for constructor
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosTicket(ticket, null, pServer, sessionKey, KEY_TYPE,
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    flags, authTime, startTime, endTime, renewTill, addesses);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getClientAddresses()
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getClientAddresses() throws Exception {
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(addesses, krbTicket.getClientAddresses()));
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial value is copied
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(addesses, krbTicket.getClientAddresses());
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // KerberosTicket instance is immutable
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(krbTicket.getClientAddresses(), krbTicket
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getClientAddresses());
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // addesses: null value is OK for constructor
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                KEY_TYPE, flags, authTime, startTime, endTime, renewTill, null);
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(krbTicket.getClientAddresses());
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getEncoded()
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getEncoded() throws Exception {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(ticket, krbTicket.getEncoded()));
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial byte array is copied
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(ticket, krbTicket.getEncoded());
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // KerberosTicket instance is immutable
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(krbTicket.getEncoded(), krbTicket.getEncoded());
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // ticket: null value is illegal for constructor
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosTicket(null, pClient, pServer, sessionKey, KEY_TYPE,
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    flags, authTime, startTime, endTime, renewTill, addesses);
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getEndTime()
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getEndTime() throws Exception {
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date newEndTime = new Date(END_TIME);
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, newEndTime,
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial value is not copied
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        newEndTime.setTime(END_TIME + 1);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(END_TIME + 1, krbTicket.getEndTime().getTime());
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // returned value is copied
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(krbTicket.getEndTime(), krbTicket.getEndTime());
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // end time: null value is illegal for constructor
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosTicket(ticket, pClient, pServer, sessionKey, KEY_TYPE,
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    flags, authTime, startTime, null, renewTill, addesses);
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getFlags()
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getFlags() {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean[] myFlags = new boolean[] { true, //reserved
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // forwardable
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // forwarded
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // proxiable
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // proxy
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // may-postdate
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // postdated
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // invalid
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // renewable
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // initial
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // pre-authent
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true // hw-authent
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, myFlags, // <=== we test this
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                authTime, startTime, endTime, renewTill, addesses);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: returned value is copied
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(krbTicket.getFlags(), krbTicket.getFlags());
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: flags values
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isForwardable());
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isForwarded());
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isInitial());
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isPostdated());
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isProxiable());
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isProxy());
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(krbTicket.isRenewable());
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: number of flags less the in Kerberos protocol (<32)
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean[] ktFlags = krbTicket.getFlags();
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("flags length", FLAGS_NUM, ktFlags.length);
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int index = 0;
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // must match to initial array
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (; index < flags.length; index++) {
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Index: " + index, myFlags[index], ktFlags[index]);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the rest is expected to be false
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (; index < FLAGS_NUM; index++) {
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Index: " + index, false, ktFlags[index]);
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: flags array is greater then 32
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        myFlags = new boolean[50];
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                KEY_TYPE, myFlags, // <=== we test this
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                authTime, startTime, endTime, renewTill, addesses);
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ktFlags = krbTicket.getFlags();
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(myFlags.length, ktFlags.length);
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (index = 0; index < ktFlags.length; index++) {
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(false, ktFlags[index]);
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial array is copied
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(krbTicket.isForwardable());
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        myFlags[1] = true;
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(krbTicket.isForwardable());
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: Null value
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                KEY_TYPE, null, // <=== we test this
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                authTime, startTime, endTime, renewTill, addesses);
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(new boolean[FLAGS_NUM], krbTicket.getFlags()));
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getServer()
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getServer() throws Exception {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(pServer, krbTicket.getServer());
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // server principal: null value is illegal for constructor
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosTicket(ticket, pClient, null, sessionKey, KEY_TYPE,
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    flags, authTime, startTime, endTime, renewTill, addesses);
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getSessionKey()
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSessionKey() throws Exception {
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(krbTicket.getSessionKey(), krbTicket.getSessionKey());
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test returned SecretKey object
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SecretKey sKey = krbTicket.getSessionKey();
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] keyBytes = sKey.getEncoded();
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(sessionKey, keyBytes));
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial byte array is copied
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(sessionKey, sKey.getEncoded());
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // key instance is immutable
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(sKey.getEncoded(), sKey.getEncoded());
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("algorithm", "DES", sKey.getAlgorithm());
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("format", "RAW", sKey.getFormat());
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // sessionKey: null value is illegal for constructor
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosTicket(ticket, pClient, pServer, null, KEY_TYPE, flags,
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    authTime, startTime, endTime, renewTill, addesses);
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getSessionKeyType()
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSessionKeyType() throws Exception {
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(KEY_TYPE, krbTicket.getSessionKeyType());
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#getStartTime()
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getStartTime() throws Exception {
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date newStartTime = new Date(START_TIME);
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, newStartTime, endTime,
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // initial value is copied
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        newStartTime.setTime(START_TIME + 1);
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(START_TIME + 1, krbTicket.getStartTime().getTime());
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // returned value is copied
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(krbTicket.getStartTime(), krbTicket.getStartTime());
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // start time: null value is valid for constructor
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                KEY_TYPE, flags, authTime, null, endTime, renewTill, addesses);
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(authTime, krbTicket.getStartTime());
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(authTime, krbTicket.getStartTime());
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#destroy()
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#isDestroyed()
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_Destroyable() throws Exception {
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket kt = new KerberosTicket(ticket, pClient, pServer,
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                renewTill, addesses);
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(kt.isDestroyed());
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        kt.destroy();
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(kt.isDestroyed());
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no exceptions for second destroy
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        kt.destroy();
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getAuthTime());
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getClient());
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getClientAddresses());
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            kt.getEncoded();
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getEndTime());
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getFlags());
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getRenewTill());
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(kt.getServer());
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            kt.getSessionKey();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            kt.getSessionKeyType();
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            kt.toString();
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#refresh()
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_refresh() throws Exception {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean[] myFlags = new boolean[] { true, //reserved
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // forwardable
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // forwarded
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // proxiable
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // proxy
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // may-postdate
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // postdated
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // invalid
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // renewable: <=== we test this
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // initial
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, // pre-authent
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true // hw-authent
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: should not renew ticket because renewTill < current time
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date newRenewTill = new Date((new Date()).getTime() - 3600000);
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sessionKey, KEY_TYPE, myFlags, authTime, startTime, endTime,
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                newRenewTill, // <=== we test this: it is less then current time
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                addesses);
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            krbTicket.refresh();
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected RefreshFailedException");
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (RefreshFailedException e) {
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: should not renew ticket because renewable flag is false
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        newRenewTill = new Date((new Date()).getTime() + 3600000);
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        myFlags[8] = false;
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        krbTicket = new KerberosTicket(encTicket, pClient, pServer, sessionKey,
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                KEY_TYPE, myFlags, // <=== we test this: it is not renewable
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                authTime, startTime, endTime, newRenewTill, addesses);
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            krbTicket.refresh();
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected RefreshFailedException");
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (RefreshFailedException e) {
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test: dependency on system props 'kdc' and 'realm'
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // verify that env. is clean
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(System.getProperty(ENV_KDC));
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(System.getProperty(ENV_REALM));
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // create real DES key
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] newSessionKey = new KerberosKey(new KerberosPrincipal(
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "me@MY.REALM"), "pwd".toCharArray(), "DES").getEncoded();
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        myFlags[8] = true;
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        krbTicket = new KerberosTicket(encTicket, pClient, pServer,
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                newSessionKey, KEY_TYPE, myFlags, authTime, startTime, endTime,
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                newRenewTill, addesses);
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // case 1: unset 'kdc' and set 'realm'
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        TestUtils.setSystemProperty(ENV_KDC, "some_value");
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            krbTicket.refresh();
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected RefreshFailedException");
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (RefreshFailedException e) {
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestUtils.setSystemProperty(ENV_KDC, null);
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // case 2: set 'kdc' and unset 'realm' sys.props
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        TestUtils.setSystemProperty(ENV_REALM, "some_value");
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            krbTicket.refresh();
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected RefreshFailedException");
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (RefreshFailedException e) {
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestUtils.setSystemProperty(ENV_REALM, null);
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // TODO test: ticket refreshing
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#equals(java.lang.Object)
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_equals() throws Exception {
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket1 = new KerberosTicket(ticket, pClient,
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                endTime, renewTill, addesses);
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket2 = new KerberosTicket(ticket, pClient,
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                endTime, renewTill, addesses);
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket3 = new KerberosTicket(ticket, pClient,
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                pServer, sessionKey, KEY_TYPE, new boolean[] { true, false },
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                authTime, startTime, endTime, renewTill, addesses);
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("krbTicket1 and krbTicket2 should be equivalent ",
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                krbTicket1, krbTicket2);
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("krbTicket1 and krbTicket3 sholudn't be equivalent ",
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                krbTicket1.equals(krbTicket3));
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            krbTicket2.destroy();
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (DestroyFailedException e) {
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("krbTicket2 destroy failed");
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Destroyed krbTicket sholudn't be equivalent ", krbTicket1
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(krbTicket2));
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //Regression test for KerberosTicket.equals().
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final KerberosPrincipal clientPrincipal = new KerberosPrincipal(
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "leo@EXAMPLE.COM");
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final KerberosPrincipal serverPrincipal = new KerberosPrincipal(
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "krbtgt/EXAMPLE.COM@EXAMPLE.COM");
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket tgt = new KerberosTicket(new byte[0], clientPrincipal,
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                serverPrincipal, new byte[0], 1, new boolean[0],
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new Date(1000), null, new Date(new Date().getTime() + 1000),
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, null);
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tgt, tgt);
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket tgt1 = new KerberosTicket(new byte[0], clientPrincipal,
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                serverPrincipal, new byte[0], 1, new boolean[0],
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new Date(1000), null, new Date(new Date().getTime() + 1000),
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, null);
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tgt, tgt1);
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tgt1, tgt);
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosTicket#hashCode()
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_hashCode() {
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket1 = new KerberosTicket(ticket, pClient,
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                endTime, renewTill, addesses);
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosTicket krbTicket2 = new KerberosTicket(ticket, pClient,
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                endTime, renewTill, addesses);
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("krbTicket1 and krbTicket2 should be equivalent",
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                krbTicket1, krbTicket2);
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("hashCode should be equivalent", krbTicket1.hashCode(),
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                krbTicket2.hashCode());
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // Hands-created ticket encoding:
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // - tkt-vno: 5
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // - realm: 'MY.REALM'
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // - sname: {type=0, string=krbtgt/MY.REALM}
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // - enc-part: {etype=3,kvno=1,cipher=0} (i.e. it is empty)
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[] encTicket = {
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // [APPLICATION 1]
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x61,
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x45,
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // SEQUENCE
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x30,
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x43,
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // tkt-vno [0] INTEGER (5)
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa0,
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x03,
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02,
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x01,
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x05,
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // realm [1] Realm = 'MY.REALM'
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa1, (byte) 0x0a, (byte) 0x1b, (byte) 0x08, (byte) 0x4d,
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x59, (byte) 0x2e, (byte) 0x52,
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x45,
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x41,
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4c,
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4d,
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // sname [2] PrincipalName
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa2,
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1d,
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x30,
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1b,
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // name-type
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa0, (byte) 0x03,
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02,
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x01,
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x00,
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // name-string: SEQUENCE OF krbtgt/MY.REALM
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa1, (byte) 0x14, (byte) 0x30, (byte) 0x12, (byte) 0x1b,
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x06, (byte) 0x6b, (byte) 0x72, (byte) 0x62, (byte) 0x74,
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x67, (byte) 0x74, (byte) 0x1b, (byte) 0x08, (byte) 0x4d,
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x59, (byte) 0x2e, (byte) 0x52, (byte) 0x45, (byte) 0x41,
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4c, (byte) 0x4d,
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // enc-part [3] EncryptedData
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa3, (byte) 0x11,
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // SEQUENCE
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x30, (byte) 0x0F,
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // etype
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa0, (byte) 0x03, (byte) 0x02, (byte) 0x01, (byte) 0x03,
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // kvno
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa1, (byte) 0x03, (byte) 0x02, (byte) 0x01, (byte) 0x01,
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // cipher
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa2, (byte) 0x03, (byte) 0x04, (byte) 0x01, (byte) 0x00 };
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
641