what-the-bank/sources/org/jmrtd/Util.java

1954 lines
74 KiB
Java

package org.jmrtd;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.common.primitives.UnsignedBytes;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.MessageDigest;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECField;
import java.security.spec.ECFieldF2m;
import java.security.spec.ECFieldFp;
import java.security.spec.ECParameterSpec;
import java.security.spec.ECPoint;
import java.security.spec.ECPublicKeySpec;
import java.security.spec.EllipticCurve;
import java.security.spec.X509EncodedKeySpec;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.BadPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;
import net.sf.scuba.tlv.TLVOutputStream;
import o.ghS;
import o.jTb;
import o.xzZ;
import org.bouncycastle.asn1.ASN1Encoding;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.DHParameter;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x9.X962NamedCurves;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.params.DHParameters;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.tls.CipherSuite;
import org.bouncycastle.jce.ECNamedCurveTable;
import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
import org.bouncycastle.jce.spec.ECNamedCurveSpec;
import org.bouncycastle.math.ec.ECCurve;
import org.bouncycastle.math.ec.ECFieldElement;
import org.jmrtd.cbeff.ISO781611;
import org.jmrtd.lds.SecurityInfo;
import org.jmrtd.lds.icao.MRZInfo;
/* loaded from: classes6.dex */
public class Util {
private static final Provider BC_PROVIDER;
public static final int ENC_MODE = 1;
private static final Logger LOGGER;
public static final int MAC_MODE = 2;
public static final int PACE_MODE = 3;
private static int a;
private static char b;
private static char c;
private static char d;
private static char e;
private static final byte[] $$a = {54, -108, 123, 45};
private static final int $$b = 245;
private static int $10 = 0;
private static int $11 = 1;
private static int f = 1;
/* JADX WARN: Multi-variable type inference failed */
/* JADX WARN: Type inference failed for: r5v2 */
/* JADX WARN: Type inference failed for: r5v3, types: [int] */
/* JADX WARN: Type inference failed for: r5v6, types: [int] */
/* JADX WARN: Type inference failed for: r5v8 */
/* JADX WARN: Type inference failed for: r5v9 */
private static void h(short s, short s2, byte b2, Object[] objArr) {
byte[] bArr = $$a;
int i = b2 * 4;
int i2 = 67 - s;
int i3 = s2 + 4;
byte[] bArr2 = new byte[i + 1];
int i4 = -1;
byte b3 = i2;
if (bArr == null) {
int i5 = i2 + i3;
i3 = i3;
i4 = -1;
b3 = i5;
}
while (true) {
int i6 = i4 + 1;
bArr2[i6] = b3;
if (i6 == i) {
objArr[0] = new String(bArr2, 0);
return;
}
int i7 = i3 + 1;
b3 = bArr[i7] + b3;
i3 = i7;
i4 = i6;
}
}
static {
a = 0;
b();
LOGGER = Logger.getLogger("org.jmrtd");
BC_PROVIDER = JMRTDSecurityProvider.getBouncyCastleProvider();
int i = f + 95;
a = i % 128;
int i2 = i % 2;
}
private static void g(char[] cArr, int i, Object[] objArr) {
int i2 = 2 % 2;
jTb jtb = new jTb();
char[] cArr2 = new char[cArr.length];
int i3 = 0;
jtb.b = 0;
char[] cArr3 = new char[2];
while (jtb.b < cArr.length) {
cArr3[i3] = cArr[jtb.b];
int i4 = 1;
cArr3[1] = cArr[jtb.b + 1];
int i5 = $10 + 119;
$11 = i5 % 128;
int i6 = i5 % 2;
int i7 = 58224;
int i8 = i3;
while (i8 < 16) {
int i9 = $11 + 91;
$10 = i9 % 128;
int i10 = i9 % 2;
char c2 = cArr3[i4];
char c3 = cArr3[i3];
char[] cArr4 = cArr3;
int i11 = (c3 + i7) ^ ((c3 << 4) + ((char) (e ^ 41718355337583039L)));
int i12 = c3 >>> 5;
try {
Object[] objArr2 = new Object[4];
objArr2[3] = Integer.valueOf(d);
objArr2[2] = Integer.valueOf(i12);
objArr2[i4] = Integer.valueOf(i11);
objArr2[0] = Integer.valueOf(c2);
Object obj = xzZ.y.get(597144044);
if (obj == null) {
Class cls = (Class) xzZ.c((ViewConfiguration.getFadingEdgeLength() >> 16) + 412, 5 - (ViewConfiguration.getMaximumFlingVelocity() >> 16), (char) (TypedValue.complexToFloat(0) > BitmapDescriptorFactory.HUE_RED ? 1 : (TypedValue.complexToFloat(0) == BitmapDescriptorFactory.HUE_RED ? 0 : -1)));
byte b2 = (byte) ($$b & 3);
byte b3 = (byte) (-b2);
Object[] objArr3 = new Object[i4];
h(b2, b3, (byte) (b3 + 1), objArr3);
String str = (String) objArr3[0];
Class<?>[] clsArr = new Class[4];
clsArr[0] = Integer.TYPE;
clsArr[i4] = Integer.TYPE;
clsArr[2] = Integer.TYPE;
clsArr[3] = Integer.TYPE;
obj = cls.getMethod(str, clsArr);
xzZ.y.put(597144044, obj);
}
char charValue = ((Character) ((Method) obj).invoke(null, objArr2)).charValue();
cArr4[i4] = charValue;
int i13 = i8;
Object[] objArr4 = {Integer.valueOf(cArr4[0]), Integer.valueOf((charValue + i7) ^ ((charValue << 4) + ((char) (b ^ 41718355337583039L)))), Integer.valueOf(charValue >>> 5), Integer.valueOf(c)};
Object obj2 = xzZ.y.get(597144044);
if (obj2 == null) {
Class cls2 = (Class) xzZ.c(411 - MotionEvent.axisFromString(""), 4 - TextUtils.lastIndexOf("", '0', 0), (char) (ViewConfiguration.getFadingEdgeLength() >> 16));
byte b4 = (byte) ($$b & 3);
byte b5 = (byte) (-b4);
Object[] objArr5 = new Object[1];
h(b4, b5, (byte) (b5 + 1), objArr5);
obj2 = cls2.getMethod((String) objArr5[0], Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE);
xzZ.y.put(597144044, obj2);
}
cArr4[0] = ((Character) ((Method) obj2).invoke(null, objArr4)).charValue();
i7 -= 40503;
i8 = i13 + 1;
cArr3 = cArr4;
i3 = 0;
i4 = 1;
} catch (Throwable th) {
Throwable cause = th.getCause();
if (cause == null) {
throw th;
}
throw cause;
}
}
char[] cArr5 = cArr3;
cArr2[jtb.b] = cArr5[0];
cArr2[jtb.b + 1] = cArr5[1];
Object[] objArr6 = {jtb, jtb};
Object obj3 = xzZ.y.get(943004485);
if (obj3 == null) {
Class cls3 = (Class) xzZ.c(98 - (ViewConfiguration.getTapTimeout() >> 16), 5 - Color.argb(0, 0, 0, 0), (char) View.MeasureSpec.makeMeasureSpec(0, 0));
byte b6 = (byte) 0;
byte b7 = (byte) (b6 - 1);
Object[] objArr7 = new Object[1];
h(b6, b7, (byte) (b7 + 1), objArr7);
obj3 = cls3.getMethod((String) objArr7[0], Object.class, Object.class);
xzZ.y.put(943004485, obj3);
}
((Method) obj3).invoke(null, objArr6);
cArr3 = cArr5;
i3 = 0;
}
String str2 = new String(cArr2, 0, i);
int i14 = $10 + 33;
$11 = i14 % 128;
int i15 = i14 % 2;
objArr[0] = str2;
}
private Util() {
}
public static SecretKey deriveKey(byte[] bArr, int i) throws GeneralSecurityException {
int i2 = 2 % 2;
int i3 = a + 81;
f = i3 % 128;
return deriveKey(bArr, "DESede", i3 % 2 == 0 ? 7888 : 128, i);
}
public static SecretKey deriveKey(byte[] bArr, String str, int i, int i2) throws GeneralSecurityException {
int i3 = 2 % 2;
int i4 = a + 67;
f = i4 % 128;
int i5 = i4 % 2;
SecretKey deriveKey = deriveKey(bArr, str, i, null, i2);
int i6 = a + 41;
f = i6 % 128;
int i7 = i6 % 2;
return deriveKey;
}
/* JADX WARN: Code restructure failed: missing block: B:13:0x006a, code lost:
if (r9.startsWith("AES") != false) goto L20;
*/
/* JADX WARN: Code restructure failed: missing block: B:14:0x0073, code lost:
r8 = null;
*/
/* JADX WARN: Code restructure failed: missing block: B:19:0x0071, code lost:
if (r9.startsWith("AES") == false) goto L19;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static javax.crypto.SecretKey deriveKey(byte[] r8, java.lang.String r9, int r10, byte[] r11, int r12) throws java.security.GeneralSecurityException {
/*
Method dump skipped, instructions count: 235
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.Util.deriveKey(byte[], java.lang.String, int, byte[], int):javax.crypto.SecretKey");
}
public static byte[] computeKeySeed(String str, String str2, String str3, String str4, boolean z) throws GeneralSecurityException {
int i = 2 % 2;
StringBuilder sb = new StringBuilder();
sb.append(str);
sb.append(MRZInfo.checkDigit(str));
sb.append(str2);
sb.append(MRZInfo.checkDigit(str2));
sb.append(str3);
sb.append(MRZInfo.checkDigit(str3));
byte[] computeKeySeed = computeKeySeed(sb.toString(), str4, z);
int i2 = f + 109;
a = i2 % 128;
if (i2 % 2 == 0) {
return computeKeySeed;
}
Object obj = null;
obj.hashCode();
throw null;
}
public static byte[] computeKeySeed(String str, String str2, boolean z) throws GeneralSecurityException {
int i = 2 % 2;
int i2 = a + 107;
f = i2 % 128;
int i3 = i2 % 2;
MessageDigest messageDigest = MessageDigest.getInstance(str2);
messageDigest.update(getBytes(str));
byte[] digest = messageDigest.digest();
if (!z) {
return digest;
}
int i4 = f + 81;
a = i4 % 128;
int i5 = i4 % 2;
byte[] bArr = new byte[16];
System.arraycopy(digest, 0, bArr, 0, 16);
return bArr;
}
public static byte[] pad(byte[] bArr, int i) {
int i2 = 2 % 2;
int i3 = a + 59;
f = i3 % 128;
byte[] pad = i3 % 2 == 0 ? pad(bArr, 1, bArr.length, i) : pad(bArr, 0, bArr.length, i);
int i4 = f + 55;
a = i4 % 128;
if (i4 % 2 != 0) {
int i5 = 17 / 0;
}
return pad;
}
public static byte[] pad(byte[] bArr, int i, int i2, int i3) {
int i4 = 2 % 2;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(bArr, i, i2);
byteArrayOutputStream.write(-128);
while (byteArrayOutputStream.size() % i3 != 0) {
int i5 = f + 63;
a = i5 % 128;
int i6 = i5 % 2;
byteArrayOutputStream.write(0);
int i7 = f + 7;
a = i7 % 128;
if (i7 % 2 != 0) {
int i8 = 4 / 2;
}
}
return byteArrayOutputStream.toByteArray();
}
public static byte[] unpad(byte[] bArr) throws BadPaddingException {
int length;
int i = 2 % 2;
int i2 = a + 63;
f = i2 % 128;
if (i2 % 2 == 0) {
int length2 = bArr.length;
length = 0;
} else {
length = bArr.length - 1;
}
while (length >= 0 && bArr[length] == 0) {
int i3 = f + 5;
a = i3 % 128;
int i4 = i3 % 2;
length--;
}
if ((bArr[length] & UnsignedBytes.MAX_VALUE) != 128) {
StringBuilder sb = new StringBuilder("Expected constant 0x80, found 0x");
sb.append(Integer.toHexString(bArr[length] & UnsignedBytes.MAX_VALUE));
sb.append("\nDEBUG: in = ");
sb.append(ghS.c(bArr));
sb.append(", index = ");
sb.append(length);
throw new BadPaddingException(sb.toString());
}
int i5 = f + 69;
a = i5 % 128;
int i6 = i5 % 2;
byte[] bArr2 = new byte[length];
System.arraycopy(bArr, 0, bArr2, 0, length);
int i7 = a + 87;
f = i7 % 128;
int i8 = i7 % 2;
return bArr2;
}
/* JADX WARN: Code restructure failed: missing block: B:10:0x001a, code lost:
r2 = r1 + 121;
org.jmrtd.Util.a = r2 % 128;
r2 = r2 % 2;
*/
/* JADX WARN: Code restructure failed: missing block: B:11:0x002a, code lost:
if (((r9[r9.length - 1] & 15) ^ 12) != 0) goto L40;
*/
/* JADX WARN: Code restructure failed: missing block: B:12:0x002c, code lost:
r2 = r1 + 37;
org.jmrtd.Util.a = r2 % 128;
r2 = r2 % 2;
*/
/* JADX WARN: Code restructure failed: missing block: B:13:0x003b, code lost:
if (((r9[r9.length - 1] & com.google.common.primitives.UnsignedBytes.MAX_VALUE) ^ 188) != 0) goto L15;
*/
/* JADX WARN: Code restructure failed: missing block: B:14:0x003d, code lost:
r2 = 1;
*/
/* JADX WARN: Code restructure failed: missing block: B:15:0x004a, code lost:
r5 = r9[0];
*/
/* JADX WARN: Code restructure failed: missing block: B:16:0x0052, code lost:
if (((r5 & net.sf.scuba.smartcards.ISO7816.INS_GET_RESPONSE) ^ 64) != 0) goto L36;
*/
/* JADX WARN: Code restructure failed: missing block: B:18:0x0056, code lost:
if ((r5 & 32) == 0) goto L34;
*/
/* JADX WARN: Code restructure failed: missing block: B:19:0x0058, code lost:
r1 = r1 + 25;
org.jmrtd.Util.a = r1 % 128;
r1 = r1 % 2;
r0 = 0;
*/
/* JADX WARN: Code restructure failed: missing block: B:21:0x0061, code lost:
if (r0 >= r9.length) goto L44;
*/
/* JADX WARN: Code restructure failed: missing block: B:23:0x0069, code lost:
if (((r9[r0] & 15) ^ 10) == 0) goto L45;
*/
/* JADX WARN: Code restructure failed: missing block: B:24:0x006b, code lost:
r0 = r0 + 1;
*/
/* JADX WARN: Code restructure failed: missing block: B:26:0x006e, code lost:
r0 = r0 + 1;
r1 = ((r9.length - r2) - r8) - r0;
*/
/* JADX WARN: Code restructure failed: missing block: B:27:0x0073, code lost:
if (r1 <= 0) goto L32;
*/
/* JADX WARN: Code restructure failed: missing block: B:28:0x0075, code lost:
r8 = new byte[r1];
java.lang.System.arraycopy(r9, r0, r8, 0, r1);
*/
/* JADX WARN: Code restructure failed: missing block: B:29:0x007a, code lost:
return r8;
*/
/* JADX WARN: Code restructure failed: missing block: B:31:0x0080, code lost:
throw new java.lang.NumberFormatException("Could not get M1");
*/
/* JADX WARN: Code restructure failed: missing block: B:33:0x0081, code lost:
r0 = new java.lang.StringBuilder("Could not get M1, first byte indicates partial recovery not enabled: ");
r0.append(java.lang.Integer.toHexString(r9[0]));
*/
/* JADX WARN: Code restructure failed: missing block: B:34:0x009a, code lost:
throw new java.lang.NumberFormatException(r0.toString());
*/
/* JADX WARN: Code restructure failed: missing block: B:36:0x00a0, code lost:
throw new java.lang.NumberFormatException("Could not get M1");
*/
/* JADX WARN: Code restructure failed: missing block: B:38:0x0047, code lost:
if (((r9[r9.length - 1] & com.google.common.primitives.UnsignedBytes.MAX_VALUE) ^ 204) != 0) goto L38;
*/
/* JADX WARN: Code restructure failed: missing block: B:39:0x0049, code lost:
r2 = 2;
*/
/* JADX WARN: Code restructure failed: missing block: B:41:0x00a8, code lost:
throw new java.lang.NumberFormatException("Not an ISO 9796-2 scheme 2 signature trailer");
*/
/* JADX WARN: Code restructure failed: missing block: B:43:0x00b0, code lost:
throw new java.lang.NumberFormatException("Could not get M1, malformed trailer");
*/
/* JADX WARN: Code restructure failed: missing block: B:44:0x0015, code lost:
if (r9 != null) goto L8;
*/
/* JADX WARN: Code restructure failed: missing block: B:4:0x0012, code lost:
if (r9 != null) goto L8;
*/
/* JADX WARN: Code restructure failed: missing block: B:9:0x0018, code lost:
if (r9.length <= 0) goto L42;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static byte[] recoverMessage(int r8, byte[] r9) {
/*
Method dump skipped, instructions count: 185
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.Util.recoverMessage(int, byte[]):byte[]");
}
public static byte[] getRawECDSASignature(byte[] bArr, int i) throws IOException {
int i2 = 2 % 2;
ASN1InputStream aSN1InputStream = new ASN1InputStream(bArr);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
Enumeration objects = ((ASN1Sequence) aSN1InputStream.readObject()).getObjects();
while (objects.hasMoreElements()) {
int i3 = f + 101;
a = i3 % 128;
if (i3 % 2 != 0) {
byteArrayOutputStream.write(alignKeyDataToSize(((ASN1Integer) objects.nextElement()).getValue().toByteArray(), i));
throw null;
}
byteArrayOutputStream.write(alignKeyDataToSize(((ASN1Integer) objects.nextElement()).getValue().toByteArray(), i));
}
byteArrayOutputStream.flush();
byte[] byteArray = byteArrayOutputStream.toByteArray();
aSN1InputStream.close();
byteArrayOutputStream.close();
int i4 = f + 23;
a = i4 % 128;
if (i4 % 2 == 0) {
return byteArray;
}
throw null;
} catch (Throwable th) {
aSN1InputStream.close();
byteArrayOutputStream.close();
throw th;
}
}
public static byte[] alignKeyDataToSize(byte[] bArr, int i) {
int i2 = 2 % 2;
int i3 = f + 87;
a = i3 % 128;
Object obj = null;
if (i3 % 2 == 0) {
byte[] bArr2 = new byte[i];
int length = bArr.length < i ? bArr.length : i;
System.arraycopy(bArr, bArr.length - length, bArr2, i - length, length);
int i4 = a + 107;
f = i4 % 128;
if (i4 % 2 != 0) {
return bArr2;
}
obj.hashCode();
throw null;
}
byte[] bArr3 = new byte[i];
int length2 = bArr.length;
throw null;
}
public static byte[] i2os(BigInteger bigInteger, int i) {
int i2 = 2 % 2;
BigInteger valueOf = BigInteger.valueOf(256L);
byte[] bArr = new byte[i];
int i3 = f + 51;
a = i3 % 128;
if (i3 % 2 != 0) {
int i4 = 3 / 2;
}
for (int i5 = 0; i5 < i; i5++) {
BigInteger mod = bigInteger.mod(valueOf);
bigInteger = bigInteger.divide(valueOf);
bArr[(i - 1) - i5] = (byte) mod.intValue();
}
int i6 = a + 59;
f = i6 % 128;
if (i6 % 2 != 0) {
return bArr;
}
throw null;
}
public static byte[] i2os(BigInteger bigInteger) {
int i = 2 % 2;
int length = bigInteger.toString(16).length();
if (length % 2 != 0) {
int i2 = a + 71;
f = i2 % 128;
int i3 = i2 % 2;
length++;
}
byte[] i2os = i2os(bigInteger, length / 2);
int i4 = f + 9;
a = i4 % 128;
int i5 = i4 % 2;
return i2os;
}
public static BigInteger os2i(byte[] bArr) {
int i = 2 % 2;
int i2 = a + 101;
int i3 = i2 % 128;
f = i3;
int i4 = i2 % 2;
if (bArr == null) {
throw new IllegalArgumentException();
}
int i5 = i3 + 107;
a = i5 % 128;
int i6 = i5 % 2;
return os2i(bArr, 0, bArr.length);
}
public static BigInteger os2i(byte[] bArr, int i, int i2) {
int i3 = 2 % 2;
int i4 = a + 87;
f = i4 % 128;
if (i4 % 2 == 0) {
Object obj = null;
obj.hashCode();
throw null;
}
if (bArr == null) {
throw new IllegalArgumentException();
}
BigInteger bigInteger = BigInteger.ZERO;
BigInteger valueOf = BigInteger.valueOf(256L);
int i5 = i;
while (i5 < i + i2) {
int i6 = f + 45;
a = i6 % 128;
if (i6 % 2 != 0) {
bigInteger = bigInteger.multiply(valueOf).add(BigInteger.valueOf(bArr[i5] & 23527));
i5 += 49;
} else {
bigInteger = bigInteger.multiply(valueOf).add(BigInteger.valueOf(bArr[i5] & UnsignedBytes.MAX_VALUE));
i5++;
}
}
return bigInteger;
}
public static BigInteger os2fe(byte[] bArr, BigInteger bigInteger) {
int i = 2 % 2;
int i2 = a + 29;
f = i2 % 128;
int i3 = i2 % 2;
BigInteger os2i = os2i(bArr);
if (i3 != 0) {
return os2i.mod(bigInteger);
}
os2i.mod(bigInteger);
throw null;
}
/* JADX WARN: Code restructure failed: missing block: B:25:0x002b, code lost:
r5 = r5.split("WITH")[0];
*/
/* JADX WARN: Code restructure failed: missing block: B:27:0x0029, code lost:
if (r5.contains("WITH") != false) goto L11;
*/
/* JADX WARN: Code restructure failed: missing block: B:6:0x001e, code lost:
if (r5.contains("WITH") != false) goto L11;
*/
/* JADX WARN: Code restructure failed: missing block: B:7:0x0032, code lost:
r5 = null;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static java.lang.String inferDigestAlgorithmFromSignatureAlgorithm(java.lang.String r5) {
/*
r0 = 2
int r1 = r0 % r0
if (r5 == 0) goto L6f
int r1 = org.jmrtd.Util.f
int r1 = r1 + 79
int r2 = r1 % 128
org.jmrtd.Util.a = r2
int r1 = r1 % r0
r2 = 0
java.lang.String r3 = "WITH"
if (r1 == 0) goto L21
java.lang.String r5 = r5.toUpperCase()
boolean r1 = r5.contains(r3)
r4 = 31
int r4 = r4 / r2
if (r1 == 0) goto L32
goto L2b
L21:
java.lang.String r5 = r5.toUpperCase()
boolean r1 = r5.contains(r3)
if (r1 == 0) goto L32
L2b:
java.lang.String[] r5 = r5.split(r3)
r5 = r5[r2]
goto L33
L32:
r5 = 0
L33:
java.lang.String r1 = "SHA1"
boolean r1 = r1.equalsIgnoreCase(r5)
if (r1 == 0) goto L46
int r5 = org.jmrtd.Util.a
int r5 = r5 + 75
int r1 = r5 % 128
org.jmrtd.Util.f = r1
int r5 = r5 % r0
java.lang.String r5 = "SHA-1"
L46:
java.lang.String r0 = "SHA224"
boolean r0 = r0.equalsIgnoreCase(r5)
if (r0 == 0) goto L50
java.lang.String r5 = "SHA-224"
L50:
java.lang.String r0 = "SHA256"
boolean r0 = r0.equalsIgnoreCase(r5)
if (r0 == 0) goto L5a
java.lang.String r5 = "SHA-256"
L5a:
java.lang.String r0 = "SHA384"
boolean r0 = r0.equalsIgnoreCase(r5)
if (r0 == 0) goto L64
java.lang.String r5 = "SHA-384"
L64:
java.lang.String r0 = "SHA512"
boolean r0 = r0.equalsIgnoreCase(r5)
if (r0 == 0) goto L6e
java.lang.String r5 = "SHA-512"
L6e:
return r5
L6f:
java.lang.IllegalArgumentException r5 = new java.lang.IllegalArgumentException
r5.<init>()
throw r5
*/
throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.Util.inferDigestAlgorithmFromSignatureAlgorithm(java.lang.String):java.lang.String");
}
/* JADX WARN: Code restructure failed: missing block: B:27:0x0072, code lost:
if (r6 == 256) goto L28;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static java.lang.String inferDigestAlgorithmFromCipherAlgorithmForKeyDerivation(java.lang.String r5, int r6) {
/*
r0 = 2
int r1 = r0 % r0
if (r5 == 0) goto L93
java.lang.String r1 = "DESede"
boolean r1 = r1.equals(r5)
java.lang.String r2 = "SHA-1"
if (r1 != 0) goto L92
java.lang.String r1 = "AES-128"
boolean r1 = r1.equals(r5)
if (r1 != 0) goto L92
java.lang.String r1 = "AES"
boolean r3 = r1.equals(r5)
r4 = 1
if (r3 == 0) goto L3b
r3 = 128(0x80, float:1.8E-43)
if (r6 != r3) goto L3b
int r5 = org.jmrtd.Util.a
int r5 = r5 + r4
int r6 = r5 % 128
org.jmrtd.Util.f = r6
int r5 = r5 % r0
if (r5 == 0) goto L36
int r6 = r6 + 39
int r5 = r6 % 128
org.jmrtd.Util.a = r5
int r6 = r6 % r0
return r2
L36:
r5 = 0
r5.hashCode()
throw r5
L3b:
java.lang.String r2 = "AES-256"
boolean r2 = r2.equals(r5)
java.lang.String r3 = "SHA-256"
if (r2 != 0) goto L91
java.lang.String r2 = "AES-192"
boolean r2 = r2.equals(r5)
if (r2 == r4) goto L91
int r2 = org.jmrtd.Util.a
int r2 = r2 + 53
int r4 = r2 % 128
org.jmrtd.Util.f = r4
int r2 = r2 % r0
boolean r1 = r1.equals(r5)
if (r1 == 0) goto L75
int r1 = org.jmrtd.Util.f
int r1 = r1 + 13
int r2 = r1 % 128
org.jmrtd.Util.a = r2
int r1 = r1 % r0
r1 = 192(0xc0, float:2.69E-43)
if (r6 == r1) goto L74
int r2 = r2 + 109
int r1 = r2 % 128
org.jmrtd.Util.f = r1
int r2 = r2 % r0
r0 = 256(0x100, float:3.59E-43)
if (r6 != r0) goto L75
L74:
return r3
L75:
java.lang.IllegalArgumentException r0 = new java.lang.IllegalArgumentException
java.lang.StringBuilder r1 = new java.lang.StringBuilder
java.lang.String r2 = "Unsupported cipher algorithm or key length \""
r1.<init>(r2)
r1.append(r5)
java.lang.String r5 = "\", "
r1.append(r5)
r1.append(r6)
java.lang.String r5 = r1.toString()
r0.<init>(r5)
throw r0
L91:
return r3
L92:
return r2
L93:
java.lang.IllegalArgumentException r5 = new java.lang.IllegalArgumentException
r5.<init>()
throw r5
*/
throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.Util.inferDigestAlgorithmFromCipherAlgorithmForKeyDerivation(java.lang.String, int):java.lang.String");
}
public static DHParameterSpec toExplicitDHParameterSpec(DHParameters dHParameters) {
int i = 2 % 2;
DHParameterSpec dHParameterSpec = new DHParameterSpec(dHParameters.getP(), dHParameters.getG(), dHParameters.getL());
int i2 = f + 25;
a = i2 % 128;
if (i2 % 2 == 0) {
return dHParameterSpec;
}
Object obj = null;
obj.hashCode();
throw null;
}
public static String getDetailedPublicKeyAlgorithm(PublicKey publicKey) {
String curveName;
int i = 2 % 2;
int i2 = f;
int i3 = i2 + 101;
a = i3 % 128;
if (i3 % 2 != 0) {
throw null;
}
if (publicKey == null) {
int i4 = i2 + 105;
a = i4 % 128;
if (i4 % 2 != 0) {
Object[] objArr = new Object[1];
g(new char[]{54277, 13385, 26542, 22246}, 2 >>> Color.argb(1, 1, 0, 0), objArr);
return ((String) objArr[0]).intern();
}
Object[] objArr2 = new Object[1];
g(new char[]{54277, 13385, 26542, 22246}, Color.argb(0, 0, 0, 0) + 4, objArr2);
return ((String) objArr2[0]).intern();
}
String algorithm = publicKey.getAlgorithm();
if (publicKey instanceof RSAPublicKey) {
int bitLength = ((RSAPublicKey) publicKey).getModulus().bitLength();
StringBuilder sb = new StringBuilder();
sb.append(algorithm);
sb.append(" [");
sb.append(bitLength);
sb.append(" bit]");
String obj = sb.toString();
int i5 = f + 79;
a = i5 % 128;
int i6 = i5 % 2;
return obj;
}
if (!(publicKey instanceof ECPublicKey) || (curveName = getCurveName(((ECPublicKey) publicKey).getParams())) == null) {
return algorithm;
}
StringBuilder sb2 = new StringBuilder();
sb2.append(algorithm);
sb2.append(" [");
sb2.append(curveName);
sb2.append("]");
return sb2.toString();
}
public static String getDetailedPrivateKeyAlgorithm(PrivateKey privateKey) {
int i = 2 % 2;
if (privateKey == null) {
int i2 = f + 23;
a = i2 % 128;
int i3 = i2 % 2;
Object[] objArr = new Object[1];
g(new char[]{54277, 13385, 26542, 22246}, 4 - (ViewConfiguration.getFadingEdgeLength() >> 16), objArr);
return ((String) objArr[0]).intern();
}
String algorithm = privateKey.getAlgorithm();
if (privateKey instanceof RSAPrivateKey) {
int bitLength = ((RSAPrivateKey) privateKey).getModulus().bitLength();
StringBuilder sb = new StringBuilder();
sb.append(algorithm);
sb.append(" [");
sb.append(bitLength);
sb.append(" bit]");
return sb.toString();
}
if (true ^ (privateKey instanceof ECPrivateKey)) {
return algorithm;
}
int i4 = f + 7;
a = i4 % 128;
int i5 = i4 % 2;
String curveName = getCurveName(((ECPrivateKey) privateKey).getParams());
if (curveName == null) {
return algorithm;
}
StringBuilder sb2 = new StringBuilder();
sb2.append(algorithm);
sb2.append(" [");
sb2.append(curveName);
sb2.append("]");
return sb2.toString();
}
public static String getCurveName(ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f + 25;
a = i2 % 128;
int i3 = i2 % 2;
ECNamedCurveSpec namedCurveSpec = toNamedCurveSpec(eCParameterSpec);
if (namedCurveSpec != null) {
return namedCurveSpec.getName();
}
int i4 = f + 23;
int i5 = i4 % 128;
a = i5;
int i6 = i4 % 2;
int i7 = i5 + 33;
f = i7 % 128;
int i8 = i7 % 2;
return null;
}
public static ECParameterSpec toExplicitECParameterSpec(ECNamedCurveParameterSpec eCNamedCurveParameterSpec) {
int i = 2 % 2;
int i2 = f + 73;
a = i2 % 128;
int i3 = i2 % 2;
ECParameterSpec explicitECParameterSpec = toExplicitECParameterSpec(toECNamedCurveSpec(eCNamedCurveParameterSpec));
if (i3 != 0) {
int i4 = 32 / 0;
}
int i5 = f + 43;
a = i5 % 128;
int i6 = i5 % 2;
return explicitECParameterSpec;
}
public static ECParameterSpec toExplicitECParameterSpec(ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f + 113;
a = i2 % 128;
int i3 = i2 % 2;
try {
ECPoint generator = eCParameterSpec.getGenerator();
BigInteger order = eCParameterSpec.getOrder();
int cofactor = eCParameterSpec.getCofactor();
EllipticCurve curve = eCParameterSpec.getCurve();
BigInteger a2 = curve.getA();
BigInteger b2 = curve.getB();
ECField field = curve.getField();
if (field instanceof ECFieldFp) {
ECParameterSpec eCParameterSpec2 = new ECParameterSpec(new EllipticCurve(new ECFieldFp(((ECFieldFp) field).getP()), a2, b2), generator, order, cofactor);
int i4 = f + 49;
a = i4 % 128;
if (i4 % 2 == 0) {
return eCParameterSpec2;
}
throw null;
}
if (field instanceof ECFieldF2m) {
return new ECParameterSpec(new EllipticCurve(new ECFieldF2m(((ECFieldF2m) field).getM()), a2, b2), generator, order, cofactor);
}
LOGGER.warning("Could not make named EC param spec explicit");
return eCParameterSpec;
} catch (Exception unused) {
LOGGER.warning("Could not make named EC param spec explicit");
return eCParameterSpec;
}
}
private static ECNamedCurveSpec toNamedCurveSpec(ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f;
int i3 = i2 + 25;
a = i3 % 128;
Object obj = null;
if (i3 % 2 != 0) {
obj.hashCode();
throw null;
}
if (eCParameterSpec == null) {
return null;
}
if (eCParameterSpec instanceof ECNamedCurveSpec) {
int i4 = i2 + 43;
a = i4 % 128;
int i5 = i4 % 2;
return (ECNamedCurveSpec) eCParameterSpec;
}
ArrayList list = Collections.list(ECNamedCurveTable.getNames());
ArrayList arrayList = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()) {
ECNamedCurveSpec eCNamedCurveSpec = toECNamedCurveSpec(ECNamedCurveTable.getParameterSpec((String) it.next()));
if (eCNamedCurveSpec.getCurve().equals(eCParameterSpec.getCurve())) {
int i6 = a + 81;
f = i6 % 128;
if (i6 % 2 == 0) {
eCNamedCurveSpec.getGenerator().equals(eCParameterSpec.getGenerator());
throw null;
}
if (eCNamedCurveSpec.getGenerator().equals(eCParameterSpec.getGenerator()) && eCNamedCurveSpec.getOrder().equals(eCParameterSpec.getOrder()) && eCNamedCurveSpec.getCofactor() == eCParameterSpec.getCofactor()) {
int i7 = f + 97;
a = i7 % 128;
int i8 = i7 % 2;
arrayList.add(eCNamedCurveSpec);
}
}
}
if (arrayList.size() == 0) {
return null;
}
if (arrayList.size() != 1) {
return (ECNamedCurveSpec) arrayList.get(0);
}
int i9 = f + 59;
a = i9 % 128;
int i10 = i9 % 2;
return (ECNamedCurveSpec) arrayList.get(0);
}
public static ECNamedCurveSpec toECNamedCurveSpec(ECNamedCurveParameterSpec eCNamedCurveParameterSpec) {
int i = 2 % 2;
ECNamedCurveSpec eCNamedCurveSpec = new ECNamedCurveSpec(eCNamedCurveParameterSpec.getName(), eCNamedCurveParameterSpec.getCurve(), eCNamedCurveParameterSpec.getG(), eCNamedCurveParameterSpec.getN(), eCNamedCurveParameterSpec.getH(), eCNamedCurveParameterSpec.getSeed());
int i2 = a + 75;
f = i2 % 128;
if (i2 % 2 != 0) {
return eCNamedCurveSpec;
}
throw null;
}
public static SubjectPublicKeyInfo toSubjectPublicKeyInfo(PublicKey publicKey) {
int i = 2 % 2;
Object obj = null;
try {
String algorithm = publicKey.getAlgorithm();
if (!"EC".equals(algorithm) && !"ECDH".equals(algorithm) && !(publicKey instanceof ECPublicKey)) {
if (!"DH".equals(algorithm) && !(publicKey instanceof DHPublicKey)) {
StringBuilder sb = new StringBuilder("Unrecognized key type, found ");
sb.append(publicKey.getAlgorithm());
sb.append(", should be DH or ECDH");
throw new IllegalArgumentException(sb.toString());
}
DHPublicKey dHPublicKey = (DHPublicKey) publicKey;
DHParameterSpec params = dHPublicKey.getParams();
return new SubjectPublicKeyInfo(new AlgorithmIdentifier(EACObjectIdentifiers.id_PK_DH, new DHParameter(params.getP(), params.getG(), params.getL()).toASN1Primitive()), new ASN1Integer(dHPublicKey.getY()));
}
ASN1InputStream aSN1InputStream = new ASN1InputStream(publicKey.getEncoded());
SubjectPublicKeyInfo subjectPublicKeyInfo = new SubjectPublicKeyInfo((ASN1Sequence) aSN1InputStream.readObject());
aSN1InputStream.close();
AlgorithmIdentifier algorithm2 = subjectPublicKeyInfo.getAlgorithm();
String id = algorithm2.getAlgorithm().getId();
if (!SecurityInfo.ID_EC_PUBLIC_KEY.equals(id)) {
StringBuilder sb2 = new StringBuilder("Was expecting id-ecPublicKey (");
sb2.append(SecurityInfo.ID_EC_PUBLIC_KEY_TYPE);
sb2.append("), found ");
sb2.append(id);
throw new IllegalStateException(sb2.toString());
}
int i2 = f + 23;
a = i2 % 128;
if (i2 % 2 == 0) {
ASN1Primitive aSN1Primitive = algorithm2.getParameters().toASN1Primitive();
if (!(aSN1Primitive instanceof ASN1ObjectIdentifier)) {
return subjectPublicKeyInfo;
}
ASN1ObjectIdentifier aSN1ObjectIdentifier = (ASN1ObjectIdentifier) aSN1Primitive;
X9ECParameters byOID = X962NamedCurves.getByOID(aSN1ObjectIdentifier);
if (byOID == null) {
StringBuilder sb3 = new StringBuilder("Could not find X9.62 named curve for OID ");
sb3.append(aSN1ObjectIdentifier.getId());
throw new IllegalStateException(sb3.toString());
}
org.bouncycastle.math.ec.ECPoint g = byOID.getG();
X9ECParameters x9ECParameters = new X9ECParameters(byOID.getCurve(), g.getCurve().createPoint(g.getX().toBigInteger(), g.getY().toBigInteger(), false), byOID.getN(), byOID.getH(), byOID.getSeed());
if (!(publicKey instanceof org.bouncycastle.jce.interfaces.ECPublicKey)) {
int i3 = a + 27;
f = i3 % 128;
if (i3 % 2 != 0) {
return subjectPublicKeyInfo;
}
obj.hashCode();
throw null;
}
return new SubjectPublicKeyInfo(new AlgorithmIdentifier(subjectPublicKeyInfo.getAlgorithm().getAlgorithm(), x9ECParameters.toASN1Primitive()), ((org.bouncycastle.jce.interfaces.ECPublicKey) publicKey).getQ().getEncoded());
}
boolean z = algorithm2.getParameters().toASN1Primitive() instanceof ASN1ObjectIdentifier;
obj.hashCode();
throw null;
} catch (Exception e2) {
Logger logger = LOGGER;
StringBuilder sb4 = new StringBuilder("Exception: ");
sb4.append(e2.getMessage());
logger.severe(sb4.toString());
return null;
}
}
public static PublicKey toPublicKey(SubjectPublicKeyInfo subjectPublicKeyInfo) {
int i = 2 % 2;
try {
try {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(subjectPublicKeyInfo.getEncoded(ASN1Encoding.DER));
try {
PublicKey generatePublic = KeyFactory.getInstance("DH").generatePublic(x509EncodedKeySpec);
int i2 = f + 85;
a = i2 % 128;
if (i2 % 2 == 0) {
return generatePublic;
}
throw null;
} catch (GeneralSecurityException unused) {
return KeyFactory.getInstance("EC", BC_PROVIDER).generatePublic(x509EncodedKeySpec);
}
} catch (GeneralSecurityException e2) {
Logger logger = LOGGER;
StringBuilder sb = new StringBuilder("Exception: ");
sb.append(e2.getMessage());
logger.severe(sb.toString());
return null;
}
} catch (Exception e3) {
Logger logger2 = LOGGER;
StringBuilder sb2 = new StringBuilder("Exception: ");
sb2.append(e3.getMessage());
logger2.severe(sb2.toString());
return null;
}
}
public static PublicKey reconstructPublicKey(PublicKey publicKey) {
int i = 2 % 2;
int i2 = f;
int i3 = i2 + 5;
a = i3 % 128;
int i4 = i3 % 2;
if (!(publicKey instanceof ECPublicKey)) {
int i5 = i2 + 93;
a = i5 % 128;
int i6 = i5 % 2;
return publicKey;
}
try {
ECPublicKey eCPublicKey = (ECPublicKey) publicKey;
ECPoint w = eCPublicKey.getW();
ECParameterSpec explicitECParameterSpec = toExplicitECParameterSpec(eCPublicKey.getParams());
if (explicitECParameterSpec != null) {
PublicKey generatePublic = KeyFactory.getInstance("EC", BC_PROVIDER).generatePublic(new ECPublicKeySpec(w, explicitECParameterSpec));
int i7 = f + 7;
a = i7 % 128;
int i8 = i7 % 2;
return generatePublic;
}
int i9 = a + 101;
f = i9 % 128;
if (i9 % 2 != 0) {
return publicKey;
}
Object obj = null;
obj.hashCode();
throw null;
} catch (Exception unused) {
LOGGER.warning("Could not make public key param spec explicit");
return publicKey;
}
}
public static byte[] encodePublicKeyDataObject(String str, PublicKey publicKey) throws InvalidKeyException {
int i = 2 % 2;
int i2 = a + 41;
f = i2 % 128;
byte[] encodePublicKeyDataObject = encodePublicKeyDataObject(str, publicKey, i2 % 2 != 0);
int i3 = f + 57;
a = i3 % 128;
int i4 = i3 % 2;
return encodePublicKeyDataObject;
}
public static byte[] encodePublicKeyDataObject(String str, PublicKey publicKey, boolean z) throws InvalidKeyException {
int i = 2 % 2;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
TLVOutputStream tLVOutputStream = new TLVOutputStream(byteArrayOutputStream);
try {
tLVOutputStream.d(32585);
if (publicKey instanceof DHPublicKey) {
DHPublicKey dHPublicKey = (DHPublicKey) publicKey;
DHParameterSpec params = dHPublicKey.getParams();
BigInteger p = params.getP();
int l = params.getL();
BigInteger g = params.getG();
BigInteger y = dHPublicKey.getY();
tLVOutputStream.write(new ASN1ObjectIdentifier(str).getEncoded());
if (!z) {
int i2 = f + 7;
a = i2 % 128;
int i3 = i2 % 2;
tLVOutputStream.d(129);
tLVOutputStream.d(i2os(p));
tLVOutputStream.d(ISO781611.BIOMETRIC_SUBTYPE_TAG);
tLVOutputStream.d(i2os(BigInteger.valueOf(l)));
tLVOutputStream.d(ISO781611.CREATION_DATE_AND_TIME_TAG);
tLVOutputStream.d(i2os(g));
}
tLVOutputStream.d(CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA);
tLVOutputStream.d(i2os(y));
} else {
if (!(publicKey instanceof ECPublicKey)) {
StringBuilder sb = new StringBuilder("Unsupported public key: ");
sb.append(publicKey.getClass().getCanonicalName());
throw new InvalidKeyException(sb.toString());
}
ECPublicKey eCPublicKey = (ECPublicKey) publicKey;
ECParameterSpec params2 = eCPublicKey.getParams();
BigInteger prime = getPrime(params2);
EllipticCurve curve = params2.getCurve();
BigInteger a2 = curve.getA();
BigInteger b2 = curve.getB();
ECPoint generator = params2.getGenerator();
BigInteger order = params2.getOrder();
int cofactor = params2.getCofactor();
ECPoint w = eCPublicKey.getW();
tLVOutputStream.write(new ASN1ObjectIdentifier(str).getEncoded());
if (!z) {
int i4 = a + 95;
f = i4 % 128;
int i5 = i4 % 2;
tLVOutputStream.d(129);
tLVOutputStream.d(i2os(prime));
tLVOutputStream.d(ISO781611.BIOMETRIC_SUBTYPE_TAG);
tLVOutputStream.d(i2os(a2));
tLVOutputStream.d(ISO781611.CREATION_DATE_AND_TIME_TAG);
tLVOutputStream.d(i2os(b2));
BigInteger affineX = generator.getAffineX();
BigInteger affineY = generator.getAffineY();
tLVOutputStream.d(CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA);
tLVOutputStream.write(i2os(affineX));
tLVOutputStream.write(i2os(affineY));
tLVOutputStream.c();
tLVOutputStream.d(133);
tLVOutputStream.d(i2os(order));
}
tLVOutputStream.d(134);
tLVOutputStream.d(ecPoint2OS(w));
if (!z) {
tLVOutputStream.d(135);
tLVOutputStream.d(i2os(BigInteger.valueOf(cofactor)));
}
}
tLVOutputStream.c();
tLVOutputStream.flush();
tLVOutputStream.close();
return byteArrayOutputStream.toByteArray();
} catch (IOException e2) {
Logger logger = LOGGER;
StringBuilder sb2 = new StringBuilder("Exception: ");
sb2.append(e2.getMessage());
logger.severe(sb2.toString());
throw new IllegalStateException("Error in encoding public key");
}
}
public static byte[] encodePublicKeyForSmartCard(PublicKey publicKey) throws InvalidKeyException {
int i = 2 % 2;
if (publicKey == null) {
throw new IllegalArgumentException("Cannot encode null public key");
}
if (publicKey instanceof ECPublicKey) {
ECPublicKey eCPublicKey = (ECPublicKey) publicKey;
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(ecPoint2OS(eCPublicKey.getW()));
byte[] byteArray = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
return byteArray;
} catch (IOException e2) {
StringBuilder sb = new StringBuilder("Internal error writing to memory: ");
sb.append(e2.getMessage());
throw new IllegalStateException(sb.toString());
}
}
if (!(publicKey instanceof DHPublicKey)) {
StringBuilder sb2 = new StringBuilder("Unsupported public key: ");
sb2.append(publicKey.getClass().getCanonicalName());
throw new InvalidKeyException(sb2.toString());
}
int i2 = f + 115;
a = i2 % 128;
if (i2 % 2 != 0) {
i2os(((DHPublicKey) publicKey).getY());
Object obj = null;
obj.hashCode();
throw null;
}
byte[] i2os = i2os(((DHPublicKey) publicKey).getY());
int i3 = f + 81;
a = i3 % 128;
int i4 = i3 % 2;
return i2os;
}
public static ECPoint os2ECPoint(byte[] bArr) {
int i = 2 % 2;
try {
DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bArr));
if (dataInputStream.read() != 4) {
throw new IllegalArgumentException("Expected encoded ECPoint to start with 0x04");
}
int length = (bArr.length - 1) / 2;
byte[] bArr2 = new byte[length];
byte[] bArr3 = new byte[length];
dataInputStream.readFully(bArr2);
dataInputStream.readFully(bArr3);
dataInputStream.close();
ECPoint eCPoint = new ECPoint(os2i(bArr2), os2i(bArr3));
int i2 = a + 47;
f = i2 % 128;
if (i2 % 2 == 0) {
int i3 = 83 / 0;
}
return eCPoint;
} catch (IOException e2) {
LOGGER.log(Level.SEVERE, "Exception", (Throwable) e2);
throw new IllegalArgumentException(e2.getMessage());
}
}
public static byte[] ecPoint2OS(ECPoint eCPoint) {
int i = 2 % 2;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BigInteger affineX = eCPoint.getAffineX();
BigInteger affineY = eCPoint.getAffineY();
try {
byteArrayOutputStream.write(4);
byteArrayOutputStream.write(i2os(affineX));
byteArrayOutputStream.write(i2os(affineY));
byteArrayOutputStream.close();
byte[] byteArray = byteArrayOutputStream.toByteArray();
int i2 = f + 109;
a = i2 % 128;
int i3 = i2 % 2;
return byteArray;
} catch (IOException e2) {
throw new IllegalStateException(e2.getMessage());
}
}
/* JADX WARN: Code restructure failed: missing block: B:10:0x003e, code lost:
r1 = new java.io.DataInputStream(new java.io.ByteArrayInputStream(r5));
*/
/* JADX WARN: Code restructure failed: missing block: B:11:0x004d, code lost:
if (r1.read() != 4) goto L27;
*/
/* JADX WARN: Code restructure failed: missing block: B:12:0x004f, code lost:
r5 = new byte[r5.length - 1];
r1.readFully(r5);
r1.close();
r6 = (javax.crypto.spec.DHParameterSpec) r6;
r5 = java.security.KeyFactory.getInstance("DH").generatePublic(new javax.crypto.spec.DHPublicKeySpec(os2i(r5), r6.getP(), r6.getG()));
*/
/* JADX WARN: Code restructure failed: missing block: B:13:0x0077, code lost:
r6 = org.jmrtd.Util.f + 123;
org.jmrtd.Util.a = r6 % 128;
*/
/* JADX WARN: Code restructure failed: missing block: B:14:0x0080, code lost:
if ((r6 % 2) != 0) goto L25;
*/
/* JADX WARN: Code restructure failed: missing block: B:15:0x0082, code lost:
return r5;
*/
/* JADX WARN: Code restructure failed: missing block: B:18:0x0084, code lost:
throw null;
*/
/* JADX WARN: Code restructure failed: missing block: B:20:0x008c, code lost:
throw new java.lang.IllegalArgumentException("Expected encoded public key to start with 0x04");
*/
/* JADX WARN: Code restructure failed: missing block: B:21:0x008d, code lost:
r0 = new java.lang.StringBuilder("Expected ECParameterSpec or DHParameterSpec, found ");
r0.append(r6.getClass().getCanonicalName());
*/
/* JADX WARN: Code restructure failed: missing block: B:22:0x00a8, code lost:
throw new java.lang.IllegalArgumentException(r0.toString());
*/
/* JADX WARN: Code restructure failed: missing block: B:24:0x0034, code lost:
return java.security.KeyFactory.getInstance("EC").generatePublic(new java.security.spec.ECPublicKeySpec(os2ECPoint(r5), (java.security.spec.ECParameterSpec) r6));
*/
/* JADX WARN: Code restructure failed: missing block: B:26:0x001d, code lost:
if ((r6 instanceof java.security.spec.ECParameterSpec) != false) goto L11;
*/
/* JADX WARN: Code restructure failed: missing block: B:7:0x0018, code lost:
if ((r6 instanceof java.security.spec.ECParameterSpec) != false) goto L11;
*/
/* JADX WARN: Code restructure failed: missing block: B:9:0x003c, code lost:
if ((r6 instanceof javax.crypto.spec.DHParameterSpec) == false) goto L29;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static java.security.PublicKey decodePublicKeyFromSmartCard(byte[] r5, java.security.spec.AlgorithmParameterSpec r6) {
/*
Method dump skipped, instructions count: 239
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.Util.decodePublicKeyFromSmartCard(byte[], java.security.spec.AlgorithmParameterSpec):java.security.PublicKey");
}
public static String inferProtocolIdentifier(PublicKey publicKey) {
int i = 2 % 2;
String algorithm = publicKey.getAlgorithm();
if (!"EC".equals(algorithm)) {
int i2 = f + 57;
a = i2 % 128;
int i3 = i2 % 2;
if (!"ECDH".equals(algorithm)) {
if (!"DH".equals(algorithm)) {
throw new IllegalArgumentException("Wrong key type. Was expecting ECDH or DH public key.");
}
String str = SecurityInfo.ID_PK_DH;
int i4 = a + 123;
f = i4 % 128;
if (i4 % 2 == 0) {
int i5 = 39 / 0;
}
return str;
}
}
return SecurityInfo.ID_PK_ECDH;
}
public static AlgorithmParameterSpec mapNonceGM(byte[] bArr, byte[] bArr2, AlgorithmParameterSpec algorithmParameterSpec) {
int i = 2 % 2;
int i2 = f;
int i3 = i2 + 19;
a = i3 % 128;
int i4 = i3 % 2;
if (algorithmParameterSpec == null) {
throw new IllegalArgumentException("Unsupported parameters for mapping nonce");
}
if (algorithmParameterSpec instanceof ECParameterSpec) {
ECParameterSpec eCParameterSpec = (ECParameterSpec) algorithmParameterSpec;
BigInteger os2i = os2i(bArr2);
return mapNonceGMWithECDH(os2i(bArr), new ECPoint(os2i, computeAffineY(os2i, eCParameterSpec)), eCParameterSpec);
}
if (algorithmParameterSpec instanceof DHParameterSpec) {
int i5 = i2 + 93;
a = i5 % 128;
if (i5 % 2 != 0) {
DHParameterSpec mapNonceGMWithDH = mapNonceGMWithDH(os2i(bArr), os2i(bArr2), (DHParameterSpec) algorithmParameterSpec);
int i6 = 20 / 0;
return mapNonceGMWithDH;
}
return mapNonceGMWithDH(os2i(bArr), os2i(bArr2), (DHParameterSpec) algorithmParameterSpec);
}
StringBuilder sb = new StringBuilder("Unsupported parameters for mapping nonce, expected ECParameterSpec or DHParameterSpec, found ");
sb.append(algorithmParameterSpec.getClass().getCanonicalName());
throw new IllegalArgumentException(sb.toString());
}
public static ECParameterSpec mapNonceGMWithECDH(BigInteger bigInteger, ECPoint eCPoint, ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f + 91;
a = i2 % 128;
int i3 = i2 % 2;
ECPoint generator = eCParameterSpec.getGenerator();
EllipticCurve curve = eCParameterSpec.getCurve();
BigInteger a2 = curve.getA();
BigInteger b2 = curve.getB();
BigInteger p = ((ECFieldFp) curve.getField()).getP();
BigInteger order = eCParameterSpec.getOrder();
int cofactor = eCParameterSpec.getCofactor();
ECPoint add = add(multiply(bigInteger, generator, eCParameterSpec), eCPoint, eCParameterSpec);
if (!toBouncyCastleECPoint(add, eCParameterSpec).isValid()) {
int i4 = a + 125;
f = i4 % 128;
if (i4 % 2 == 0) {
LOGGER.info("ephemeralGenerator is not a valid point");
Object obj = null;
obj.hashCode();
throw null;
}
LOGGER.info("ephemeralGenerator is not a valid point");
int i5 = f + 57;
a = i5 % 128;
int i6 = i5 % 2;
}
return new ECParameterSpec(new EllipticCurve(new ECFieldFp(p), a2, b2), add, order, cofactor);
}
public static DHParameterSpec mapNonceGMWithDH(BigInteger bigInteger, BigInteger bigInteger2, DHParameterSpec dHParameterSpec) {
int i = 2 % 2;
BigInteger p = dHParameterSpec.getP();
DHParameterSpec dHParameterSpec2 = new DHParameterSpec(p, dHParameterSpec.getG().modPow(bigInteger, p).multiply(bigInteger2).mod(p), dHParameterSpec.getL());
int i2 = f + 57;
a = i2 % 128;
if (i2 % 2 == 0) {
return dHParameterSpec2;
}
throw null;
}
private static ECPoint add(ECPoint eCPoint, ECPoint eCPoint2, ECParameterSpec eCParameterSpec) {
ECPoint fromBouncyCastleECPoint;
int i = 2 % 2;
int i2 = f + 15;
a = i2 % 128;
if (i2 % 2 != 0) {
fromBouncyCastleECPoint = fromBouncyCastleECPoint(toBouncyCastleECPoint(eCPoint, eCParameterSpec).add(toBouncyCastleECPoint(eCPoint2, eCParameterSpec)));
int i3 = 72 / 0;
} else {
fromBouncyCastleECPoint = fromBouncyCastleECPoint(toBouncyCastleECPoint(eCPoint, eCParameterSpec).add(toBouncyCastleECPoint(eCPoint2, eCParameterSpec)));
}
int i4 = f + 1;
a = i4 % 128;
int i5 = i4 % 2;
return fromBouncyCastleECPoint;
}
public static ECPoint multiply(BigInteger bigInteger, ECPoint eCPoint, ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f + 37;
a = i2 % 128;
if (i2 % 2 != 0) {
ECPoint fromBouncyCastleECPoint = fromBouncyCastleECPoint(toBouncyCastleECPoint(eCPoint, eCParameterSpec).multiply(bigInteger));
int i3 = 13 / 0;
return fromBouncyCastleECPoint;
}
return fromBouncyCastleECPoint(toBouncyCastleECPoint(eCPoint, eCParameterSpec).multiply(bigInteger));
}
private static byte[] getBytes(String str) {
int i = 2 % 2;
int i2 = a + 19;
f = i2 % 128;
int i3 = i2 % 2;
byte[] bytes = str.getBytes();
try {
bytes = str.getBytes("UTF-8");
int i4 = f + 37;
a = i4 % 128;
int i5 = i4 % 2;
} catch (UnsupportedEncodingException e2) {
Logger logger = LOGGER;
StringBuilder sb = new StringBuilder("Exception: ");
sb.append(e2.getMessage());
logger.severe(sb.toString());
}
return bytes;
}
public static BigInteger getPrime(AlgorithmParameterSpec algorithmParameterSpec) {
int i = 2 % 2;
int i2 = f;
int i3 = i2 + 53;
a = i3 % 128;
if (i3 % 2 != 0) {
throw null;
}
if (algorithmParameterSpec == null) {
throw new IllegalArgumentException("Parameters null");
}
int i4 = i2 + 5;
a = i4 % 128;
int i5 = i4 % 2;
if (algorithmParameterSpec instanceof DHParameterSpec) {
BigInteger p = ((DHParameterSpec) algorithmParameterSpec).getP();
int i6 = a + 93;
f = i6 % 128;
if (i6 % 2 == 0) {
int i7 = 69 / 0;
}
return p;
}
if (!(algorithmParameterSpec instanceof ECParameterSpec)) {
StringBuilder sb = new StringBuilder("Unsupported agreement algorithm, was expecting DHParameterSpec or ECParameterSpec, found ");
sb.append(algorithmParameterSpec.getClass().getCanonicalName());
throw new IllegalArgumentException(sb.toString());
}
int i8 = i2 + 23;
a = i8 % 128;
int i9 = i8 % 2;
ECField field = ((ECParameterSpec) algorithmParameterSpec).getCurve().getField();
if (!(field instanceof ECFieldFp)) {
StringBuilder sb2 = new StringBuilder("Was expecting prime field of type ECFieldFp, found ");
sb2.append(field.getClass().getCanonicalName());
throw new IllegalStateException(sb2.toString());
}
int i10 = a + 79;
f = i10 % 128;
if (i10 % 2 != 0) {
return ((ECFieldFp) field).getP();
}
int i11 = 0 / 0;
return ((ECFieldFp) field).getP();
}
public static byte[] wrapDO(byte b2, byte[] bArr) {
int i = 2 % 2;
int i2 = f;
int i3 = i2 + 57;
a = i3 % 128;
int i4 = i3 % 2;
if (bArr == null) {
throw new IllegalArgumentException("Data to wrap is null");
}
int i5 = i2 + 65;
a = i5 % 128;
if (i5 % 2 != 0) {
byte[] bArr2 = new byte[bArr.length / 3];
bArr2[1] = b2;
bArr2[1] = (byte) bArr.length;
System.arraycopy(bArr, 0, bArr2, 4, bArr.length);
return bArr2;
}
byte[] bArr3 = new byte[bArr.length + 2];
bArr3[0] = b2;
bArr3[1] = (byte) bArr.length;
System.arraycopy(bArr, 0, bArr3, 2, bArr.length);
return bArr3;
}
public static byte[] unwrapDO(byte b2, byte[] bArr) {
byte b3;
int i = 2 % 2;
int i2 = f + 15;
int i3 = i2 % 128;
a = i3;
int i4 = i2 % 2;
if (bArr == null || bArr.length < 2) {
throw new IllegalArgumentException("Wrapped data is null or length < 2");
}
int i5 = i3 + 71;
f = i5 % 128;
if (i5 % 2 != 0 ? (b3 = bArr[0]) != b2 : (b3 = bArr[1]) != b2) {
StringBuilder sb = new StringBuilder("Expected tag ");
sb.append(Integer.toHexString(b2));
sb.append(", found tag ");
sb.append(Integer.toHexString(b3));
throw new IllegalArgumentException(sb.toString());
}
int i6 = i3 + 77;
f = i6 % 128;
if (i6 % 2 == 0) {
int length = bArr.length - 5;
byte[] bArr2 = new byte[length];
System.arraycopy(bArr, 3, bArr2, 0, length);
return bArr2;
}
int length2 = bArr.length - 2;
byte[] bArr3 = new byte[length2];
System.arraycopy(bArr, 2, bArr3, 0, length2);
return bArr3;
}
public static String inferKeyAgreementAlgorithm(PublicKey publicKey) {
int i = 2 % 2;
if (!(publicKey instanceof ECPublicKey)) {
if (!(publicKey instanceof DHPublicKey)) {
throw new IllegalArgumentException("Unsupported public key: ".concat(String.valueOf(publicKey)));
}
int i2 = a + 15;
f = i2 % 128;
if (i2 % 2 != 0) {
return "DH";
}
Object obj = null;
obj.hashCode();
throw null;
}
int i3 = a + 15;
int i4 = i3 % 128;
f = i4;
if (i3 % 2 == 0) {
int i5 = 14 / 0;
}
int i6 = i4 + 65;
a = i6 % 128;
int i7 = i6 % 2;
return "ECDH";
}
public static BigInteger computeAffineY(BigInteger bigInteger, ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
ECCurve bouncyCastleECCurve = toBouncyCastleECCurve(eCParameterSpec);
ECFieldElement a2 = bouncyCastleECCurve.getA();
ECFieldElement b2 = bouncyCastleECCurve.getB();
ECFieldElement fromBigInteger = bouncyCastleECCurve.fromBigInteger(bigInteger);
Logger logger = LOGGER;
StringBuilder sb = new StringBuilder("DEBUG: x.bitLength = ");
sb.append(fromBigInteger.bitLength());
logger.info(sb.toString());
ECFieldElement sqrt = fromBigInteger.multiply(fromBigInteger).add(a2).multiply(fromBigInteger).add(b2).sqrt();
StringBuilder sb2 = new StringBuilder("DEBUG: y.bitLength = ");
sb2.append(sqrt.bitLength());
logger.info(sb2.toString());
BigInteger bigInteger2 = sqrt.toBigInteger();
int i2 = f + 61;
a = i2 % 128;
if (i2 % 2 == 0) {
return bigInteger2;
}
Object obj = null;
obj.hashCode();
throw null;
}
private static org.bouncycastle.math.ec.ECPoint toBouncyCastleECPoint(ECPoint eCPoint, ECParameterSpec eCParameterSpec) {
ECCurve bouncyCastleECCurve;
BigInteger affineX;
BigInteger affineY;
boolean z;
int i = 2 % 2;
int i2 = f + 65;
a = i2 % 128;
if (i2 % 2 != 0) {
bouncyCastleECCurve = toBouncyCastleECCurve(eCParameterSpec);
affineX = eCPoint.getAffineX();
affineY = eCPoint.getAffineY();
z = true;
} else {
bouncyCastleECCurve = toBouncyCastleECCurve(eCParameterSpec);
affineX = eCPoint.getAffineX();
affineY = eCPoint.getAffineY();
z = false;
}
org.bouncycastle.math.ec.ECPoint createPoint = bouncyCastleECCurve.createPoint(affineX, affineY, z);
int i3 = a + 115;
f = i3 % 128;
if (i3 % 2 != 0) {
return createPoint;
}
throw null;
}
/* JADX WARN: Code restructure failed: missing block: B:10:0x0025, code lost:
if (r3.isValid() == false) goto L9;
*/
/* JADX WARN: Code restructure failed: missing block: B:4:0x001a, code lost:
if (r3.isValid() == false) goto L9;
*/
/* JADX WARN: Code restructure failed: missing block: B:8:0x0027, code lost:
org.jmrtd.Util.LOGGER.warning("point not valid");
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static java.security.spec.ECPoint fromBouncyCastleECPoint(org.bouncycastle.math.ec.ECPoint r3) {
/*
r0 = 2
int r1 = r0 % r0
int r1 = org.jmrtd.Util.f
int r1 = r1 + 23
int r2 = r1 % 128
org.jmrtd.Util.a = r2
int r1 = r1 % r0
if (r1 == 0) goto L1d
org.bouncycastle.math.ec.ECPoint r3 = r3.normalize()
boolean r1 = r3.isValid()
r2 = 42
int r2 = r2 / 0
if (r1 != 0) goto L2e
goto L27
L1d:
org.bouncycastle.math.ec.ECPoint r3 = r3.normalize()
boolean r1 = r3.isValid()
if (r1 != 0) goto L2e
L27:
java.util.logging.Logger r1 = org.jmrtd.Util.LOGGER
java.lang.String r2 = "point not valid"
r1.warning(r2)
L2e:
java.security.spec.ECPoint r1 = new java.security.spec.ECPoint
org.bouncycastle.math.ec.ECFieldElement r2 = r3.getAffineXCoord()
java.math.BigInteger r2 = r2.toBigInteger()
org.bouncycastle.math.ec.ECFieldElement r3 = r3.getAffineYCoord()
java.math.BigInteger r3 = r3.toBigInteger()
r1.<init>(r2, r3)
int r3 = org.jmrtd.Util.a
int r3 = r3 + 17
int r2 = r3 % 128
org.jmrtd.Util.f = r2
int r3 = r3 % r0
return r1
*/
throw new UnsupportedOperationException("Method not decompiled: org.jmrtd.Util.fromBouncyCastleECPoint(org.bouncycastle.math.ec.ECPoint):java.security.spec.ECPoint");
}
public static boolean isValid(ECPoint eCPoint, ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = a + 5;
f = i2 % 128;
int i3 = i2 % 2;
boolean isValid = toBouncyCastleECPoint(eCPoint, eCParameterSpec).isValid();
int i4 = a + 17;
f = i4 % 128;
if (i4 % 2 != 0) {
return isValid;
}
Object obj = null;
obj.hashCode();
throw null;
}
public static ECPoint normalize(ECPoint eCPoint, ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f + 65;
a = i2 % 128;
int i3 = i2 % 2;
ECPoint fromBouncyCastleECPoint = fromBouncyCastleECPoint(toBouncyCastleECPoint(eCPoint, eCParameterSpec).normalize());
int i4 = a + 117;
f = i4 % 128;
int i5 = i4 % 2;
return fromBouncyCastleECPoint;
}
private static ECCurve toBouncyCastleECCurve(ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
int i2 = f + 1;
a = i2 % 128;
int i3 = i2 % 2;
EllipticCurve curve = eCParameterSpec.getCurve();
ECField field = curve.getField();
if (!(field instanceof ECFieldFp)) {
StringBuilder sb = new StringBuilder("Only prime field supported (for now), found ");
sb.append(field.getClass().getCanonicalName());
throw new IllegalArgumentException(sb.toString());
}
int cofactor = eCParameterSpec.getCofactor();
ECCurve.Fp fp = new ECCurve.Fp(getPrime(eCParameterSpec), curve.getA(), curve.getB(), eCParameterSpec.getOrder(), BigInteger.valueOf(cofactor));
int i4 = a + 29;
f = i4 % 128;
int i5 = i4 % 2;
return fp;
}
public static ECPublicKeyParameters toBouncyECPublicKeyParameters(ECPublicKey eCPublicKey) {
int i = 2 % 2;
ECParameterSpec params = eCPublicKey.getParams();
ECPublicKeyParameters eCPublicKeyParameters = new ECPublicKeyParameters(toBouncyCastleECPoint(eCPublicKey.getW(), params), toBouncyECDomainParameters(params));
int i2 = f + 75;
a = i2 % 128;
if (i2 % 2 == 0) {
return eCPublicKeyParameters;
}
Object obj = null;
obj.hashCode();
throw null;
}
public static ECPrivateKeyParameters toBouncyECPrivateKeyParameters(ECPrivateKey eCPrivateKey) {
int i = 2 % 2;
ECPrivateKeyParameters eCPrivateKeyParameters = new ECPrivateKeyParameters(eCPrivateKey.getS(), toBouncyECDomainParameters(eCPrivateKey.getParams()));
int i2 = a + 105;
f = i2 % 128;
int i3 = i2 % 2;
return eCPrivateKeyParameters;
}
public static ECDomainParameters toBouncyECDomainParameters(ECParameterSpec eCParameterSpec) {
int i = 2 % 2;
ECDomainParameters eCDomainParameters = new ECDomainParameters(toBouncyCastleECCurve(eCParameterSpec), toBouncyCastleECPoint(eCParameterSpec.getGenerator(), eCParameterSpec), eCParameterSpec.getOrder(), BigInteger.valueOf(eCParameterSpec.getCofactor()), eCParameterSpec.getCurve().getSeed());
int i2 = a + 75;
f = i2 % 128;
int i3 = i2 % 2;
return eCDomainParameters;
}
static void b() {
b = (char) 61421;
c = (char) 40277;
e = (char) 57184;
d = (char) 7066;
}
public static AlgorithmParameterSpec mapNonceIM(byte[] bArr, byte[] bArr2, byte[] bArr3, AlgorithmParameterSpec algorithmParameterSpec) {
int i = 2 % 2;
int i2 = a + 91;
f = i2 % 128;
if (i2 % 2 != 0) {
return null;
}
int i3 = 41 / 0;
return null;
}
}