package org.apache.kerberos.kerb.common;
import org.apache.kerberos.kerb.spec.common.*;
import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
import org.apache.kerberos.kerb.spec.pa.PaDataType;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class KrbErrorUtil {
public static List<EncryptionType> getEtypes(KrbError error) throws IOException {
MethodData methodData = new MethodData();
methodData.decode(error.getEdata());
for( PaDataEntry pd : methodData.getElements()) {
if( pd.getPaDataType() == PaDataType.ETYPE_INFO2 ) {
return getEtypes2(pd.getPaDataValue());
}
else if( pd.getPaDataType() == PaDataType.ETYPE_INFO ) {
return getEtypes(pd.getPaDataValue());
}
}
return Collections.EMPTY_LIST;
}
private static List<EncryptionType> getEtypes(byte[] data) throws IOException {
EtypeInfo info = new EtypeInfo();
info.decode(data);
List<EncryptionType> results = new ArrayList<EncryptionType>();
for( EtypeInfoEntry entry : info.getElements() ) {
results.add(entry.getEtype());
}
return results;
}
private static List<EncryptionType> getEtypes2(byte[] data) throws IOException {
EtypeInfo2 info2 = new EtypeInfo2();
info2.decode(data);
List<EncryptionType> results = new ArrayList<EncryptionType>();
for( EtypeInfo2Entry entry : info2.getElements() ) {
results.add(entry.getEtype());
}
return results;
}
}