package de.persosim.simulator.perso;
import java.util.ArrayList;
import java.util.List;
import de.persosim.simulator.cardobjects.DedicatedFileIdentifier;
import de.persosim.simulator.cardobjects.ElementaryFile;
import de.persosim.simulator.cardobjects.FileIdentifier;
import de.persosim.simulator.cardobjects.MasterFile;
import de.persosim.simulator.cardobjects.ShortFileIdentifier;
import de.persosim.simulator.exception.AccessDeniedException;
import de.persosim.simulator.protocols.Protocol;
import de.persosim.simulator.protocols.file.FileProtocol;
import de.persosim.simulator.seccondition.SecCondition;
/**
* This class represents a minimum of personalization e.g. for testing purposes.
* The personalization contains an MF, an EF.CardAccess and the file management protocol.
* Please note that the content of EF.CardAccess can be chosen arbitrarily and hence may neither be valid nor any TLV structure at all.
* The content of EF.CardAccess primarily is intended for identification of the personalization.
*
* @author slutters
*
*/
public class MinimumPersonalization extends PersonalizationImpl {
protected byte[] efCardAccessValue;
public static final byte [] DEFAULT_EF_CA_VALUE = "DUMMY".getBytes();
public MinimumPersonalization(byte[] efCardAccessValue) {
super();
this.efCardAccessValue = efCardAccessValue;
}
public MinimumPersonalization() throws AccessDeniedException {
this(DEFAULT_EF_CA_VALUE);
}
protected List<Protocol> buildProtocolList() {
List<Protocol> protocols = new ArrayList<>();
/* load FM protocol */
FileProtocol fileManagementProtocol = new FileProtocol();
fileManagementProtocol.init();
protocols.add(fileManagementProtocol);
return protocols;
}
public MasterFile buildObjectTree() {
MasterFile mf = new MasterFile(new FileIdentifier(0x3F00),
new DedicatedFileIdentifier(new byte[] { (byte) 0xA0, 0x0,
0x0, 0x2, 0x47, 0x10, 0x03 }));
// add file to object tree
ElementaryFile efCardAccess = new ElementaryFile(new FileIdentifier(
0x011C), new ShortFileIdentifier(0x1C),
efCardAccessValue,
SecCondition.ALLOWED,
SecCondition.DENIED,
SecCondition.DENIED);
try {
mf.addChild(efCardAccess);
} catch (AccessDeniedException e) {
//ignore as empty EF.CardAccess is not strictly needed
}
return mf;
}
}