OpenEUICC/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/impl/download/GeneratePhaseWorker.java

115 lines
3.9 KiB
Java

package com.truphone.lpa.impl.download;
import com.truphone.lpa.apdu.ApduUtils;
import com.truphone.lpa.apdu.ProfileUtil;
import com.truphone.lpa.progress.DownloadProgress;
import com.truphone.lpa.progress.DownloadProgressPhase;
import com.truphone.lpad.progress.ProgressStep;
import com.truphone.rsp.dto.asn1.rspdefinitions.BoundProfilePackage;
import com.truphone.util.LogStub;
import com.truphone.util.TextUtil;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
public class GeneratePhaseWorker {
private static final Logger LOG = Logger.getLogger(GeneratePhaseWorker.class.getName());
private final DownloadProgress progress;
public GeneratePhaseWorker(DownloadProgress progress) {
this.progress = progress;
}
public Map<SbppApdu, List<String>> generateSbpp(String bpp) throws IOException {
progress.setCurrentPhase(DownloadProgressPhase.GENERATING);
List<String[]> sbpp = generateSbpps(bpp);
return generateSbppMap(sbpp);
}
private Map<SbppApdu, List<String>> generateSbppMap(List<String[]> sbpp) {
Map<SbppApdu, List<String>> sbppApduMap = new HashMap<>();
progress.stepExecuted(ProgressStep.DOWNLOAD_PROFILE_GENERATING_SBPP_APDUS,
"generateSbpp generating...");
sbppApduMap.put(SbppApdu.BOUND_PROFILE_PACKAGE, ApduUtils.loadBoundProfilePackageApdu(sbpp));
if(sbpp.size()==5){
//secondSequenceOf87
sbppApduMap.put(SbppApdu.REPLACE_SESSIONS_KEYS, ApduUtils.loadProfileProtectionKeys(sbpp));
}
sbppApduMap.put(SbppApdu.STORE_METADATA, ApduUtils.loadStoreMetadataApdu(sbpp));
sbppApduMap.put(SbppApdu.CONFIGURE_ISDPA, ApduUtils.loadConfigureISDPApdu(sbpp));
sbppApduMap.put(SbppApdu.INITIALIZE_SECURE_CHANNEL, ApduUtils.loadInitialiseSecureChannelApdu(sbpp));
progress.stepExecuted(ProgressStep.DOWNLOAD_PROFILE_GENERATED_SBPP_APDUS,
"generateSbpp generated...");
return sbppApduMap;
}
private List<String[]> generateSbpps(String bpp) throws IOException {
progress.stepExecuted(ProgressStep.DOWNLOAD_PROFILE_GENERATING_SBPP,
"generateSbpp generating...");
ProfileUtil util = new ProfileUtil();
logPrintBpp(bpp);
// TODO: This should be refactored to use the jASN1 objects
List<String[]> sbpp = util.generateSBPP(bpp);
logPrintSbpp(sbpp);
progress.stepExecuted(ProgressStep.DOWNLOAD_PROFILE_GENERATED_SBPP,
"generateSbpp generated...");
return sbpp;
}
private void logPrintSbpp(List<String[]> sbpp) {
if (LogStub.getInstance().isDebugEnabled()) {
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - SBPP count: " + sbpp.size());
for (String[] s : sbpp) {
for (String s1 : s) {
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - generateSbpp - SBPP is: " + s1);
}
}
}
}
private void logPrintBpp(String bpp) throws IOException {
if (LogStub.getInstance().isDebugEnabled()) {
InputStream bppIs = null;
BoundProfilePackage bppObj = new BoundProfilePackage();
try {
bppIs = new ByteArrayInputStream(TextUtil.decodeHex(bpp));
bppObj.decode(bppIs);
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - BPP Object is: " + bppObj);
} catch (NumberFormatException e) {
LOG.log(Level.INFO, LogStub.getInstance().getTag() + " - " + e.getMessage(), e);
} finally {
CloseResources.closeResources(bppIs);
}
}
}
}