History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/security/krb5/internal/EncKDCRepPart.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/security/krb5/internal/EncKDCRepPart.java+226−0
@@ -0,0 +1,226 @@
1/*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3 *
4 * This code is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 2 only, as
6 * published by the Free Software Foundation. Oracle designates this
7 * particular file as subject to the "Classpath" exception as provided
8 * by Oracle in the LICENSE file that accompanied this code.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 */
24
25/*
26 *
27 * (C) Copyright IBM Corp. 1999 All Rights Reserved.
28 * Copyright 1997 The Open Group Research Institute. All rights reserved.
29 */
30
31package sun.security.krb5.internal;
32
33import sun.security.krb5.*;
34import sun.security.krb5.EncryptionKey;
35import sun.security.util.*;
36import java.util.Vector;
37import java.io.IOException;
38import java.math.BigInteger;
39
40/**
41 * Implements the ASN.1 EncKDCRepPart type.
42 *
43 * <xmp>
44 * EncKDCRepPart ::= SEQUENCE {
45 * key [0] EncryptionKey,
46 * last-req [1] LastReq,
47 * nonce [2] UInt32,
48 * key-expiration [3] KerberosTime OPTIONAL,
49 * flags [4] TicketFlags,
50 * authtime [5] KerberosTime,
51 * starttime [6] KerberosTime OPTIONAL,
52 * endtime [7] KerberosTime,
53 * renew-till [8] KerberosTime OPTIONAL,
54 * srealm [9] Realm,
55 * sname [10] PrincipalName,
56 * caddr [11] HostAddresses OPTIONAL
57 * }
58 * </xmp>
59 *
60 * <p>
61 * This definition reflects the Network Working Group RFC 4120
62 * specification available at
63 * <a href="http://www.ietf.org/rfc/rfc4120.txt">
64 * http://www.ietf.org/rfc/rfc4120.txt</a>.
65 */
66public class EncKDCRepPart {
67
68 public EncryptionKey key;
69 public LastReq lastReq;
70 public int nonce;
71 public KerberosTime keyExpiration; //optional
72 public TicketFlags flags;
73 public KerberosTime authtime;
74 public KerberosTime starttime; //optional
75 public KerberosTime endtime;
76 public KerberosTime renewTill; //optional
77 public Realm srealm;
78 public PrincipalName sname;
79 public HostAddresses caddr; //optional
80 public int msgType; //not included in sequence
81
82 public EncKDCRepPart(
83 EncryptionKey new_key,
84 LastReq new_lastReq,
85 int new_nonce,
86 KerberosTime new_keyExpiration,
87 TicketFlags new_flags,
88 KerberosTime new_authtime,
89 KerberosTime new_starttime,
90 KerberosTime new_endtime,
91 KerberosTime new_renewTill,
92 Realm new_srealm,
93 PrincipalName new_sname,
94 HostAddresses new_caddr,
95 int new_msgType) {
96 key = new_key;
97 lastReq = new_lastReq;
98 nonce = new_nonce;
99 keyExpiration = new_keyExpiration;
100 flags = new_flags;
101 authtime = new_authtime;
102 starttime = new_starttime;
103 endtime = new_endtime;
104 renewTill = new_renewTill;
105 srealm = new_srealm;
106 sname = new_sname;
107 caddr = new_caddr;
108 msgType = new_msgType;
109 }
110
111 public EncKDCRepPart() {
112 }
113
114 public EncKDCRepPart(byte[] data, int rep_type)
115 throws Asn1Exception, IOException, RealmException {
116 init(new DerValue(data), rep_type);
117 }
118
119 public EncKDCRepPart(DerValue encoding, int rep_type)
120 throws Asn1Exception, IOException, RealmException {
121 init(encoding, rep_type);
122 }
123
124 /**
125 * Initializes an EncKDCRepPart object.
126 *
127 * @param encoding a single DER-encoded value.
128 * @param rep_type type of the encrypted reply message.
129 * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
130 * @exception IOException if an I/O error occurs while reading encoded data.
131 * @exception RealmException if an error occurs while decoding an Realm object.
132 */
133 protected void init(DerValue encoding, int rep_type)
134 throws Asn1Exception, IOException, RealmException {
135 DerValue der, subDer;
136 //implementations return the incorrect tag value, so
137 //we don't use the above line; instead we use the following
138 msgType = (encoding.getTag() & (byte) 0x1F);
139 if (msgType != Krb5.KRB_ENC_AS_REP_PART &&
140 msgType != Krb5.KRB_ENC_TGS_REP_PART) {
141 throw new Asn1Exception(Krb5.ASN1_BAD_ID);
142 }
143 der = encoding.getData().getDerValue();
144 if (der.getTag() != DerValue.tag_Sequence) {
145 throw new Asn1Exception(Krb5.ASN1_BAD_ID);
146 }
147 key = EncryptionKey.parse(der.getData(), (byte) 0x00, false);
148 lastReq = LastReq.parse(der.getData(), (byte) 0x01, false);
149 subDer = der.getData().getDerValue();
150 if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x02) {
151 nonce = subDer.getData().getBigInteger().intValue();
152 } else {
153 throw new Asn1Exception(Krb5.ASN1_BAD_ID);
154 }
155 keyExpiration = KerberosTime.parse(der.getData(), (byte) 0x03, true);
156 flags = TicketFlags.parse(der.getData(), (byte) 0x04, false);
157 authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false);
158 starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true);
159 endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false);
160 renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true);
161 srealm = Realm.parse(der.getData(), (byte) 0x09, false);
162 sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false);
163 if (der.getData().available() > 0) {
164 caddr = HostAddresses.parse(der.getData(), (byte) 0x0B, true);
165 }
166 if (der.getData().available() > 0) {
167 throw new Asn1Exception(Krb5.ASN1_BAD_ID);
168 }
169 }
170
171 /**
172 * Encodes an EncKDCRepPart object.
173 * @param rep_type type of encrypted reply message.
174 * @return byte array of encoded EncKDCRepPart object.
175 * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
176 * @exception IOException if an I/O error occurs while reading encoded data.
177 */
178 public byte[] asn1Encode(int rep_type) throws Asn1Exception,
179 IOException {
180 DerOutputStream temp = new DerOutputStream();
181 DerOutputStream bytes = new DerOutputStream();
182 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
183 true, (byte) 0x00), key.asn1Encode());
184 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
185 true, (byte) 0x01), lastReq.asn1Encode());
186 temp.putInteger(BigInteger.valueOf(nonce));
187 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
188 true, (byte) 0x02), temp);
189
190 if (keyExpiration != null) {
191 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
192 true, (byte) 0x03), keyExpiration.asn1Encode());
193 }
194 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
195 true, (byte) 0x04), flags.asn1Encode());
196 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
197 true, (byte) 0x05), authtime.asn1Encode());
198 if (starttime != null) {
199 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
200 true, (byte) 0x06), starttime.asn1Encode());
201 }
202 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
203 true, (byte) 0x07), endtime.asn1Encode());
204 if (renewTill != null) {
205 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
206 true, (byte) 0x08), renewTill.asn1Encode());
207 }
208 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
209 true, (byte) 0x09), srealm.asn1Encode());
210 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
211 true, (byte) 0x0A), sname.asn1Encode());
212 if (caddr != null) {
213 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
214 true, (byte) 0x0B), caddr.asn1Encode());
215 }
216 //should use the rep_type to build the encoding
217 //but other implementations do not; it is ignored and
218 //the cached msgType is used instead
219 temp = new DerOutputStream();
220 temp.write(DerValue.tag_Sequence, bytes);
221 bytes = new DerOutputStream();
222 bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION,
223 true, (byte) msgType), temp);
224 return bytes.toByteArray();
225 }
226}