58 * http://www.ietf.org/rfc/rfc4120.txt</a>. |
58 * http://www.ietf.org/rfc/rfc4120.txt</a>. |
59 */ |
59 */ |
60 |
60 |
61 public class Ticket implements Cloneable { |
61 public class Ticket implements Cloneable { |
62 public int tkt_vno; |
62 public int tkt_vno; |
63 public Realm realm; |
|
64 public PrincipalName sname; |
63 public PrincipalName sname; |
65 public EncryptedData encPart; |
64 public EncryptedData encPart; |
66 |
65 |
67 private Ticket() { |
66 private Ticket() { |
68 } |
67 } |
69 |
68 |
70 public Object clone() { |
69 public Object clone() { |
71 Ticket new_ticket = new Ticket(); |
70 Ticket new_ticket = new Ticket(); |
72 new_ticket.realm = (Realm)realm.clone(); |
|
73 new_ticket.sname = (PrincipalName)sname.clone(); |
71 new_ticket.sname = (PrincipalName)sname.clone(); |
74 new_ticket.encPart = (EncryptedData)encPart.clone(); |
72 new_ticket.encPart = (EncryptedData)encPart.clone(); |
75 new_ticket.tkt_vno = tkt_vno; |
73 new_ticket.tkt_vno = tkt_vno; |
76 return new_ticket; |
74 return new_ticket; |
77 } |
75 } |
78 |
76 |
79 public Ticket( |
77 public Ticket( |
80 Realm new_realm, |
|
81 PrincipalName new_sname, |
78 PrincipalName new_sname, |
82 EncryptedData new_encPart |
79 EncryptedData new_encPart |
83 ) { |
80 ) { |
84 tkt_vno = Krb5.TICKET_VNO; |
81 tkt_vno = Krb5.TICKET_VNO; |
85 realm = new_realm; |
|
86 sname = new_sname; |
82 sname = new_sname; |
87 encPart = new_encPart; |
83 encPart = new_encPart; |
88 } |
84 } |
89 |
85 |
90 public Ticket(byte[] data) throws Asn1Exception, |
86 public Ticket(byte[] data) throws Asn1Exception, |
121 if ((subDer.getTag() & (byte)0x1F) != (byte)0x00) |
117 if ((subDer.getTag() & (byte)0x1F) != (byte)0x00) |
122 throw new Asn1Exception(Krb5.ASN1_BAD_ID); |
118 throw new Asn1Exception(Krb5.ASN1_BAD_ID); |
123 tkt_vno = subDer.getData().getBigInteger().intValue(); |
119 tkt_vno = subDer.getData().getBigInteger().intValue(); |
124 if (tkt_vno != Krb5.TICKET_VNO) |
120 if (tkt_vno != Krb5.TICKET_VNO) |
125 throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); |
121 throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); |
126 realm = Realm.parse(der.getData(), (byte)0x01, false); |
122 Realm srealm = Realm.parse(der.getData(), (byte)0x01, false); |
127 sname = PrincipalName.parse(der.getData(), (byte)0x02, false); |
123 sname = PrincipalName.parse(der.getData(), (byte)0x02, false, srealm); |
128 encPart = EncryptedData.parse(der.getData(), (byte)0x03, false); |
124 encPart = EncryptedData.parse(der.getData(), (byte)0x03, false); |
129 if (der.getData().available() > 0) |
125 if (der.getData().available() > 0) |
130 throw new Asn1Exception(Krb5.ASN1_BAD_ID); |
126 throw new Asn1Exception(Krb5.ASN1_BAD_ID); |
131 } |
127 } |
132 |
128 |
140 DerOutputStream bytes = new DerOutputStream(); |
136 DerOutputStream bytes = new DerOutputStream(); |
141 DerOutputStream temp = new DerOutputStream(); |
137 DerOutputStream temp = new DerOutputStream(); |
142 DerValue der[] = new DerValue[4]; |
138 DerValue der[] = new DerValue[4]; |
143 temp.putInteger(BigInteger.valueOf(tkt_vno)); |
139 temp.putInteger(BigInteger.valueOf(tkt_vno)); |
144 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); |
140 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); |
145 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), realm.asn1Encode()); |
141 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), sname.getRealm().asn1Encode()); |
146 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.asn1Encode()); |
142 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.asn1Encode()); |
147 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode()); |
143 bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode()); |
148 temp = new DerOutputStream(); |
144 temp = new DerOutputStream(); |
149 temp.write(DerValue.tag_Sequence, bytes); |
145 temp.write(DerValue.tag_Sequence, bytes); |
150 DerOutputStream ticket = new DerOutputStream(); |
146 DerOutputStream ticket = new DerOutputStream(); |