| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
/*  | 
 | 
 *  | 
 | 
 *  (C) Copyright IBM Corp. 1999 All Rights Reserved.  | 
 | 
 *  Copyright 1997 The Open Group Research Institute.  All rights reserved.  | 
 | 
 */  | 
 | 
 | 
 | 
package sun.security.krb5.internal;  | 
 | 
 | 
 | 
import sun.security.krb5.*;  | 
 | 
import sun.security.util.*;  | 
 | 
import java.util.Vector;  | 
 | 
import java.io.IOException;  | 
 | 
import java.io.*;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public class EncTicketPart { | 
 | 
 | 
 | 
    public TicketFlags flags;  | 
 | 
    public EncryptionKey key;  | 
 | 
    public PrincipalName cname;  | 
 | 
    public TransitedEncoding transited;  | 
 | 
    public KerberosTime authtime;  | 
 | 
    public KerberosTime starttime;   | 
 | 
    public KerberosTime endtime;  | 
 | 
    public KerberosTime renewTill;   | 
 | 
    public HostAddresses caddr;   | 
 | 
    public AuthorizationData authorizationData;   | 
 | 
 | 
 | 
    public EncTicketPart(  | 
 | 
            TicketFlags new_flags,  | 
 | 
            EncryptionKey new_key,  | 
 | 
            PrincipalName new_cname,  | 
 | 
            TransitedEncoding new_transited,  | 
 | 
            KerberosTime new_authtime,  | 
 | 
            KerberosTime new_starttime,  | 
 | 
            KerberosTime new_endtime,  | 
 | 
            KerberosTime new_renewTill,  | 
 | 
            HostAddresses new_caddr,  | 
 | 
            AuthorizationData new_authorizationData) { | 
 | 
        flags = new_flags;  | 
 | 
        key = new_key;  | 
 | 
        cname = new_cname;  | 
 | 
        transited = new_transited;  | 
 | 
        authtime = new_authtime;  | 
 | 
        starttime = new_starttime;  | 
 | 
        endtime = new_endtime;  | 
 | 
        renewTill = new_renewTill;  | 
 | 
        caddr = new_caddr;  | 
 | 
        authorizationData = new_authorizationData;  | 
 | 
    }  | 
 | 
 | 
 | 
    public EncTicketPart(byte[] data)  | 
 | 
            throws Asn1Exception, KrbException, IOException { | 
 | 
        init(new DerValue(data));  | 
 | 
    }  | 
 | 
 | 
 | 
    public EncTicketPart(DerValue encoding)  | 
 | 
            throws Asn1Exception, KrbException, IOException { | 
 | 
        init(encoding);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    private static String getHexBytes(byte[] bytes, int len)  | 
 | 
            throws IOException { | 
 | 
 | 
 | 
        StringBuffer sb = new StringBuffer();  | 
 | 
        for (int i = 0; i < len; i++) { | 
 | 
 | 
 | 
            int b1 = (bytes[i] >> 4) & 0x0f;  | 
 | 
            int b2 = bytes[i] & 0x0f;  | 
 | 
 | 
 | 
            sb.append(Integer.toHexString(b1));  | 
 | 
            sb.append(Integer.toHexString(b2));  | 
 | 
            sb.append(' '); | 
 | 
        }  | 
 | 
        return sb.toString();  | 
 | 
    }  | 
 | 
 | 
 | 
    private void init(DerValue encoding)  | 
 | 
            throws Asn1Exception, IOException, RealmException { | 
 | 
        DerValue der, subDer;  | 
 | 
 | 
 | 
        renewTill = null;  | 
 | 
        caddr = null;  | 
 | 
        authorizationData = null;  | 
 | 
        if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x03)  | 
 | 
                || (encoding.isApplication() != true)  | 
 | 
                || (encoding.isConstructed() != true)) { | 
 | 
            throw new Asn1Exception(Krb5.ASN1_BAD_ID);  | 
 | 
        }  | 
 | 
        der = encoding.getData().getDerValue();  | 
 | 
        if (der.getTag() != DerValue.tag_Sequence) { | 
 | 
            throw new Asn1Exception(Krb5.ASN1_BAD_ID);  | 
 | 
        }  | 
 | 
        flags = TicketFlags.parse(der.getData(), (byte) 0x00, false);  | 
 | 
        key = EncryptionKey.parse(der.getData(), (byte) 0x01, false);  | 
 | 
        Realm crealm = Realm.parse(der.getData(), (byte) 0x02, false);  | 
 | 
        cname = PrincipalName.parse(der.getData(), (byte) 0x03, false, crealm);  | 
 | 
        transited = TransitedEncoding.parse(der.getData(), (byte) 0x04, false);  | 
 | 
        authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false);  | 
 | 
        starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true);  | 
 | 
        endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false);  | 
 | 
        if (der.getData().available() > 0) { | 
 | 
            renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true);  | 
 | 
        }  | 
 | 
        if (der.getData().available() > 0) { | 
 | 
            caddr = HostAddresses.parse(der.getData(), (byte) 0x09, true);  | 
 | 
        }  | 
 | 
        if (der.getData().available() > 0) { | 
 | 
            authorizationData = AuthorizationData.parse(der.getData(), (byte) 0x0A, true);  | 
 | 
        }  | 
 | 
        if (der.getData().available() > 0) { | 
 | 
            throw new Asn1Exception(Krb5.ASN1_BAD_ID);  | 
 | 
        }  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public byte[] asn1Encode() throws Asn1Exception, IOException { | 
 | 
        DerOutputStream bytes = new DerOutputStream();  | 
 | 
        DerOutputStream temp = new DerOutputStream();  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x00), flags.asn1Encode());  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x01), key.asn1Encode());  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x02), cname.getRealm().asn1Encode());  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x03), cname.asn1Encode());  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x04), transited.asn1Encode());  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x05), authtime.asn1Encode());  | 
 | 
        if (starttime != null) { | 
 | 
            bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                    true, (byte) 0x06), starttime.asn1Encode());  | 
 | 
        }  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                true, (byte) 0x07), endtime.asn1Encode());  | 
 | 
 | 
 | 
        if (renewTill != null) { | 
 | 
            bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                    true, (byte) 0x08), renewTill.asn1Encode());  | 
 | 
        }  | 
 | 
 | 
 | 
        if (caddr != null) { | 
 | 
            bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                    true, (byte) 0x09), caddr.asn1Encode());  | 
 | 
        }  | 
 | 
 | 
 | 
        if (authorizationData != null) { | 
 | 
            bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,  | 
 | 
                    true, (byte) 0x0A), authorizationData.asn1Encode());  | 
 | 
        }  | 
 | 
        temp.write(DerValue.tag_Sequence, bytes);  | 
 | 
        bytes = new DerOutputStream();  | 
 | 
        bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION,  | 
 | 
                true, (byte) 0x03), temp);  | 
 | 
        return bytes.toByteArray();  | 
 | 
    }  | 
 | 
}  |