package org.jmrtd; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.Provider; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import javax.crypto.Cipher; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import net.sf.scuba.smartcards.APDUEvent; import net.sf.scuba.smartcards.APDUListener; import net.sf.scuba.smartcards.APDUWrapper; import net.sf.scuba.smartcards.CardService; import net.sf.scuba.smartcards.CardServiceException; import net.sf.scuba.smartcards.CommandAPDU; import net.sf.scuba.smartcards.ISOFileInfo; import net.sf.scuba.smartcards.ResponseAPDU; import net.sf.scuba.tlv.TLVInputStream; import o.ghS; import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.crypto.tls.CipherSuite; /* loaded from: classes6.dex */ public class PassportApduService extends CardService { public static final byte CAN_PACE_KEY_REFERENCE = 2; private static final byte INS_PACE_GENERAL_AUTHENTICATE = -122; public static final byte MRZ_PACE_KEY_REFERENCE = 1; public static final byte PIN_PACE_KEY_REFERENCE = 3; public static final byte PUK_PACE_KEY_REFERENCE = 4; private static final long serialVersionUID = 2451509825132976178L; private byte[] atr; private transient Cipher cipher; private transient Mac mac; private CardService service; private static final Logger LOGGER = Logger.getLogger("org.jmrtd"); private static final Provider BC_PROVIDER = JMRTDSecurityProvider.getBouncyCastleProvider(); protected static final byte[] APPLET_AID = {ISOFileInfo.A0, 0, 0, 2, 71, 16, 1}; private static final IvParameterSpec ZERO_IV_PARAM_SPEC = new IvParameterSpec(new byte[]{0, 0, 0, 0, 0, 0, 0, 0}); private Collection plainTextAPDUListeners = new HashSet(); private int plainAPDUCount = 0; public PassportApduService(CardService cardService) throws CardServiceException { this.service = cardService; try { this.mac = Mac.getInstance("ISO9797Alg3Mac", BC_PROVIDER); this.cipher = Cipher.getInstance("DESede/CBC/NoPadding"); } catch (GeneralSecurityException e) { LOGGER.log(Level.SEVERE, "Unexpected security exception during initialization", (Throwable) e); throw new CardServiceException(e.toString()); } } @Override // net.sf.scuba.smartcards.CardService public void open() throws CardServiceException { if (!this.service.isOpen()) { this.service.open(); } this.atr = this.service.getATR(); } @Override // net.sf.scuba.smartcards.CardService public boolean isOpen() { boolean isOpen; synchronized (this) { isOpen = this.service.isOpen(); } return isOpen; } @Override // net.sf.scuba.smartcards.CardService public ResponseAPDU transmit(CommandAPDU commandAPDU) throws CardServiceException { ResponseAPDU transmit; synchronized (this) { transmit = this.service.transmit(commandAPDU); } return transmit; } @Override // net.sf.scuba.smartcards.CardService public void close() { CardService cardService = this.service; if (cardService != null) { cardService.close(); } } @Override // net.sf.scuba.smartcards.CardService public void addAPDUListener(APDUListener aPDUListener) { this.service.addAPDUListener(aPDUListener); } @Override // net.sf.scuba.smartcards.CardService public void removeAPDUListener(APDUListener aPDUListener) { this.service.removeAPDUListener(aPDUListener); } private ResponseAPDU transmit(APDUWrapper aPDUWrapper, CommandAPDU commandAPDU) throws CardServiceException { ResponseAPDU transmit = transmit(aPDUWrapper != null ? aPDUWrapper.wrap(commandAPDU) : commandAPDU); short sw = (short) transmit.getSW(); try { if (aPDUWrapper != null) { try { if (transmit.getBytes().length == 2) { StringBuilder sb = new StringBuilder("Exception during transmission of wrapped APDU\nC="); sb.append(ghS.c(commandAPDU.getBytes())); throw new CardServiceException(sb.toString(), sw); } transmit = aPDUWrapper.unwrap(transmit); } catch (Exception e) { if (e instanceof CardServiceException) { throw ((CardServiceException) e); } StringBuilder sb2 = new StringBuilder("Exception during transmission of wrapped APDU\nC="); sb2.append(ghS.c(commandAPDU.getBytes())); sb2.append("\n"); sb2.append(e.getMessage()); throw new CardServiceException(sb2.toString(), sw); } } return transmit; } finally { int i = this.plainAPDUCount + 1; this.plainAPDUCount = i; notifyExchangedPlainTextAPDU(i, commandAPDU, transmit); } } public void sendSelectApplet(APDUWrapper aPDUWrapper, byte[] bArr) throws CardServiceException { synchronized (this) { CommandAPDU commandAPDU = new CommandAPDU(0, -92, 4, 12, bArr); checkStatusWordAfterFileOperation(commandAPDU, transmit(aPDUWrapper, commandAPDU)); } } public void sendSelectFile(short s) throws CardServiceException { synchronized (this) { sendSelectFile(null, s); } } public void sendSelectFile(APDUWrapper aPDUWrapper, short s) throws CardServiceException { synchronized (this) { CommandAPDU commandAPDU = new CommandAPDU(0, -92, 2, 12, new byte[]{(byte) (s >> 8), (byte) s}, 0); ResponseAPDU transmit = transmit(aPDUWrapper, commandAPDU); if (transmit == null) { return; } checkStatusWordAfterFileOperation(commandAPDU, transmit); } } public byte[] sendReadBinary(short s, int i, boolean z) throws CardServiceException { byte[] sendReadBinary; synchronized (this) { sendReadBinary = sendReadBinary(null, s, i, z); } return sendReadBinary; } /* JADX WARN: Removed duplicated region for block: B:26:0x005e */ /* JADX WARN: Removed duplicated region for block: B:32:0x006f A[Catch: all -> 0x00c6, TryCatch #2 {, blocks: (B:19:0x0025, B:21:0x004a, B:23:0x004e, B:24:0x005b, B:30:0x0069, B:32:0x006f, B:34:0x0078, B:35:0x007d, B:37:0x0087, B:38:0x008e, B:40:0x0091, B:43:0x0095, B:46:0x0099, B:47:0x005f, B:50:0x0057, B:54:0x0040), top: B:16:0x0022 }] */ /* JADX WARN: Removed duplicated region for block: B:37:0x0087 A[Catch: all -> 0x00c6, TryCatch #2 {, blocks: (B:19:0x0025, B:21:0x004a, B:23:0x004e, B:24:0x005b, B:30:0x0069, B:32:0x006f, B:34:0x0078, B:35:0x007d, B:37:0x0087, B:38:0x008e, B:40:0x0091, B:43:0x0095, B:46:0x0099, B:47:0x005f, B:50:0x0057, B:54:0x0040), top: B:16:0x0022 }] */ /* JADX WARN: Removed duplicated region for block: B:47:0x005f A[Catch: all -> 0x00c6, TryCatch #2 {, blocks: (B:19:0x0025, B:21:0x004a, B:23:0x004e, B:24:0x005b, B:30:0x0069, B:32:0x006f, B:34:0x0078, B:35:0x007d, B:37:0x0087, B:38:0x008e, B:40:0x0091, B:43:0x0095, B:46:0x0099, B:47:0x005f, B:50:0x0057, B:54:0x0040), top: B:16:0x0022 }] */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public byte[] sendReadBinary(net.sf.scuba.smartcards.APDUWrapper r11, int r12, int r13, boolean r14) throws net.sf.scuba.smartcards.CardServiceException { /* Method dump skipped, instructions count: 201 To view this dump add '--comments-level debug' option */ throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.PassportApduService.sendReadBinary(net.sf.scuba.smartcards.APDUWrapper, int, int, boolean):byte[]"); } public byte[] sendGetChallenge() throws CardServiceException { byte[] sendGetChallenge; synchronized (this) { sendGetChallenge = sendGetChallenge(null); } return sendGetChallenge; } public byte[] sendGetChallenge(APDUWrapper aPDUWrapper) throws CardServiceException { byte[] data; synchronized (this) { data = transmit(aPDUWrapper, new CommandAPDU(0, -124, 0, 0, 8)).getData(); } return data; } public byte[] sendInternalAuthenticate(APDUWrapper aPDUWrapper, byte[] bArr) throws CardServiceException { byte[] data; synchronized (this) { if (bArr != null) { if (bArr.length == 8) { data = transmit(aPDUWrapper, new CommandAPDU(0, -120, 0, 0, bArr, 256)).getData(); } } throw new IllegalArgumentException("rndIFD wrong length"); } return data; } public byte[] sendMutualAuth(byte[] bArr, byte[] bArr2, byte[] bArr3, SecretKey secretKey, SecretKey secretKey2) throws CardServiceException { byte[] doFinal; byte[] bArr4 = bArr2; synchronized (this) { if (bArr != null) { try { if (bArr.length == 8) { if (bArr4 == null || bArr4.length != 8) { bArr4 = new byte[8]; } if (bArr3 == null || bArr3.length != 16) { throw new IllegalArgumentException("kIFD wrong length"); } if (secretKey == null) { throw new IllegalArgumentException("kEnc == null"); } if (secretKey2 == null) { throw new IllegalArgumentException("kMac == null"); } Cipher cipher = this.cipher; IvParameterSpec ivParameterSpec = ZERO_IV_PARAM_SPEC; cipher.init(1, secretKey, ivParameterSpec); byte[] bArr5 = new byte[32]; System.arraycopy(bArr, 0, bArr5, 0, 8); System.arraycopy(bArr4, 0, bArr5, 8, 8); System.arraycopy(bArr3, 0, bArr5, 16, 16); byte[] doFinal2 = this.cipher.doFinal(bArr5); if (doFinal2.length != 32) { StringBuilder sb = new StringBuilder("Cryptogram wrong length "); sb.append(doFinal2.length); throw new IllegalStateException(sb.toString()); } this.mac.init(secretKey2); byte[] doFinal3 = this.mac.doFinal(Util.pad(doFinal2, 8)); if (doFinal3.length != 8) { throw new IllegalStateException("MAC wrong length"); } byte[] bArr6 = new byte[40]; System.arraycopy(doFinal2, 0, bArr6, 0, 32); System.arraycopy(doFinal3, 0, bArr6, 32, 8); ResponseAPDU transmit = transmit(new CommandAPDU(0, -126, 0, 0, bArr6, 40)); if (transmit == null) { throw new CardServiceException("Mutual authentication failed, received null response APDU"); } byte[] bytes = transmit.getBytes(); short sw = (short) transmit.getSW(); if (bytes == null) { throw new CardServiceException("Mutual authentication failed, received empty data in response APDU", sw); } if (sw != -28672) { ResponseAPDU transmit2 = transmit(new CommandAPDU(0, -126, 0, 0, bArr6, 0)); bytes = transmit2.getBytes(); sw = (short) transmit2.getSW(); } if (bytes.length != 42) { StringBuilder sb2 = new StringBuilder("Mutual authentication failed: expected length: 40 + 2, actual length: "); sb2.append(bytes.length); throw new CardServiceException(sb2.toString(), sw); } this.cipher.init(2, secretKey, ivParameterSpec); doFinal = this.cipher.doFinal(bytes, 0, bytes.length - 10); if (doFinal.length != 32) { StringBuilder sb3 = new StringBuilder("Cryptogram wrong length "); sb3.append(doFinal.length); throw new IllegalStateException(sb3.toString()); } } } catch (GeneralSecurityException e) { throw new CardServiceException(e.toString()); } } throw new IllegalArgumentException("rndIFD wrong length"); } return doFinal; } public void sendMutualAuthenticate(APDUWrapper aPDUWrapper, byte[] bArr) throws CardServiceException { synchronized (this) { short sw = (short) transmit(aPDUWrapper, new CommandAPDU(0, -126, 0, 0, bArr)).getSW(); if (sw != -28672) { throw new CardServiceException("Sending External Authenticate failed.", sw); } } } public void sendMSEKAT(APDUWrapper aPDUWrapper, byte[] bArr, byte[] bArr2) throws CardServiceException { synchronized (this) { byte[] bArr3 = new byte[bArr.length + (bArr2 != null ? bArr2.length : 0)]; System.arraycopy(bArr, 0, bArr3, 0, bArr.length); if (bArr2 != null) { System.arraycopy(bArr2, 0, bArr3, bArr.length, bArr2.length); } short sw = (short) transmit(aPDUWrapper, new CommandAPDU(0, 34, 65, CipherSuite.TLS_DH_anon_WITH_AES_128_GCM_SHA256, bArr3)).getSW(); if (sw != -28672) { throw new CardServiceException("Sending MSE KAT failed", sw); } } } public void sendMSESetDST(APDUWrapper aPDUWrapper, byte[] bArr) throws CardServiceException { synchronized (this) { short sw = (short) transmit(aPDUWrapper, new CommandAPDU(0, 34, 129, CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, bArr)).getSW(); if (sw != -28672) { throw new CardServiceException("Sending MSE Set DST failed", sw); } } } public void sendMSESetATExtAuth(APDUWrapper aPDUWrapper, byte[] bArr) throws CardServiceException { synchronized (this) { short sw = (short) transmit(aPDUWrapper, new CommandAPDU(0, 34, 129, CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256, bArr)).getSW(); if (sw != -28672) { throw new CardServiceException("Sending MSE AT failed", sw); } } } /* JADX WARN: Removed duplicated region for block: B:11:0x0093 A[Catch: all -> 0x009b, TRY_ENTER, TryCatch #0 {, blocks: (B:19:0x0003, B:22:0x000c, B:24:0x0032, B:25:0x0046, B:11:0x0093, B:12:0x009a, B:16:0x0088, B:28:0x003d, B:3:0x005c), top: B:18:0x0003, inners: #1 }] */ /* JADX WARN: Removed duplicated region for block: B:16:0x0088 A[Catch: all -> 0x009b, TRY_LEAVE, TryCatch #0 {, blocks: (B:19:0x0003, B:22:0x000c, B:24:0x0032, B:25:0x0046, B:11:0x0093, B:12:0x009a, B:16:0x0088, B:28:0x003d, B:3:0x005c), top: B:18:0x0003, inners: #1 }] */ /* JADX WARN: Removed duplicated region for block: B:5:0x0086 */ /* JADX WARN: Removed duplicated region for block: B:8:0x0091 A[DONT_GENERATE] */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public void sendMSESetATIntAuth(net.sf.scuba.smartcards.APDUWrapper r10, java.lang.String r11, java.math.BigInteger r12) throws net.sf.scuba.smartcards.CardServiceException { /* r9 = this; monitor-enter(r9) if (r12 == 0) goto L5c java.math.BigInteger r0 = java.math.BigInteger.ZERO // Catch: java.lang.Throwable -> L9b int r0 = r12.compareTo(r0) // Catch: java.lang.Throwable -> L9b if (r0 >= 0) goto Lc goto L5c Lc: java.util.logging.Logger r0 = org.jmrtd.PassportApduService.LOGGER // Catch: java.lang.Throwable -> L9b java.lang.StringBuilder r1 = new java.lang.StringBuilder // Catch: java.lang.Throwable -> L9b java.lang.String r2 = "DEBUG: explicit case, keyId == " r1.(r2) // Catch: java.lang.Throwable -> L9b r1.append(r12) // Catch: java.lang.Throwable -> L9b java.lang.String r1 = r1.toString() // Catch: java.lang.Throwable -> L9b r0.info(r1) // Catch: java.lang.Throwable -> L9b byte[] r11 = r9.toOIDBytes(r11) // Catch: java.lang.Throwable -> L9b byte[] r12 = org.jmrtd.Util.i2os(r12) // Catch: java.lang.Throwable -> L9b r0 = -124(0xffffffffffffff84, float:NaN) byte[] r12 = org.jmrtd.Util.wrapDO(r0, r12) // Catch: java.lang.Throwable -> L9b java.io.ByteArrayOutputStream r0 = new java.io.ByteArrayOutputStream // Catch: java.lang.Throwable -> L9b r0.() // Catch: java.lang.Throwable -> L9b r0.write(r11) // Catch: java.io.IOException -> L3c java.lang.Throwable -> L9b r0.write(r12) // Catch: java.io.IOException -> L3c java.lang.Throwable -> L9b r0.close() // Catch: java.io.IOException -> L3c java.lang.Throwable -> L9b goto L46 L3c: r11 = move-exception java.util.logging.Logger r12 = org.jmrtd.PassportApduService.LOGGER // Catch: java.lang.Throwable -> L9b java.util.logging.Level r1 = java.util.logging.Level.WARNING // Catch: java.lang.Throwable -> L9b java.lang.String r2 = "Exception" r12.log(r1, r2, r11) // Catch: java.lang.Throwable -> L9b L46: net.sf.scuba.smartcards.CommandAPDU r11 = new net.sf.scuba.smartcards.CommandAPDU // Catch: java.lang.Throwable -> L9b r4 = 0 r5 = 34 r6 = 65 r7 = 164(0xa4, float:2.3E-43) byte[] r8 = r0.toByteArray() // Catch: java.lang.Throwable -> L9b r3 = r11 r3.(r4, r5, r6, r7, r8) // Catch: java.lang.Throwable -> L9b net.sf.scuba.smartcards.ResponseAPDU r10 = r9.transmit(r10, r11) // Catch: java.lang.Throwable -> L9b goto L84 L5c: java.util.logging.Logger r0 = org.jmrtd.PassportApduService.LOGGER // Catch: java.lang.Throwable -> L9b java.lang.StringBuilder r1 = new java.lang.StringBuilder // Catch: java.lang.Throwable -> L9b java.lang.String r2 = "DEBUG: implicit case, keyId == " r1.(r2) // Catch: java.lang.Throwable -> L9b r1.append(r12) // Catch: java.lang.Throwable -> L9b java.lang.String r12 = r1.toString() // Catch: java.lang.Throwable -> L9b r0.info(r12) // Catch: java.lang.Throwable -> L9b net.sf.scuba.smartcards.CommandAPDU r12 = new net.sf.scuba.smartcards.CommandAPDU // Catch: java.lang.Throwable -> L9b r2 = 0 r3 = 34 r4 = 65 r5 = 164(0xa4, float:2.3E-43) byte[] r6 = r9.toOIDBytes(r11) // Catch: java.lang.Throwable -> L9b r1 = r12 r1.(r2, r3, r4, r5, r6) // Catch: java.lang.Throwable -> L9b net.sf.scuba.smartcards.ResponseAPDU r10 = r9.transmit(r10, r12) // Catch: java.lang.Throwable -> L9b L84: if (r10 != 0) goto L88 r10 = -1 goto L8d L88: int r10 = r10.getSW() // Catch: java.lang.Throwable -> L9b short r10 = (short) r10 L8d: r11 = -28672(0xffffffffffff9000, float:NaN) if (r10 != r11) goto L93 monitor-exit(r9) return L93: net.sf.scuba.smartcards.CardServiceException r11 = new net.sf.scuba.smartcards.CardServiceException // Catch: java.lang.Throwable -> L9b java.lang.String r12 = "Sending MSE AT failed" r11.(r12, r10) // Catch: java.lang.Throwable -> L9b throw r11 // Catch: java.lang.Throwable -> L9b L9b: r10 = move-exception monitor-exit(r9) throw r10 */ throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.PassportApduService.sendMSESetATIntAuth(net.sf.scuba.smartcards.APDUWrapper, java.lang.String, java.math.BigInteger):void"); } public void sendMSESetATMutualAuth(APDUWrapper aPDUWrapper, String str, int i, byte[] bArr) throws CardServiceException { synchronized (this) { if (str == null) { throw new IllegalArgumentException("OID cannot be null"); } byte[] oIDBytes = toOIDBytes(str); if (i != 1 && i != 2 && i != 3 && i != 4) { StringBuilder sb = new StringBuilder("Unsupported key type reference (MRZ, CAN, etc), found "); sb.append(i); throw new IllegalArgumentException(sb.toString()); } byte[] wrapDO = Util.wrapDO(ISOFileInfo.FILE_IDENTIFIER, new byte[]{(byte) i}); if (bArr != null) { bArr = Util.wrapDO((byte) -124, bArr); } ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { byteArrayOutputStream.write(oIDBytes); byteArrayOutputStream.write(wrapDO); if (bArr != null) { byteArrayOutputStream.write(bArr); } short sw = (short) transmit(aPDUWrapper, new CommandAPDU(0, 34, CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256, CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256, byteArrayOutputStream.toByteArray())).getSW(); if (sw != -28672) { throw new CardServiceException("Sending MSE AT failed", sw); } } catch (IOException e) { LOGGER.log(Level.SEVERE, "Error while copying data", (Throwable) e); throw new IllegalStateException("Error while copying data"); } } } private byte[] toOIDBytes(String str) { try { TLVInputStream tLVInputStream = new TLVInputStream(new ByteArrayInputStream(new ASN1ObjectIdentifier(str).getEncoded())); tLVInputStream.b(); tLVInputStream.c(); byte[] d = tLVInputStream.d(); tLVInputStream.close(); return Util.wrapDO(Byte.MIN_VALUE, d); } catch (IOException e) { Logger logger = LOGGER; Level level = Level.WARNING; StringBuilder sb = new StringBuilder("Unexpected exception interpreting OID \""); sb.append(str); sb.append("\""); logger.log(level, sb.toString(), (Throwable) e); StringBuilder sb2 = new StringBuilder("Illegal OID: \""); sb2.append(str); sb2.append("\" ("); sb2.append(e.getMessage()); sb2.append(")"); throw new IllegalArgumentException(sb2.toString()); } } public byte[] sendGeneralAuthenticate(APDUWrapper aPDUWrapper, byte[] bArr, boolean z) throws CardServiceException { byte[] unwrapDO; synchronized (this) { ResponseAPDU transmit = transmit(aPDUWrapper, new CommandAPDU(z ? 0 : 16, -122, 0, 0, Util.wrapDO((byte) 124, bArr), 256)); short sw = (short) transmit.getSW(); if (sw != -28672) { throw new CardServiceException("Sending general authenticate failed", sw); } unwrapDO = Util.unwrapDO((byte) 124, transmit.getData()); } return unwrapDO; } public void sendPSOExtendedLengthMode(APDUWrapper aPDUWrapper, byte[] bArr, byte[] bArr2) throws CardServiceException { synchronized (this) { byte[] bArr3 = new byte[bArr.length + bArr2.length]; System.arraycopy(bArr, 0, bArr3, 0, bArr.length); System.arraycopy(bArr2, 0, bArr3, bArr.length, bArr2.length); short sw = (short) transmit(aPDUWrapper, new CommandAPDU(0, 42, 0, CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, bArr3)).getSW(); if (sw != -28672) { throw new CardServiceException("Sending PSO failed", sw); } } } public void sendPSOChainMode(APDUWrapper aPDUWrapper, byte[] bArr, byte[] bArr2) throws CardServiceException { int i; int i2; synchronized (this) { int length = bArr.length + bArr2.length; byte[] bArr3 = new byte[length]; System.arraycopy(bArr, 0, bArr3, 0, bArr.length); System.arraycopy(bArr2, 0, bArr3, bArr.length, bArr2.length); if (length > 223) { int i3 = length / 223; if (i3 * 223 < length) { i3++; } int i4 = 0; for (int i5 = 0; i5 < i3 - 1; i5++) { short sw = (short) transmit(aPDUWrapper, new CommandAPDU(16, 42, 0, CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, bArr3, i4, length)).getSW(); if (sw != -28672) { throw new CardServiceException("Sending PSO failed", sw); } length -= 223; i4 += 223; } i = length; i2 = i4; } else { i = length; i2 = 0; } short sw2 = (short) transmit(aPDUWrapper, new CommandAPDU(0, 42, 0, CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, bArr3, i2, i)).getSW(); if (sw2 != -28672) { throw new CardServiceException("Sending PSO failed", sw2); } } } public void addPlainTextAPDUListener(APDUListener aPDUListener) { Collection collection = this.plainTextAPDUListeners; if (collection != null) { collection.add(aPDUListener); } } public void removePlainTextAPDUListener(APDUListener aPDUListener) { Collection collection = this.plainTextAPDUListeners; if (collection != null) { collection.remove(aPDUListener); } } protected void notifyExchangedPlainTextAPDU(int i, CommandAPDU commandAPDU, ResponseAPDU responseAPDU) { Collection collection = this.plainTextAPDUListeners; if (collection == null || collection.size() <= 0) { return; } APDUEvent aPDUEvent = new APDUEvent(this, "PLAINTEXT", i, commandAPDU, responseAPDU); Iterator it = this.plainTextAPDUListeners.iterator(); while (it.hasNext()) { it.next().exchangedAPDU(aPDUEvent); } } private static void checkStatusWordAfterFileOperation(CommandAPDU commandAPDU, ResponseAPDU responseAPDU) throws CardServiceException { short sw = (short) responseAPDU.getSW(); StringBuilder sb = new StringBuilder("CAPDU = "); sb.append(ghS.c(commandAPDU.getBytes())); sb.append(", RAPDU = "); sb.append(ghS.c(responseAPDU.getBytes())); String obj = sb.toString(); if (sw != -28672) { if (sw != 27010) { if (sw == 27266) { throw new CardServiceException("File not found, ".concat(String.valueOf(obj)), sw); } if (sw != 27013 && sw != 27014) { throw new CardServiceException("Error occured, ".concat(String.valueOf(obj)), sw); } } throw new CardServiceException("Access to file denied, ".concat(String.valueOf(obj)), sw); } } public void setService(CardService cardService) { this.service = cardService; } @Override // net.sf.scuba.smartcards.CardService public byte[] getATR() { return this.atr; } }