package de.persosim.simulator.crypto.certificates; import de.persosim.simulator.protocols.GenericOid; import de.persosim.simulator.protocols.ta.TaOid; import de.persosim.simulator.tlv.ConstructedTlvDataObject; import de.persosim.simulator.tlv.PrimitiveTlvDataObject; import de.persosim.simulator.tlv.TlvConstants; import de.persosim.simulator.tlv.TlvDataObject; import de.persosim.simulator.tlv.TlvDataObjectContainer; import de.persosim.simulator.tlv.TlvDataObjectFactory; /** * This class implements card verifiable certificate extensions as described * in TR-03110 v2.10 Part 3 Appendix C.3. * * @author mboonk * */ public class GenericExtension extends CertificateExtension { TlvDataObjectContainer dataObjects; public GenericExtension(ConstructedTlvDataObject extensionData) { super(new GenericOid(extensionData.getTlvDataObject(TlvConstants.TAG_06).getValueField())); dataObjects = new TlvDataObjectContainer(); boolean firstIgnored = false; for (TlvDataObject object : extensionData.getTlvDataObjectContainer()){ //ignore the first object to get only the context specific data objects if (firstIgnored){ byte [] objectData = object.toByteArray(); dataObjects.addTlvDataObject(TlvDataObjectFactory.createTLVDataObject(objectData, 0, objectData.length)); } else firstIgnored = true; } } public GenericExtension(TaOid objectIdentifier, TlvDataObjectContainer dataObjects) { super(objectIdentifier); this.dataObjects = dataObjects; } @Override public TlvDataObjectContainer getDataObjects() { TlvDataObjectContainer result = new TlvDataObjectContainer(dataObjects.toByteArray()); return result; } @Override public ConstructedTlvDataObject toTlv() { ConstructedTlvDataObject extension = new ConstructedTlvDataObject(TlvConstants.TAG_73); PrimitiveTlvDataObject oidTlv = new PrimitiveTlvDataObject(TlvConstants.TAG_06, objectIdentifier.toByteArray()); extension.addTlvDataObject(oidTlv); for(TlvDataObject tlvDataObject:dataObjects) { extension.addTlvDataObject(tlvDataObject); } return extension; } }