what-the-bank/sources/org/bouncycastle/crypto/tls/TlsUtils.java

2331 lines
93 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package org.bouncycastle.crypto.tls;
import com.google.common.primitives.UnsignedBytes;
import io.flutter.embedding.android.KeyboardMap;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Hashtable;
import java.util.Vector;
import okhttp3.internal.ws.WebSocketProtocol;
import org.bouncycastle.asn1.ASN1Encoding;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.asn1.x509.Extensions;
import org.bouncycastle.asn1.x509.KeyUsage;
import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.digests.SHA224Digest;
import org.bouncycastle.crypto.digests.SHA256Digest;
import org.bouncycastle.crypto.digests.SHA384Digest;
import org.bouncycastle.crypto.digests.SHA512Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.RSAKeyParameters;
import org.bouncycastle.crypto.util.PublicKeyFactory;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.Integers;
import org.bouncycastle.util.Strings;
import org.bouncycastle.util.io.Streams;
/* loaded from: classes6.dex */
public class TlsUtils {
public static final byte[] EMPTY_BYTES = new byte[0];
public static final short[] EMPTY_SHORTS = new short[0];
public static final int[] EMPTY_INTS = new int[0];
public static final long[] EMPTY_LONGS = new long[0];
public static final Integer EXT_signature_algorithms = Integers.valueOf(13);
static final byte[] SSL_CLIENT = {67, 76, 78, 84};
static final byte[] SSL_SERVER = {83, 82, 86, 82};
static final byte[][] SSL3_CONST = genSSL3Const();
public static boolean hasSigningCapability(short s) {
return s == 1 || s == 2 || s == 64;
}
public static boolean isValidUint16(int i) {
return (65535 & i) == i;
}
public static boolean isValidUint16(long j) {
return (WebSocketProtocol.PAYLOAD_SHORT_MAX & j) == j;
}
public static boolean isValidUint24(int i) {
return (16777215 & i) == i;
}
public static boolean isValidUint24(long j) {
return (16777215 & j) == j;
}
public static boolean isValidUint32(long j) {
return (KeyboardMap.kValueMask & j) == j;
}
public static boolean isValidUint48(long j) {
return (281474976710655L & j) == j;
}
public static boolean isValidUint64(long j) {
return true;
}
public static boolean isValidUint8(int i) {
return (i & 255) == i;
}
public static boolean isValidUint8(long j) {
return (255 & j) == j;
}
public static boolean isValidUint8(short s) {
return (s & 255) == s;
}
public static void writeVersion(ProtocolVersion protocolVersion, byte[] bArr, int i) {
bArr[i] = (byte) protocolVersion.getMajorVersion();
bArr[i + 1] = (byte) protocolVersion.getMinorVersion();
}
public static void writeVersion(ProtocolVersion protocolVersion, OutputStream outputStream) throws IOException {
outputStream.write(protocolVersion.getMajorVersion());
outputStream.write(protocolVersion.getMinorVersion());
}
public static void writeUint8ArrayWithUint8Length(short[] sArr, byte[] bArr, int i) throws IOException {
checkUint8(sArr.length);
writeUint8(sArr.length, bArr, i);
writeUint8Array(sArr, bArr, i + 1);
}
public static void writeUint8ArrayWithUint8Length(short[] sArr, OutputStream outputStream) throws IOException {
checkUint8(sArr.length);
writeUint8(sArr.length, outputStream);
writeUint8Array(sArr, outputStream);
}
public static void writeUint8Array(short[] sArr, byte[] bArr, int i) throws IOException {
for (short s : sArr) {
writeUint8(s, bArr, i);
i++;
}
}
public static void writeUint8Array(short[] sArr, OutputStream outputStream) throws IOException {
for (short s : sArr) {
writeUint8(s, outputStream);
}
}
public static void writeUint8(short s, byte[] bArr, int i) {
bArr[i] = (byte) s;
}
public static void writeUint8(short s, OutputStream outputStream) throws IOException {
outputStream.write(s);
}
public static void writeUint8(int i, byte[] bArr, int i2) {
bArr[i2] = (byte) i;
}
public static void writeUint8(int i, OutputStream outputStream) throws IOException {
outputStream.write(i);
}
public static void writeUint64(long j, byte[] bArr, int i) {
bArr[i] = (byte) (j >>> 56);
bArr[i + 1] = (byte) (j >>> 48);
bArr[i + 2] = (byte) (j >>> 40);
bArr[i + 3] = (byte) (j >>> 32);
bArr[i + 4] = (byte) (j >>> 24);
bArr[i + 5] = (byte) (j >>> 16);
bArr[i + 6] = (byte) (j >>> 8);
bArr[i + 7] = (byte) j;
}
public static void writeUint64(long j, OutputStream outputStream) throws IOException {
outputStream.write((byte) (j >>> 56));
outputStream.write((byte) (j >>> 48));
outputStream.write((byte) (j >>> 40));
outputStream.write((byte) (j >>> 32));
outputStream.write((byte) (j >>> 24));
outputStream.write((byte) (j >>> 16));
outputStream.write((byte) (j >>> 8));
outputStream.write((byte) j);
}
public static void writeUint48(long j, byte[] bArr, int i) {
bArr[i] = (byte) (j >>> 40);
bArr[i + 1] = (byte) (j >>> 32);
bArr[i + 2] = (byte) (j >>> 24);
bArr[i + 3] = (byte) (j >>> 16);
bArr[i + 4] = (byte) (j >>> 8);
bArr[i + 5] = (byte) j;
}
public static void writeUint48(long j, OutputStream outputStream) throws IOException {
outputStream.write((byte) (j >>> 40));
outputStream.write((byte) (j >>> 32));
outputStream.write((byte) (j >>> 24));
outputStream.write((byte) (j >>> 16));
outputStream.write((byte) (j >>> 8));
outputStream.write((byte) j);
}
public static void writeUint32(long j, byte[] bArr, int i) {
bArr[i] = (byte) (j >>> 24);
bArr[i + 1] = (byte) (j >>> 16);
bArr[i + 2] = (byte) (j >>> 8);
bArr[i + 3] = (byte) j;
}
public static void writeUint32(long j, OutputStream outputStream) throws IOException {
outputStream.write((byte) (j >>> 24));
outputStream.write((byte) (j >>> 16));
outputStream.write((byte) (j >>> 8));
outputStream.write((byte) j);
}
public static void writeUint24(int i, byte[] bArr, int i2) {
bArr[i2] = (byte) (i >>> 16);
bArr[i2 + 1] = (byte) (i >>> 8);
bArr[i2 + 2] = (byte) i;
}
public static void writeUint24(int i, OutputStream outputStream) throws IOException {
outputStream.write((byte) (i >>> 16));
outputStream.write((byte) (i >>> 8));
outputStream.write((byte) i);
}
public static void writeUint16ArrayWithUint16Length(int[] iArr, byte[] bArr, int i) throws IOException {
int length = iArr.length << 1;
checkUint16(length);
writeUint16(length, bArr, i);
writeUint16Array(iArr, bArr, i + 2);
}
public static void writeUint16ArrayWithUint16Length(int[] iArr, OutputStream outputStream) throws IOException {
int length = iArr.length << 1;
checkUint16(length);
writeUint16(length, outputStream);
writeUint16Array(iArr, outputStream);
}
public static void writeUint16Array(int[] iArr, byte[] bArr, int i) throws IOException {
for (int i2 : iArr) {
writeUint16(i2, bArr, i);
i += 2;
}
}
public static void writeUint16Array(int[] iArr, OutputStream outputStream) throws IOException {
for (int i : iArr) {
writeUint16(i, outputStream);
}
}
public static void writeUint16(int i, byte[] bArr, int i2) {
bArr[i2] = (byte) (i >>> 8);
bArr[i2 + 1] = (byte) i;
}
public static void writeUint16(int i, OutputStream outputStream) throws IOException {
outputStream.write(i >>> 8);
outputStream.write(i);
}
public static void writeOpaque8(byte[] bArr, OutputStream outputStream) throws IOException {
checkUint8(bArr.length);
writeUint8(bArr.length, outputStream);
outputStream.write(bArr);
}
public static void writeOpaque24(byte[] bArr, OutputStream outputStream) throws IOException {
checkUint24(bArr.length);
writeUint24(bArr.length, outputStream);
outputStream.write(bArr);
}
public static void writeOpaque16(byte[] bArr, OutputStream outputStream) throws IOException {
checkUint16(bArr.length);
writeUint16(bArr.length, outputStream);
outputStream.write(bArr);
}
public static void writeGMTUnixTime(byte[] bArr, int i) {
int currentTimeMillis = (int) (System.currentTimeMillis() / 1000);
bArr[i] = (byte) (currentTimeMillis >>> 24);
bArr[i + 1] = (byte) (currentTimeMillis >>> 16);
bArr[i + 2] = (byte) (currentTimeMillis >>> 8);
bArr[i + 3] = (byte) currentTimeMillis;
}
public static void verifySupportedSignatureAlgorithm(Vector vector, SignatureAndHashAlgorithm signatureAndHashAlgorithm) throws IOException {
if (vector == null || vector.size() <= 0 || vector.size() >= 32768) {
throw new IllegalArgumentException("'supportedSignatureAlgorithms' must have length from 1 to (2^15 - 1)");
}
if (signatureAndHashAlgorithm == null) {
throw new IllegalArgumentException("'signatureAlgorithm' cannot be null");
}
if (signatureAndHashAlgorithm.getSignature() != 0) {
for (int i = 0; i < vector.size(); i++) {
SignatureAndHashAlgorithm signatureAndHashAlgorithm2 = (SignatureAndHashAlgorithm) vector.elementAt(i);
if (signatureAndHashAlgorithm2.getHash() == signatureAndHashAlgorithm.getHash() && signatureAndHashAlgorithm2.getSignature() == signatureAndHashAlgorithm.getSignature()) {
return;
}
}
}
throw new TlsFatalAlert((short) 47);
}
private static Vector vectorOfOne(Object obj) {
Vector vector = new Vector(1);
vector.addElement(obj);
return vector;
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void validateKeyUsage(org.bouncycastle.asn1.x509.Certificate certificate, int i) throws IOException {
KeyUsage fromExtensions;
Extensions extensions = certificate.getTBSCertificate().getExtensions();
if (extensions != null && (fromExtensions = KeyUsage.fromExtensions(extensions)) != null && (fromExtensions.getBytes()[0] & UnsignedBytes.MAX_VALUE & i) != i) {
throw new TlsFatalAlert((short) 46);
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void trackHashAlgorithms(TlsHandshakeHash tlsHandshakeHash, Vector vector) {
if (vector != null) {
for (int i = 0; i < vector.size(); i++) {
short hash = ((SignatureAndHashAlgorithm) vector.elementAt(i)).getHash();
if (!HashAlgorithm.isPrivate(hash)) {
tlsHandshakeHash.trackHashAlgorithm(hash);
}
}
}
}
public static int readVersionRaw(byte[] bArr, int i) throws IOException {
return bArr[i + 1] | (bArr[i] << 8);
}
public static int readVersionRaw(InputStream inputStream) throws IOException {
int read = inputStream.read();
int read2 = inputStream.read();
if (read2 >= 0) {
return read2 | (read << 8);
}
throw new EOFException();
}
public static ProtocolVersion readVersion(byte[] bArr, int i) throws IOException {
return ProtocolVersion.get(bArr[i] & UnsignedBytes.MAX_VALUE, bArr[i + 1] & UnsignedBytes.MAX_VALUE);
}
public static ProtocolVersion readVersion(InputStream inputStream) throws IOException {
int read = inputStream.read();
int read2 = inputStream.read();
if (read2 >= 0) {
return ProtocolVersion.get(read, read2);
}
throw new EOFException();
}
public static short[] readUint8Array(int i, InputStream inputStream) throws IOException {
short[] sArr = new short[i];
for (int i2 = 0; i2 < i; i2++) {
sArr[i2] = readUint8(inputStream);
}
return sArr;
}
public static short readUint8(byte[] bArr, int i) {
return (short) (bArr[i] & UnsignedBytes.MAX_VALUE);
}
public static short readUint8(InputStream inputStream) throws IOException {
int read = inputStream.read();
if (read >= 0) {
return (short) read;
}
throw new EOFException();
}
public static long readUint48(byte[] bArr, int i) {
return (readUint24(bArr, i + 3) & KeyboardMap.kValueMask) | ((readUint24(bArr, i) & KeyboardMap.kValueMask) << 24);
}
public static long readUint48(InputStream inputStream) throws IOException {
return ((readUint24(inputStream) & KeyboardMap.kValueMask) << 24) | (KeyboardMap.kValueMask & readUint24(inputStream));
}
public static long readUint32(byte[] bArr, int i) {
return ((bArr[i + 3] & UnsignedBytes.MAX_VALUE) | ((bArr[i] & UnsignedBytes.MAX_VALUE) << 24) | ((bArr[i + 1] & UnsignedBytes.MAX_VALUE) << 16) | ((bArr[i + 2] & UnsignedBytes.MAX_VALUE) << 8)) & KeyboardMap.kValueMask;
}
public static long readUint32(InputStream inputStream) throws IOException {
int read = inputStream.read();
int read2 = inputStream.read();
int read3 = inputStream.read();
if (inputStream.read() >= 0) {
return (r4 | (read << 24) | (read2 << 16) | (read3 << 8)) & KeyboardMap.kValueMask;
}
throw new EOFException();
}
public static int readUint24(byte[] bArr, int i) {
return (bArr[i + 2] & UnsignedBytes.MAX_VALUE) | ((bArr[i] & UnsignedBytes.MAX_VALUE) << 16) | ((bArr[i + 1] & UnsignedBytes.MAX_VALUE) << 8);
}
public static int readUint24(InputStream inputStream) throws IOException {
int read = inputStream.read();
int read2 = inputStream.read();
int read3 = inputStream.read();
if (read3 >= 0) {
return read3 | (read << 16) | (read2 << 8);
}
throw new EOFException();
}
public static int[] readUint16Array(int i, InputStream inputStream) throws IOException {
int[] iArr = new int[i];
for (int i2 = 0; i2 < i; i2++) {
iArr[i2] = readUint16(inputStream);
}
return iArr;
}
public static int readUint16(byte[] bArr, int i) {
return (bArr[i + 1] & UnsignedBytes.MAX_VALUE) | ((bArr[i] & UnsignedBytes.MAX_VALUE) << 8);
}
public static int readUint16(InputStream inputStream) throws IOException {
int read = inputStream.read();
int read2 = inputStream.read();
if (read2 >= 0) {
return read2 | (read << 8);
}
throw new EOFException();
}
public static Vector readSignatureAlgorithmsExtension(byte[] bArr) throws IOException {
if (bArr == null) {
throw new IllegalArgumentException("'extensionData' cannot be null");
}
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bArr);
Vector parseSupportedSignatureAlgorithms = parseSupportedSignatureAlgorithms(false, byteArrayInputStream);
TlsProtocol.assertEmpty(byteArrayInputStream);
return parseSupportedSignatureAlgorithms;
}
public static byte[] readOpaque8(InputStream inputStream) throws IOException {
return readFully(readUint8(inputStream), inputStream);
}
public static byte[] readOpaque24(InputStream inputStream) throws IOException {
return readFully(readUint24(inputStream), inputStream);
}
public static byte[] readOpaque16(InputStream inputStream) throws IOException {
return readFully(readUint16(inputStream), inputStream);
}
public static byte[] readFully(int i, InputStream inputStream) throws IOException {
if (i <= 0) {
return EMPTY_BYTES;
}
byte[] bArr = new byte[i];
if (i == Streams.readFully(inputStream, bArr)) {
return bArr;
}
throw new EOFException();
}
public static void readFully(byte[] bArr, InputStream inputStream) throws IOException {
int length = bArr.length;
if (length > 0 && length != Streams.readFully(inputStream, bArr)) {
throw new EOFException();
}
}
public static ASN1Primitive readDERObject(byte[] bArr) throws IOException {
ASN1Primitive readASN1Object = readASN1Object(bArr);
if (Arrays.areEqual(readASN1Object.getEncoded(ASN1Encoding.DER), bArr)) {
return readASN1Object;
}
throw new TlsFatalAlert((short) 50);
}
public static byte[] readAllOrNothing(int i, InputStream inputStream) throws IOException {
if (i <= 0) {
return EMPTY_BYTES;
}
byte[] bArr = new byte[i];
int readFully = Streams.readFully(inputStream, bArr);
if (readFully == 0) {
return null;
}
if (readFully == i) {
return bArr;
}
throw new EOFException();
}
public static ASN1Primitive readASN1Object(byte[] bArr) throws IOException {
ASN1InputStream aSN1InputStream = new ASN1InputStream(bArr);
ASN1Primitive readObject = aSN1InputStream.readObject();
if (readObject == null) {
throw new TlsFatalAlert((short) 50);
}
if (aSN1InputStream.readObject() == null) {
return readObject;
}
throw new TlsFatalAlert((short) 50);
}
public static Vector parseSupportedSignatureAlgorithms(boolean z, InputStream inputStream) throws IOException {
int readUint16 = readUint16(inputStream);
if (readUint16 < 2 || (readUint16 & 1) != 0) {
throw new TlsFatalAlert((short) 50);
}
int i = readUint16 / 2;
Vector vector = new Vector(i);
for (int i2 = 0; i2 < i; i2++) {
SignatureAndHashAlgorithm parse = SignatureAndHashAlgorithm.parse(inputStream);
if (!z && parse.getSignature() == 0) {
throw new TlsFatalAlert((short) 47);
}
vector.addElement(parse);
}
return vector;
}
public static boolean isValidCipherSuiteForVersion(int i, ProtocolVersion protocolVersion) {
return getMinimumVersion(i).isEqualOrEarlierVersionOf(protocolVersion.getEquivalentTLSVersion());
}
public static boolean isTLSv12(TlsContext tlsContext) {
return isTLSv12(tlsContext.getServerVersion());
}
public static boolean isTLSv12(ProtocolVersion protocolVersion) {
return ProtocolVersion.TLSv12.isEqualOrEarlierVersionOf(protocolVersion.getEquivalentTLSVersion());
}
public static boolean isTLSv11(TlsContext tlsContext) {
return isTLSv11(tlsContext.getServerVersion());
}
public static boolean isTLSv11(ProtocolVersion protocolVersion) {
return ProtocolVersion.TLSv11.isEqualOrEarlierVersionOf(protocolVersion.getEquivalentTLSVersion());
}
public static boolean isStreamCipherSuite(int i) throws IOException {
return getCipherType(i) == 0;
}
public static boolean isSignatureAlgorithmsExtensionAllowed(ProtocolVersion protocolVersion) {
return ProtocolVersion.TLSv12.isEqualOrEarlierVersionOf(protocolVersion.getEquivalentTLSVersion());
}
public static boolean isSSL(TlsContext tlsContext) {
return tlsContext.getServerVersion().isSSL();
}
public static boolean isBlockCipherSuite(int i) throws IOException {
return 1 == getCipherType(i);
}
public static boolean isAEADCipherSuite(int i) throws IOException {
return 2 == getCipherType(i);
}
public static TlsSession importSession(byte[] bArr, SessionParameters sessionParameters) {
return new TlsSessionImpl(bArr, sessionParameters);
}
static void hmac_hash(Digest digest, byte[] bArr, byte[] bArr2, byte[] bArr3) {
HMac hMac = new HMac(digest);
hMac.init(new KeyParameter(bArr));
int digestSize = digest.getDigestSize();
int length = ((bArr3.length + digestSize) - 1) / digestSize;
int macSize = hMac.getMacSize();
byte[] bArr4 = new byte[macSize];
byte[] bArr5 = new byte[hMac.getMacSize()];
byte[] bArr6 = bArr2;
int i = 0;
while (i < length) {
hMac.update(bArr6, 0, bArr6.length);
hMac.doFinal(bArr4, 0);
hMac.update(bArr4, 0, macSize);
hMac.update(bArr2, 0, bArr2.length);
hMac.doFinal(bArr5, 0);
int i2 = digestSize * i;
System.arraycopy(bArr5, 0, bArr3, i2, Math.min(digestSize, bArr3.length - i2));
i++;
bArr6 = bArr4;
}
}
public static boolean hasExpectedEmptyExtensionData(Hashtable hashtable, Integer num, short s) throws IOException {
byte[] extensionData = getExtensionData(hashtable, num);
if (extensionData == null) {
return false;
}
if (extensionData.length == 0) {
return true;
}
throw new TlsFatalAlert(s);
}
public static SignatureAndHashAlgorithm getSignatureAndHashAlgorithm(TlsContext tlsContext, TlsSignerCredentials tlsSignerCredentials) throws IOException {
if (!isTLSv12(tlsContext)) {
return null;
}
SignatureAndHashAlgorithm signatureAndHashAlgorithm = tlsSignerCredentials.getSignatureAndHashAlgorithm();
if (signatureAndHashAlgorithm != null) {
return signatureAndHashAlgorithm;
}
throw new TlsFatalAlert((short) 80);
}
public static Vector getSignatureAlgorithmsExtension(Hashtable hashtable) throws IOException {
byte[] extensionData = getExtensionData(hashtable, EXT_signature_algorithms);
if (extensionData == null) {
return null;
}
return readSignatureAlgorithmsExtension(extensionData);
}
public static ASN1ObjectIdentifier getOIDForHashAlgorithm(short s) {
switch (s) {
case 1:
return PKCSObjectIdentifiers.md5;
case 2:
return X509ObjectIdentifiers.id_SHA1;
case 3:
return NISTObjectIdentifiers.id_sha224;
case 4:
return NISTObjectIdentifiers.id_sha256;
case 5:
return NISTObjectIdentifiers.id_sha384;
case 6:
return NISTObjectIdentifiers.id_sha512;
default:
throw new IllegalArgumentException("unknown HashAlgorithm");
}
}
public static ProtocolVersion getMinimumVersion(int i) {
switch (i) {
case 59:
case 60:
case 61:
case 62:
case 63:
case 64:
break;
default:
switch (i) {
case 103:
case 104:
case 105:
case 106:
case 107:
break;
default:
switch (i) {
case CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256 /* 156 */:
case CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384 /* 157 */:
case 158:
case CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 /* 159 */:
case 160:
case CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384 /* 161 */:
case CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 /* 162 */:
case CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 /* 163 */:
case CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256 /* 164 */:
case CipherSuite.TLS_DH_DSS_WITH_AES_256_GCM_SHA384 /* 165 */:
break;
default:
switch (i) {
case CipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256 /* 168 */:
case CipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384 /* 169 */:
case CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 /* 170 */:
case CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 /* 171 */:
case CipherSuite.TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 /* 172 */:
case CipherSuite.TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 /* 173 */:
break;
default:
switch (i) {
case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 /* 186 */:
case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 /* 187 */:
case 188:
case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 /* 189 */:
case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 /* 190 */:
case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 /* 191 */:
case 192:
case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 /* 193 */:
case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 /* 194 */:
case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 /* 195 */:
case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 /* 196 */:
case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 /* 197 */:
break;
default:
switch (i) {
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 /* 49187 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 /* 49188 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 /* 49189 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 /* 49190 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 /* 49191 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 /* 49192 */:
case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 /* 49193 */:
case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 /* 49194 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 /* 49195 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 /* 49196 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 /* 49197 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 /* 49198 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 /* 49199 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 /* 49200 */:
case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 /* 49201 */:
case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 /* 49202 */:
break;
default:
switch (i) {
case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 /* 49266 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 /* 49267 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 /* 49268 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 /* 49269 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 /* 49270 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 /* 49271 */:
case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 /* 49272 */:
case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 /* 49273 */:
case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49274 */:
case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49275 */:
case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49276 */:
case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49277 */:
case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49278 */:
case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49279 */:
case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 /* 49280 */:
case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 /* 49281 */:
case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256 /* 49282 */:
case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384 /* 49283 */:
case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256 /* 49284 */:
case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384 /* 49285 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49286 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49287 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49288 */:
case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49289 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49290 */:
case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49291 */:
case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 /* 49292 */:
case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 /* 49293 */:
case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 /* 49294 */:
case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 /* 49295 */:
case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 /* 49296 */:
case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 /* 49297 */:
case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 /* 49298 */:
case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 /* 49299 */:
break;
default:
switch (i) {
case CipherSuite.DRAFT_TLS_PSK_WITH_AES_128_OCB /* 65296 */:
case CipherSuite.DRAFT_TLS_PSK_WITH_AES_256_OCB /* 65297 */:
case CipherSuite.DRAFT_TLS_DHE_PSK_WITH_AES_128_OCB /* 65298 */:
case CipherSuite.DRAFT_TLS_DHE_PSK_WITH_AES_256_OCB /* 65299 */:
case CipherSuite.DRAFT_TLS_ECDHE_PSK_WITH_AES_128_OCB /* 65300 */:
case CipherSuite.DRAFT_TLS_ECDHE_PSK_WITH_AES_256_OCB /* 65301 */:
break;
default:
switch (i) {
case CipherSuite.TLS_RSA_WITH_AES_128_CCM /* 49308 */:
case CipherSuite.TLS_RSA_WITH_AES_256_CCM /* 49309 */:
case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM /* 49310 */:
case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM /* 49311 */:
case CipherSuite.TLS_RSA_WITH_AES_128_CCM_8 /* 49312 */:
case CipherSuite.TLS_RSA_WITH_AES_256_CCM_8 /* 49313 */:
case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8 /* 49314 */:
case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8 /* 49315 */:
case CipherSuite.TLS_PSK_WITH_AES_128_CCM /* 49316 */:
case CipherSuite.TLS_PSK_WITH_AES_256_CCM /* 49317 */:
case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM /* 49318 */:
case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM /* 49319 */:
case CipherSuite.TLS_PSK_WITH_AES_128_CCM_8 /* 49320 */:
case CipherSuite.TLS_PSK_WITH_AES_256_CCM_8 /* 49321 */:
case CipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8 /* 49322 */:
case CipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8 /* 49323 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM /* 49324 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM /* 49325 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 /* 49326 */:
case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 /* 49327 */:
break;
default:
switch (i) {
case CipherSuite.DRAFT_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 /* 52392 */:
case CipherSuite.DRAFT_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 /* 52393 */:
case CipherSuite.DRAFT_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 /* 52394 */:
case CipherSuite.DRAFT_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 /* 52395 */:
case CipherSuite.DRAFT_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 /* 52396 */:
case CipherSuite.DRAFT_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 /* 52397 */:
case CipherSuite.DRAFT_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 /* 52398 */:
break;
default:
switch (i) {
case CipherSuite.DRAFT_TLS_DHE_RSA_WITH_AES_128_OCB /* 65280 */:
case 65281:
case 65282:
case CipherSuite.DRAFT_TLS_ECDHE_RSA_WITH_AES_256_OCB /* 65283 */:
case CipherSuite.DRAFT_TLS_ECDHE_ECDSA_WITH_AES_128_OCB /* 65284 */:
case CipherSuite.DRAFT_TLS_ECDHE_ECDSA_WITH_AES_256_OCB /* 65285 */:
break;
default:
return ProtocolVersion.SSLv3;
}
}
}
}
}
}
}
}
}
}
}
return ProtocolVersion.TLSv12;
}
/* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */
/* JADX WARN: Failed to find 'out' block for switch in B:19:0x0020. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:20:0x0023. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:21:0x0026. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:22:0x0029. Please report as an issue. */
/* JADX WARN: Removed duplicated region for block: B:53:0x005a A[FALL_THROUGH, RETURN] */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static int getMACAlgorithm(int r3) throws java.io.IOException {
/*
r0 = 1
if (r3 == r0) goto L5b
r1 = 2
if (r3 == r1) goto L5a
r2 = 4
if (r3 == r2) goto L5b
r0 = 5
if (r3 == r0) goto L5a
r0 = 10
if (r3 == r0) goto L5a
r0 = 13
if (r3 == r0) goto L5a
r0 = 16
if (r3 == r0) goto L5a
r0 = 19
if (r3 == r0) goto L5a
r0 = 22
if (r3 == r0) goto L5a
switch(r3) {
case 168: goto L58;
case 169: goto L58;
case 170: goto L58;
case 171: goto L58;
case 172: goto L58;
case 173: goto L58;
case 174: goto L56;
case 175: goto L55;
case 176: goto L56;
case 177: goto L55;
case 178: goto L56;
case 179: goto L55;
case 180: goto L56;
case 181: goto L55;
case 182: goto L56;
case 183: goto L55;
case 184: goto L56;
case 185: goto L55;
case 186: goto L56;
case 187: goto L56;
case 188: goto L56;
case 189: goto L56;
case 190: goto L56;
default: goto L23;
}
L23:
switch(r3) {
case 192: goto L56;
case 193: goto L56;
case 194: goto L56;
case 195: goto L56;
case 196: goto L56;
default: goto L26;
}
L26:
switch(r3) {
case 49153: goto L5a;
case 49154: goto L5a;
case 49155: goto L5a;
case 49156: goto L5a;
case 49157: goto L5a;
case 49158: goto L5a;
case 49159: goto L5a;
case 49160: goto L5a;
case 49161: goto L5a;
case 49162: goto L5a;
case 49163: goto L5a;
case 49164: goto L5a;
case 49165: goto L5a;
case 49166: goto L5a;
case 49167: goto L5a;
case 49168: goto L5a;
case 49169: goto L5a;
case 49170: goto L5a;
case 49171: goto L5a;
case 49172: goto L5a;
case 49173: goto L5a;
case 49174: goto L5a;
case 49175: goto L5a;
case 49176: goto L5a;
case 49177: goto L5a;
case 49178: goto L5a;
case 49179: goto L5a;
case 49180: goto L5a;
case 49181: goto L5a;
case 49182: goto L5a;
case 49183: goto L5a;
case 49184: goto L5a;
case 49185: goto L5a;
case 49186: goto L5a;
case 49187: goto L56;
case 49188: goto L55;
case 49189: goto L56;
case 49190: goto L55;
case 49191: goto L56;
case 49192: goto L55;
case 49193: goto L56;
case 49194: goto L55;
case 49195: goto L58;
case 49196: goto L58;
case 49197: goto L58;
case 49198: goto L58;
case 49199: goto L58;
case 49200: goto L58;
case 49201: goto L58;
case 49202: goto L58;
case 49203: goto L5a;
case 49204: goto L5a;
case 49205: goto L5a;
case 49206: goto L5a;
case 49207: goto L56;
case 49208: goto L55;
case 49209: goto L5a;
case 49210: goto L56;
case 49211: goto L55;
default: goto L29;
}
L29:
switch(r3) {
case 49266: goto L56;
case 49267: goto L55;
case 49268: goto L56;
case 49269: goto L55;
case 49270: goto L56;
case 49271: goto L55;
case 49272: goto L56;
case 49273: goto L55;
case 49274: goto L58;
case 49275: goto L58;
case 49276: goto L58;
case 49277: goto L58;
case 49278: goto L58;
case 49279: goto L58;
case 49280: goto L58;
case 49281: goto L58;
case 49282: goto L58;
case 49283: goto L58;
default: goto L2c;
}
L2c:
switch(r3) {
case 49286: goto L58;
case 49287: goto L58;
case 49288: goto L58;
case 49289: goto L58;
case 49290: goto L58;
case 49291: goto L58;
case 49292: goto L58;
case 49293: goto L58;
case 49294: goto L58;
case 49295: goto L58;
case 49296: goto L58;
case 49297: goto L58;
case 49298: goto L58;
case 49299: goto L58;
case 49300: goto L56;
case 49301: goto L55;
case 49302: goto L56;
case 49303: goto L55;
case 49304: goto L56;
case 49305: goto L55;
case 49306: goto L56;
case 49307: goto L55;
case 49308: goto L58;
case 49309: goto L58;
case 49310: goto L58;
case 49311: goto L58;
case 49312: goto L58;
case 49313: goto L58;
case 49314: goto L58;
case 49315: goto L58;
case 49316: goto L58;
case 49317: goto L58;
case 49318: goto L58;
case 49319: goto L58;
case 49320: goto L58;
case 49321: goto L58;
case 49322: goto L58;
case 49323: goto L58;
case 49324: goto L58;
case 49325: goto L58;
case 49326: goto L58;
case 49327: goto L58;
default: goto L2f;
}
L2f:
switch(r3) {
case 52392: goto L58;
case 52393: goto L58;
case 52394: goto L58;
case 52395: goto L58;
case 52396: goto L58;
case 52397: goto L58;
case 52398: goto L58;
default: goto L32;
}
L32:
switch(r3) {
case 65280: goto L58;
case 65281: goto L58;
case 65282: goto L58;
case 65283: goto L58;
case 65284: goto L58;
case 65285: goto L58;
default: goto L35;
}
L35:
switch(r3) {
case 65296: goto L58;
case 65297: goto L58;
case 65298: goto L58;
case 65299: goto L58;
case 65300: goto L58;
case 65301: goto L58;
default: goto L38;
}
L38:
switch(r3) {
case 44: goto L5a;
case 45: goto L5a;
case 46: goto L5a;
case 47: goto L5a;
case 48: goto L5a;
case 49: goto L5a;
case 50: goto L5a;
case 51: goto L5a;
default: goto L3b;
}
L3b:
switch(r3) {
case 53: goto L5a;
case 54: goto L5a;
case 55: goto L5a;
case 56: goto L5a;
case 57: goto L5a;
default: goto L3e;
}
L3e:
switch(r3) {
case 59: goto L56;
case 60: goto L56;
case 61: goto L56;
case 62: goto L56;
case 63: goto L56;
case 64: goto L56;
case 65: goto L5a;
case 66: goto L5a;
case 67: goto L5a;
case 68: goto L5a;
case 69: goto L5a;
default: goto L41;
}
L41:
switch(r3) {
case 103: goto L56;
case 104: goto L56;
case 105: goto L56;
case 106: goto L56;
case 107: goto L56;
default: goto L44;
}
L44:
switch(r3) {
case 132: goto L5a;
case 133: goto L5a;
case 134: goto L5a;
case 135: goto L5a;
case 136: goto L5a;
default: goto L47;
}
L47:
switch(r3) {
case 138: goto L5a;
case 139: goto L5a;
case 140: goto L5a;
case 141: goto L5a;
case 142: goto L5a;
case 143: goto L5a;
case 144: goto L5a;
case 145: goto L5a;
case 146: goto L5a;
case 147: goto L5a;
case 148: goto L5a;
case 149: goto L5a;
case 150: goto L5a;
case 151: goto L5a;
case 152: goto L5a;
case 153: goto L5a;
case 154: goto L5a;
default: goto L4a;
}
L4a:
switch(r3) {
case 156: goto L58;
case 157: goto L58;
case 158: goto L58;
case 159: goto L58;
case 160: goto L58;
case 161: goto L58;
case 162: goto L58;
case 163: goto L58;
case 164: goto L58;
case 165: goto L58;
default: goto L4d;
}
L4d:
org.bouncycastle.crypto.tls.TlsFatalAlert r3 = new org.bouncycastle.crypto.tls.TlsFatalAlert
r0 = 80
r3.<init>(r0)
throw r3
L55:
return r2
L56:
r3 = 3
return r3
L58:
r3 = 0
return r3
L5a:
return r1
L5b:
return r0
*/
throw new UnsupportedOperationException("Method not decompiled: org.bouncycastle.crypto.tls.TlsUtils.getMACAlgorithm(int):int");
}
/* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */
/* JADX WARN: Failed to find 'out' block for switch in B:19:0x0020. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:20:0x0023. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:21:0x0026. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:22:0x0029. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:23:0x002c. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:24:0x002f. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:25:0x0032. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:26:0x0035. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:27:0x0038. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:28:0x003b. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:29:0x003e. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:30:0x0041. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:31:0x0044. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:32:0x0047. Please report as an issue. */
/* JADX WARN: Removed duplicated region for block: B:84:0x0062 A[RETURN] */
/* JADX WARN: Removed duplicated region for block: B:87:0x0069 A[RETURN] */
/* JADX WARN: Removed duplicated region for block: B:93:0x0070 A[RETURN] */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static int getKeyExchangeAlgorithm(int r6) throws java.io.IOException {
/*
r0 = 1
if (r6 == r0) goto L79
r1 = 2
if (r6 == r1) goto L79
r1 = 4
if (r6 == r1) goto L79
r1 = 5
if (r6 == r1) goto L79
r2 = 10
if (r6 == r2) goto L79
r2 = 13
if (r6 == r2) goto L77
r3 = 16
if (r6 == r3) goto L74
r4 = 19
if (r6 == r4) goto L72
r5 = 22
if (r6 == r5) goto L71
switch(r6) {
case 168: goto L70;
case 169: goto L70;
case 170: goto L6d;
case 171: goto L6d;
case 172: goto L6a;
case 173: goto L6a;
case 174: goto L70;
case 175: goto L70;
case 176: goto L70;
case 177: goto L70;
case 178: goto L6d;
case 179: goto L6d;
case 180: goto L6d;
case 181: goto L6d;
case 182: goto L6a;
case 183: goto L6a;
case 184: goto L6a;
case 185: goto L6a;
case 186: goto L79;
case 187: goto L77;
case 188: goto L74;
case 189: goto L72;
case 190: goto L71;
default: goto L23;
}
L23:
switch(r6) {
case 192: goto L79;
case 193: goto L77;
case 194: goto L74;
case 195: goto L72;
case 196: goto L71;
default: goto L26;
}
L26:
switch(r6) {
case 49153: goto L69;
case 49154: goto L69;
case 49155: goto L69;
case 49156: goto L69;
case 49157: goto L69;
case 49158: goto L66;
case 49159: goto L66;
case 49160: goto L66;
case 49161: goto L66;
case 49162: goto L66;
case 49163: goto L63;
case 49164: goto L63;
case 49165: goto L63;
case 49166: goto L63;
case 49167: goto L63;
case 49168: goto L62;
case 49169: goto L62;
case 49170: goto L62;
case 49171: goto L62;
case 49172: goto L62;
case 49173: goto L5f;
case 49174: goto L5f;
case 49175: goto L5f;
case 49176: goto L5f;
case 49177: goto L5f;
case 49178: goto L5c;
case 49179: goto L59;
case 49180: goto L58;
case 49181: goto L5c;
case 49182: goto L59;
case 49183: goto L58;
case 49184: goto L5c;
case 49185: goto L59;
case 49186: goto L58;
case 49187: goto L66;
case 49188: goto L66;
case 49189: goto L69;
case 49190: goto L69;
case 49191: goto L62;
case 49192: goto L62;
case 49193: goto L63;
case 49194: goto L63;
case 49195: goto L66;
case 49196: goto L66;
case 49197: goto L69;
case 49198: goto L69;
case 49199: goto L62;
case 49200: goto L62;
case 49201: goto L63;
case 49202: goto L63;
case 49203: goto L55;
case 49204: goto L55;
case 49205: goto L55;
case 49206: goto L55;
case 49207: goto L55;
case 49208: goto L55;
case 49209: goto L55;
case 49210: goto L55;
case 49211: goto L55;
default: goto L29;
}
L29:
switch(r6) {
case 49266: goto L66;
case 49267: goto L66;
case 49268: goto L69;
case 49269: goto L69;
case 49270: goto L62;
case 49271: goto L62;
case 49272: goto L63;
case 49273: goto L63;
case 49274: goto L79;
case 49275: goto L79;
case 49276: goto L71;
case 49277: goto L71;
case 49278: goto L74;
case 49279: goto L74;
case 49280: goto L72;
case 49281: goto L72;
case 49282: goto L77;
case 49283: goto L77;
default: goto L2c;
}
L2c:
switch(r6) {
case 49286: goto L66;
case 49287: goto L66;
case 49288: goto L69;
case 49289: goto L69;
case 49290: goto L62;
case 49291: goto L62;
case 49292: goto L63;
case 49293: goto L63;
case 49294: goto L70;
case 49295: goto L70;
case 49296: goto L6d;
case 49297: goto L6d;
case 49298: goto L6a;
case 49299: goto L6a;
case 49300: goto L70;
case 49301: goto L70;
case 49302: goto L6d;
case 49303: goto L6d;
case 49304: goto L6a;
case 49305: goto L6a;
case 49306: goto L55;
case 49307: goto L55;
case 49308: goto L79;
case 49309: goto L79;
case 49310: goto L71;
case 49311: goto L71;
case 49312: goto L79;
case 49313: goto L79;
case 49314: goto L71;
case 49315: goto L71;
case 49316: goto L70;
case 49317: goto L70;
case 49318: goto L6d;
case 49319: goto L6d;
case 49320: goto L70;
case 49321: goto L70;
case 49322: goto L6d;
case 49323: goto L6d;
case 49324: goto L66;
case 49325: goto L66;
case 49326: goto L66;
case 49327: goto L66;
default: goto L2f;
}
L2f:
switch(r6) {
case 52392: goto L62;
case 52393: goto L66;
case 52394: goto L71;
case 52395: goto L70;
case 52396: goto L55;
case 52397: goto L6d;
case 52398: goto L6a;
default: goto L32;
}
L32:
switch(r6) {
case 65280: goto L71;
case 65281: goto L71;
case 65282: goto L62;
case 65283: goto L62;
case 65284: goto L66;
case 65285: goto L66;
default: goto L35;
}
L35:
switch(r6) {
case 65296: goto L70;
case 65297: goto L70;
case 65298: goto L6d;
case 65299: goto L6d;
case 65300: goto L55;
case 65301: goto L55;
default: goto L38;
}
L38:
switch(r6) {
case 44: goto L70;
case 45: goto L6d;
case 46: goto L6a;
case 47: goto L79;
case 48: goto L77;
case 49: goto L74;
case 50: goto L72;
case 51: goto L71;
default: goto L3b;
}
L3b:
switch(r6) {
case 53: goto L79;
case 54: goto L77;
case 55: goto L74;
case 56: goto L72;
case 57: goto L71;
default: goto L3e;
}
L3e:
switch(r6) {
case 59: goto L79;
case 60: goto L79;
case 61: goto L79;
case 62: goto L77;
case 63: goto L74;
case 64: goto L72;
case 65: goto L79;
case 66: goto L77;
case 67: goto L74;
case 68: goto L72;
case 69: goto L71;
default: goto L41;
}
L41:
switch(r6) {
case 103: goto L71;
case 104: goto L77;
case 105: goto L74;
case 106: goto L72;
case 107: goto L71;
default: goto L44;
}
L44:
switch(r6) {
case 132: goto L79;
case 133: goto L77;
case 134: goto L74;
case 135: goto L72;
case 136: goto L71;
default: goto L47;
}
L47:
switch(r6) {
case 138: goto L70;
case 139: goto L70;
case 140: goto L70;
case 141: goto L70;
case 142: goto L6d;
case 143: goto L6d;
case 144: goto L6d;
case 145: goto L6d;
case 146: goto L6a;
case 147: goto L6a;
case 148: goto L6a;
case 149: goto L6a;
case 150: goto L79;
case 151: goto L77;
case 152: goto L74;
case 153: goto L72;
case 154: goto L71;
default: goto L4a;
}
L4a:
switch(r6) {
case 156: goto L79;
case 157: goto L79;
case 158: goto L71;
case 159: goto L71;
case 160: goto L74;
case 161: goto L74;
case 162: goto L72;
case 163: goto L72;
case 164: goto L77;
case 165: goto L77;
default: goto L4d;
}
L4d:
org.bouncycastle.crypto.tls.TlsFatalAlert r6 = new org.bouncycastle.crypto.tls.TlsFatalAlert
r0 = 80
r6.<init>(r0)
throw r6
L55:
r6 = 24
return r6
L58:
return r5
L59:
r6 = 23
return r6
L5c:
r6 = 21
return r6
L5f:
r6 = 20
return r6
L62:
return r4
L63:
r6 = 18
return r6
L66:
r6 = 17
return r6
L69:
return r3
L6a:
r6 = 15
return r6
L6d:
r6 = 14
return r6
L70:
return r2
L71:
return r1
L72:
r6 = 3
return r6
L74:
r6 = 9
return r6
L77:
r6 = 7
return r6
L79:
return r0
*/
throw new UnsupportedOperationException("Method not decompiled: org.bouncycastle.crypto.tls.TlsUtils.getKeyExchangeAlgorithm(int):int");
}
public static short getHashAlgorithmForPRFAlgorithm(int i) {
if (i == 0) {
throw new IllegalArgumentException("legacy PRF not a valid algorithm");
}
if (i == 1) {
return (short) 4;
}
if (i == 2) {
return (short) 5;
}
throw new IllegalArgumentException("unknown PRFAlgorithm");
}
public static byte[] getExtensionData(Hashtable hashtable, Integer num) {
if (hashtable == null) {
return null;
}
return (byte[]) hashtable.get(num);
}
/* JADX WARN: Failed to find 'out' block for switch in B:22:0x0027. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:23:0x002a. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:24:0x002d. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:25:0x0030. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:26:0x0033. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:27:0x0036. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:28:0x0039. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:29:0x003c. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:30:0x003f. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:31:0x0042. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:32:0x0045. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:33:0x0048. Please report as an issue. */
/* JADX WARN: Failed to find 'out' block for switch in B:34:0x004b. Please report as an issue. */
/* JADX WARN: Removed duplicated region for block: B:64:0x0077 A[RETURN] */
/* JADX WARN: Removed duplicated region for block: B:70:0x0079 A[RETURN] */
/* JADX WARN: Removed duplicated region for block: B:71:0x007a A[RETURN] */
/* JADX WARN: Removed duplicated region for block: B:75:0x0084 A[RETURN] */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static int getEncryptionAlgorithm(int r7) throws java.io.IOException {
/*
r0 = 1
r1 = 0
if (r7 == r0) goto L88
r0 = 2
if (r7 == r0) goto L88
r2 = 4
if (r7 == r2) goto L87
r2 = 5
if (r7 == r2) goto L87
r2 = 10
if (r7 == r2) goto L85
r3 = 13
if (r7 == r3) goto L85
r4 = 16
if (r7 == r4) goto L85
r5 = 19
if (r7 == r5) goto L85
r6 = 22
if (r7 == r6) goto L85
r6 = 24
if (r7 == r6) goto L87
r6 = 12
switch(r7) {
case 168: goto L84;
case 169: goto L81;
case 170: goto L84;
case 171: goto L81;
case 172: goto L84;
case 173: goto L81;
case 174: goto L7e;
case 175: goto L7b;
case 176: goto L7a;
case 177: goto L7a;
case 178: goto L7e;
case 179: goto L7b;
case 180: goto L7a;
case 181: goto L7a;
case 182: goto L7e;
case 183: goto L7b;
case 184: goto L7a;
case 185: goto L7a;
case 186: goto L79;
case 187: goto L79;
case 188: goto L79;
case 189: goto L79;
case 190: goto L79;
default: goto L2a;
}
L2a:
switch(r7) {
case 192: goto L78;
case 193: goto L78;
case 194: goto L78;
case 195: goto L78;
case 196: goto L78;
default: goto L2d;
}
L2d:
switch(r7) {
case 49153: goto L88;
case 49154: goto L87;
case 49155: goto L85;
case 49156: goto L7e;
case 49157: goto L7b;
case 49158: goto L88;
case 49159: goto L87;
case 49160: goto L85;
case 49161: goto L7e;
case 49162: goto L7b;
case 49163: goto L88;
case 49164: goto L87;
case 49165: goto L85;
case 49166: goto L7e;
case 49167: goto L7b;
case 49168: goto L88;
case 49169: goto L87;
case 49170: goto L85;
case 49171: goto L7e;
case 49172: goto L7b;
case 49173: goto L88;
case 49174: goto L87;
case 49175: goto L85;
case 49176: goto L7e;
case 49177: goto L7b;
case 49178: goto L85;
case 49179: goto L85;
case 49180: goto L85;
case 49181: goto L7e;
case 49182: goto L7e;
case 49183: goto L7e;
case 49184: goto L7b;
case 49185: goto L7b;
case 49186: goto L7b;
case 49187: goto L7e;
case 49188: goto L7b;
case 49189: goto L7e;
case 49190: goto L7b;
case 49191: goto L7e;
case 49192: goto L7b;
case 49193: goto L7e;
case 49194: goto L7b;
case 49195: goto L84;
case 49196: goto L81;
case 49197: goto L84;
case 49198: goto L81;
case 49199: goto L84;
case 49200: goto L81;
case 49201: goto L84;
case 49202: goto L81;
case 49203: goto L87;
case 49204: goto L85;
case 49205: goto L7e;
case 49206: goto L7b;
case 49207: goto L7e;
case 49208: goto L7b;
case 49209: goto L88;
case 49210: goto L7a;
case 49211: goto L7a;
default: goto L30;
}
L30:
switch(r7) {
case 49266: goto L79;
case 49267: goto L78;
case 49268: goto L79;
case 49269: goto L78;
case 49270: goto L79;
case 49271: goto L78;
case 49272: goto L79;
case 49273: goto L78;
case 49274: goto L77;
case 49275: goto L74;
case 49276: goto L77;
case 49277: goto L74;
case 49278: goto L77;
case 49279: goto L74;
case 49280: goto L77;
case 49281: goto L74;
case 49282: goto L77;
case 49283: goto L74;
default: goto L33;
}
L33:
switch(r7) {
case 49286: goto L77;
case 49287: goto L74;
case 49288: goto L77;
case 49289: goto L74;
case 49290: goto L77;
case 49291: goto L74;
case 49292: goto L77;
case 49293: goto L74;
case 49294: goto L77;
case 49295: goto L74;
case 49296: goto L77;
case 49297: goto L74;
case 49298: goto L77;
case 49299: goto L74;
case 49300: goto L79;
case 49301: goto L78;
case 49302: goto L79;
case 49303: goto L78;
case 49304: goto L79;
case 49305: goto L78;
case 49306: goto L79;
case 49307: goto L78;
case 49308: goto L71;
case 49309: goto L6e;
case 49310: goto L71;
case 49311: goto L6e;
case 49312: goto L6d;
case 49313: goto L6a;
case 49314: goto L6d;
case 49315: goto L6a;
case 49316: goto L71;
case 49317: goto L6e;
case 49318: goto L71;
case 49319: goto L6e;
case 49320: goto L6d;
case 49321: goto L6a;
case 49322: goto L6d;
case 49323: goto L6a;
case 49324: goto L71;
case 49325: goto L6e;
case 49326: goto L6d;
case 49327: goto L6a;
default: goto L36;
}
L36:
switch(r7) {
case 52392: goto L67;
case 52393: goto L67;
case 52394: goto L67;
case 52395: goto L67;
case 52396: goto L67;
case 52397: goto L67;
case 52398: goto L67;
default: goto L39;
}
L39:
switch(r7) {
case 65280: goto L64;
case 65281: goto L61;
case 65282: goto L64;
case 65283: goto L61;
case 65284: goto L64;
case 65285: goto L61;
default: goto L3c;
}
L3c:
switch(r7) {
case 65296: goto L64;
case 65297: goto L61;
case 65298: goto L64;
case 65299: goto L61;
case 65300: goto L64;
case 65301: goto L61;
default: goto L3f;
}
L3f:
switch(r7) {
case 44: goto L88;
case 45: goto L88;
case 46: goto L88;
case 47: goto L7e;
case 48: goto L7e;
case 49: goto L7e;
case 50: goto L7e;
case 51: goto L7e;
default: goto L42;
}
L42:
switch(r7) {
case 53: goto L7b;
case 54: goto L7b;
case 55: goto L7b;
case 56: goto L7b;
case 57: goto L7b;
default: goto L45;
}
L45:
switch(r7) {
case 59: goto L7a;
case 60: goto L7e;
case 61: goto L7b;
case 62: goto L7e;
case 63: goto L7e;
case 64: goto L7e;
case 65: goto L5c;
case 66: goto L5c;
case 67: goto L5c;
case 68: goto L5c;
case 69: goto L5c;
default: goto L48;
}
L48:
switch(r7) {
case 103: goto L7e;
case 104: goto L7b;
case 105: goto L7b;
case 106: goto L7b;
case 107: goto L7b;
default: goto L4b;
}
L4b:
switch(r7) {
case 132: goto L5d;
case 133: goto L5d;
case 134: goto L5d;
case 135: goto L5d;
case 136: goto L5d;
default: goto L4e;
}
L4e:
switch(r7) {
case 138: goto L87;
case 139: goto L85;
case 140: goto L7e;
case 141: goto L7b;
case 142: goto L87;
case 143: goto L85;
case 144: goto L7e;
case 145: goto L7b;
case 146: goto L87;
case 147: goto L85;
case 148: goto L7e;
case 149: goto L7b;
case 150: goto L5e;
case 151: goto L5e;
case 152: goto L5e;
case 153: goto L5e;
case 154: goto L5e;
default: goto L51;
}
L51:
switch(r7) {
case 156: goto L84;
case 157: goto L81;
case 158: goto L84;
case 159: goto L81;
case 160: goto L84;
case 161: goto L81;
case 162: goto L84;
case 163: goto L81;
case 164: goto L84;
case 165: goto L81;
default: goto L54;
}
L54:
org.bouncycastle.crypto.tls.TlsFatalAlert r7 = new org.bouncycastle.crypto.tls.TlsFatalAlert
r0 = 80
r7.<init>(r0)
throw r7
L5c:
return r6
L5d:
return r3
L5e:
r7 = 14
return r7
L61:
r7 = 104(0x68, float:1.46E-43)
return r7
L64:
r7 = 103(0x67, float:1.44E-43)
return r7
L67:
r7 = 102(0x66, float:1.43E-43)
return r7
L6a:
r7 = 18
return r7
L6d:
return r4
L6e:
r7 = 17
return r7
L71:
r7 = 15
return r7
L74:
r7 = 20
return r7
L77:
return r5
L78:
return r3
L79:
return r6
L7a:
return r1
L7b:
r7 = 9
return r7
L7e:
r7 = 8
return r7
L81:
r7 = 11
return r7
L84:
return r2
L85:
r7 = 7
return r7
L87:
return r0
L88:
return r1
*/
throw new UnsupportedOperationException("Method not decompiled: org.bouncycastle.crypto.tls.TlsUtils.getEncryptionAlgorithm(int):int");
}
public static Vector getDefaultSupportedSignatureAlgorithms() {
short[] sArr = {2, 3, 4, 5, 6};
short[] sArr2 = {1, 2, 3};
Vector vector = new Vector();
for (int i = 0; i < 3; i++) {
for (int i2 = 0; i2 < 5; i2++) {
vector.addElement(new SignatureAndHashAlgorithm(sArr[i2], sArr2[i]));
}
}
return vector;
}
public static Vector getDefaultRSASignatureAlgorithms() {
return vectorOfOne(new SignatureAndHashAlgorithm((short) 2, (short) 1));
}
public static Vector getDefaultECDSASignatureAlgorithms() {
return vectorOfOne(new SignatureAndHashAlgorithm((short) 2, (short) 3));
}
public static Vector getDefaultDSSSignatureAlgorithms() {
return vectorOfOne(new SignatureAndHashAlgorithm((short) 2, (short) 2));
}
/* JADX INFO: Access modifiers changed from: package-private */
public static short getClientCertificateType(Certificate certificate, Certificate certificate2) throws IOException {
if (certificate.isEmpty()) {
return (short) -1;
}
org.bouncycastle.asn1.x509.Certificate certificateAt = certificate.getCertificateAt(0);
try {
AsymmetricKeyParameter createKey = PublicKeyFactory.createKey(certificateAt.getSubjectPublicKeyInfo());
if (createKey.isPrivate()) {
throw new TlsFatalAlert((short) 80);
}
if (createKey instanceof RSAKeyParameters) {
validateKeyUsage(certificateAt, 128);
return (short) 1;
}
if (createKey instanceof DSAPublicKeyParameters) {
validateKeyUsage(certificateAt, 128);
return (short) 2;
}
if (!(createKey instanceof ECPublicKeyParameters)) {
throw new TlsFatalAlert((short) 43);
}
validateKeyUsage(certificateAt, 128);
return (short) 64;
} catch (Exception e) {
throw new TlsFatalAlert((short) 43, e);
}
}
public static int getCipherType(int i) throws IOException {
int encryptionAlgorithm = getEncryptionAlgorithm(i);
switch (encryptionAlgorithm) {
case 1:
case 2:
return 0;
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 12:
case 13:
case 14:
return 1;
case 10:
case 11:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
return 2;
default:
switch (encryptionAlgorithm) {
case 102:
case 103:
case 104:
return 2;
default:
throw new TlsFatalAlert((short) 80);
}
}
}
private static byte[][] genSSL3Const() {
byte[][] bArr = new byte[10];
int i = 0;
while (i < 10) {
int i2 = i + 1;
byte[] bArr2 = new byte[i2];
Arrays.fill(bArr2, (byte) (i + 65));
bArr[i] = bArr2;
i = i2;
}
return bArr;
}
public static byte[] encodeUint8ArrayWithUint8Length(short[] sArr) throws IOException {
byte[] bArr = new byte[sArr.length + 1];
writeUint8ArrayWithUint8Length(sArr, bArr, 0);
return bArr;
}
public static byte[] encodeUint16ArrayWithUint16Length(int[] iArr) throws IOException {
byte[] bArr = new byte[(iArr.length << 1) + 2];
writeUint16ArrayWithUint16Length(iArr, bArr, 0);
return bArr;
}
public static void encodeSupportedSignatureAlgorithms(Vector vector, boolean z, OutputStream outputStream) throws IOException {
if (vector == null || vector.size() <= 0 || vector.size() >= 32768) {
throw new IllegalArgumentException("'supportedSignatureAlgorithms' must have length from 1 to (2^15 - 1)");
}
int size = vector.size() << 1;
checkUint16(size);
writeUint16(size, outputStream);
for (int i = 0; i < vector.size(); i++) {
SignatureAndHashAlgorithm signatureAndHashAlgorithm = (SignatureAndHashAlgorithm) vector.elementAt(i);
if (!z && signatureAndHashAlgorithm.getSignature() == 0) {
throw new IllegalArgumentException("SignatureAlgorithm.anonymous MUST NOT appear in the signature_algorithms extension");
}
signatureAndHashAlgorithm.encode(outputStream);
}
}
public static byte[] encodeOpaque8(byte[] bArr) throws IOException {
checkUint8(bArr.length);
return Arrays.prepend(bArr, (byte) bArr.length);
}
public static TlsSigner createTlsSigner(short s) {
if (s == 1) {
return new TlsRSASigner();
}
if (s == 2) {
return new TlsDSSSigner();
}
if (s == 64) {
return new TlsECDSASigner();
}
throw new IllegalArgumentException("'clientCertificateType' is not a type with signing capability");
}
public static byte[] createSignatureAlgorithmsExtension(Vector vector) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
encodeSupportedSignatureAlgorithms(vector, false, byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
public static Digest createPRFHash(int i) {
return i != 0 ? createHash(getHashAlgorithmForPRFAlgorithm(i)) : new CombinedHash();
}
public static Digest createHash(short s) {
switch (s) {
case 1:
return new MD5Digest();
case 2:
return new SHA1Digest();
case 3:
return new SHA224Digest();
case 4:
return new SHA256Digest();
case 5:
return new SHA384Digest();
case 6:
return new SHA512Digest();
default:
throw new IllegalArgumentException("unknown HashAlgorithm");
}
}
public static Digest createHash(SignatureAndHashAlgorithm signatureAndHashAlgorithm) {
return signatureAndHashAlgorithm == null ? new CombinedHash() : createHash(signatureAndHashAlgorithm.getHash());
}
static byte[] concat(byte[] bArr, byte[] bArr2) {
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);
return bArr3;
}
public static Digest clonePRFHash(int i, Digest digest) {
return i != 0 ? cloneHash(getHashAlgorithmForPRFAlgorithm(i), digest) : new CombinedHash((CombinedHash) digest);
}
public static Digest cloneHash(short s, Digest digest) {
switch (s) {
case 1:
return new MD5Digest((MD5Digest) digest);
case 2:
return new SHA1Digest((SHA1Digest) digest);
case 3:
return new SHA224Digest((SHA224Digest) digest);
case 4:
return new SHA256Digest((SHA256Digest) digest);
case 5:
return new SHA384Digest((SHA384Digest) digest);
case 6:
return new SHA512Digest((SHA512Digest) digest);
default:
throw new IllegalArgumentException("unknown HashAlgorithm");
}
}
public static void checkUint8(short s) throws IOException {
if (!isValidUint8(s)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint8(long j) throws IOException {
if (!isValidUint8(j)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint8(int i) throws IOException {
if (!isValidUint8(i)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint64(long j) throws IOException {
if (!isValidUint64(j)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint48(long j) throws IOException {
if (!isValidUint48(j)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint32(long j) throws IOException {
if (!isValidUint32(j)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint24(long j) throws IOException {
if (!isValidUint24(j)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint24(int i) throws IOException {
if (!isValidUint24(i)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint16(long j) throws IOException {
if (!isValidUint16(j)) {
throw new TlsFatalAlert((short) 80);
}
}
public static void checkUint16(int i) throws IOException {
if (!isValidUint16(i)) {
throw new TlsFatalAlert((short) 80);
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public static byte[] calculateVerifyData(TlsContext tlsContext, String str, byte[] bArr) {
if (isSSL(tlsContext)) {
return bArr;
}
SecurityParameters securityParameters = tlsContext.getSecurityParameters();
return PRF(tlsContext, securityParameters.getMasterSecret(), str, bArr, securityParameters.getVerifyDataLength());
}
static byte[] calculateMasterSecret_SSL(byte[] bArr, byte[] bArr2) {
Digest createHash = createHash((short) 1);
Digest createHash2 = createHash((short) 2);
int digestSize = createHash.getDigestSize();
int digestSize2 = createHash2.getDigestSize();
byte[] bArr3 = new byte[digestSize2];
byte[] bArr4 = new byte[digestSize * 3];
int i = 0;
for (int i2 = 0; i2 < 3; i2++) {
byte[] bArr5 = SSL3_CONST[i2];
createHash2.update(bArr5, 0, bArr5.length);
createHash2.update(bArr, 0, bArr.length);
createHash2.update(bArr2, 0, bArr2.length);
createHash2.doFinal(bArr3, 0);
createHash.update(bArr, 0, bArr.length);
createHash.update(bArr3, 0, digestSize2);
createHash.doFinal(bArr4, i);
i += digestSize;
}
return bArr4;
}
/* JADX INFO: Access modifiers changed from: package-private */
public static byte[] calculateMasterSecret(TlsContext tlsContext, byte[] bArr) {
SecurityParameters securityParameters = tlsContext.getSecurityParameters();
byte[] sessionHash = securityParameters.extendedMasterSecret ? securityParameters.getSessionHash() : concat(securityParameters.getClientRandom(), securityParameters.getServerRandom());
if (isSSL(tlsContext)) {
return calculateMasterSecret_SSL(bArr, sessionHash);
}
return PRF(tlsContext, bArr, securityParameters.extendedMasterSecret ? ExporterLabel.extended_master_secret : "master secret", sessionHash, 48);
}
static byte[] calculateKeyBlock_SSL(byte[] bArr, byte[] bArr2, int i) {
Digest createHash = createHash((short) 1);
Digest createHash2 = createHash((short) 2);
int digestSize = createHash.getDigestSize();
int digestSize2 = createHash2.getDigestSize();
byte[] bArr3 = new byte[digestSize2];
byte[] bArr4 = new byte[i + digestSize];
int i2 = 0;
int i3 = 0;
while (i2 < i) {
byte[] bArr5 = SSL3_CONST[i3];
createHash2.update(bArr5, 0, bArr5.length);
createHash2.update(bArr, 0, bArr.length);
createHash2.update(bArr2, 0, bArr2.length);
createHash2.doFinal(bArr3, 0);
createHash.update(bArr, 0, bArr.length);
createHash.update(bArr3, 0, digestSize2);
createHash.doFinal(bArr4, i2);
i2 += digestSize;
i3++;
}
return Arrays.copyOfRange(bArr4, 0, i);
}
/* JADX INFO: Access modifiers changed from: package-private */
public static byte[] calculateKeyBlock(TlsContext tlsContext, int i) {
SecurityParameters securityParameters = tlsContext.getSecurityParameters();
byte[] masterSecret = securityParameters.getMasterSecret();
byte[] concat = concat(securityParameters.getServerRandom(), securityParameters.getClientRandom());
return isSSL(tlsContext) ? calculateKeyBlock_SSL(masterSecret, concat, i) : PRF(tlsContext, masterSecret, "key expansion", concat, i);
}
public static void addSignatureAlgorithmsExtension(Hashtable hashtable, Vector vector) throws IOException {
hashtable.put(EXT_signature_algorithms, createSignatureAlgorithmsExtension(vector));
}
static byte[] PRF_legacy(byte[] bArr, byte[] bArr2, byte[] bArr3, int i) {
int length = (bArr.length + 1) / 2;
byte[] bArr4 = new byte[length];
byte[] bArr5 = new byte[length];
System.arraycopy(bArr, 0, bArr4, 0, length);
System.arraycopy(bArr, bArr.length - length, bArr5, 0, length);
byte[] bArr6 = new byte[i];
byte[] bArr7 = new byte[i];
hmac_hash(createHash((short) 1), bArr4, bArr3, bArr6);
hmac_hash(createHash((short) 2), bArr5, bArr3, bArr7);
for (int i2 = 0; i2 < i; i2++) {
bArr6[i2] = (byte) (bArr6[i2] ^ bArr7[i2]);
}
return bArr6;
}
public static byte[] PRF_legacy(byte[] bArr, String str, byte[] bArr2, int i) {
byte[] byteArray = Strings.toByteArray(str);
return PRF_legacy(bArr, byteArray, concat(byteArray, bArr2), i);
}
public static byte[] PRF(TlsContext tlsContext, byte[] bArr, String str, byte[] bArr2, int i) {
if (tlsContext.getServerVersion().isSSL()) {
throw new IllegalStateException("No PRF available for SSLv3 session");
}
byte[] byteArray = Strings.toByteArray(str);
byte[] concat = concat(byteArray, bArr2);
int prfAlgorithm = tlsContext.getSecurityParameters().getPrfAlgorithm();
if (prfAlgorithm == 0) {
return PRF_legacy(bArr, byteArray, concat, i);
}
byte[] bArr3 = new byte[i];
hmac_hash(createPRFHash(prfAlgorithm), bArr, concat, bArr3);
return bArr3;
}
}