package org.apache.kerberos.kerb.keytab; import org.apache.kerberos.kerb.KrbOutputStream; import org.apache.kerberos.kerb.spec.common.EncryptionKey; import org.apache.kerberos.kerb.spec.common.PrincipalName; import java.io.IOException; import java.io.OutputStream; import java.util.List; public class KeytabOutputStream extends KrbOutputStream { public KeytabOutputStream(OutputStream out) { super(out); } public void writePrincipal(PrincipalName principal, int version) throws IOException { List<String> nameStrings = principal.getNameStrings(); int numComponents = principal.getNameStrings().size(); String realm = principal.getRealm(); writeShort(numComponents); writeCountedString(realm); for (String nameCom : nameStrings) { writeCountedString(nameCom); } writeInt(principal.getNameType().getValue()); // todo: consider the version } @Override public void writeKey(EncryptionKey key, int version) throws IOException { writeShort(key.getKeyType().getValue()); writeCountedOctets(key.getKeyData()); } @Override public void writeCountedOctets(byte[] data) throws IOException { writeShort(data.length); write(data); } }