package org.apache.kerberos.kerb.spec.kdc;
import org.apache.haox.asn1.type.Asn1FieldInfo;
import org.apache.haox.asn1.type.Asn1Integer;
import org.apache.kerberos.kerb.spec.KerberosString;
import org.apache.kerberos.kerb.spec.KerberosTime;
import org.apache.kerberos.kerb.spec.KrbIntegers;
import org.apache.kerberos.kerb.spec.KrbSequenceType;
import org.apache.kerberos.kerb.spec.common.*;
import org.apache.kerberos.kerb.spec.ticket.Tickets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
KDC-REQ-BODY ::= SEQUENCE {
kdc-options [0] KDCOptions,
cname [1] PrincipalName OPTIONAL
-- Used only in AS-REQ --,
realm [2] Realm
-- Server's realm
-- Also client's in AS-REQ --,
sname [3] PrincipalName OPTIONAL,
from [4] KerberosTime OPTIONAL,
till [5] KerberosTime,
rtime [6] KerberosTime OPTIONAL,
nonce [7] UInt32,
etype [8] SEQUENCE OF Int32 -- EncryptionType
-- in preference order --,
addresses [9] HostAddresses OPTIONAL,
enc-authorization-data [10] EncryptedData OPTIONAL
-- AuthorizationData --,
additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
-- NOTE: not empty
}
*/
public class KdcReqBody extends KrbSequenceType {
private static int KDC_OPTIONS = 0;
private static int CNAME = 1;
private static int REALM = 2;
private static int SNAME = 3;
private static int FROM = 4;
private static int TILL = 5;
private static int RTIME = 6;
private static int NONCE = 7;
private static int ETYPE = 8;
private static int ADDRESSES = 9;
private static int ENC_AUTHORIZATION_DATA = 10;
private static int ADDITIONAL_TICKETS = 11;
static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
new Asn1FieldInfo(KDC_OPTIONS, KdcOptions.class),
new Asn1FieldInfo(CNAME, PrincipalName.class),
new Asn1FieldInfo(REALM, KerberosString.class),
new Asn1FieldInfo(SNAME, PrincipalName.class),
new Asn1FieldInfo(FROM, KerberosTime.class),
new Asn1FieldInfo(TILL, KerberosTime.class),
new Asn1FieldInfo(RTIME, KerberosTime.class),
new Asn1FieldInfo(NONCE, Asn1Integer.class),
new Asn1FieldInfo(ETYPE, KrbIntegers.class),
new Asn1FieldInfo(ADDRESSES, HostAddresses.class),
new Asn1FieldInfo(ENC_AUTHORIZATION_DATA, AuthorizationData.class),
new Asn1FieldInfo(ADDITIONAL_TICKETS, Tickets.class)
};
public KdcReqBody() {
super(fieldInfos);
}
private AuthorizationData authorizationData;
public KerberosTime getFrom() {
return getFieldAs(FROM, KerberosTime.class);
}
public void setFrom(KerberosTime from) {
setFieldAs(FROM, from);
}
public KerberosTime getTill() {
return getFieldAs(TILL, KerberosTime.class);
}
public void setTill(KerberosTime till) {
setFieldAs(TILL, till);
}
public KerberosTime getRtime() {
return getFieldAs(RTIME, KerberosTime.class);
}
public void setRtime(KerberosTime rtime) {
setFieldAs(RTIME, rtime);
}
public int getNonce() {
return getFieldAsInt(NONCE);
}
public void setNonce(int nonce) {
setFieldAsInt(NONCE, nonce);
}
public List<EncryptionType> getEtypes() {
KrbIntegers values = getFieldAs(ETYPE, KrbIntegers.class);
if (values == null) {
return Collections.emptyList();
}
List<EncryptionType> results = new ArrayList<EncryptionType>();
for (Integer value : values.getValues()) {
results.add(EncryptionType.fromValue(value));
}
return results;
}
public void setEtypes(List<EncryptionType> etypes) {
List<Integer> values = new ArrayList<Integer>();
for (EncryptionType etype: etypes) {
values.add(etype.getValue());
}
KrbIntegers value = new KrbIntegers(values);
setFieldAs(ETYPE, value);
}
public HostAddresses getAddresses() {
return getFieldAs(ADDRESSES, HostAddresses.class);
}
public void setAddresses(HostAddresses addresses) {
setFieldAs(ADDRESSES, addresses);
}
public EncryptedData getEncryptedAuthorizationData() {
return getFieldAs(ENC_AUTHORIZATION_DATA, EncryptedData.class);
}
public void setEncryptedAuthorizationData(EncryptedData encAuthorizationData) {
setFieldAs(ENC_AUTHORIZATION_DATA, encAuthorizationData);
}
public AuthorizationData getAuthorizationData() {
return authorizationData;
}
public void setAuthorizationData(AuthorizationData authorizationData) {
this.authorizationData = authorizationData;
}
public Tickets getAdditionalTickets() {
return getFieldAs(ADDITIONAL_TICKETS, Tickets.class);
}
public void setAdditionalTickets(Tickets additionalTickets) {
setFieldAs(ADDITIONAL_TICKETS, additionalTickets);
}
public KdcOptions getKdcOptions() {
return getFieldAs(KDC_OPTIONS, KdcOptions.class);
}
public void setKdcOptions(KdcOptions kdcOptions) {
setFieldAs(KDC_OPTIONS, kdcOptions);
}
public PrincipalName getSname() {
return getFieldAs(SNAME, PrincipalName.class);
}
public void setSname(PrincipalName sname) {
setFieldAs(SNAME, sname);
}
public PrincipalName getCname() {
return getFieldAs(CNAME, PrincipalName.class);
}
public void setCname(PrincipalName cname) {
setFieldAs(CNAME, cname);
}
public String getRealm() {
return getFieldAsString(REALM);
}
public void setRealm(String realm) {
setFieldAs(REALM, new KerberosString(realm));
}
}