Remove most of apache commons hex decoder usage

This commit is contained in:
Peter Cai 2022-07-12 18:11:20 -04:00
parent 9ee8f8878b
commit b11c3fc129
12 changed files with 45 additions and 46 deletions

View File

@ -7,8 +7,7 @@ import com.truphone.lpad.progress.Progress;
import com.truphone.lpad.progress.ProgressStep; import com.truphone.lpad.progress.ProgressStep;
import com.truphone.rsp.dto.asn1.rspdefinitions.DisableProfileResponse; import com.truphone.rsp.dto.asn1.rspdefinitions.DisableProfileResponse;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import org.apache.commons.codec.DecoderException; import com.truphone.util.TextUtil;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
@ -41,7 +40,7 @@ class DisableProfileWorker {
progress.stepExecuted(ProgressStep.DISABLE_PROFILE_CONVERTING_RESPONSE, "Converting response"); progress.stepExecuted(ProgressStep.DISABLE_PROFILE_CONVERTING_RESPONSE, "Converting response");
try { try {
InputStream is = new ByteArrayInputStream(Hex.decodeHex(eResponse.toCharArray())); InputStream is = new ByteArrayInputStream(TextUtil.decodeHex(eResponse));
DisableProfileResponse disableProfileResponse = new DisableProfileResponse(); DisableProfileResponse disableProfileResponse = new DisableProfileResponse();
disableProfileResponse.decode(is); disableProfileResponse.decode(is);
@ -67,7 +66,7 @@ class DisableProfileWorker {
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be disabled"); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be disabled");
throw new RuntimeException("Unable to disable profile: " + iccid + ", response: " + eResponse); throw new RuntimeException("Unable to disable profile: " + iccid + ", response: " + eResponse);
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e);
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be disabled. Exception in Decoder:" + e.getMessage()); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be disabled. Exception in Decoder:" + e.getMessage());

View File

@ -7,8 +7,7 @@ import com.truphone.lpad.progress.Progress;
import com.truphone.lpad.progress.ProgressStep; import com.truphone.lpad.progress.ProgressStep;
import com.truphone.rsp.dto.asn1.rspdefinitions.EnableProfileResponse; import com.truphone.rsp.dto.asn1.rspdefinitions.EnableProfileResponse;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import org.apache.commons.codec.DecoderException; import com.truphone.util.TextUtil;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
@ -42,7 +41,7 @@ class EnableProfileWorker {
try { try {
EnableProfileResponse enableProfileResponse = new EnableProfileResponse(); EnableProfileResponse enableProfileResponse = new EnableProfileResponse();
InputStream is = new ByteArrayInputStream(Hex.decodeHex(eResponse.toCharArray())); InputStream is = new ByteArrayInputStream(TextUtil.decodeHex(eResponse));
enableProfileResponse.decode(is); enableProfileResponse.decode(is);
@ -72,7 +71,7 @@ class EnableProfileWorker {
LOG.severe(LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be enabled. message: " + e.getMessage()); LOG.severe(LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be enabled. message: " + e.getMessage());
throw new RuntimeException("Unable to enable profile: " + iccid + ", response: " + eResponse); throw new RuntimeException("Unable to enable profile: " + iccid + ", response: " + eResponse);
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e);
LOG.severe(LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be enabled. Exception in Decoder:" + e.getMessage()); LOG.severe(LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be enabled. Exception in Decoder:" + e.getMessage());

View File

@ -16,8 +16,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
/** /**
* *

View File

@ -18,13 +18,13 @@ import com.truphone.lpa.ApduChannel
import com.truphone.lpa.LocalProfileInfo import com.truphone.lpa.LocalProfileInfo
import com.truphone.rsp.dto.asn1.rspdefinitions.ProfileInfoListResponse import com.truphone.rsp.dto.asn1.rspdefinitions.ProfileInfoListResponse
import com.truphone.util.LogStub import com.truphone.util.LogStub
import org.apache.commons.codec.DecoderException
import org.apache.commons.codec.binary.Hex
import com.truphone.lpa.apdu.ApduUtils import com.truphone.lpa.apdu.ApduUtils
import com.truphone.util.TextUtil
import com.truphone.util.TextUtil.iccidBigToLittle import com.truphone.util.TextUtil.iccidBigToLittle
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.lang.NumberFormatException
import java.lang.RuntimeException import java.lang.RuntimeException
import java.util.logging.Level import java.util.logging.Level
import java.util.logging.Logger import java.util.logging.Logger
@ -56,7 +56,7 @@ internal class ListProfilesWorker(private val apduChannel: ApduChannel) {
) )
} }
profileList profileList
} catch (e: DecoderException) { } catch (e: NumberFormatException) {
LOG.log(Level.SEVERE, LogStub.getInstance().tag + " - " + e.message, e) LOG.log(Level.SEVERE, LogStub.getInstance().tag + " - " + e.message, e)
LOG.log( LOG.log(
Level.SEVERE, Level.SEVERE,
@ -69,9 +69,9 @@ internal class ListProfilesWorker(private val apduChannel: ApduChannel) {
} }
} }
@Throws(DecoderException::class, IOException::class) @Throws(NumberFormatException::class, IOException::class)
private fun decodeProfiles(profilesInfo: String, profiles: ProfileInfoListResponse) { private fun decodeProfiles(profilesInfo: String, profiles: ProfileInfoListResponse) {
val `is`: InputStream = ByteArrayInputStream(Hex.decodeHex(profilesInfo.toCharArray())) val `is`: InputStream = ByteArrayInputStream(TextUtil.decodeHex(profilesInfo))
profiles.decode(`is`) profiles.decode(`is`)
if (LogStub.getInstance().isDebugEnabled) { if (LogStub.getInstance().isDebugEnabled) {
LogStub.getInstance().logDebug(LOG, "Profile list object: $profiles") LogStub.getInstance().logDebug(LOG, "Profile list object: $profiles")

View File

@ -17,13 +17,13 @@ package com.truphone.lpa.impl
import com.truphone.lpa.ApduChannel import com.truphone.lpa.ApduChannel
import com.truphone.util.LogStub import com.truphone.util.LogStub
import com.truphone.lpa.apdu.ApduUtils import com.truphone.lpa.apdu.ApduUtils
import org.apache.commons.codec.binary.Hex
import com.truphone.rsp.dto.asn1.rspdefinitions.SetNicknameResponse import com.truphone.rsp.dto.asn1.rspdefinitions.SetNicknameResponse
import org.apache.commons.codec.DecoderException import com.truphone.util.TextUtil
import com.truphone.util.Util import com.truphone.util.Util
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.lang.NumberFormatException
import java.lang.RuntimeException import java.lang.RuntimeException
import java.util.logging.Level import java.util.logging.Level
import java.util.logging.Logger import java.util.logging.Logger
@ -51,7 +51,7 @@ class SetNicknameWorker internal constructor(
) )
val eResponse = apduChannel.transmitAPDU(apdu) val eResponse = apduChannel.transmitAPDU(apdu)
return try { return try {
val `is`: InputStream = ByteArrayInputStream(Hex.decodeHex(eResponse.toCharArray())) val `is`: InputStream = ByteArrayInputStream(TextUtil.decodeHex(eResponse))
val response = SetNicknameResponse() val response = SetNicknameResponse()
response.decode(`is`) response.decode(`is`)
if ("0" == response.setNicknameResult.toString()) { if ("0" == response.setNicknameResult.toString()) {
@ -75,7 +75,7 @@ class SetNicknameWorker internal constructor(
LogStub.getInstance().tag + " - iccid: " + iccid + " profile failed to be renamed" LogStub.getInstance().tag + " - iccid: " + iccid + " profile failed to be renamed"
) )
throw RuntimeException("Unable to rename profile: $iccid, response: $eResponse") throw RuntimeException("Unable to rename profile: $iccid, response: $eResponse")
} catch (e: DecoderException) { } catch (e: NumberFormatException) {
LOG.log(Level.SEVERE, LogStub.getInstance().tag + " - " + e.message, e) LOG.log(Level.SEVERE, LogStub.getInstance().tag + " - " + e.message, e)
LOG.log( LOG.log(
Level.SEVERE, Level.SEVERE,

View File

@ -16,8 +16,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
/** /**
* *

View File

@ -7,8 +7,7 @@ import com.truphone.lpa.progress.DownloadProgressPhase;
import com.truphone.lpad.progress.ProgressStep; import com.truphone.lpad.progress.ProgressStep;
import com.truphone.rsp.dto.asn1.rspdefinitions.EuiccConfiguredAddressesResponse; import com.truphone.rsp.dto.asn1.rspdefinitions.EuiccConfiguredAddressesResponse;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import org.apache.commons.codec.DecoderException; import com.truphone.util.TextUtil;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
@ -59,7 +58,7 @@ public class ConnectingPhaseWorker {
} }
return euiccConfiguredAddress; return euiccConfiguredAddress;
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.log(Level.SEVERE, "KOL.007" + e.getMessage(), e); LOG.log(Level.SEVERE, "KOL.007" + e.getMessage(), e);
LOG.severe(LogStub.getInstance().getTag() + " - matchingId: " + matchingId + LOG.severe(LogStub.getInstance().getTag() + " - matchingId: " + matchingId +
" Unable to retrieve eUICC configured address. Exception in Decoder:" + e.getMessage()); " Unable to retrieve eUICC configured address. Exception in Decoder:" + e.getMessage());
@ -74,12 +73,12 @@ public class ConnectingPhaseWorker {
} }
} }
private EuiccConfiguredAddressesResponse decodeEuiccConfiguredAddressesResponse(String euiCCConfiguredAddressAPDUResponse) throws DecoderException, IOException { private EuiccConfiguredAddressesResponse decodeEuiccConfiguredAddressesResponse(String euiCCConfiguredAddressAPDUResponse) throws NumberFormatException, IOException {
InputStream is = null; InputStream is = null;
try { try {
EuiccConfiguredAddressesResponse euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse(); EuiccConfiguredAddressesResponse euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
is = new ByteArrayInputStream(Hex.decodeHex(euiCCConfiguredAddressAPDUResponse.toCharArray())); is = new ByteArrayInputStream(TextUtil.decodeHex(euiCCConfiguredAddressAPDUResponse));
euiccConfiguredAddressesResponse.decode(is); euiccConfiguredAddressesResponse.decode(is);

View File

@ -8,8 +8,7 @@ import com.truphone.lpa.progress.DownloadProgressPhase;
import com.truphone.lpad.progress.ProgressStep; import com.truphone.lpad.progress.ProgressStep;
import com.truphone.rsp.dto.asn1.rspdefinitions.BoundProfilePackage; import com.truphone.rsp.dto.asn1.rspdefinitions.BoundProfilePackage;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import org.apache.commons.codec.DecoderException; import com.truphone.util.TextUtil;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
@ -100,12 +99,12 @@ public class GeneratePhaseWorker {
BoundProfilePackage bppObj = new BoundProfilePackage(); BoundProfilePackage bppObj = new BoundProfilePackage();
try { try {
bppIs = new ByteArrayInputStream(Hex.decodeHex(bpp.toCharArray())); bppIs = new ByteArrayInputStream(TextUtil.decodeHex(bpp));
bppObj.decode(bppIs); bppObj.decode(bppIs);
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - BPP Object is: " + bppObj); LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - BPP Object is: " + bppObj);
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.log(Level.INFO, LogStub.getInstance().getTag() + " - " + e.getMessage(), e); LOG.log(Level.INFO, LogStub.getInstance().getTag() + " - " + e.getMessage(), e);
} finally { } finally {
CloseResources.closeResources(bppIs); CloseResources.closeResources(bppIs);

View File

@ -9,9 +9,6 @@ import com.truphone.rsp.dto.asn1.rspdefinitions.ProfileInstallationResultData;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import com.truphone.util.TextUtil; import com.truphone.util.TextUtil;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -168,7 +165,7 @@ public class InstallationPhaseWorker {
throw new RuntimeException(errorMessage); throw new RuntimeException(errorMessage);
} }
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e);
LOG.severe(LogStub.getInstance().getTag() + " - Unable to retrieve Profile Installation Result. Exception in Decoder:" + e.getMessage()); LOG.severe(LogStub.getInstance().getTag() + " - Unable to retrieve Profile Installation Result. Exception in Decoder:" + e.getMessage());
@ -199,7 +196,7 @@ public class InstallationPhaseWorker {
return errorMessage; return errorMessage;
} }
private ProfileInstallationResult getProfileInstallationResult(String profileInstallationResultRaw) throws DecoderException, IOException { private ProfileInstallationResult getProfileInstallationResult(String profileInstallationResultRaw) throws NumberFormatException, IOException {
InputStream is = null; InputStream is = null;
if (LogStub.getInstance().isDebugEnabled()) { if (LogStub.getInstance().isDebugEnabled()) {
@ -209,7 +206,7 @@ public class InstallationPhaseWorker {
try { try {
ProfileInstallationResult profileInstallationResult = new ProfileInstallationResult(); ProfileInstallationResult profileInstallationResult = new ProfileInstallationResult();
is = new ByteArrayInputStream(Hex.decodeHex(profileInstallationResultRaw.toCharArray())); is = new ByteArrayInputStream(TextUtil.decodeHex(profileInstallationResultRaw));
profileInstallationResult.decode(is, true); profileInstallationResult.decode(is, true);

View File

@ -9,9 +9,6 @@ import com.truphone.rsp.dto.asn1.rspdefinitions.DeleteProfileResponse;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import com.truphone.util.TextUtil; import com.truphone.util.TextUtil;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -71,7 +68,7 @@ public class DeleteProfileWorker implements LpadWorker<LpadWorkerExchange<Delete
DeleteProfileResponse deleteProfileResponse = new DeleteProfileResponse(); DeleteProfileResponse deleteProfileResponse = new DeleteProfileResponse();
try { try {
InputStream is = new ByteArrayInputStream(Hex.decodeHex(eResponse.toCharArray())); InputStream is = new ByteArrayInputStream(TextUtil.decodeHex(eResponse));
deleteProfileResponse.decode(is); deleteProfileResponse.decode(is);
logDebug(" - Delete response: " + deleteProfileResponse); logDebug(" - Delete response: " + deleteProfileResponse);
@ -93,7 +90,7 @@ public class DeleteProfileWorker implements LpadWorker<LpadWorkerExchange<Delete
LOG.severe(LogStub.getInstance().getTag() + " - iccid:" + iccid + " profile failed to be deleted"); LOG.severe(LogStub.getInstance().getTag() + " - iccid:" + iccid + " profile failed to be deleted");
throw new RuntimeException("Unable to delete profile: " + iccid + ", response: " + eResponse); throw new RuntimeException("Unable to delete profile: " + iccid + ", response: " + eResponse);
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.severe(LogStub.getInstance().getTag() + " - " + e.getMessage()); LOG.severe(LogStub.getInstance().getTag() + " - " + e.getMessage());
LOG.severe(LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be deleted. Exception in Decoder:" + e.getMessage()); LOG.severe(LogStub.getInstance().getTag() + " - iccid: " + iccid + " profile failed to be deleted. Exception in Decoder:" + e.getMessage());

View File

@ -9,9 +9,6 @@ import com.truphone.rsp.dto.asn1.rspdefinitions.GetEuiccDataResponse;
import com.truphone.util.LogStub; import com.truphone.util.LogStub;
import com.truphone.util.TextUtil; import com.truphone.util.TextUtil;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -71,7 +68,7 @@ public class GetEidLpadWorker implements LpadWorker<LpadWorkerExchange<String>,
logDebug("Decoding response: " + eidapduResponseStr); logDebug("Decoding response: " + eidapduResponseStr);
InputStream is = new ByteArrayInputStream(Hex.decodeHex(eidapduResponseStr.toCharArray())); InputStream is = new ByteArrayInputStream(TextUtil.decodeHex(eidapduResponseStr));
logDebug("Decoding with GetEuiccDataResponse"); logDebug("Decoding with GetEuiccDataResponse");
@ -82,7 +79,7 @@ public class GetEidLpadWorker implements LpadWorker<LpadWorkerExchange<String>,
progress.stepExecuted(ProgressStep.GET_EID_CONVERTED, "getEID converted..."); progress.stepExecuted(ProgressStep.GET_EID_CONVERTED, "getEID converted...");
return eidResponse.getEidValue().toString(); return eidResponse.getEidValue().toString();
} catch (DecoderException e) { } catch (NumberFormatException e) {
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - " + e.getMessage(), e);
LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - Unable to retrieve EID. Exception in Decoder:" + e.getMessage()); LOG.log(Level.SEVERE, LogStub.getInstance().getTag() + " - Unable to retrieve EID. Exception in Decoder:" + e.getMessage());

View File

@ -1,6 +1,7 @@
package com.truphone.util package com.truphone.util
import java.io.InputStream import java.io.InputStream
import java.lang.NumberFormatException
import java.lang.StringBuilder import java.lang.StringBuilder
object TextUtil { object TextUtil {
@ -44,6 +45,21 @@ object TextUtil {
return String(result) return String(result)
} }
/*
* Decodes a hex string into a byte array
* Adapted from <https://stackoverflow.com/questions/66613717/kotlin-convert-hex-string-to-bytearray>
*/
@JvmStatic
fun decodeHex(str: String): ByteArray {
if (str.length % 2 == 0) {
throw NumberFormatException("Must have an even length")
}
return str.chunked(2)
.map { it.toInt(16).toByte() }
.toByteArray()
}
/** /**
* Converts a big-endian representation of ICCID into little-endian * Converts a big-endian representation of ICCID into little-endian
* Big-endian representation is used internally in communication with the SIM. * Big-endian representation is used internally in communication with the SIM.